Provably Fair Mechanism
Merkle Tree with On-chain Merkle Root Commitment
This section explains the provably fair mechanism behind Crypta. The system ensures that every price movement is fair, transparent and cryptographically verifiable.
Crypta generates synthetic price movements from randomness that no single party controls. Each movement is produced by combining two independent sources:
Internal secret: Generated inside a secure enclave and cryptographically committed on-chain (Merkle Root) before any price movement is released.
External Public Salt: The latest Solana block hash for each ticks — which did not exist when the Merkle Root commitment was made.
Because the internal half is locked in first and the external half is beyond anyone's control, changing every second, neither Crypta nor any other party can steer the outcome and every tick can be independently verified.
Epochs
Randomness is organised into epochs. An epoch is a fixed-length window with a fixed set of assets..
Epoch Duration
3,600 seconds (1 hour)
Tick Interval
1,000 ms (1 tick per second)
Assets per Epoch
Variable
At the start of every epoch the enclave generates all randomness for the entire epoch for all assets in advance, commits to it publicly on-chain, and only then begins releasing each assets random hash one tick at a time.qa
Merkle Tree
At the start of each epoch, the enclave generates a random 256 bit secret to derive 3,600 hashes for each asset. Each asset's values are derived from an independent key, so one asset's entropy reveals nothing about another's and nothing carries over between epochs.
Pre-computing the entropy is only half the guarantee. Crypta must also prove it did not change any value afterwards. To do this, the enclave builds a Merkle Tree.
Every secret hash is hashed once to form a leaf:
These leaves are then used to construct the Merkle Tree, with each node built bottom-up:
The single 32-byte value at the top of the tree is the Merkle Root - which get committed on-chain before the start of the epoch. Changing any one of the secret hashes changes the Merkle Root completely.
Merkle Root Commitment
Before the first tick is released, the enclave publishes:
The epoch ID (UUID)
The Merkle Root
The total ticks
The number of assets
This commitment is published on-chain to Solana so the commitment is timestamped by the blockchain and cannot be backdated.
This ordering is the heart of the guarantee: (1) the commitment is public before any randomness is revealed, and (2) before the external salt exists.
Solana Block Hash Salt
Crypta incorporates the latest Solana block hash to each new tick as the external and unpredictable salt.
This salt introduces independent entropy beyond the control of any party - including the Crypta team. It is combined with the pre-committed secret hash to generate price movements, ensuring that outcomes cannot be predicted or manipulated.
Solana produces a new block every ~400 ms meaning each new tick receives its own independent hash.
At tick t, the latest available Solana block hash (BHt)is used as that tick's salt.
Provably Fair Entropy
The two hashes are combined with a keyed hash. The committed secret becomes the key; the public block hash becomes the message:
Crypta
The secret hash (Easset,t)
Committed to the Merkle root before BHt existed
Solana Validators
The public block hash (BHt)
Do not know E, so cannot predict the output
Everyone else
Neither
Can verify everything after each tick
A single bit changed anywhere in either input produces a completely unrelated 32-byte result.
Price Movement Generation
Each tick's 32-byte PFE output is converted into the random variables consumed by Crypta's price model.
Two separate portions of the PFE are used:
Bytes
0:8generate the normally distributed noise variable.Bytes
8:16generate the Bernoulli jump indicator.
Extract Uniform Random values
The first 8 bytes of the PFE hash are read as big-endian unsigned 64-bit integer and normalised:
The result is clamped to (ε, 1 - ε) with ε=10-10, so its never exactly 0 or 1.
Eight bytes give roughly 1.8 × 10 19 distinct values — far more resolution than any price model requires.
Price Movement (ABM)
The random variables are then applied to the synthetic asset's price based on the Arithmetic Brownian Motion (ABM) formula below. One movement per second.
Where:
Pt = current price
Pt+1 = next tick's price
μ = drift parameter
σ = standard deviation
Zt = standard-normal noise
p = probability of a jump
Bt = Bernoulli jump indicator
Δt=1 second
Verifying Fairness
After each hash is used, it is immediately revealed to the public, along with the Merkle Proof allowing anyone to verify the results and that the hash is part of the original committed Merkle Root. This provides a constant stream of tamper-proof, time-released randomness.
Last updated