rfc/content/docs/rfcs/4
Oskar Thorén 27ee0f0558
Merge repo with rfc.vac.dev (#310)
* Hugo init

* Init Hugo book

* Add basic README and title

* Import RFC: 1/COSS

* Move example content to dedicated folder

* Basic menu

* Tweak single layout

* Fix base url and permalink

* Basic index tweaks

* Add netifly config

* gitignore

* 1/COSS: Add COSS lifecycle

* Remove public artifact

* Add basic numbers in menu

* Empty READMEs init

* Import mvds spec raw

* 2/MVDS: Simplify

* 3/REMOTE-LOG: Import

* 3/REMOTE-LOG: Simplify

* 4/MVDS-META: Import

* 4/MVDS-META Simplify

* Tweaks

* 5/WAKU0: Import

* 5: Simplify

* 6/WAKU1: Import

* 6/WAKU1: Simplify

* 7/WAKU-DATA: Import

* 7/WAKU-DATA: Simplify

* 8/WAKU-MAIL: Import

* 8/WAKU-MAIL: Simplify

* Tweak

* 9/WAKU-RPC: Import

* 9/WAKU-RPC: Simplify

* 10/WAKU2: Import

* 10/WAKU2: Simplify

* 11/WAKU-RELAY: Import

* Tweaks

* 11/WAKU-RELAY: Simplify

* 12/WAKU-FILTER: Import

* 12/WAKU2-FILTER: Simplify

* 13/WAKU-STORE: Import

* 13/WAKU-STORE: Simplify

* 14/WAKU-MESSAGE: Import

* 14/WAKU-MESSAGE: Simplify

* 15/WAKU-BRIDGE: Import

* 15: Simplify

* 16: Import

* 16: Simplify

* 17: Import

* 17: Simplify

* 18: Import

* 18: Simplify

* 12: Bump update

* 14: Bump update

* 11: Bump update

* 17: Bump update

* 18: Bump update

* 16: Bump update

* Fix slug for 18

* Editor changes for 11, 12, 15

* Revert "Editor changes for 11, 12, 15"

This reverts commit 5c32fe791b.

* Revert "Revert "Editor changes for 11, 12, 15""

This reverts commit ccd75131d7.

* Editor changes for 13, 2, 4

* Move current specs to archive

* Update README

* bump
2021-04-01 12:03:14 +08:00
..
README.md Merge repo with rfc.vac.dev (#310) 2021-04-01 12:03:14 +08:00

README.md

slug title name status editor contributors
4 4/MVDS-META MVDS Metadata Field draft Sanaz Taheri <sanaz@status.im>
Dean Eigenmann <dean@status.im>
Andrea Maria Piana <andreap@status.im>
Oskar Thorén <oskar@status.im>

In this specification, we describe a method to construct message history that will aid the consistency guarantees of 2/MVDS. Additionally, we explain how data sync can be used for more lightweight messages that do not require full synchronization.

Motivation

In order for more efficient synchronization of conversational messages, information should be provided allowing a node to more effectively synchronize the dependencies for any given message.

Format

We introduce the metadata message which is used to convey information about a message and how it SHOULD be handled.

package vac.mvds;

message Metadata {
  repeated bytes parents = 1;
  bool ephemeral = 2;
}

Nodes MAY transmit a Metadata message by extending the MVDS message with a metadata field.

message Message {
  bytes group_id = 1;
  int64 timestamp = 2;
  bytes body = 3;
+ Metadata metadata = 4;
}

Fields

Name Description
parents list of parent message identifiers for the specific message.
ephemeral indicates whether a message is ephemeral or not.

Usage

parents

This field contains a list of parent message identifiers for the specific message. It MUST NOT contain any messages as parent whose ack flag was set to false. This establishes a directed acyclic graph (DAG)1 of persistent messages.

Nodes MAY buffer messages until dependencies are satisfied for causal consistency2, they MAY also pass the messages straight away for eventual consistency3.

A parent is any message before a new message that a node is aware of that has no children.

The number of parents for a given message is bound by [0, N], where N is the number of nodes participating in the conversation, therefore the space requirements for the parents field is O(N).

If a message has no parents it is considered a root. There can be multiple roots, which might be disconnected, giving rise to multiple DAGs.

ephemeral

When the ephemeral flag is set to false, a node MUST send an acknowledgment when they have received and processed a message. If it is set to true, it SHOULD NOT send any acknowledgment. The flag is false by default.

Nodes MAY decide to not persist ephemeral messages, however they MUST NOT be shared as part of the message history.

Nodes SHOULD send ephemeral messages in batch mode. As their delivery is not needed to be guaranteed.

Copyright and related rights waived via CC0.

Footnotes