upgrade_evm_entropy_contracts.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 EXECUTOR_CACHE_FILE = ".cache-upgrade-evm-executor-contract";
  11. const ENTROPY_CACHE_FILE = ".cache-upgrade-evm-entropy-contract";
  12. const parser = yargs(hideBin(process.argv))
  13. .usage(
  14. "Deploys a new Upgradeable contract for Executor or Entropy to a set of chains where Entropy is deployed and creates a governance proposal for it.\n" +
  15. `Uses a 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({
  19. ...COMMON_UPGRADE_OPTIONS,
  20. "contract-type": {
  21. type: "string",
  22. choices: ["executor", "entropy"],
  23. demandOption: true,
  24. },
  25. });
  26. async function main() {
  27. const argv = await parser.argv;
  28. const cacheFile =
  29. argv["contract-type"] === "executor"
  30. ? EXECUTOR_CACHE_FILE
  31. : ENTROPY_CACHE_FILE;
  32. const runIfNotCached = makeCacheFunction(cacheFile);
  33. const selectedChains = getSelectedChains(argv);
  34. const vault =
  35. DefaultStore.vaults[
  36. "mainnet-beta_FVQyHcooAtThJ83XFrNnv74BcinbRH3bRmfFamAHBfuj"
  37. ];
  38. console.log("Using cache file", cacheFile);
  39. const payloads: Buffer[] = [];
  40. for (const contract of Object.values(DefaultStore.entropy_contracts)) {
  41. if (selectedChains.includes(contract.chain)) {
  42. const artifact = JSON.parse(readFileSync(argv["std-output"], "utf8"));
  43. console.log("Deploying contract to", contract.chain.getId());
  44. const address = await runIfNotCached(
  45. `deploy-${contract.chain.getId()}`,
  46. () => {
  47. return contract.chain.deploy(
  48. toPrivateKey(argv["private-key"]),
  49. artifact["abi"],
  50. artifact["bytecode"],
  51. [],
  52. 2
  53. );
  54. }
  55. );
  56. console.log(
  57. `Deployed contract at ${address} on ${contract.chain.getId()}`
  58. );
  59. const payload =
  60. argv["contract-type"] === "executor"
  61. ? await contract.generateUpgradeExecutorContractsPayload(address)
  62. : await contract.generateUpgradeEntropyContractPayload(address);
  63. console.log(payload.toString("hex"));
  64. payloads.push(payload);
  65. }
  66. }
  67. console.log("Using vault at for proposal", vault.getId());
  68. const wallet = await loadHotWallet(argv["ops-key-path"]);
  69. console.log("Using wallet ", wallet.publicKey.toBase58());
  70. await vault.connect(wallet);
  71. const proposal = await vault.proposeWormholeMessage(payloads);
  72. console.log("Proposal address", proposal.address.toBase58());
  73. }
  74. main();