checkpoint

This commit is contained in:
sneakers-the-rat 2023-06-05 17:36:35 -07:00
parent 9890c25e95
commit 5ff646cdcf
11 changed files with 195 additions and 3 deletions

View file

@ -10,6 +10,7 @@
# p2p-ld Protocol # p2p-ld Protocol
- [Definitions](./definitions.md)
- [Protocol](./protocol.md) - [Protocol](./protocol.md)
- [Identity](./identity.md) - [Identity](./identity.md)
- [Discovery](./discovery.md) - [Discovery](./discovery.md)

View file

@ -3,4 +3,24 @@
- HTTP - HTTP
- Bittorrent - Bittorrent
- IPFS - IPFS
- ActivityPub - ActivityPub
## HTTP Servers
- Using existing HTTP servers as web-seed like things.
- Use codecs to indicate the format and metadata of existing files
- Use HTTP servers as backup mirrors that behave like peers, and how peers can indicate them as mirrors for a given container
## BitTorrent
See [BEP 52 - Bittorrent V2](http://bittorrent.org/beps/bep_0052.html)
## IPFS
## ActivityPub
- Mappings:
- Container <-> feed

View file

@ -6,3 +6,58 @@ Triplet graphs similar to linked data fragments with envelopes. decoupling conte
- Envelopes - Envelopes
- Versioning - Versioning
- Typed objects with formatting - Typed objects with formatting
## Containers
- Packets of LD-triplets that contain
- Hash of triplets
- Encryption Info (if applicable)
- Permissions scope
- Signature
- Anything that can be directly referenced without local qualifier is a container.
- Triplets within a container can be referenced with the [query syntax](querying.html#Location)
- Containers also behave like "feeds"
- Eg. one might put their blog posts in `@user:blog` or
- The account identifier is the top-level container.
- Ordering:
- Every triple within a scope is ordered by default by the time it is declared
- A container can declare its ordering (see [vocabulary](vocabulary.html#Container))
- Naming:
- Each container intended to be directly referenced SHOULD contain a `name` so it can be referenced w.r.t its parent: `@<ACCOUNT>:<name>`
- Each container can also be indicated numerically
- Identity: Each container is uniquely identified by the hash of its contents and the hash of the account identifier.
- Format: A container can specify one or several ways it can be displayed
- Capabilities: A container can specify different capabilities that another account can take (eg. "Like", "Upvote", "Reply")
- Capabilities should also contain a permissions scope, if none is present, the global scope is assumed.
## Triplets
- Triplet format
- Objects require a shortname that can be hierarchically indexed from
- Types/Schema
- Including intrinsic notion of nesting
- every object can have blank/positionally indexed children
- every triple can have blank/positionally indexed "qualifiers" like RDF-star or wikidata's qualifiers.
## Schema
## Codecs
See IPLD Codecs and Linked Data Platform spec
Means of interacting with binary data.
Describes
- Format
-
## Versioning
- A given container has an identity hash from its first packing
- A given triple can be contained by

1
src/definitions.md Normal file
View file

@ -0,0 +1 @@
# Definitions

View file

@ -3,4 +3,8 @@
Making supra-peer clusters with explicit governance and policies for rehosting and sharing! Making supra-peer clusters with explicit governance and policies for rehosting and sharing!
- Creating federations of peers - Creating federations of peers
- -
## Sharding
Splitting data across multiple peers within a federation

View file

@ -5,3 +5,30 @@ How is an individual peer identified?
- Cryptographic identity - Cryptographic identity
- Web of trust/shared identity - Web of trust/shared identity
- External verification/discovery via DNS and other out of band means. - External verification/discovery via DNS and other out of band means.
## Instances
A given identity can have 0 or many instances - a manifestation of the peer within a particular server and runtime.
Each instance indicates a collection of peers
When connecting to a peer, the peer MUST tell the connecting peer of the instances that are within its permission scope.
## Aliases
A given identity can have 0 or many bidirectional links indicating that the identity is `sameAs` another
- eg. a fediverse account can indicate a cryptographic identity and then be used equivalently.
- Verification aliases MUST have a backlink from the original identity
- Subscribers to a given identity MUST store and represent the known aliases and treat them as equivalent
- Other accounts can give an alias to an identity that MAY be accepted (by issuing a backlink) or denied (by ignoring it).
### Succession
An identity has a specific field indicating whether it is "active" or "retired," and can issue a special top-level link with given permission scope indicating the identity that succeeds it.
- eg in the case of harrassment, one can hop identities and only tell close friends.
## Beacons
Any peer can operate as a "Pub" (in the parlance of SSB) or a bootstrapping node, where a dereferenceable network location (eg. DNS) can be resolved to a
A given identity can have 0 or many static inbound references that can resolve a network

View file

@ -5,3 +5,5 @@ What should explicitly be left out of the protocol?
## Implementation ## Implementation
Things that are described in the spec, but details are left up to the implementation Things that are described in the spec, but details are left up to the implementation
- codecs: the spec describes how to define a codec, but does not include any codecs.

View file

@ -1,3 +1,18 @@
# P2P Concepts # P2P Concepts
Overview of the various concepts that p2p systems have to handle or address with links to the sections where we address them! Overview of the various concepts that p2p systems have to handle or address with links to the sections where we address them!
- [Definitions](definitions.html) - Terms used within the protocol spec
- [Protocol](protocol.html) - The protocol spec itself, which encompasses the following sections and describes how they relate to one another.
- [Identity](identity.html) - How each peer in the swarm is identified (or not)
- [Discovery](discovery.html) - How peers are discovered and connected to in the swarm, or, how an identity is dereferenced into some network entity.
- [Data Structures](data_structures.html) - What and how data is represented within the protocol
- [Querying](querying.html) - How data, or pieces of data are requested from hosting peers
- [Evolvability](evolvability.html) - How the protocol is intended to accommodate changes, plugins, etc.
Additionally, p2p-ld considers these additional properties that are not universal to p2p protocols:
- [Vocabulary](vocabulary.html) - The linked data vocabulary that is used within the protocol
- [Encryption](encryption.html) - How individual messages can be encrypted and decrypted by peers
- [Federation](federation.html) - How peers can form supra-peer clusters for swarm robustness, social organization, and governance
- [Backwards Compatibility](backwards_compatibility.html) - How the protocol integrates with existing protocols and technologies.

View file

@ -1 +1,17 @@
# Protocol # Protocol
## Connection
- When connecting to a peer, a peer MUST advertise its own connections to other peers whose discoverability permissions allow it
- eg. a peer can desig
## Requests
## Sharding
## Backlinks
Every link has an implicit backlink that can be accepted/denied by the owner of the referenced object.
If a link is proposed from a blocked identifier, the proposed link is automatically dropped

View file

@ -1,3 +1,32 @@
# Querying # Querying
How do we find peers that have subgraphs that are responsive to what we want? How do we find peers that have subgraphs that are responsive to what we want?
## Syntax
### Location
How to refer to a given [container](data_structures.html#Containers), eg.
```
@user:containerName:childName
```
or numerically
```
@user:containerName:{0}
```
Children
### Version
How to refer to a specific version of a container
References without version qualification indicate the most recent version at the time of containerizing the links.
## Query Fragments
Using blank subgraphs to specify queries

View file

@ -1 +1,23 @@
# Vocabulary # Vocabulary
## Imports
- `skos:sameAs` - for declaring that a given triplet is equivalent to another.
## Container
- `ordering` - how the children are to be ordered
- `declaration` - makes numerical references stronger, but less predictable.
- `alphabetic` - makes numerical references weaker, but more predictable
## Social
- Containers of other accounts
- proxy identites: a given identity can specify a collection of alts that can only be resolved with the correct permission scope - so eg. a public account that is stable can be linked to by an abusive user, but they won't be able to resolve a more private alt.
- Peer Relationship Types
- Other peers can be given special roles that allow them to operate on behalf of the peer in mutually independent ways:
- Keybearer - also share a given private key,
- Visibility
- A peer can indicate that it is visible to a given scope as defined by a collection of peers and associated rules.
- eg. a "close friends" collection could be given the visibility rule to make a peer visible to n-deep friends of friends.
- A