mirror of https://codeberg.org/pzp/pzp-wiki.git
100 lines
3.3 KiB
Markdown
100 lines
3.3 KiB
Markdown
---
|
|
sidebar_position: 1
|
|
---
|
|
|
|
# PZP Docs
|
|
|
|
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:
|
|
|
|
What it doesn't specify:
|
|
- Disk storage
|
|
|
|
## Features
|
|
|
|
- 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)
|
|
|
|
### How PZP is different from SSB (Secure Scuttlebutt)
|
|
|
|
- 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.
|
|
|
|
### How PZP is different from Nostr
|
|
|
|
- keys are not shared across devices
|
|
- sig-chains - you know if you're missing content in PZP
|
|
|
|
## Tangles
|
|
|
|
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:
|
|
|
|
- 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
|
|
|
|
### Account Tangle
|
|
|
|
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".
|
|
|
|
Subsequent messages in this tangle may add / remove capabilities for existing / new keys.
|
|
|
|
Messages in this tangle are verified by checking state they're extending on
|
|
|
|
|
|
### 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)
|
|
|