Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Think of it this way: If we say that we perceive the world in 3D space and 1D time (x,y,z,t), the t dimension is special: You can't change x,y,z if you don't advance t. Inversely, if x,y,z is constant, t doesn't need to advance. That's why it's enough for the logical clocks to count the number of committed transactions.

This said, in a truly decentralized setting, where CRDTs make most sense, logical clocks are not useful as they are not not byzantine fault tolerant. You need merkle trees.



Not sure if understand what you mean.

If we see every field as f(x,y,z,t) what do you mean you can't "change" x,y,z without changing t?

If you mean changing the x,y,z argument values, you can (you're just evaluating a different point in space).

If you mean changing the evaluated function value at a given x,y,z it's kinda tautological that it stays constant for a constant x,y,z,t.


It's a real-world analog.

Imagine there is an object recorded at location x,y,z at time t. This is all we know.

If I later tell you the object was recorded at location x,y,z, you have no idea what time it was captured. If I later tell you the object was recorded at any location other than x,y,z (even if only z changed by some epsilon) you know that that it was captured at some time other than t.

If you guarantee the second recording I'm showing you was not taken before time t, you know it is a more recent recording, because it would be not earlier than and not equal to time t.


I'll try to explain with an example: If you have an object at position (x1,y1,z1), at some time t1, and you want to move this object to a different position so that at time t2, it's at position (x2,y2,z2), you must have t2>t1. If t2==t1 then (x1,y1,z1)==(x2,y2,z2).

So when time stops, everything else stops. It is tautological when you think about it, but I find that it's an easy way to explain why logical clocks work.

Am I wrong to reason this way?


Why wouldn't a logical clock as described be byzantine fault tolerant?


decentralized != untrusted

byzantine fault tolerance is fun and all but it's a niche use case


> decentralized != untrusted

You can only trust the nodes that you control. That's not what I'd call a decentralized system.


you don't need to control a node to trust it, like tcp isn't byzantine fault tolerant and yet here we are




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: