2019-09-06 09:54:39 +00:00
|
|
|
# Remote log specification
|
|
|
|
|
|
|
|
<!-- Live version atm: https://notes.status.im/HPLXoeM3Sn6e8sG8TQ2Clw# -->
|
2019-09-04 12:45:11 +00:00
|
|
|
|
|
|
|
> Version: 0.1 (Draft)
|
|
|
|
>
|
|
|
|
> Authors: Oskar Thorén oskar@status.im, Dean Eigenmann dean@status.im
|
|
|
|
|
|
|
|
## Table of Contents
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
TBD.
|
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Abstract
|
|
|
|
|
2019-09-21 06:13:39 +00:00
|
|
|
A remote log is a replication of a local log. This means a node can read data
|
|
|
|
from a node that is offline.
|
2019-09-06 09:54:39 +00:00
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Definitions
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
| Term | Definition |
|
|
|
|
| ----------- | -------------------------------------------------------------------------------------- |
|
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Roles
|
|
|
|
|
|
|
|
1. Node
|
|
|
|
2. Name system (NS)
|
|
|
|
3. Content-addressed storage (CAS)
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
As well as the *remote log* payload.
|
|
|
|
|
|
|
|
## Wire Protocol
|
|
|
|
|
|
|
|
### Payloads
|
|
|
|
|
|
|
|
#### CAS service
|
|
|
|
```protobuf
|
|
|
|
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
|
|
|
|
|
|
|
|
```protobuf
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
<!-- // TODO: NameInit? -->
|
|
|
|
|
|
|
|
#### Remote
|
|
|
|
```protobuf
|
|
|
|
message RemoteLog {
|
|
|
|
Body body = 1;
|
|
|
|
bytes tail = 2;
|
|
|
|
|
|
|
|
message Body {
|
|
|
|
repeated Pair pair = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Pair {
|
|
|
|
bytes remoteHash = 1;
|
|
|
|
bytes localHash = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Flow
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
<!-- This section is only here for research right now, might move or be unnecessary -->
|
|
|
|
|
|
|
|
<!-- Wil likely be replaced with similar flow to one in MVDS.spec -->
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
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
|
|
|
|
```
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Footnotes
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
TBD.
|
|
|
|
|
2019-09-04 12:45:11 +00:00
|
|
|
## Acknowledgements
|
|
|
|
|
2019-09-06 09:54:39 +00:00
|
|
|
TBD.
|