Version: 0.1.0 (Draft)
Authors: Antoine Toulme antoine@whiteblock.io, Dean Eigenmann dean@status.im
In this specification we highlight a series of simple improvements that can be made to gossip protocols improving their reliability.
For purposes of this specification we assume that nodes initially take part in a handshake where they exchange secrets, and share identities that will be used to sign messages.
Nodes MAY ratelimit their peers. Ratelimiting information SHOULD be exchanged in the handshake. The information that SHOULD be exchanged is the following:
All the numbers MUST be for fixed period of time, designated as the epoch.
The number of headers allowed SHOULD be much higher than full messages. Peers SHOULD prefer communicating headers only.
When a peer receives a message it MUST verify the validity of it. A message is valid if the previous sender has signed it along with the original sender.
Upon receiving and verifying the message, a peer SHOULD send it to all eager peers and send the signature to all lazy peers.
All peers MUST perform verification and add their own signature. This creates a path of headers that can help trace how a particular message transited through the network.
When receiving a message destined for itself, the peer MAY then opportunistically perform optimizations of routing to reduce distance to the sender, if necessary.
If a peer sees a blacklisted node as part of the message path, it MAY choose to stop propagating the message.
Using the path (or if using last sender, a number of hops), the peer MAY decide to propagate a message if it has a maximum number of hops.
To finish the propagation, the peer MAY send headers instead of the full message to all its peers. The peers MAY request the full message if they don’t get it in time (per Plumtree algorithm).
The headers are propagated further. Since the full message is no longer available, the path of peer headers is signed instead with new headers, which allows peers interested in the full message to request the full message from their immediate peer, or to perform a routing optimization to connect to one of the peers in the path with the full message.
For scenarios where packet size may be very critical and network edges may be far apart, encoding an entire path could be problematic. We therefore encode the origin
meaning the first sender of a message, and take note of the last sender, when retransmitting the message we MUST ensure that it does not get sent to the last sender or the origin.
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing