prepare_multisig.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # This script prepares a local Squads multisig deployment for use with
  2. # the multisig-wh-message-builder
  3. import errno
  4. import os
  5. import sys
  6. from pyth_utils import *
  7. MULTISIG_SCRIPT_CMD_PREFIX = "npm run start --".split(" ")
  8. MULTISIG_SCRIPT_DIR = os.environ.get("MULTISIG_SCRIPT_DIR", "/root/pyth/multisig-wh-message-builder")
  9. MESH_KEY_DIR = "/solana-secrets/squads/"
  10. MESH_PROGRAM_ADDR = "SMPLVC8MxZ5Bf5EfF7PaMiTCxoBAcmkbM2vkrvMK8ho"
  11. MESH_CREATE_KEY_PATH = MESH_KEY_DIR + "create_key.json"
  12. MESH_VAULT_EXT_AUTHORITY_KEY_PATH = MESH_KEY_DIR + "external_authority.json"
  13. ALICE_KEY_PATH = MESH_KEY_DIR + "member_alice.json"
  14. BOB_KEY_PATH = MESH_KEY_DIR + "member_bob.json"
  15. CAROL_KEY_PATH = MESH_KEY_DIR + "member_carol.json"
  16. create_key_addr = sol_run_or_die("address", ["--keypair", MESH_CREATE_KEY_PATH], capture_output=True).stdout.strip()
  17. ext_authority_addr = sol_run_or_die("address", ["--keypair", MESH_VAULT_EXT_AUTHORITY_KEY_PATH], capture_output=True).stdout.strip()
  18. alice_addr = sol_run_or_die("address", ["--keypair", ALICE_KEY_PATH], capture_output=True).stdout.strip()
  19. bob_addr = sol_run_or_die("address", ["--keypair", BOB_KEY_PATH], capture_output=True).stdout.strip()
  20. carol_addr = sol_run_or_die("address", ["--keypair", CAROL_KEY_PATH], capture_output=True).stdout.strip()
  21. # wrap run_or_die in msg builder common cli args
  22. def msg_builder_run_or_die(args = [], debug=False, **kwargs):
  23. """
  24. Message builder boilerplate in front of run_or_die()
  25. """
  26. return run_or_die(
  27. MULTISIG_SCRIPT_CMD_PREFIX + args, cwd=MULTISIG_SCRIPT_DIR, debug=debug, **kwargs)
  28. # create a Multisig Vault
  29. res = msg_builder_run_or_die([
  30. "init-vault",
  31. "-k", create_key_addr,
  32. "-x", ext_authority_addr,
  33. "-p", SOL_PAYER_KEYPAIR,
  34. "-c", "localdevnet",
  35. "-r", SOL_RPC_URL,
  36. "-i", f"{alice_addr},{bob_addr},{carol_addr}",
  37. "-t", "2", # 2/3 threshold
  38. ],
  39. capture_output=True, debug=True, die=False)
  40. if res.returncode == errno.EEXIST:
  41. print("WARNING: Skipping vault creation and testing, received EEXIST from script", file=sys.stderr)
  42. elif res.returncode != 0:
  43. print(f"ERROR: unexpected failure with code {res.returncode}", file=sys.stderr)
  44. sys.exit(res.returncode)
  45. else:
  46. print("Vault created, starting test routine", file=sys.stderr)
  47. # TODO(2022-12-08): Add test scenarios
  48. sys.stderr.flush()
  49. readiness()