Przeglądaj źródła

add merkle_path to compiler and the calculate_root function

narodnik 4 lat temu
rodzic
commit
fa4476eda1
2 zmienionych plików z 11 dodań i 4 usunięć
  1. 2 2
      script/zkas.py
  2. 9 2
      script/zkas/types.py

+ 2 - 2
script/zkas.py

@@ -198,8 +198,8 @@ class DynamicTracer:
 
                 stack_type_id = stack[variable]
                 if stack_type_id != type_id:
-                    type_name = type_id_to_name[type]
-                    stack_type_name = type_id_to_name[stack_type]
+                    type_name = type_id_to_name[type_id]
+                    stack_type_name = type_id_to_name[stack_type_id]
                     raise CompileException(
     f"variable '{variable}' has incorrect type. "
     f"Found {type_name} but expected variable of "

+ 9 - 2
script/zkas/types.py

@@ -2,13 +2,15 @@ TYPE_ID_BASE                    = 0
 TYPE_ID_SCALAR                  = 1
 TYPE_ID_EC_POINT                = 2
 TYPE_ID_EC_FIXED_POINT          = 3
+TYPE_ID_MERKLE_PATH             = 4
 # This is so we know the number of TYPE_ID stacks
-TYPE_ID_LAST                    = 4
+TYPE_ID_LAST                    = 5
 
 allowed_types = {
     "Base":                 TYPE_ID_BASE,
     "Scalar":               TYPE_ID_SCALAR,
-    "EcFixedPoint":         TYPE_ID_EC_FIXED_POINT
+    "EcFixedPoint":         TYPE_ID_EC_FIXED_POINT,
+    "MerklePath":           TYPE_ID_MERKLE_PATH,
 }
 # Used for debug and error messages
 type_id_to_name = dict((value, key) for key, value in allowed_types.items())
@@ -21,6 +23,7 @@ FUNC_ID_EC_MUL                  = 4
 FUNC_ID_EC_ADD                  = 5
 FUNC_ID_EC_GET_X                = 6
 FUNC_ID_EC_GET_Y                = 7
+FUNC_ID_CALCULATE_ROOT          = 8
 
 class FuncFormat:
 
@@ -63,6 +66,10 @@ function_formats = {
     "ec_get_y": FuncFormat(
         FUNC_ID_EC_GET_Y,       [TYPE_ID_BASE],     [TYPE_ID_EC_POINT]
     ),
+    "calculate_root": FuncFormat(
+        FUNC_ID_CALCULATE_ROOT, [TYPE_ID_BASE],     [TYPE_ID_MERKLE_PATH,
+                                                     TYPE_ID_BASE]
+    ),
 }
 
 func_id_to_name = dict((fmt.func_id, key) for key, fmt