+- Editor: Sanaz Taheri <sanaz@status.im>
+- Contributors:
+ - Dean Eigenmann <dean@status.im>
+ - Oskar Thorén <oskarth@titanproxy.com>
+
In this specification, we describe a minimum viable protocol for data synchronization inspired by the Bramble Synchronization Protocol[^1]. This protocol is designed to ensure reliable messaging between peers across an unreliable peer-to-peer (P2P) network where they may be unreachable or unresponsive.
@@ -89,7 +90,7 @@ A maximum of one payload SHOULD be sent to peers per epoch, this payload contain
Nodes MAY have two modes with which they can send records: `BATCH` and `INTERACTIVE` mode. The following rules dictate how nodes construct payloads every epoch for any given peer for both modes.
-\> ***NOTE:** A node may send messages both in interactive and in batch mode.*
+> ***NOTE:** A node may send messages both in interactive and in batch mode.*
#### Interactive Mode
@@ -100,11 +101,11 @@ Nodes MAY have two modes with which they can send records: `BATCH` and `INTERACT
- When a node receives an `ACK`, the `MESSAGE` is removed from the state for the given peer.
- All records that require retransmission are added to the payload, given `Send Epoch` has been reached.
-\
- \
- \
+<p align="center">
+ <img src="../assets/mvds/interactive.png" />
+ <br />
Figure 1: Delivery without retransmissions in interactive mode.
-\
+</p>
#### Batch Mode
@@ -117,14 +118,14 @@ Nodes MAY have two modes with which they can send records: `BATCH` and `INTERACT
-\
- \
- \
+<p align="center">
+ <img src="../assets/mvds/batch.png" />
+ <br />
Figure 2: Delivery without retransmissions in batch mode.
-\
+</p>
-\> ***NOTE:** Batch mode is higher bandwidth whereas interactive mode is higher latency.*
+> ***NOTE:** Batch mode is higher bandwidth whereas interactive mode is higher latency.*
@@ -136,11 +137,11 @@ The record of the type `Type` SHOULD be retransmitted every time `Send Epoch` is
`Send Epoch` and `Send Count` MUST be increased every time a record is retransmitted. Although no function is defined on how to increase `Send Epoch`, it SHOULD be exponentially increased until reaching an upper bound where it then goes back to a lower epoch in order to prevent a record's `Send Epoch`'s from becoming too large.
-\> ***NOTE:** We do not retransmission `ACK`s as we do not know when they have arrived, therefore we simply resend them every time we receive a `MESSAGE`.*
+> ***NOTE:** We do not retransmission `ACK`s as we do not know when they have arrived, therefore we simply resend them every time we receive a `MESSAGE`.*
## Formal Specification
-MVDS has been formally specified using TLA+: \.
+MVDS has been formally specified using TLA+: <https://github.com/vacp2p/formalities/tree/master/MVDS>.
## Acknowledgments
- Preston van Loon
@@ -155,4 +156,4 @@ Copyright and related rights waived via [CC0](https://creativecommons.org/public
## Footnotes
[^1]: akwizgran et al. [BSP](https://code.briarproject.org/briar/briar-spec/blob/master/protocols/BSP). Briar.
-[^2]: \
+[^2]: <https://github.com/vacp2p/mvds>
diff --git a/vac/25/libp2p-dns-discovery.md b/vac/25/libp2p-dns-discovery.md
index 7c56f6a9b..a6fa7d8aa 100644
--- a/vac/25/libp2p-dns-discovery.md
+++ b/vac/25/libp2p-dns-discovery.md
@@ -2,11 +2,11 @@
title: 25/LIBP2P-DNS-DISCOVERY
name: Libp2p Peer Discovery via DNS
status: deleted
-editor: Hanno Cornelius \
+editor: Hanno Cornelius <hanno@status.im>
contributors:
---
- Status: deleted
-- Editor: Hanno Cornelius \
+- Editor: Hanno Cornelius <hanno@status.im>
`25/LIBP2P-DNS-DISCOVERY` specifies a scheme to implement [`libp2p`](https://libp2p.io/) peer discovery via DNS for Waku v2.
The generalised purpose is to retrieve an arbitrarily long, authenticated, updateable list of [`libp2p` peers](https://docs.libp2p.io/concepts/peer-id/) to bootstrap connection to a `libp2p` network.
@@ -24,13 +24,13 @@ EIP-1459 specifies [the URL scheme](https://eips.ethereum.org/EIPS/eip-1459#spec
This specification uses the same approach, but with a `matree` scheme:
```
-matree://\@\
+matree://@
```
where
- `matree` is the selected `multiaddr` Merkle tree scheme
-- `\` is the fully qualified domain name on which the list can be found
-- `\` is the base32 encoding of the compressed 32-byte binary public key that signed the list.
+- `` is the fully qualified domain name on which the list can be found
+- `` is the base32 encoding of the compressed 32-byte binary public key that signed the list.
The example URL from EIP-1459, adapted to the above scheme becomes:
@@ -55,7 +55,7 @@ and adapted for use with `multiaddrs`:
The tree root entry MUST use the following format:
```
-matree-root:v1 m=\ l=\ seq=\ sig=\
+matree-root:v1 m= l= seq= sig=
```
where
@@ -73,11 +73,11 @@ encoded as URL-safe base64
Branch entries MUST take the format:
```
-matree-branch:\,\,...,\
+matree-branch:,,...,
```
where
-- `\,\,...,\` are the hashes of other subtree entries
+- `,,...,` are the hashes of other subtree entries
## Leaf entries
@@ -89,7 +89,7 @@ For the subtree pointed to by `link-root`,
leaf entries MUST take the format:
```
-matree://\@\
+matree://@
```
which links to a different list located in another domain.
@@ -100,7 +100,7 @@ For the subtree pointed to by `ma-root`,
leaf entries MUST take the format:
```
-ma:\
+ma:
```
which contains the `multiaddr` of a `libp2p` peer.
diff --git a/vac/3/remote-log.md b/vac/3/remote-log.md
index 7ba12c2ba..f399092d8 100644
--- a/vac/3/remote-log.md
+++ b/vac/3/remote-log.md
@@ -2,14 +2,15 @@
title: 3/REMOTE-LOG
name: Remote log specification
status: draft
-editor: Oskar Thorén \
+editor: Oskar Thorén <oskarth@titanproxy.com>
contributors:
- - Dean Eigenmann \
+ - Dean Eigenmann <dean@status.im>
---
- Status: draft
-- Editor: Oskar Thorén \
-- Contributors::
- - Dean Eigenmann \
+- Editor: Oskar Thorén <oskarth@titanproxy.com>
+- Contributors:
+ - Dean Eigenmann <dean@status.im>
+
A remote log is a replication of a local log. This means a node can read data that originally came from a node that is offline.
@@ -126,7 +127,7 @@ message RemoteLog {
-
+
## Synchronization
@@ -157,11 +158,11 @@ The *remote log* protobuf is what is stored in the name system.
-\
- \
- \
+<p align="center">
+ <img src="./images/remote-log.png" />
+ <br />
Figure 1: Remote log data synchronization.
-\
+</p>
@@ -243,4 +244,4 @@ Copyright and related rights waived via [CC0](https://creativecommons.org/public
## Footnotes
-[^1]: \
+[^1]: <https://github.com/vacp2p/research/tree/master/remote_log>
diff --git a/vac/32/rln-v1.md b/vac/32/rln-v1.md
index 1744cf61e..451910cdb 100644
--- a/vac/32/rln-v1.md
+++ b/vac/32/rln-v1.md
@@ -2,17 +2,22 @@
title: 32/RLN-V1
name: Rate Limit Nullifier
status: raw
-editor: Rasul Ibragimov \
+editor: Rasul Ibragimov <curryrasul@gmail.com>
contributors:
-- Barry Whitehat \
-- Sanaz Taheri \
-- Oskar Thorén \
-- Onur Kilic \
-- Blagoj Dimovski \
+- Barry Whitehat <barrywhitehat@protonmail.com>
+- Sanaz Taheri <sanaz@status.im>
+- Oskar Thorén <oskarth@titanproxy.com>
+- Onur Kilic <onurkilic1004@gmail.com>
+- Blagoj Dimovski <blagoj.dimovski@yandex.com>
---
- Status: raw
-- Editor: Rasul Ibragimov \
-- Contributors::
+- Editor: Rasul Ibragimov <curryrasul@gmail.com>
+- Contributors:
+ - Barry Whitehat <barrywhitehat@protonmail.com>
+ - Sanaz Taheri <sanaz@status.im>
+ - Oskar Thorén <oskarth@titanproxy.com>
+ - Onur Kilic <onurkilic1004@gmail.com>
+ - Blagoj Dimovski <blagoj.dimovski@yandex.com>
## Abstract
@@ -578,7 +583,7 @@ let mut rln = RLN::new(tree_height, resources);
```rust
// We generate an identity tuple
-let mut buffer = Cursor::new(Vec::\::new());
+let mut buffer = Cursor::new(Vec::::new());
rln.extended_key_gen(&mut buffer).unwrap();
// We deserialize the keygen output to obtain
// the identiy_secret and id_commitment
@@ -612,7 +617,7 @@ let signal = b"RLN is awesome";
let proof_input = prepare_prove_input(identity_secret, id_index, epoch, signal);
// We generate a RLN proof for proof_input
let mut in_buffer = Cursor::new(proof_input);
-let mut out_buffer = Cursor::new(Vec::\::new());
+let mut out_buffer = Cursor::new(Vec::::new());
rln.generate_rln_proof(&mut in_buffer, &mut out_buffer)
.unwrap();
// We get the public outputs returned by the circuit evaluation
diff --git a/vac/4/mvds-meta.md b/vac/4/mvds-meta.md
index 6b8c9453d..9c58d54a9 100644
--- a/vac/4/mvds-meta.md
+++ b/vac/4/mvds-meta.md
@@ -2,18 +2,19 @@
title: 4/MVDS-META
name: MVDS Metadata Field
status: draft
-editor: Sanaz Taheri \
+editor: Sanaz Taheri <sanaz@status.im>
contributors:
- - Dean Eigenmann \
- - Andrea Maria Piana \
- - Oskar Thorén \
+ - Dean Eigenmann <dean@status.im>
+ - Andrea Maria Piana <andreap@status.im>
+ - Oskar Thorén <oskarth@titanproxy.com>
---
- Status: draft
-- Editor: Sanaz Taheri \
-- Contributors::
- - Dean Eigenmann \
- - Andrea Maria Piana \
- - Oskar Thorén \
+- Editor: Sanaz Taheri <sanaz@status.im>
+- Contributors:
+ - Dean Eigenmann <dean@status.im>
+ - Andrea Maria Piana <andreap@status.im>
+ - Oskar Thorén <oskarth@titanproxy.com>
+
In this specification, we describe a method to construct message history that will aid the consistency guarantees of [2/MVDS](../2/mvds). Additionally, we explain how data sync can be used for more lightweight messages that do not require full synchronization.
@@ -80,6 +81,6 @@ Copyright and related rights waived via [CC0](https://creativecommons.org/public
## Footnotes
[^1]: [2/MVDS](../2/mvds)
-[^2]: \
+[^2]: <https://en.wikipedia.org/wiki/Directed_acyclic_graph>
[^3]: Jepsen. [Causal Consistency](https://jepsen.io/consistency/models/causal). Jepsen, LLC.
-[^4]: \
+[^4]: <https://en.wikipedia.org/wiki/Eventual_consistency>
diff --git a/vac/46/gossipsub-tor-push.md b/vac/46/gossipsub-tor-push.md
index dfd92d9b8..f9e33afc4 100644
--- a/vac/46/gossipsub-tor-push.md
+++ b/vac/46/gossipsub-tor-push.md
@@ -3,12 +3,12 @@ title: 46/GOSSIPSUB-TOR-PUSH
name: Gossipsub Tor Push
status: raw
category: Standards Track
-editor: Daniel Kaiser \
+editor: Daniel Kaiser <danielkaiser@status.im>
contributors:
---
- Status: raw
- Category: Standards Track
-- Editor: Daniel Kaiser \
+- Editor: Daniel Kaiser <danielkaiser@status.im>
## Abstract
diff --git a/vac/48/rln-interep-spec.md b/vac/48/rln-interep-spec.md
index a9735f7cc..ee5285c35 100644
--- a/vac/48/rln-interep-spec.md
+++ b/vac/48/rln-interep-spec.md
@@ -3,12 +3,12 @@ title: 48/RLN-INTEREP-SPEC
name: Interep as group management for RLN
status: raw
category:
-editor: Aaryamann Challani \
+editor: Aaryamann Challani <aaryamann@status.im>
contributors:
---
- Status: raw
- Category:
-- Editor: Aaryamann Challani \
+- Editor: Aaryamann Challani <aaryamann@status.im>
## Abstract
diff --git a/vac/58/rln-v2.md b/vac/58/rln-v2.md
index a8e4590bc..67975ea52 100644
--- a/vac/58/rln-v2.md
+++ b/vac/58/rln-v2.md
@@ -2,13 +2,14 @@
title: 58/RLN-V2
name: Rate Limit Nullifier V2
status: raw
-editor: Rasul Ibragimov \
+editor: Rasul Ibragimov <curryrasul@gmail.com>
contributors:
-- Lev Soukhanov \<0xdeadfae@gmail.com\>
+- Lev Soukhanov <0xdeadfae@gmail.com>
---
- Status: raw
-- Editor: Rasul Ibragimov \
-- Contributors::
+- Editor: Rasul Ibragimov <curryrasul@gmail.com>
+- Contributors:
+ - Lev Soukhanov <0xdeadfae@gmail.com>
## Abstract
@@ -93,7 +94,7 @@ internal_nullifier = poseidonHash([a_1])
**id_commitment** in [32/RLN-V1](../32/rln-v1) is equal to `poseidonHash(identity_secret)`.
The goal of RLN-Diff is to set different rate-limits for different users.
-It follows that **id_commitment** must somehow depend on the `user_message_limit` parameter, where 0 \<= `user_message_limit` \<= `message_limit`.
+It follows that **id_commitment** must somehow depend on the `user_message_limit` parameter, where 0 <= `user_message_limit` <= `message_limit`.
There are few ways to do that:
1. Sending `identity_secret_hash` = `poseidonHash(identity_secret, userMessageLimit)` and zk proof that `user_message_limit` is valid (is in the right range).
This approach requires zkSNARK verification, which is an expensive operation on the blockchain.
diff --git a/vac/70/eth-secpm.md b/vac/70/eth-secpm.md
index a1dcc48a3..e6329ebbe 100644
--- a/vac/70/eth-secpm.md
+++ b/vac/70/eth-secpm.md
@@ -3,12 +3,12 @@ title: 70/ETH-SECPM
name: Secure channel setup using Ethereum accounts
status: raw
category: Standards Track
-editor: Ramses Fernandez \
+editor: Ramses Fernandez <ramses@status.im>
contributors:
---
- Status: raw
- Category: Standards Track
-- Editor: Ramses Fernandez \
+- Editor: Ramses Fernandez <ramses@status.im>
## Motivation
The need for secure communications has become paramount.
@@ -100,7 +100,7 @@ XEd448_sign((ik, IK), message):
```
```
XEd448_verify(u, message, (R || s)):
- if (R.y \>= 2^448) or (s \>= 2^446): return FALSE
+ if (R.y >= 2^448) or (s >= 2^446): return FALSE
h = (SHA512(R || 156326 || message)) % q
R_check = s * convert_mont(5) - h * 156326
if R == R_check: return TRUE
@@ -215,10 +215,10 @@ DHRatchet(state, header):
```
```
SkipMessageKeys(state, until):
- if state.NR + MAX_SKIP \< until:
+ if state.NR + MAX_SKIP < until:
raise Error
if state.CKr != none:
- while state.Nr \< until:
+ while state.Nr < until:
state.CKr, mk = HMAC-SHA256(state.CKr)
state.MKSKIPPED[state.DHr, state.Nr] = mk
state.Nr = state.Nr + 1
@@ -362,8 +362,8 @@ DeriveSecret(Secret, Label) = ExpandWithLabel(Secret, Label, "", KDF.Nh)
```
struct {
uint16 length;
- opaque label\;
- opaque context\;
+ opaque label;
+ opaque context;
} KDFLabel;
```
The fields of `KDFLabel` MUST be:
@@ -380,11 +380,11 @@ The sturcture of such object MUST be:
struct {
ProtocolVersion version = mls10;
CipherSuite cipher_suite;
-opaque group_id\;
+opaque group_id;
uint64 epoch;
-opaque tree_hash\;
-opaque confirmed_trasncript_hash\;
-Extension extension\;
+opaque tree_hash;
+opaque confirmed_trasncript_hash