jubjub.lisp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. (def C_D (const "0x2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1"))
  2. (def C_ONE (const "0x0000000000000000000000000000000000000000000000000000000000000001"))
  3. (def jjadd (fn x1 y1 x2 y2) (
  4. (def U (mul (add (x1 y1)) (add (x2 y2))))
  5. (enforce
  6. (add_lc0 (x1 y1))
  7. (add_lc1 (x2 y2))
  8. (add_lc2 U))
  9. (def A (mul (x2 x1)))
  10. (def B (mul (x2 y1)))
  11. (def C (mul (C_ONE A)))
  12. (enforce
  13. (add_coeff_lc0 (C_D A))
  14. (add_lc1 B)
  15. (add_lc2 C))
  16. (def Px
  17. (div (add A B)
  18. (add C_ONE C)))
  19. (enforce
  20. (add_one_lc0)
  21. (sub_lc0 C)
  22. (add_lc1 Px)
  23. (add_lc2 (A B)))
  24. (def Py
  25. (div (sub U A B)
  26. (sub C_ONE C)))
  27. (enforce
  28. (add_one_lc0)
  29. (sub_lc0 C)
  30. (add_lc1 Py)
  31. (add_lc2 (U A B)))
  32. (Px Py)
  33. )
  34. (def input_spend (contract x1 y1 x2 y2) (
  35. (def P (jjadd (x1 y1 x2 y2)))
  36. (enforce
  37. (add_lc0 Px)
  38. (add_lc1_one)
  39. (add_lc2 Px))
  40. (enforce
  41. (add_lc0 Py)
  42. (add_lc1_one)
  43. (add_lc2 Py))
  44. )