# The determinism mechanics in OCA [Overlays Capture Architecture](https://oca.colossi.network/) consists of capture base (head) and overlays (heavy tail). The term head an tail comes from the concept of object destructuring (i.e. https://elixir-lang.org/getting-started/pattern-matching.html) and essentially means there is one head and a potentially infinite number of elements in the tail. The former is a list of human meaningful attribute names that express properties or characteristics of observables. The latter brings context by enriching them with additional metadata. The ingredients of the heavy tail (overlays) are bound to their head by using the unique identifier of the head (its digest), the product of the one-way hash function. Hash functions have the deterministic characteristic that means, for given input, they always return the same output. For example, for given input "abc" and using the blake2 hash function, the output is always the `5qnr9eFS5vFAd5gFaHzyrV5nQI9b/du99O6F1cLgn54=`. ``` $ echo "abc" | openssl dgst -binary -blake2s256 | openssl base64 -A 5qnr9eFS5vFAd5gFaHzyrV5nQI9b/du99O6F1cLgn54= ``` Such characteristic enables the use such products as identifiers. To give an example, there is a `parent<->child` relationship between two objects and the identifier of the parent is `digest(parent) = FDqGuc96GMxgREtwY+0QxrkxUl0idXTww4PZCRN0KMY=`. The child is in posession of the identifier of the parent and, therefore, is able to uniquely identify the parent by checking whether the `digest(parent)` matches what she knows. In terms of OCA, any object that participates in the system, whether it is a capture base or overlay, is uniquely identified by calculating the digest. Furthermore, all overlays additionally include the digest of the capture base, because they constitute a unidirectional relationship, where the capture base is the "parent". Any set of one capture base and multiple overlays constitute a whole that can be identifiable as `digest(whole)`. By the "whole", we use the term OCA Bundle. Mechanically, these properties makes the whole system deterministic which means that for any `digest(whole)` we can uniquely identify the list of ingredients included in it. This operation is irreversible, that is, we cannot "deconstruct it" and find out the list of ingredients solely from the `digest(whole)`. However, what we can do is to find out what ingredients were used by performing the assertion `"0oY0+xYIgTeCvV5rJVpqRKrVmVkmT6vM+y0HI19bohk=" === digest(ing1+ing2+ing3)`. If such assertion passes, we say that the integrity of the object `ing1+ing2+ing3` has not been tampered with. This is the determinism mechanics.