The protocol checks that
Events properly broadcast through the
network before adding
Events to the
The read_confirms inside each
Event indicate how many times the
Event has been read from other nodes in the network.
The protocol classifies the
Events by their state:
Unread: read_confirms < MAX_CONFIRMS Read: read_confirms >= MAX_CONFIRMS
Inventory vectors notify other nodes about objects they have or data which is being requested.
Allows a node to advertise its knowledge of one or more objects. It can
be received unsolicited or in reply to
Inv message is a confirmation from a node in the network that the
Event has been read.
Confirmation for an
Event does not exist in the
Instead, the protocol sends a
GetData message to request the missing
The protocol updates the
Event in the
UnreadEvents list by
increasing the read_confirms by one.
Event state changes to read when the read_confirms exceed
MAX_CONFIRMS. Then, the
UnreadEvents list removes the
adds it to the
The protocol rebroadcasts the received
Inv to the network.
Upon receiving an
Event with unread status from the network, the
protocol sends back an
Inv message to confirm that the
|events||Vec<||A list of |
The protocol searches in both
UnreadEvents for the
|Messages||HashMap<||Hold all the |
To add an
UnreadEvents, the protocol first must check the
Event is not valid in the network if it's either too far in the
future or in the past.
The protocol continuously broadcasts unread
Events to the network,
after a certain period of time (
until the state of
Event updates to read.
|Leaves||Vec<||Hash of |
To achieve complete synchronization between nodes, the protocol sends a
SyncEvent message every 2 seconds to other nodes in the network.
SyncEvent contains the hashes of
Events set in the leaves of
SyncEvent message, the leaves in
match the leaves in the
Model's tree; otherwise, the protocol sends
Events which are the children of
This prevents receiving duplicate objects. The list contains only 2^16 ids.
|Ids||Vec<||Contains objects ids|
The new received
Event with unread status is added to the
UnreadEvents buffer after increasing the read_confirms by one.
Event with read status is added to the
The protocol broadcasts the received
Event to the network, again.
This ensures all nodes in the network get the Event.
A new created
Event has unread status with read_confirms equal to 0.
The protocol broadcasts the
Event to the network after adding it to
Event to be successfully added to the
Model, the protocol
checks if the previous
Event's hash inside the
Event exists in the
In case the previous
Event check fails, the protocol
GetData message requesting the previous