Skip to main content

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 mintu commitmentUsed prepreči ponovno uporabo iste kode.
findMatchingNonce preišče vse oracle zapise (en RPC klic na zapis), zato je lahko počasen. Za hitrejši mint se splača shraniti nonce/indeks skupaj s kodo.

Znane rešitve