Namen
ZKVerifier omogoča zasebno mintanje: stranka dokaže, da pozna 6 besed (in s tem zasebni ključ), vezane na registrirano sredstvo, ne da bi ključ razkrila. Uporablja Groth16 (snarkjs) s Poseidon hash funkcijo (circomlib).
Tok mintanja
Registracija (UORS)
Overovitelj pokliče
registerCommitment(commitment). Commitment je Poseidon2([pk, nonce]).Iskanje nonce
findMatchingNonce(pk) preišče oracle zapise in najde nonce, pri katerem se izračunani commitment ujema z registriranim.ZK dokaz
snarkjs.groth16.fullProve(...) ustvari dokaz za vhode: privateKey, assetValue, entropyNonce, assetCommitment, minValue.Enkratna uporaba
Vsak commitment je enkraten — po uspešnem mintucommitmentUsed prepreči ponovno uporabo iste kode.
Znane rešitve
| Problem | Rešitev |
|---|---|
quoteBuy vrača 0x / revert | Izračunaj client-side: amtWei * priceRaw / 1e18 |
| 6-decimalna cena za 18-dec token | Kontrakt vedno pričakuje ceno v 1e6 formatu |
| Mint “obstane” | Commitment ni registriran ali nonce ni iz oracle zapisa — naredi čist potek (generiraj → registriraj → mintaj takoj) |
