tutorial.psm 737 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. constant one 0x0000000000000000000000000000000000000000000000000000000000000001
  2. contract tutorial_contract
  3. param w
  4. param a
  5. param b
  6. private m
  7. set m a
  8. mul m b
  9. # ab = m
  10. lc0_add a
  11. lc1_add b
  12. lc2_add m
  13. enforce
  14. # v = wab ...
  15. public v
  16. set v w
  17. mul v a
  18. mul v b
  19. # v = wab + a + b ...
  20. add v a
  21. add v b
  22. # v = wab + a + b - v'
  23. # v' = w(a + b)
  24. local vprime
  25. set vprime a
  26. add vprime b
  27. mul vprime w
  28. sub v vprime
  29. # w(m - a - b) = v - a - b
  30. lc0_add w
  31. lc1_add m
  32. lc1_sub a
  33. lc1_sub b
  34. lc2_add v
  35. lc2_sub a
  36. lc2_sub b
  37. enforce
  38. # Binary check that w^2 = w
  39. lc0_add w
  40. lc1_add w
  41. lc2_add w
  42. enforce
  43. end