@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
45 lines (44 loc) • 2.77 kB
JavaScript
import { getConfig } from "@repo/config";
import { ethers } from "hardhat";
import { navigatorRegistryLibraries } from "../../../libraries/navigatorRegistryLibraries";
import { upgradeProxy } from "../../../helpers";
async function main() {
if (!process.env.NEXT_PUBLIC_APP_ENV) {
throw new Error("Missing NEXT_PUBLIC_APP_ENV");
}
const config = getConfig(process.env.NEXT_PUBLIC_APP_ENV);
const deployer = (await ethers.getSigners())[0];
const proxyAddress = config.navigatorRegistryContractAddress;
console.log(`Upgrading NavigatorRegistry on network: ${config.network.name} (env: ${config.environment}) with account: ${deployer.address}`);
console.log(`Proxy address: ${proxyAddress}`);
// Check current version
const current = (await ethers.getContractAt("NavigatorRegistry", proxyAddress));
const currentVersion = await current.version();
console.log(`Current version: ${currentVersion}`);
// Deploy libraries
console.log("Deploying NavigatorRegistry libraries...");
const libs = await navigatorRegistryLibraries(true);
const libraries = {
"contracts/navigator/libraries/NavigatorStakingUtils.sol:NavigatorStakingUtils": await libs.NavigatorStakingUtils.getAddress(),
"contracts/navigator/libraries/NavigatorDelegationUtils.sol:NavigatorDelegationUtils": await libs.NavigatorDelegationUtils.getAddress(),
"contracts/navigator/libraries/NavigatorVotingUtils.sol:NavigatorVotingUtils": await libs.NavigatorVotingUtils.getAddress(),
"contracts/navigator/libraries/NavigatorFeeUtils.sol:NavigatorFeeUtils": await libs.NavigatorFeeUtils.getAddress(),
"contracts/navigator/libraries/NavigatorSlashingUtils.sol:NavigatorSlashingUtils": await libs.NavigatorSlashingUtils.getAddress(),
"contracts/navigator/libraries/NavigatorLifecycleUtils.sol:NavigatorLifecycleUtils": await libs.NavigatorLifecycleUtils.getAddress(),
};
console.log("Libraries deployed");
// Upgrade without reinitializer — no storage changes, only library logic change
const upgraded = (await upgradeProxy("NavigatorRegistry", "NavigatorRegistry", proxyAddress, [], {
libraries,
logOutput: true,
}));
const newVersion = await upgraded.version();
console.log(`New version: ${newVersion} (expected same as before: ${currentVersion})`);
// Sanity check: verify the new FLAG_BELOW_MIN_STAKE constant is accessible
// (it's a library constant, so we just verify the contract is functional)
const minStake = await upgraded.getMinStake();
console.log(`MinStake: ${ethers.formatEther(minStake)} B3TR`);
console.log("Upgrade completed successfully — FLAG_BELOW_MIN_STAKE slashing is now active");
process.exit(0);
}
main();