research/remote_log/remote_log_spec.md
2019-09-24 13:35:31 +08:00

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:

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

  1. https://github.com/vacp2p/research/tree/master/remote_log

Acknowledgements

TBD.