mirror of
https://github.com/vacp2p/research.git
synced 2025-02-24 04:08:15 +00:00
2.3 KiB
2.3 KiB
Remote log specification
Version: 0.1 (Draft)
Authors: Oskar Thorén oskar@status.im, Dean Eigenmann dean@status.im
Table of Contents
TBD.
Abstract
A remote log is a replication of a local log. This means a node can read data from a node that is offline.
Definitions
Term | Definition |
---|---|
CAS | Content-addressed storage. Stores data that can be addressed by its hash. |
Name system | Name system. Associates mutable data to a name. |
Remote log | Replication of a local log at a different location. |
Roles
- Node
- Name system (NS)
- Content-addressed storage (CAS)
Wire Protocol
Payloads
CAS service
package vac.cas;
service CAS {
rpc Add(Content) returns (Address) {}
rpc Get(Address) returns (Content) {}
}
message Address {
bytes id = 1;
}
message Content {
bytes data = 1;
}
NS service
service NS {
rpc Update(NameUpdate) returns (Response) {}
rpc Fetch(Query) returns (Content) {}
}
message NameUpdate {
string name = 1;
bytes content = 2;
}
message Query {
string name = 1;
}
message Content {
bytes data = 1;
}
// XXX: Anything? Ok/Error, enum?
// XXX: Also bad naming
message Response {
bytes data = 1;
}
Remote
message RemoteLog {
Body body = 1;
bytes tail = 2;
message Body {
repeated Pair pair = 1;
}
message Pair {
bytes remoteHash = 1;
bytes localHash = 2;
}
}
Flow
sequenceDiagram
Alice->>CAS: Add content
CAS->>Alice: Address
Alice->>NS: Update NameUpdate
NS->>Alice: Response
Bob->>NS: Fetch
NS->>Bob: Content
Bob->>CAS: Fetch Query
CAS->>Bob: Content