> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mojdelez.si/llms.txt
> Use this file to discover all available pages before exploring further.

# EntropyOracle

> Zbiranje naključnosti iz PulseChain validatorjev.

## Namen

`EntropyOracle` periodično zapisuje naključnost, pridobljeno iz PulseChain validatorjev prek `block.prevrandao`. Vsak zapis je shranjen z `entropyHash`, iz katerega se izračuna `nonce`, uporabljen pri gradnji commitmenta za mint.

## Kako deluje

* Oracle servis (Node.js, ethers v6) teče kot **cron na Neoserv strežniku**.
* Mainnet: commit **1×/dan** (cron ob 3:00).
* Testnet: commit **vsakih \~10 min** (cron).
* Posodobitev kode: `scp` skript na Neoserv (brez samodejnega deploya).

## Izračun nonce

```js theme={null}
// r_field = BN254 scalar field
const r_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
const nonce = BigInt(rec.entropyHash) % r_field;
```

## Commitment

Commitment, ki ga registrira UORS in ga stranka dokaže z ZK, je:

```
commitment = Poseidon2([pk, nonce])
```

kjer je `pk` zasebni ključ, izpeljan iz 12 besed (`wordsToPrivateKey`), `nonce` pa izhaja iz zadnjega oracle zapisa.

<Warning>
  Če RPC vrne `null` za blok (`Cannot read properties of null (reading 'prevRandao')`), oracle samodejno nadaljuje — to ni kritično.
</Warning>
