upgrade_evm_pricefeed_contracts.ts 2.1 KB

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