Merge pull request #47 from waku-org/lordghostx-patch

This commit is contained in:
fryorcraken.eth 2023-05-12 09:54:35 +10:00 committed by GitHub
commit feff9de376
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 1908 additions and 1634 deletions

View File

@ -27,7 +27,10 @@
"Comms",
"Protobuf",
"supercrypto",
"QUIC"
"QUIC",
"Dappnode",
"gameplay",
"Smol"
],
"flagWords": [],
"ignorePaths": [

View File

@ -1,46 +1,71 @@
- [Description](#description)
- [How to Run Locally](#how-to-run-locally)
- [Configuration](#configuration)
- [Customization](#customization)
# Waku Documentation Portal
## Description
[![Waku Documentation Portal](https://img.shields.io/badge/waku.guide-black)](https://waku.guide/)
This repository contains the content of your documentation website.
The Waku Documentation Portal can be accessed at [waku.guide](https://waku.guide) and was built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
## How to Run Locally
## Prerequisites
- [Node.js](https://nodejs.org/en/)
- [yarn](https://yarnpkg.com/en/)
## Installation
Clone this repository:
1. Clone this repository.
2. Install the dependencies:
```bash
$ yarn
git clone https://github.com/waku-org/waku.guide
```
3. Start and open the website in your browser:
Install the dependencies:
```bash
$ yarn start
yarn
# or
yarn install
```
## Running Locally
```bash
yarn start
```
## Configuration
Edit the `docusaurus.config.js` file in the repository's root directory, and update the value of the `businessUnit` field in presets section; below is a list of valid values:
Edit the `docusaurus.config.js` file located in the repository's root directory, and update the `businessUnit` field within the presets section. Here is a list of valid values for this field:
- Logos
- Codex
- Waku
Example:
```js
presets: [
[
'@acid-info/logos-docusaurus-preset',
{
businessUnit: 'Codex',
businessUnit: 'Waku',
},
],
],
```
This is probably enough in most cases, as the Logos plugins will fill in other configurations related to the specified business unit. If you find any error in the information coming from Logos Plugins, please head over to [Logos Docusaurus Plugins](https://github.com/acid-info/logos-docusaurus-plugins) and create an issue.
This should suffice since Logos plugins will handle other configurations linked to the designated business unit. However, if you encounter any inaccuracies in the data provided by Logos Plugins, please visit the [Logos Docusaurus Plugins](https://github.com/acid-info/logos-docusaurus-plugins) page and submit an issue.
## Customization
You can find the instructions on adding more documentation sections, localization, and versioning on the [Docusaurus](https://docusaurus.io/docs) website.
> Note that theme customization is limited; for further instructions on customizing your theme, head over to [Logos Docusaurus Theme](https://github.com/acid-info/logos-docusaurus-plugins/tree/main/packages/logos-docusaurus-theme/).
## Troubleshooting
Docusaurus depends heavily on caching to enhance site performance. If you make changes that do not appear in the portal, try clearing the cache by running:
```bash
yarn clear
```

View File

@ -1,28 +1,44 @@
---
title: History
title: The Story of Waku
---
Waku v1 was a fork of Whisper with some added tweaks for efficiency.
Waku v2 is a completely redesigned suite of protocols designed to address the goals set out [previously](./introduction.md).
Waku v1 was a fork of Whisper with some added tweaks for efficiency. Waku v2 is a completely redesigned suite of protocols designed to address the goals set out [previously](/#motivation-and-goals).
```mermaid
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'HISTORY'}} }%%
gitGraph
commit id:"2013"
commit id:"2015" tag:"R&D"
commit id:"2018" tag:"R&D" type: HIGHLIGHT
branch v1
checkout v1
commit id:"2020" tag:"release"
checkout HISTORY
merge v1
branch v2
checkout v2
commit id:"2021" tag:"release"
checkout HISTORY
merge v2
commit id:"🔥"
```
### 2013
Ethereum White Paper was introduced with the Holy Trinity,
consisting of Ethereum for consensus, Swarm for decentralized storage, and Whisper for p2p messaging.
The introduction of the Ethereum White Paper marked the unveiling of the Holy Trinity, which comprises Ethereum for consensus, Swarm for decentralized storage, and Whisper for peer-to-peer messaging.
### 2015-2018
R&D of Whisper was slow to follow progress of the Ethereum EVM and Swarm without a dedicated team building out the protocol.
The development of the Whisper protocol lagged behind the advancements made by the Ethereum EVM and Swarm, primarily because there was no dedicated team working on building the protocol.
### 2018
With little progress made on Whisper and significant scalability concerns growing,
Vac was formed to conduct R&D on more scalable p2p messaging.
Due to the lack of progress made on Whisper and growing concerns around scalability, Vac was established to focus on researching and developing more scalable peer-to-peer messaging solutions.
### 2020
Waku v1 was introduced as the messaging protocol in Status, replacing Whisper.
Status introduced Waku v1 as its messaging protocol, which replaced Whisper.
### 2021
Waku v2 replaces Waku v1.
Waku v2 supersedes Waku v1.

View File

@ -1,15 +0,0 @@
---
title: How does it work?
---
The backbone of Waku Network is the Waku Relay protocol.
It is a pubsub protocol based on libp2p gossipsub.
Other Waku protocols have been defined to enable capabilities such as:
1. retrieving **historical messages** for mostly-offline devices
2. key turn solution for **encrypted communication** (symmetric encryption, ECIES/asymmetric encryption, noise handshake).
3. preserving bandwidth usage for **resource-restricted devices**
4. Economic **spam protection** (rate limit) with privacy preserving capabilities
5. Mass deanonymization protection (research in progress)
If you want to learn how Waku works under the hoods, check out the [10/WAKU2](https://rfc.vac.dev/spec/10/) RFC.

View File

@ -1,21 +1,25 @@
---
title: Implementations
title: Waku Implementations
---
Waku has been implemented in multiple languages to cater to a variety of unique use-cases:
Waku has been implemented in multiple programming languages to address various use cases. The Waku development team builds and maintains each implementation, ensuring that updates are provided automatically.
#### [nwaku](https://github.com/status-im/nwaku)
### [nwaku](https://github.com/waku-org/nwaku)
A nim implementation of the Waku v2 protocol. The reference implementation, recommended to deploy a node in the cloud or at home.
The Nim implementation of the Waku protocol is the reference implementation recommended for deploying a node in the cloud or at home.
#### [js-waku](https://github.com/waku-org/js-waku/)
### [js-waku](https://github.com/waku-org/js-waku/)
A JavaScript/TypeScript implementation for browser environments.
The JavaScript/TypeScript implementation of the Waku protocol designed for use in browser environments.
#### [go-waku](https://github.com/status-im/go-waku)
### [go-waku](https://github.com/waku-org/go-waku)
A Go implementation for native integration in go applications, C-Bindings are also available with C#, Swift and Kotlin examples.
The Golang implementation of the Waku protocol designed for native integration in Golang applications, includes C bindings with examples available in C#, Swift, and Kotlin.
#### [@waku/react-native](https://github.com/waku-org/waku-react-native)
### [@waku/react-native](https://github.com/waku-org/waku-react-native)
Integrate Waku in your React Native app using go-waku for mobile.
The React Native wrapper of the Waku protocol uses bindings provided by [go-waku](https://github.com/waku-org/go-waku) and is designed for native mobile integration.
### [waku-rust-bindings](https://github.com/waku-org/waku-rust-bindings)
The Rust wrapper of the Waku protocol uses bindings provided by [go-waku](https://github.com/waku-org/go-waku) and is designed for Rust applications.

View File

@ -1,14 +0,0 @@
---
title: Introduction
slug: /
---
Waku (v2) is family of modular peer-to-peer protocols for **secure communication**. The protocols are designed to be secure, privacy-preserving, censorship-resistant and able to run in resource restricted environments.
It enables you to **add communication features** to your dApp in a **decentralized manner**,
ensuring to your users that they will not be censored or de-platformed.
- **removes centralized third parties from messaging**: enabling private, secure, censorship-free communication with no single point of failure.
- provides **privacy-preserving capabilities**: sender anonymity, metadata protection and unlinkability to personally identifiable information.
- designed for **generalized messaging**: enables human-to-human, machine-to-machine or hybrid communication.
- **runs everywhere**: desktop, server, including resource-restricted devices, such as mobile devices and browsers.

View File

@ -1,46 +0,0 @@
---
title: Motivation and goals
---
Waku as a family of protocols is designed to have a set of properties that are useful for many applications:
1. **Generalized messaging.**
Many applications require 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.
Waku is designed to work for all these scenarios.
2. **Peer-to-peer.**
Applications sometimes have requirements that make them suitable for peer-to-peer solutions:
- Censorship-resistant with no single point of failure
- Adaptive and scalable network
- Shared infrastructure/service network
3. **Runs anywhere.**
Applications often run in restricted environments, where resources or the environment is restricted in some fashion.
For example:
- Limited bandwidth, CPU, memory, disk, battery, etc
- Not being publicly connectable
- Only being intermittently connected; mostly-offline
4. **Privacy-preserving.**
Applications often have a desire for some privacy guarantees, such as:
- Pseudonymity and not being tied to any personally identifiable information (PII)
- Metadata protection in transit
- Various forms of unlinkability, etc
5. **Modular design.**
Waku nodes are [adaptive](https://rfc.vac.dev/spec/30/): you can turn several dials depending on your use case and environment.
For example:
- Low privacy/low resource usage vs high privacy/increased latency + bandwidth usage
- Providing resources to the network vs consuming resources
- Stronger guarantees for spam protection vs economic registration cost

View File

@ -0,0 +1,80 @@
---
title: Waku Use Cases
---
Waku is a decentralized communication network that supports person-to-person and machine-to-machine communication, enabling secure and private operation without a central authority.
The following is a list of some of the use cases that have been considered and their current status.
### Chat Messenger
Waku can be used as the communication layer when building a private, decentralized, and censorship-resistant messenger.
#### Demos
* [Status Web](https://github.com/status-im/status-web)
### Polls
With Waku, you can create, answer, and view censorship-resistant polls.
#### Demos
* [Waku Connect Poll SDK](https://github.com/status-im/wakuconnect-vote-poll-sdk)
### NFT Marketplace
Waku can be used to take NFT bids and offers off-chain, enabling gas savings. Additionally, it allows for adding a social media layer, enabling NFT owners to like, comment, and perform other social actions.
#### Demos
* [SmolPuddle Marketplace](https://github.com/Agusx1211/smolpuddle-web)
### State Channels
Waku can enable two parties to set up and maintain a state channel.
### Voting and Proposals
To save on gas fees, votes for proposals submitted on the blockchain can be exchanged over Waku. These votes can then be aggregated and submitted to the blockchain to commit the result.
#### Demos
* [Waku Connect Poll SDK](https://github.com/status-im/wakuconnect-vote-poll-sdk)
### Signature Exchange for Multi-Signature Wallets
Waku can enable multiple owners of a given multi-signature wallet to exchange signatures in a decentralized, private, and censorship-resistant manner, allowing for the approval of transactions.
### Game Mechanics Communication
Waku can be used as the communication layer for a peer-to-peer, decentralized game, eliminating the need for a centralized infrastructure for gameplay communications.
#### Demos
* [Super Card Game](https://github.com/fjij/ethonline-2021)
### dApp to Wallet Communication
dApp operators can use communication between a user's wallet and their dApp to notify users (e.g., governance token holders can be notified to vote on a proposal) or to request transaction signatures from the wallet.
#### Demos
* [WalletConnect 2.0](https://walletconnect.com/)
* [HashPack](https://www.hashpack.app/hashconnect)
### Layer 2 Coordination (Open Market, Spam Protected Mempool)
Waku can broadcast and aggregate layer 2 transactions, potentially enhancing privacy, anonymity, and resilience.
### Generalized Marketplace
Waku can enable users to offer, bid, accept, and trade goods and services, making it possible to create ride-sharing or trading apps.
#### Demos
* [Waku-Uber](https://github.com/TheBojda/waku-uber)
### Social Media Platform
While chat messengers are a type of social media that can be decentralized and made censorship-resistant through Waku, other forms of social media, such as news feeds, blog posts, and audio or video sharing, can also benefit from using Waku.

View File

@ -0,0 +1,58 @@
---
title: What is Waku?
slug: /
---
Waku is a family of peer-to-peer protocols that offer **secure and private communication** in a decentralized environment, making it suitable for various decentralized applications (dApps). It is designed to operate in **resource-limited environments** but can also be used as a node or desktop application.
Waku protocols ensure that users communication remains **censorship-resistant and privacy-preserving**, giving them complete control over their data. By incorporating Waku into your dApp, you can add decentralized communication features to your application **without compromising security or privacy**.
## Motivation and Goals
The Waku family of protocols is designed for diverse applications due to their properties, such as:
### Generalized Messaging
Waku aims to solve the problem of ephemeral messaging between subsystems and nodes through a flexible, secure, and private protocol. It supports human-to-human and machine-to-machine messaging scenarios but is not designed for data storage.
### Peer-to-Peer
Waku is suitable for applications that require a peer-to-peer approach, as it offers the following advantages:
- Censorship resistance with no single point of failure.
- Adaptive and scalable network.
- Shared infrastructure/service network.
### Platform Agnostic
Waku can run on any platform or environment, even in restricted settings with limited resources like bandwidth, CPU, memory, disk, battery, etc. It can also function when the nodes are not publicly connected or are primarily offline.
### Privacy-Preserving
Waku can cater to applications that require privacy guarantees, such as:
- Pseudonymity and not being tied to any personally identifiable information (PII).
- Metadata protection in transit.
- Various forms of unlinkability.
### Modular Design
Waku nodes are adaptive and can be customized based on the application's requirements and environment. Users can adjust several parameters, including:
- Low privacy/low resource usage vs. high privacy/increased latency + bandwidth usage.
- Providing resources to the network vs. consuming resources.
- Stronger guarantees for spam protection vs. economic registration cost.
These options are part of the [anonymity trilemma](https://eprint.iacr.org/2017/954.pdf), which Waku addresses through its adjustable protocol.
## How Does Waku Work?
The Waku Relay protocol is the foundation of the Waku Network, which employs a `pubsub` architecture built on the `libp2p gossipsub` protocol. In addition to this, various other Waku protocols have been created to facilitate specific functionalities, including but not limited to:
1. Facilitating the retrieval of **historical messages** for primarily offline devices.
2. Providing solutions for **encrypted communication**, such as symmetric encryption, ECIES/asymmetric encryption, and noise handshake-based key turns.
3. Preserve bandwidth usage for **resource-limited environments**.
4. Implementing economic **spam protection** (rate limits) while ensuring privacy.
5. Developing methods to protect against mass deanonymization (currently being researched).
If you want to learn more about how Waku operates, the [10/WAKU2](https://rfc.vac.dev/spec/10/) RFC provides an in-depth look under the hood.

View File

@ -1,5 +1,5 @@
---
title: Who is using Waku?
title: Who is Using Waku?
---
### Status
@ -8,8 +8,8 @@ title: Who is using Waku?
### XMTP
[XMTP](https://xmtp.org/) is using Waku v2 for their open protocol and network for secure web3 messaging.
[XMTP](https://xmtp.org/) is using Waku v2 for their open protocol and network for secure Web3 messaging.
### RAILGUN
[RAILGUN](https://railgun.org/) is a privacy system for Ethereum that shields your assets in your own smart contract wallet. RAILGUN uses Waku when offering the ETH gas payments to other users, privately signaling fees and offers for gas payment relayers to keep the privacy & anonymity of your stablecoin & token transactions.
[RAILGUN](https://railgun.org/) is a privacy-focused system for Ethereum that secures your assets in a smart contract wallet while using Waku to offer private ETH gas payments to other users, ensuring anonymity and privacy for your stablecoin and token transactions.

View File

@ -2,31 +2,23 @@
title: Why Waku?
---
Communication today is rife with third party interference.
From censorship and deplatforming, to rent seeking intermediaries, to the misuse of data in the surveillance economy.
Communication in the present day is heavily influenced by third-party intervention, ranging from censorship and deplatforming to intermediaries that seek to profit from rent and the misuse of data in the surveillance economy.
Waku is designed to place control of communication back into the hands of the individual.
Waku is intended to empower individuals by returning control of communication to them. It is the go-to standard for Web3 communication, offering a **scalable decentralized communication** solution.
It is the communication layer for Web3 -- **decentralized communication that scales**.
- Waku improves upon Whisper's capabilities by overcoming limitations and addressing functional gaps.
- It provides a public infrastructure for the Ethereum and multi-chain ecosystem, serving as a common good.
- It is not confined to a particular blockchain.
- It is modular, adaptable, and can cater to various use cases.
- It allows developers to decentralize communication in their dApps or move actions off-chain while maintaining decentralization.
- It can run on various platforms, including mobile devices, cloud environments, web browsers, native desktop apps, or even a [Dappnode](https://dappnode.com/)!
- Waku fills the void left by Whisper.
- We are building Waku as a public good for the Ethereum and multi-chain ecosystem.
- It is not tied to a specific chain.
- It is modular and adaptive, enabling various use cases.
- It enables developers to decentralize communication in their dApps or move actions off-chain without compromising decentralization.
- It aims to run anywhere, in the cloud and browser alike.
Private. Secure. Runs anywhere.
## Whisper vs. Waku: Why Waku is Necessary
| | Whisper | Waku |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------: |
| - | - | - |
| **Scalability** | Whisper doesn't scale very well, specifically when it comes to bandwidth usage on mobile devices. | Uses gossipsub and content topics. |
| **Spam Resistance** | Proof of work requires too much battery and compute power making it a poor mechanism for heterogeneous nodes. | Uses innovative p2p economic spam protection mechanism RLN Relay |
| **No incentivized infrastructure** | There is no incentive to run a Whisper node | Research in progress to design incentivization for node operators. |
| **Formal Specification/Documentation** | Lack of formal and unambiguous specification | Open source specs & docs and available for anyone to read or improve. |
| **Portability** | Runs over devp2p which limits where Whisper can run and how | Waku is built using libp2p, making it easy to run Waku anywhere. |
| **Spam Resistance** | Proof of work requires too much battery and compute power making it a poor mechanism for heterogeneous nodes. | Uses innovative p2p economic spam protection mechanism RLN Relay. |
| **Incentivization Infrastructure** | There is no incentive to run a Whisper node. | Research in progress to design incentivization for node operators. |
| **Formal Specification/Documentation** | Lack of formal and unambiguous specification. | The specs and docs are open-source and licensed under CC0, making them freely available for anyone to read, modify and improve without restrictions. |
| **Portability** | Runs over devp2p which limits where Whisper can run and how. | Waku is built using libp2p, making it easy to run Waku anywhere. |

View File

@ -4,7 +4,7 @@ require("dotenv").config();
/** @type {import('@docusaurus/types').Config} */
const config = {
title: "Waku Guides",
title: "Waku Documentation Portal",
url: "https://waku.guide/",
baseUrl: "/",
onBrokenLinks: "throw",
@ -28,7 +28,7 @@ const config = {
docs: {
routeBasePath: "/",
sidebarPath: require.resolve("./sidebars.js"),
editUrl: "https://github.com/waku-org/waku.guide/tree/staging/",
editUrl: "https://github.com/waku-org/waku.guide/tree/develop/",
},
theme: {
name: "docusaurus-default",
@ -43,10 +43,6 @@ const config = {
themeConfig:
/** @type {import('@acid-info/logos-docusaurus-preset').ThemeConfig} */
({
colorMode: {
defaultMode: "light",
disableSwitch: false,
},
navbar: {
title: "Waku",
logo: {
@ -57,7 +53,7 @@ const config = {
type: 'docSidebar',
position: 'left',
sidebarId: 'main',
label: 'Overview',
label: 'Getting Started',
},
{
type: 'docSidebar',
@ -68,15 +64,27 @@ const config = {
],
},
announcementBar: {
id: "support_us",
content:
"Waku is not production ready yet. Join our <a href='https://discord.gg/Nrac59MfSX'>discord community</a> to stay updated.",
"While Waku still has progress to make, apps like <a href='/overview/who-is-using-waku'>XMTP and Railgun</a> have already implemented it in production. Join our <a href='https://discord.gg/Nrac59MfSX'>Discord Community</a> to stay updated on our progress.",
backgroundColor: "#EBEDF0",
textColor: "#1B1B1D",
isCloseable: true,
},
footer: {
links: [
{
title: "Legal",
items: [
{
href: "https://waku.org/terms-of-use",
label: "Terms of Use",
},
{
href: "https://waku.org/privacy-policy",
label: "Privacy Policy",
},
],
},
{
title: "Community",
items: [
@ -98,6 +106,27 @@ const config = {
},
],
},
{
title: "Resources",
items: [
{
href: "https://github.com/waku-org",
label: "GitHub",
},
{
href: "https://vac.dev/research",
label: "Blog",
},
{
href: "https://vac.dev/",
label: "Vac",
},
{
href: "https://rfc.vac.dev/",
label: "Vac RFCs",
},
],
},
],
},
colorMode: {

View File

@ -17,9 +17,9 @@
},
"dependencies": {
"@acid-info/logos-docusaurus-preset": "^0.3.0",
"@docusaurus/core": "2.2.0",
"@docusaurus/preset-classic": "2.2.0",
"@docusaurus/theme-mermaid": "^2.2.0",
"@docusaurus/core": "^2.4.0",
"@docusaurus/preset-classic": "^2.4.0",
"@docusaurus/theme-mermaid": "^2.4.0",
"@mdx-js/react": "^1.6.22",
"add": "^2.0.6",
"dotenv": "^16.0.3",
@ -29,7 +29,7 @@
"yarn": "^1.22.19"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.2.0",
"@docusaurus/module-type-aliases": "^2.4.0",
"@tsconfig/docusaurus": "^1.0.5",
"cspell": "^6.16.0",
"docusaurus-plugin-sass": "^0.2.2",

View File

@ -4,13 +4,12 @@
const sidebars = {
main: [
"overview/introduction",
"overview/what-is-waku",
"overview/history",
"overview/motivation-and-goals",
"overview/why-waku",
"overview/use-cases",
"overview/who-is-using-waku",
"overview/implementations",
"overview/how-does-it-work",
{
type: "category",
label: "Concepts",

3095
yarn.lock

File diff suppressed because it is too large Load Diff