macro-test.lisp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. (load-file "util.lisp")
  2. (defmacro! zk-square (fn* [var] (
  3. (let* [v1 (gensym)
  4. v2 (gensym)] (
  5. `(alloc ~v1 ~var)
  6. `(def! output (alloc-input ~v2 (square ~var)))
  7. `(enforce
  8. (scalar::one ~v1)
  9. (scalar::one ~v1)
  10. (scalar::one ~v2)
  11. )
  12. `{ "v2" output }
  13. )
  14. ))
  15. ))
  16. (defmacro! zk-mul (fn* [val1 val2] (
  17. (let* [v1 (gensym)
  18. v2 (gensym)
  19. var (gensym)] (
  20. `(alloc ~v1 ~val1)
  21. `(alloc ~v2 ~val2)
  22. `(def! result (alloc-input ~var (* ~val1 ~val2)))
  23. `(enforce
  24. (scalar::one ~v1)
  25. (scalar::one ~v2)
  26. (scalar::one ~var)
  27. )
  28. `{ "result" result }
  29. )
  30. ))
  31. ))
  32. (defmacro! zk-witness (fn* [val1 val2] (
  33. (let* [u2 (gensym)
  34. v2 (gensym)
  35. u2v2 (gensym)
  36. EDWARDS_D (gensym)
  37. result (gensym)] (
  38. `(def! ~EDWARDS_D (alloc-const ~EDWARDS_D (scalar "2a9318e74bfa2b48f5fd9207e6bd7fd4292d7f6d37579d2601065fd6d6343eb1")))
  39. `(def! ~u2 (alloc ~u2 (get (nth (nth (zk-square ~val1) 0) 3) "v2")))
  40. `(def! ~v2 (alloc ~v2 (get (nth (nth (zk-square ~val2) 0) 3) "v2")))
  41. `(def! result (alloc-input ~u2v2 (get (last (last (zk-mul ~u2 ~v2))) "result")))
  42. `(enforce
  43. ((scalar::one::neg ~u2) (scalar::one ~v2))
  44. (scalar::one cs::one)
  45. ((scalar::one cs::one) (~EDWARDS_D ~u2v2))
  46. )
  47. `{ "result" result }
  48. )
  49. ))
  50. ))
  51. (def! param1 (scalar 3))
  52. (def! param2 (scalar 9))
  53. (def! param-u (scalar "6800f4fa0f001cfc7ff6826ad58004b4d1d8da41af03744e3bce3b7793664337"))
  54. (def! param-v (scalar "6d81d3a9cb45dedbe6fb2a6e1e22ab50ad46f1b0473b803b3caefab9380b6a8b"))
  55. (prove
  56. (
  57. ;; (println (zk-square param1))
  58. ;; (println (zk-mul param1 param2))
  59. (println 'witness (zk-witness param-u param-v))
  60. )
  61. )