burn.zk 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # :set syntax=zk
  2. # :source scripts/zk.vim
  3. constant EcFixedPoint VALUE_COMMIT_VALUE
  4. constant EcFixedPoint VALUE_COMMIT_RANDOM
  5. constant EcFixedPoint SPEND_AUTH_G
  6. contract Burn {
  7. Base secret
  8. Base serial
  9. MerklePath path
  10. Base leaf
  11. Base value
  12. Base asset
  13. Scalar value_blind
  14. Scalar asset_blind
  15. Scalar sig_secret
  16. }
  17. circuit Burn {
  18. # nullifier = Hash(secret, serial)
  19. poseidon_hash nullifier secret serial
  20. constrain_instance nullifier
  21. # root = calculate_root(path, leaf)
  22. calculate_merkle_root root path leaf
  23. constrain_instance root
  24. # value_commit = PedersenCommit(value, value_blind);
  25. ec_mul_short vcv value VALUE_COMMIT_VALUE
  26. ec_mul vcr value_blind VALUE_COMMIT_RANDOM
  27. ec_add value_commit vcv vcr
  28. ec_get_x x value_commit
  29. ec_get_y y value_commit
  30. constrain_instance x
  31. constrain_instance y
  32. # asset_commit = PedersenCommit(asset, asset_blind);
  33. ec_mul_short acv asset VALUE_COMMIT_VALUE
  34. ec_mul acr asset_blind VALUE_COMMIT_RANDOM
  35. ec_add asset_commit acv acr
  36. ec_get_x x asset_commit
  37. ec_get_y y asset_commit
  38. constrain_instance x
  39. constrain_instance y
  40. # spend_auth_public = sig_secret * SPEND_AUTH_G
  41. ec_mul spend_auth_public sig_secret SPEND_AUTH_G
  42. ec_get_x sx spend_auth_public
  43. ec_get_y sy spend_auth_public
  44. constrain_instance sx
  45. constrain_instance sy
  46. # return (nullifier, root, value_commit, value_blind);
  47. }