mint.zk 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # :set syntax=zk
  2. # :source scripts/zk.vim
  3. constant EcFixedPoint VALUE_COMMIT_VALUE
  4. constant EcFixedPoint VALUE_COMMIT_RANDOM
  5. contract Mint {
  6. Base pub_x
  7. Base pub_y
  8. Base value
  9. Base asset
  10. Base serial
  11. Base coin_blind
  12. Scalar value_blind
  13. Scalar asset_blind
  14. }
  15. circuit Mint {
  16. # coin = Hash(pub_x, pub_y, value, asset, serial, coin_blind);
  17. poseidon_hash C1 pub_x pub_y
  18. poseidon_hash C2 value asset
  19. poseidon_hash C3 serial coin_blind
  20. add C12 C1 C2
  21. add C C12 C3
  22. constrain_instance C
  23. # value_commit = PedersenCommit(value, value_blind);
  24. ec_mul_short vcv value VALUE_COMMIT_VALUE
  25. ec_mul vcr value_blind VALUE_COMMIT_RANDOM
  26. ec_add value_commit vcv vcr
  27. ec_get_x x value_commit
  28. ec_get_y y value_commit
  29. constrain_instance x
  30. constrain_instance y
  31. # asset_commit = PedersenCommit(asset, asset_blind);
  32. ec_mul_short acv asset VALUE_COMMIT_VALUE
  33. ec_mul acr asset_blind VALUE_COMMIT_RANDOM
  34. ec_add asset_commit acv acr
  35. ec_get_x x asset_commit
  36. ec_get_y y asset_commit
  37. constrain_instance x
  38. constrain_instance y
  39. # return (coin, value_commit, value_blind);
  40. }