# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.emoney.network/tendermint-and-evmos/a-note-on-determinism.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
