prepare_multisig.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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_VAULT_EXT_AUTHORITY_KEY_PATH = MESH_KEY_DIR + "external_authority.json"
  12. ALICE_KEY_PATH = MESH_KEY_DIR + "member_alice.json"
  13. BOB_KEY_PATH = MESH_KEY_DIR + "member_bob.json"
  14. create_key_addr = "73UuSY2yXat7h7T49MMGg8TiHPqJJKKVc33DmC4b41Hf" # The person that instantiated the multisig on mainnet used this create key, it never needs to sign but we're using it to match mainnet
  15. ext_authority_addr = sol_run_or_die("address", ["--keypair", MESH_VAULT_EXT_AUTHORITY_KEY_PATH], capture_output=True).stdout.strip()
  16. alice_addr = sol_run_or_die("address", ["--keypair", ALICE_KEY_PATH], capture_output=True).stdout.strip()
  17. bob_addr = sol_run_or_die("address", ["--keypair", BOB_KEY_PATH], capture_output=True).stdout.strip()
  18. # wrap run_or_die in msg builder common cli args
  19. def msg_builder_run_or_die(args = [], debug=False, **kwargs):
  20. """
  21. Message builder boilerplate in front of run_or_die()
  22. """
  23. return run_or_die(
  24. MULTISIG_SCRIPT_CMD_PREFIX + args, cwd=MULTISIG_SCRIPT_DIR, debug=debug, **kwargs)
  25. # create a Multisig Vault
  26. res = msg_builder_run_or_die([
  27. "init-vault",
  28. "-k", create_key_addr,
  29. "-x", ext_authority_addr,
  30. "-p", SOL_PAYER_KEYPAIR,
  31. "-c", "localdevnet",
  32. "-r", SOL_RPC_URL,
  33. "-i", f"{alice_addr},{bob_addr}",
  34. "-t", "1", # 1/3 threshold
  35. ],
  36. capture_output=True, debug=True, die=False)
  37. if res.returncode == errno.EEXIST:
  38. print("WARNING: Skipping vault creation and testing, received EEXIST from script", file=sys.stderr)
  39. elif res.returncode != 0:
  40. print(f"ERROR: unexpected failure with code {res.returncode}", file=sys.stderr)
  41. sys.exit(res.returncode)
  42. else:
  43. print("Vault created, starting test routine", file=sys.stderr)
  44. # TODO(2022-12-08): Add test scenarios
  45. sys.stderr.flush()
  46. readiness()