Namen
ZKVerifier omogoča zasebno izdajo: stranka dokaže, da pozna 12 besed (in s tem zasebni ključ), vezane na registrirano sredstvo, ne da bi ključ razkrila. Uporablja Groth16 (snarkjs) s Poseidon hash funkcijo (circomlib).
Tok izdaje
1
Registracija (UORS)
Overovitelj pokliče
registerCommitment(commitment). Commitment je Poseidon2([pk, nonce]).2
Izpeljava ključa (stranka)
Iz 12 besed:
pk = wordsToPrivateKey(words).3
Iskanje nonce
findMatchingNonce(pk) preišče oracle zapise in najde nonce, pri katerem se izračunani commitment ujema z registriranim.4
ZK dokaz
snarkjs.groth16.fullProve(...) ustvari dokaz za vhode: privateKey, assetValue, entropyNonce, assetCommitment, minValue.5
Mint
verifyAndMint(proof, ..., amount) preveri dokaz in izda RWA žetone. Commitment se označi kot uporabljen (commitmentUsed).Enkratna uporaba
Vsak commitment je enkraten — po uspešnem mintucommitmentUsed prepreči ponovno uporabo iste kode.