pzp-wiki/guide/intro.md

3.3 KiB

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 🙂 then pzp is 😎

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

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

Other