# A Note on Determinism

The logic for blockchain transaction processing must be deterministic. If the application logic was not made to be deterministic a consensus would not be reached among the Tendermint Core replica nodes.

Solidity on Ethereum is a great language of choice for blockchain applications because, among other reasons, it is a completely deterministic programming language. However, it is also possible to create deterministic applications using existing popular languages like Java, C++, Python, or Go. Game programmers and blockchain developers are already familiar with creating deterministic programs by avoiding sources of non-determinism such as:

* random number generators (without deterministic seeding)
* race conditions on threads (or avoiding threads altogether)
* system clocks
* uninitialised memory (in unsafe programming languages like C or C++)
* floating point arithmetic
* language features that are random (e.g. map iterations in Go)

While programmers can avoid non-determinism by being careful it is also possible to create a special linter or static analyser for each language to check for determinism. In future, we may work with partners to create such tools.
