narodnik 5 жил өмнө
parent
commit
e2c77a2329
3 өөрчлөгдсөн 52 нэмэгдсэн , 3 устгасан
  1. 7 3
      proofs/vm.pism
  2. 32 0
      scripts/jubjub.py
  3. 13 0
      scripts/modp.py

+ 7 - 3
proofs/vm.pism

@@ -1,3 +1,5 @@
+constant v = 123
+
 contract input_spend
     param x
     private x2
@@ -7,19 +9,21 @@ start
     set x2 x
     mul x2 x
 
-    set x3 x2
-    mul x3 x
-constraint
     lc0_add x
     lc1_add x
     lc2_add x2
     enforce
 
+    set x3 x2
+    mul x3 x
+
     lc0_add x2
     lc1_add x
     lc2_add x3
     enforce
 
+    set input x3
+
     lc0_add input
     lc1_add 1
     lc2_add x3

+ 32 - 0
scripts/jubjub.py

@@ -0,0 +1,32 @@
+from finite_fields.modp import IntegersModP
+
+q = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
+modq = IntegersModP(q)
+
+a = modq(-1)
+d = -(modq(10240)/modq(10241))
+params = (a, d)
+
+def is_jubjub(params, x, y):
+    a, d = params
+
+    return a * x**2 + y**2 == 1 + d * x**2 * y**2
+
+def add(params, point_1, point_2):
+    # From here: https://z.cash/technology/jubjub/
+
+    a, d = params
+
+    x1, y1 = point_1
+    x2, y2 = point_2
+
+    x3 = (x1 * y2 + y1 * x2) / (1 + d * x1 * x2 * y1 * y2)
+    y3 = (y1 * y2 + x1 * x2) / (1 - d * x1 * x2 * y1 * y2)
+
+    return (x3, y3)
+
+x = 0x15a36d1f0f390d8852a35a8c1908dd87a361ee3fd48fdf77b9819dc82d90607e
+y = 0x015d8c7f5b43fe33f7891142c001d9251f3abeeb98fad3e87b0dc53c4ebf1891
+
+print(is_jubjub(params, x, y))
+

+ 13 - 0
scripts/modp.py

@@ -11,3 +11,16 @@ inv2_bellman = 0x39f6d3a994cebea4199cec0404d0ec02a9ded2017fff2dff7fffffff8000000
 assert inv2.n == inv2_bellman
 assert (2 * inv2.n) % q == 1
 
+# Futures contract calculation
+multiplier = modq(1)
+quantity = modq(100)
+entry_price = modq(10000)
+exit_price = modq(15000)
+
+initial_margin = multiplier * quantity
+print("initial margin =", initial_margin)
+price_return = exit_price * entry_price.inverse()
+print("R =", price_return)
+pnl = initial_margin - (initial_margin * exit_price) * entry_price.inverse()
+print("PNL =", pnl)
+