mirror of
https://github.com/p2p-ld/docs.git
synced 2025-01-09 22:04:26 +00:00
checkpoint
This commit is contained in:
parent
9890c25e95
commit
5ff646cdcf
11 changed files with 195 additions and 3 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
1
src/definitions.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Definitions
|
|
@ -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
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue