3.2 KiB
Remote log specification
Version: 0.0.5 (Draft)
Authors: Oskar Thorén oskar@status.im, Dean Eigenmann dean@status.im
Table of Contents
Abstract
A remote log is a replication of a local log. This means a node can read data from a node that is offline.
This specification is complemented by a proof of concept implementation 1.
Definitions
Term | Definition |
---|---|
CAS | Content-addressed storage. Stores data that can be addressed by its hash. |
NS | Name system. Associates mutable data to a name. |
Remote log | Replication of a local log at a different location. |
Wire Protocol
Secure Transport, storage, and name system
This specification does not define anything related to to: secure transport, content addressed storage, or the name system. It is assumed these capabilities are abstracted away in such a way that any such protocol can easily be implemented.
Payloads
Payloads are implemented using protocol buffers v3.
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;
}
message Response {
bytes data = 1;
}
Remote log:
message RemoteLog {
Body body = 1;
bytes tail = 2;
message Body {
repeated Pair pair = 1;
}
message Pair {
bytes remoteHash = 1;
bytes localHash = 2;
}
}
Synchronization
Roles
There are four fundamental roles:
- Alice
- Bob
- Name system (NS)
- Content-addressed storage (CAS)
The remote log protobuf is what is stored at the Name system.
"Bob" can represents anything from 0 to N participants. Unlike Alice, Bob only needs read-only access to NS and CAS.
Flow
Figure 1: Remote log data synchronization.
Footnotes
Acknowledgements
TBD.