pyth_utils.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import os
  2. import sys
  3. import subprocess
  4. PYTH=os.environ.get("PYTH", "./pyth")
  5. PYTH_KEY_STORE = os.environ.get("PYTH_KEY_STORE", "/home/pyth/.pythd")
  6. PYTH_PROGRAM_KEYPAIR = f"{PYTH_KEY_STORE}/program_key_pair.json"
  7. PYTH_PROGRAM_SO_PATH=os.environ.get("PYTH_PROGRAM_SO", "../target/oracle.so")
  8. PYTH_PUBLISHER_KEYPAIR = f"{PYTH_KEY_STORE}/publish_key_pair.json"
  9. PYTH_PUBLISHER_INTERVAL = float(os.environ.get("PYTH_PUBLISHER_INTERVAL", "5"))
  10. SOL_AIRDROP_AMT = 100
  11. SOL_RPC_HOST = "solana-devnet"
  12. SOL_RPC_PORT = 8899
  13. SOL_RPC_URL = f"http://{SOL_RPC_HOST}:{str(SOL_RPC_PORT)}"
  14. READINESS_PORT=os.environ.get("READINESS_PORT", "2000")
  15. # pretend we're set -e
  16. def run_or_die(args, die=True, **kwargs):
  17. args_readable = ' '.join(args)
  18. print(f"CMD RUN\t{args_readable}", file=sys.stderr)
  19. sys.stderr.flush()
  20. ret = subprocess.run(args, text=True, **kwargs)
  21. if ret.returncode is not 0:
  22. print(f"CMD FAIL {ret.returncode}\t{args_readable}", file=sys.stderr)
  23. out = ret.stdout if ret.stdout is not None else "<not captured>"
  24. err = ret.stderr if ret.stderr is not None else "<not captured>"
  25. print(f"CMD STDOUT\n{out}", file=sys.stderr)
  26. print(f"CMD STDERR\n{err}", file=sys.stderr)
  27. if die:
  28. sys.exit(ret.returncode)
  29. else:
  30. print(f"CMD DIE FALSE", file=sys.stderr)
  31. else:
  32. print(f"CMD OK\t{args_readable}", file=sys.stderr)
  33. sys.stderr.flush()
  34. return ret
  35. # Pyth boilerplate in front of run_or_die
  36. def pyth_run_or_die(subcommand, args=[], debug=False, confirm=True, **kwargs):
  37. return run_or_die([PYTH, subcommand]
  38. + args
  39. + (["-d"] if debug else [])
  40. + ([] if confirm else ["-n"]) # Note: not all pyth subcommands accept -n
  41. + ["-k", PYTH_KEY_STORE]
  42. + ["-r", SOL_RPC_HOST]
  43. + ["-c", "finalized"], **kwargs)
  44. # Solana boilerplate in front of run_or_die
  45. def sol_run_or_die(subcommand, args=[], **kwargs):
  46. return run_or_die(["solana", subcommand]
  47. + args
  48. + ["--url", SOL_RPC_URL], **kwargs)