Hash of Event
type EventId = [u8; 32];
The Event could have many actions according to the underlying data.
enum EventAction { ... };
| Description | Data Type | Comments |
|---|---|---|
| previous_event_hash | EventId |
Hash of the previous Event |
| action | EventAction |
Event's action |
| timestamp | u64 | Event's timestamp |
| Description | Data Type | Comments |
|---|---|---|
| parent | Option<EventId> |
Only current root has this set to None |
| event | Event |
The Event itself |
| children | Vec<EventId> |
The Events which has parent as this Event hash |
The Model consists of chains (EventNodes) structured as a tree; whereby, each chain has an Event-based
list. To maintain a strict order of chains, each Event depends on the hash of the previous Event.
All of the chains share a root Event to preserve the tree structure.
| Description | Data Type | Comments |
|---|---|---|
| current_root | EventId |
The root Event for the tree |
| orphans | HashMap<EventId, Event> |
Recently added Events |
| event_map | HashMap<EventId, EventNode> |
The actual tree |
| events_queue | EventsQueue |
Communication channel |
The View checks the Model for new Events and then dispatches these Events to the clients.
Events are sorted according to the timestamp attached to each Event.
| Description | Data Type | Comments |
|---|---|---|
| seen | HashMap<EventId, Event> |
A list of Events |
The EventsQueue used to transport the event from Model to View.
The Model fills the EventsQueue with the new Event, while the View continuously
fetches Events from queue.
Tau uses Model–view software architecture. All of the operations, main data structures,
and message handling from the network protocol happen on the Model side.
Further, this keeps the View independent of the Model
and allows the View to focus on receiving continuous updates from it.
EventUpon receiving a new Event from the network protocol, the Event will be added to the
orphans list.
After the ancestor of the new orphan is found, the orphan Event will be added to the chain
according to its ancestor.
For example: in Example1 below, an Event is added to the first chain if
its previous hash is Event-A1.
Remove leaves which are too far from the head leaf (the leaf in the longest chain).
The depth difference from the common ancestor between a leaf to be removed and a head leaf
must be greater than MAX_DEPTH.
Finding the highest common ancestor for the leaves and assign it as the root for the tree.
The highest common ancestor must have a height greater than MAX_HEIGHT.