Files
darkfi/proof/burn.zk
2021-10-30 22:12:33 +02:00

57 lines
1.4 KiB
Plaintext

# :set syntax=zk
# :source scripts/zk.vim
constant EcFixedPoint VALUE_COMMIT_VALUE
constant EcFixedPoint VALUE_COMMIT_RANDOM
constant EcFixedPoint SPEND_AUTH_G
contract Burn {
Base secret
Base serial
MerklePath path
Base leaf
Base value
Base asset
Scalar value_blind
Scalar asset_blind
Scalar sig_secret
}
circuit Burn {
# nullifier = Hash(secret, serial)
poseidon_hash nullifier secret serial
constrain_instance nullifier
# root = calculate_root(path, leaf)
calculate_merkle_root root path leaf
constrain_instance root
# value_commit = PedersenCommit(value, value_blind);
ec_mul_short vcv value VALUE_COMMIT_VALUE
ec_mul vcr value_blind VALUE_COMMIT_RANDOM
ec_add value_commit vcv vcr
ec_get_x x value_commit
ec_get_y y value_commit
constrain_instance x
constrain_instance y
# asset_commit = PedersenCommit(asset, asset_blind);
ec_mul_short acv asset VALUE_COMMIT_VALUE
ec_mul acr asset_blind VALUE_COMMIT_RANDOM
ec_add asset_commit acv acr
ec_get_x x asset_commit
ec_get_y y asset_commit
constrain_instance x
constrain_instance y
# spend_auth_public = sig_secret * SPEND_AUTH_G
ec_mul spend_auth_public sig_secret SPEND_AUTH_G
ec_get_x sx spend_auth_public
ec_get_y sy spend_auth_public
constrain_instance sx
constrain_instance sy
# return (nullifier, root, value_commit, value_blind);
}