Prover specification
The prover specification (variables, types, general structure)
For each SuperGenius set of keys, the prover will generate a KDF, deriving a new shared secret to be used by the Verifier and Revealer. This secret can be used to derive a new Bitcoin/Ethereum address to avoid using the original address.
As mentioned in the KDF explanation, the account key will be composed of the currency address and the SuperGenius KDF private key:
struct{
uint256 publicAddress; ///< Public BTC/ETH address
uint256 KDFPrivateKey; ///< KDF private key
std::Array<uint8> proof; ///< proof of correctly created account
} EncryptedAccount;
The encryption of the data would then be verified in zkSnark and stored in SuperGenius in CRDT, under /Accounts/<new KDF public key>/EncryptedAccount.
The transaction's structure will hold the number of transactions, GNUS token IDs, an El Gamal encrypted amount field, and a proof or an aggregate proof (folding, etc):
struct {
uint256 nTransactions; ///< Non-encrypted number of tokenIDs and Amounts
uint256 tokenID[]; ///< Non-encrypted GNUS ERC1155 token IDs (could be child tokens array)
uint256 Amount[]; ///< Exponential El Gamal encrypted amounts
std::Array<uint8> proof; ///< proof of valid account transfer
} Transactions;
Last updated