@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
64 lines (63 loc) • 2.81 kB
JavaScript
import inquirer from "inquirer";
import { execSync } from "child_process";
import { upgradeConfig } from "./upgradesConfig";
import { getConfig } from "@repo/config";
import { ethers } from "hardhat";
async function upgradeContract() {
try {
const env = process.env.NEXT_PUBLIC_APP_ENV;
if (!env)
throw new Error("Environment variable NEXT_PUBLIC_APP_ENV is not set.");
const config = getConfig(process.env.NEXT_PUBLIC_APP_ENV);
// Prompt the user to select a contract to upgrade
const { contract } = await inquirer.prompt({
type: "list",
name: "contract",
message: "Which contract do you want to upgrade?",
choices: Object.keys(upgradeConfig),
});
const selectedContract = upgradeConfig[contract];
const versionChoices = selectedContract.versions.map(version => ({
name: `${version} - ${selectedContract.descriptions[version]}`,
value: version,
}));
// Prompt the user to select the version to upgrade to
const { version } = await inquirer.prompt({
type: "list",
name: "version",
message: `Which version do you want to upgrade ${contract} to?`,
choices: versionChoices,
});
const deployer = (await ethers.getSigners())[0];
console.log(`You are about to upgrade the following contract:`);
console.log(`\nContract: ${selectedContract.name}`);
console.log(`Contract address: ${config[selectedContract.configAddressField]}`);
console.log(`Version: ${version}`);
console.log(`Upgrade description: ${selectedContract.descriptions[version]}`);
console.log(`Upgrader wallet: ${deployer.address}`);
console.log(`Environment: ${env}\n`);
// Confirm the upgrade
const { confirmUpgrade } = await inquirer.prompt({
type: "confirm",
name: "confirmUpgrade",
message: `Do you want to proceed with the upgrade of ${selectedContract.name} to version ${version} on environment ${env}?`,
default: false,
});
if (!confirmUpgrade) {
console.log("Upgrade aborted.");
process.exit(0);
}
// Set environment variables
process.env.CONTRACT_TO_UPGRADE = selectedContract.name;
process.env.CONTRACT_VERSION = version;
console.log(`\nStarting upgrade of ${selectedContract.name} to version ${version} on ${env}...`);
// Run the upgrade script
execSync(`turbo run upgrade:contract:${env}`, { stdio: "inherit" });
console.log("\nUpgrade complete!");
}
catch (error) {
console.error("Upgrade failed:", error);
process.exit(1);
}
}
upgradeContract();