types.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. TYPE_ID_BASE = 0
  2. TYPE_ID_SCALAR = 1
  3. TYPE_ID_EC_POINT = 2
  4. TYPE_ID_EC_FIXED_POINT = 3
  5. TYPE_ID_MERKLE_PATH = 4
  6. # This is so we know the number of TYPE_ID stacks
  7. TYPE_ID_LAST = 5
  8. allowed_types = {
  9. "Base": TYPE_ID_BASE,
  10. "Scalar": TYPE_ID_SCALAR,
  11. "EcFixedPoint": TYPE_ID_EC_FIXED_POINT,
  12. "MerklePath": TYPE_ID_MERKLE_PATH,
  13. }
  14. # Used for debug and error messages
  15. type_id_to_name = dict((value, key) for key, value in allowed_types.items())
  16. FUNC_ID_POSEIDON_HASH = 0
  17. FUNC_ID_ADD = 1
  18. FUNC_ID_CONSTRAIN_INSTANCE = 2
  19. FUNC_ID_EC_MUL_SHORT = 3
  20. FUNC_ID_EC_MUL = 4
  21. FUNC_ID_EC_ADD = 5
  22. FUNC_ID_EC_GET_X = 6
  23. FUNC_ID_EC_GET_Y = 7
  24. FUNC_ID_CALCULATE_MERKLE_ROOT = 8
  25. class FuncFormat:
  26. def __init__(self, func_id, return_type_ids, param_types):
  27. self.func_id = func_id
  28. self.return_type_ids = return_type_ids
  29. self.param_types = param_types
  30. def total_arguments(self):
  31. return len(self.return_type_ids) + len(self.param_types)
  32. function_formats = {
  33. "poseidon_hash": FuncFormat(
  34. # Funcion ID Type ID Parameter types
  35. FUNC_ID_POSEIDON_HASH, [TYPE_ID_BASE], [TYPE_ID_BASE,
  36. TYPE_ID_BASE]
  37. ),
  38. "add": FuncFormat(
  39. FUNC_ID_ADD, [TYPE_ID_BASE], [TYPE_ID_BASE,
  40. TYPE_ID_BASE]
  41. ),
  42. "constrain_instance": FuncFormat(
  43. FUNC_ID_CONSTRAIN_INSTANCE, [], [TYPE_ID_BASE]
  44. ),
  45. "ec_mul_short": FuncFormat(
  46. FUNC_ID_EC_MUL_SHORT, [TYPE_ID_EC_POINT], [TYPE_ID_BASE,
  47. TYPE_ID_EC_FIXED_POINT]
  48. ),
  49. "ec_mul": FuncFormat(
  50. FUNC_ID_EC_MUL, [TYPE_ID_EC_POINT], [TYPE_ID_SCALAR,
  51. TYPE_ID_EC_FIXED_POINT]
  52. ),
  53. "ec_add": FuncFormat(
  54. FUNC_ID_EC_ADD, [TYPE_ID_EC_POINT], [TYPE_ID_EC_POINT,
  55. TYPE_ID_EC_POINT]
  56. ),
  57. "ec_get_x": FuncFormat(
  58. FUNC_ID_EC_GET_X, [TYPE_ID_BASE], [TYPE_ID_EC_POINT]
  59. ),
  60. "ec_get_y": FuncFormat(
  61. FUNC_ID_EC_GET_Y, [TYPE_ID_BASE], [TYPE_ID_EC_POINT]
  62. ),
  63. "calculate_merkle_root": FuncFormat(
  64. FUNC_ID_CALCULATE_MERKLE_ROOT,
  65. [TYPE_ID_BASE], [TYPE_ID_MERKLE_PATH,
  66. TYPE_ID_BASE]
  67. ),
  68. }
  69. func_id_to_name = dict((fmt.func_id, key) for key, fmt
  70. in function_formats.items())