This repository has been archived by the owner on Jul 15, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 84
Explain Determinism #56
Labels
Comments
Great write up! I think this article http://www.ocoudert.com/blog/2011/05/30/how-to-make-software-deterministic/#memory_address is worth reading as well. But should be building a tool (like go vet) or our own language (+10000 hours of work) a priority? To draw the analogy with RethinkDB (post-mortem), isn't it like chasing correctness instead of a usecase? Or it will be our main advantage? |
Let's make sure we have a clear place in our docs for talking about this. Then we can close this issue @zramsay |
zramsay
added a commit
to tendermint/tendermint
that referenced
this issue
Mar 6, 2018
This was referenced Mar 6, 2018
tendermint/tendermint#1280 provides a place to discuss ;) |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
This is more a question and a proposal to enhance documentation. Please give feedback here and then we can make some good docs out of it.
I often hear @jaekwon and @ebuchman saying that the hardest part of blockchain programming is the determinism. And I thought it was the p2p networking and bft consensus layer. Anyway, this brings me to the point that we probably need to make this very explicit and document what forms indeterminism can creep into our system.
In general, one assumes arbitrary op codes on a cpu are deterministic. I mean 2+2=4 and push, pop, jump, add, etc are all quite deterministic actions. Where then does the indeterminism come from? (short answer:
syscall
)Below is my first attempt to explain sources of indeterminism, please expand, and comment:
/dev/urandom
orsyscall.random
should be different on every machinetime
,timeofday
, etc. will also be different on other machines, even if one tries to sync the clocks wellAnother way to break these down is:
Okay, done for now, would love some feedback here. And maybe we can make a wiki page out of the results from this issue.
The text was updated successfully, but these errors were encountered: