upgrade_evm_pricefeed_contracts.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import yargs from "yargs";
  2. import { hideBin } from "yargs/helpers";
  3. import { DefaultStore } from "../src/node/utils/store";
  4. import { loadHotWallet } from "../src/node/utils/governance";
  5. import { toPrivateKey } from "../src/core/base";
  6. import { readFileSync } from "fs";
  7. import {
  8. COMMON_UPGRADE_OPTIONS,
  9. getSelectedChains,
  10. makeCacheFunction,
  11. } from "./common";
  12. const CACHE_FILE = ".cache-upgrade-evm";
  13. const runIfNotCached = makeCacheFunction(CACHE_FILE);
  14. const parser = yargs(hideBin(process.argv))
  15. .usage(
  16. "Deploys a new PythUpgradable contract to a set of chains and creates a governance proposal for it.\n" +
  17. `Uses a cache file (${CACHE_FILE}) to avoid deploying contracts twice\n` +
  18. "Usage: $0 --chain <chain_1> --chain <chain_2> --private-key <private_key> --ops-key-path <ops_key_path> --std-output <std_output>",
  19. )
  20. .options(COMMON_UPGRADE_OPTIONS);
  21. async function main() {
  22. const argv = await parser.argv;
  23. const selectedChains = getSelectedChains(argv);
  24. const vault =
  25. DefaultStore.vaults[
  26. "mainnet-beta_FVQyHcooAtThJ83XFrNnv74BcinbRH3bRmfFamAHBfuj"
  27. ];
  28. console.log("Using cache file", CACHE_FILE);
  29. console.log(
  30. "Upgrading on chains",
  31. selectedChains.map((c) => c.getId()),
  32. );
  33. const payloads: Buffer[] = [];
  34. for (const chain of selectedChains) {
  35. const artifact = JSON.parse(readFileSync(argv["std-output"], "utf8"));
  36. console.log("Deploying contract to", chain.getId());
  37. const address = await runIfNotCached(`deploy-${chain.getId()}`, () => {
  38. return chain.deploy(
  39. toPrivateKey(argv["private-key"]),
  40. artifact["abi"],
  41. artifact["bytecode"],
  42. [],
  43. );
  44. });
  45. console.log(`Deployed contract at ${address} on ${chain.getId()}`);
  46. payloads.push(
  47. chain.generateGovernanceUpgradePayload(address.replace("0x", "")),
  48. );
  49. }
  50. console.log("Using vault at for proposal", vault.getId());
  51. const wallet = await loadHotWallet(argv["ops-key-path"]);
  52. console.log("Using wallet ", wallet.publicKey.toBase58());
  53. await vault.connect(wallet);
  54. const proposal = await vault.proposeWormholeMessage(payloads);
  55. console.log("Proposal address", proposal.address.toBase58());
  56. }
  57. main();