mirror of https://codeberg.org/pzp/pzp-wiki.git
Add basic protocol intro
This commit is contained in:
parent
59c026d4d8
commit
cf69bb87d6
|
@ -19,7 +19,7 @@ This command starts a local development server and opens up a browser window. Mo
|
|||
### Build
|
||||
|
||||
```
|
||||
$ npm build
|
||||
$ npm run build
|
||||
```
|
||||
|
||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||
|
|
|
@ -7,7 +7,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
|||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: 'PZP Wiki',
|
||||
tagline: 'Dinosaurs are cool',
|
||||
tagline: 'A rad p2p protocol',
|
||||
favicon: 'img/favicon.ico',
|
||||
|
||||
// Set the production url of your site here
|
||||
|
@ -85,8 +85,8 @@ const config = {
|
|||
},
|
||||
{to: '/blog', label: 'Blog', position: 'left'},
|
||||
{
|
||||
href: 'https://github.com/facebook/docusaurus',
|
||||
label: 'GitHub',
|
||||
href: 'https://codeberg.org/pzp',
|
||||
label: 'Code',
|
||||
position: 'right',
|
||||
},
|
||||
],
|
||||
|
@ -128,8 +128,8 @@ const config = {
|
|||
to: '/blog',
|
||||
},
|
||||
{
|
||||
label: 'GitHub',
|
||||
href: 'https://github.com/facebook/docusaurus',
|
||||
label: 'Code',
|
||||
href: 'https://codeberg.org/pzp',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
|
100
guide/intro.md
100
guide/intro.md
|
@ -2,46 +2,98 @@
|
|||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Intro
|
||||
# PZP Docs
|
||||
|
||||
Let's discover **Docusaurus in less than 5 minutes**.
|
||||
What is "PZP":
|
||||
- A local-first P2P protocol with 10 years of learnings baked in
|
||||
- Message formats + Message validation + RPC methods
|
||||
- If scuttlebutt is :slightly_smiling_face: then pzp is :sunglasses:
|
||||
|
||||
## Getting Started
|
||||
What it doesn't specify:
|
||||
- Disk storage
|
||||
|
||||
Get started by **creating a new site**.
|
||||
## Features
|
||||
|
||||
Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
|
||||
- sig-chains - you know what the messages are
|
||||
- first class multi-device support
|
||||
- partial replication (using lipmaa links)
|
||||
- message deletion (can leave nothing, or only metadata)
|
||||
|
||||
### What you'll need
|
||||
### How PZP is different from SSB (Secure Scuttlebutt)
|
||||
|
||||
- [Node.js](https://nodejs.org/en/download/) version 16.14 or above:
|
||||
- When installing Node.js, you are recommended to check all checkboxes related to dependencies.
|
||||
- Storage is designed to not grow indefinitely. By default (of course overridable) an app's storage shouldn't go above 100MB.
|
||||
- Multi device/app support from the start. Every device/app has its own keypair. They're connected together into one identity using an Account tangle. The Account tangle's root message ID is the account's identifier.
|
||||
- One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles.
|
||||
- Deletion is possible. The data contents of a message is separate from the message metadata, and only the metadata + hash of the data is signed.
|
||||
|
||||
## Generate a new site
|
||||
### How PZP is different from Nostr
|
||||
|
||||
Generate a new Docusaurus site using the **classic template**.
|
||||
- keys are not shared across devices
|
||||
- sig-chains - you know if you're missing content in PZP
|
||||
|
||||
The classic template will automatically be added to your project after you run the command:
|
||||
## Tangles
|
||||
|
||||
```bash
|
||||
npm init docusaurus@latest my-website classic
|
||||
Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication.
|
||||
|
||||
Basics of tangles in PZP: it's a directed acyclic graph (DAG) which aims to be as linear as possible
|
||||
|
||||
```mermaid
|
||||
flowchart RL
|
||||
|
||||
E --> D --> C --> A
|
||||
D --> B --> A
|
||||
```
|
||||
There are 3 sorts of tangles:
|
||||
|
||||
You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
|
||||
- Account - a tangle which weaves (device) keys and defines capabilities / permissions of these
|
||||
- Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain
|
||||
- e.g. all post messages from "mix"
|
||||
- e.g. all chess messages from "happy0"
|
||||
- Thread - a tangle where multiple Accounts are collaborating on some state
|
||||
- e.g. all the messages making up a "10th birthday gathering"
|
||||
- e.g. all the messages in a discussion
|
||||
- e.g. all the messages in a shared shopping list
|
||||
|
||||
The command also installs all necessary dependencies you need to run Docusaurus.
|
||||
### Account Tangle
|
||||
|
||||
## Start your site
|
||||
The account tangle starts with a message which says "This key is allowed to author messages on behalf of this account, and add further keys".
|
||||
|
||||
Run the development server:
|
||||
Subsequent messages in this tangle may add / remove capabilities for existing / new keys.
|
||||
|
||||
```bash
|
||||
cd my-website
|
||||
npm run start
|
||||
```
|
||||
Messages in this tangle are verified by checking state they're extending on
|
||||
|
||||
The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
|
||||
|
||||
The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
|
||||
### Feed Tangle
|
||||
|
||||
_Domain Tangle, AccountDomain Tangle_
|
||||
|
||||
|
||||
### Thread Tangle
|
||||
|
||||
All tangles have
|
||||
- a root / root message
|
||||
- an ID (the id of the root message of the tangle)
|
||||
- have tangle-data for causal ordering
|
||||
|
||||
How the tangles differ
|
||||
- the Account tangle has strict validation of messages (it is only valid to write to it if you've been given permission to)
|
||||
- a Feed root is deterministic! (only inputs are accountId + domain)
|
||||
|
||||
|
||||
## Messages
|
||||
|
||||
https://github.com/staltz/ppppp-db/blob/master/protospec.md
|
||||
|
||||
|
||||
## RPC methods
|
||||
|
||||
- [Replication](https://github.com/staltz/ppppp-sync/blob/master/protospec.md)
|
||||
|
||||
## Other
|
||||
|
||||
- [ppppp-invite](https://github.com/staltz/ppppp-invite/blob/master/protospec.md)
|
||||
|
||||
- [ppppp-set](https://github.com/staltz/ppppp-set/blob/master/protospec.md)
|
||||
|
||||
- [ppppp-dict](https://github.com/staltz/ppppp-dict/blob/master/protospec.md)
|
||||
|
||||
Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
|
||||
|
|
|
@ -18,7 +18,7 @@ function HomepageHeader() {
|
|||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/guide/intro">
|
||||
Docusaurus Tutorial - 5min ⏱️
|
||||
Read the protocol docs
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,8 +30,8 @@ export default function Home() {
|
|||
const {siteConfig} = useDocusaurusContext();
|
||||
return (
|
||||
<Layout
|
||||
title={`Hello from ${siteConfig.title}`}
|
||||
description="Description will go into a meta tag in <head />">
|
||||
title={`${siteConfig.title}`}
|
||||
description="A rad p2p protocol">
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
|
|
Loading…
Reference in New Issue