types.py 2.4 KB

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