research/remote_log/remote_log_spec.md
2019-09-21 15:17:16 +08:00

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

  1. Node
  2. Name system (NS)
  3. 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