3 ms·
All room events (ie. messages) are part of a DAG, with each message indicating the most recent causality source, eg. another message that the client saw when se
by q3k 5y ago
All room events (ie. messages) are part of a DAG, with each message indicating the most recent causality source, eg. another message that the client saw when sending this one. Think vector clocks, but more explicit. Any time an event arrives referencing some other missing event, servers and clients can act on that knowing that there's some kind of split happening.
Each event is also signed by the homeserver of the originator of the messages, so missing messages (due to partial netsplits) can be routed through third-parties, around the netsplit.
For full split-brain scenerios, after a merge, the two DAGs get joined and the effective room state is reconciled.
The big picture is that Matrix rooms are best seen as eventually-consisted distributed event log . :) https://matrix.org/docs/spec/#event-graphs https://matrix.org/docs/spec/#event-graphs