jubjub.lisp 992 B

123456789101112131415161718192021222324252627
  1. (def! D "0x2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1")
  2. (def! ONE "0x0000000000000000000000000000000000000000000000000000000000000001")
  3. (def! jj-add (fn* [x1 y1 x2 y2] (
  4. (def! U (mul (add (x1 y1)) (add (x2 y2))))
  5. (enforce (add-lc0 (x1 y1)) (add-lc1 (x2 y2)) (add-lc2 U))
  6. (def! A (mul (x2 x1)))
  7. (def! B (mul (x2 y1)))
  8. (def! C (mul (ONE A)))
  9. (enforce (add-coeff-lc0 (D A)) (add-lc1 B) (add-lc2 C))
  10. (def! Px (div (add A B) (add C_ONE C)))
  11. (enforce (add-one-lc0) (sub-lc0 C) (add-lc1 Px) (add-lc2 (A B)))
  12. (def! Py (div (sub U A B) (sub C_ONE C)))
  13. (enforce (add-one-lc0) (sub-lc0 C) (add-lc1 Py) (add-lc2 (U A B)))
  14. (Px Py)
  15. )))
  16. ;; (def input_spend (contract x1 y1 x2 y2) (
  17. ;; (def P (jjadd (x1 y1 x2 y2)))
  18. ;; (enforce
  19. ;; (add_lc0 Px)
  20. ;; (add_lc1_one)
  21. ;; (add_lc2 Px))
  22. ;; (enforce
  23. ;; (add_lc0 Py)
  24. ;; (add_lc1_one)
  25. ;; (add_lc2 Py))
  26. ;; )