Account
Last updated
Last updated
Zkopru account has 64 bytes address and is encoded with Base58Check algorithm. To understand how the Zkopru account works, you must know how the "viewing key" and the "spending key" work in Zkopru.
For compliance compatibility, Zkopru supports a viewing key system like ZCash. The encrypted memo field of a transaction includes private data that can decode the transaction details. Viewing key n
, which is also a nullifier seed, is used to generate the public viewing key N = n*G
where G
is a constant generator EC point. With the public viewing key, the transaction sender makes an ephemeral shared key using ECDH, encrypts the transaction secrets, and puts them into the transaction's memo field. The latter 32 bytes of the total 64 bytes address stands for the public viewing key here.
The viewing key n
also works as a seed value to generate the nullifiers to nullify the owner's UTXOs. Therefore, if Alice knows Bob's n
, Alice can track the transactions by decoding the nullifiers and decrypting the memo field.
To prevent users from losing their keys, Zkopru derives a private spending key p
from the Ethereum account's private key and then derive the nullifier seed from the p
. And then, Zkopru uses p
for EdDSA to verify the ownership of a UTXO to spend. Please note that a UTXO is a hash of poseidon(S, data, salt)
. It means that Zkopru uses S
, which contains n
, for its commitment in the commitment-nullifier scheme.
Key | Size | How to get | Where to use |
Master seed | 32 bytes | Randomly generated | Recover keys |
Ethereum private key | 32 bytes | Derived from the master seed with BIP39 | Layer1 ECDSA |
Ethereum public address | 20 bytes | Derived from the Ethereum private key | Layer 1 interactions |
| 254 bits | Derived from the Ethereum private key | Layer2 EdDSA |
| 254 bits | Poseidon(p*G, n) | Commitment & ownership |
| 254 bit | Derived from the Zkopru private key | Viewing txs & creating nullifiers |
| 32 bytes | N = n*G | Generating shared key(ECDH) |
Zkopru public address | 64 bytes | Concatenation of | Layer 2 interactions |