vm_export_rust.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from vm import VariableType
  2. def to_initial_caps(snake_str):
  3. components = snake_str.split("_")
  4. return "".join(x.title() for x in components)
  5. def display(contract):
  6. indent = " " * 4
  7. print(r"""use super::vm::{ZKVirtualMachine, CryptoOperation, AllocType, ConstraintInstruction};
  8. pub fn load_zkvm() -> ZKVirtualMachine {
  9. ZKVirtualMachine {
  10. alloc: vec![""")
  11. for symbol, variable in contract.alloc.items():
  12. print("%s // %s" % (indent * 3, symbol))
  13. if variable.type.name == VariableType.PRIVATE.name:
  14. typestring = "Private"
  15. elif variable.type.name == VariableType.PUBLIC.name:
  16. typestring = "Public"
  17. else:
  18. assert False
  19. print("%s(AllocType::%s, %s)," % (indent * 3, typestring,
  20. variable.index))
  21. print("%s]," % (indent * 2))
  22. print("%sops: vec![" % (indent * 2))
  23. for op in contract.ops:
  24. print("%s// %s" % (indent * 3, op.line))
  25. print("%sCryptoOperation::%s(%s)," % (
  26. indent * 3,
  27. to_initial_caps(op.command),
  28. ", ".join(str(index) for index in op.args)
  29. ))
  30. print("%s]," % (indent * 2))
  31. print("%sconstraints: vec![" % (indent * 2))
  32. for constraint in contract.constraints:
  33. args_part = ""
  34. if constraint.args:
  35. print("%s// %s" % (indent *3, constraint.args_comment()))
  36. args_part = ", ".join(str(index) for index in constraint.args)
  37. args_part = "(%s)" % args_part
  38. print("%sConstraintInstruction::%s%s," % (
  39. indent * 3,
  40. to_initial_caps(constraint.command),
  41. args_part
  42. ))
  43. print(r""" ],
  44. aux: vec![],
  45. params: None,
  46. verifying_key: None,
  47. }
  48. }""")