Two parties, one kernel

A client and a server step the same rules on the same inputs. The figure below runs twelve ticks of it, drops one input on the way to the server, and shows what the client does about it.

Türkçe

The claim: a shared, deterministic kernel keeps client and server in agreement, and when they part the client can tell, and can come back.

Tick 1 2 3 4 5 6 7 8 9 10 11 12 Client 56b1 6407 689f 9147 b64b 9c3e ···· ···· ···· ···· ···· ···· Server 56b1 6407 689f 9147 1199 ···· ···· ···· ···· ···· ···· ····
  1. Tick 1. Both parties step the kernel on the same input and reach the same hash.
  2. Ticks 2 to 4. The same again: every hash agrees.
  3. Tick 5. The client predicts its next state from its own input and sends the input on.
  4. Tick 5, at the server. The input never arrives, so the server steps on a hold. Its hash is different, and the client does not know yet.
  5. Tick 6. The server's hash for tick 5 reaches the client, one tick late. It is not the client's: the two have parted.
  6. Tick 7. The client takes the server's state at tick 5 and replays its own inputs for 6 and 7. Its hashes are the server's again.
  7. Ticks 8 to 12. Agreement, tick by tick, to the end.
  8. Twelve ticks, one dropped input, one divergence, one reconciliation.

When the parties part, the client sees it within a tick and comes back within two. Agreement is shown as equal hashes because that is the only way it can be shown.

Model. A small kernel written for this figure, not the project's code. It leaves out latency, interpolation and every input but one.

The claim: a shared, deterministic kernel keeps client and server in agreement, and when they part the client can tell, and can come back.