UNPKG

@venusprotocol/governance-contracts

Version:
129 lines 8.46 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const hardhat_1 = require("hardhat"); const constants_1 = require("../helpers/deploy/constants"); const deploymentConfig_1 = require("../helpers/deploy/deploymentConfig"); const deploymentUtils_1 = require("../helpers/deploy/deploymentUtils"); const configureAccessControls = (methods, accessControlManagerAddress, caller, target) => __awaiter(void 0, void 0, void 0, function* () { const commands = yield Promise.all(methods.map((method) => __awaiter(void 0, void 0, void 0, function* () { const callerAddress = caller; const targetAddress = target; return [ { contract: accessControlManagerAddress, signature: "giveCallPermission(address,string,address)", argTypes: ["address", "string", "address"], parameters: [targetAddress, method, callerAddress], value: 0, }, ]; }))); return commands.flat(); }); const executeCommands = (target, hre, deployer, omnichainProposalSenderAddress, chainId, normalTimelockAddress, fastTrackTimelockAddress, criticalTimelockAddress) => __awaiter(void 0, void 0, void 0, function* () { const signer = yield hardhat_1.ethers.getSigner(deployer); const networkName = hre.network.name; console.log("Executing commands"); const methods = deploymentConfig_1.config[networkName].methods; for (let i = 0; i < methods.length; i++) { const entry = methods[i]; const { method, args } = entry; const data = target.interface.encodeFunctionData(method, args); yield signer.sendTransaction({ to: target.address, data: data, }); } let tx = yield target.connect(signer).setTrustedRemoteAddress(chainId, omnichainProposalSenderAddress); yield tx.wait(); tx = yield target .connect(signer) .addTimelocks([normalTimelockAddress, fastTrackTimelockAddress, criticalTimelockAddress]); yield tx.wait(); }); const func = function (hre) { return __awaiter(this, void 0, void 0, function* () { const srcChainId = deploymentUtils_1.testnetNetworks.includes(hre.network.name) ? constants_1.LZ_CHAINID["bsctestnet"] : constants_1.LZ_CHAINID["bscmainnet"]; const Guardian = yield (0, deploymentUtils_1.guardian)(hre.network.name); const { deployments, getNamedAccounts } = hre; const { deploy } = deployments; const { deployer } = yield getNamedAccounts(); const networkName = hre.network.name; const acmAddress = (yield hardhat_1.ethers.getContract("AccessControlManager")).address; const normalTimelockAddress = (yield hardhat_1.ethers.getContract("NormalTimelock")).address; const fastTrackTimelockAddress = (yield hardhat_1.ethers.getContract("FastTrackTimelock")).address; const criticalTimelockAddress = (yield hardhat_1.ethers.getContract("CriticalTimelock")).address; const defaultProxyAdmin = yield hre.artifacts.readArtifact("hardhat-deploy/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin"); const normalTimelock = yield hardhat_1.ethers.getContract("NormalTimelock"); const omnichainGovernanceExecutorAddress = (yield hardhat_1.ethers.getContract("OmnichainGovernanceExecutor")).address; const OmnichainExecutorOwner = yield deploy("OmnichainExecutorOwner", { from: deployer, args: [omnichainGovernanceExecutorAddress], contract: "OmnichainExecutorOwner", proxy: { owner: hre.network.live ? normalTimelock.address : deployer, proxyContract: "OptimizedTransparentUpgradeableProxy", execute: { methodName: "initialize", args: [acmAddress], }, viaAdminContract: { name: "DefaultProxyAdmin", artifact: defaultProxyAdmin, }, upgradeIndex: 0, }, log: true, autoMine: true, skipIfAlreadyDeployed: true, }); const omnichainExecutorOwner = yield hardhat_1.ethers.getContractAt("OmnichainExecutorOwner", OmnichainExecutorOwner.address, hardhat_1.ethers.provider.getSigner(deployer)); const omnichainGovernanceExecutor = yield hardhat_1.ethers.getContractAt("OmnichainGovernanceExecutor", omnichainGovernanceExecutorAddress, hardhat_1.ethers.provider.getSigner(deployer)); if ((yield omnichainGovernanceExecutor.owner()) === deployer) { const omnichainProposalSenderAddress = yield (0, deploymentUtils_1.getOmnichainProposalSender)(networkName); yield executeCommands(omnichainGovernanceExecutor, hre, deployer, omnichainProposalSenderAddress, srcChainId, normalTimelockAddress, fastTrackTimelockAddress, criticalTimelockAddress); const tx = yield omnichainGovernanceExecutor.transferOwnership(OmnichainExecutorOwner.address); yield tx.wait(); } if ((yield omnichainExecutorOwner.owner()) === deployer) { let isAdded = new Array(deploymentConfig_1.OmnichainGovernanceExecutorNormalMethods.length).fill(true); let tx = yield omnichainExecutorOwner.upsertSignature(deploymentConfig_1.OmnichainGovernanceExecutorNormalMethods, isAdded); isAdded = new Array(deploymentConfig_1.OmnichainGovernanceExecutorMethodsForGuardian.length).fill(true); tx = yield omnichainExecutorOwner.upsertSignature(deploymentConfig_1.OmnichainGovernanceExecutorMethodsForGuardian, isAdded); yield tx.wait(); tx = yield omnichainExecutorOwner.transferOwnership(normalTimelockAddress); yield tx.wait(); console.log(`Omnichain Executor Owner ${deployer} successfully changed to ${normalTimelockAddress}.`); } const commands = [ ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorNormalMethods, acmAddress, normalTimelockAddress, OmnichainExecutorOwner.address)), ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorFasttrackMethods, acmAddress, fastTrackTimelockAddress, OmnichainExecutorOwner.address)), ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorCriticalMethods, acmAddress, criticalTimelockAddress, OmnichainExecutorOwner.address)), ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorMethodsForGuardian, acmAddress, Guardian, OmnichainExecutorOwner.address)), ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorOwnerMethods, acmAddress, Guardian, OmnichainExecutorOwner.address)), ...(yield configureAccessControls(deploymentConfig_1.OmnichainGovernanceExecutorOwnerMethods, acmAddress, normalTimelockAddress, OmnichainExecutorOwner.address)), { contract: omnichainExecutorOwner.address, signature: "acceptOwnership()", parameters: [], value: 0, }, ]; console.log("Please propose a VIP with the following commands:"); console.log(JSON.stringify(commands.map(c => ({ target: c.contract, signature: c.signature, params: c.parameters, value: c.value })))); }); }; func.tags = ["OmnichainExecutorOwner", "Remote"]; func.id = "configure_remote_executor"; func.skip = (hre) => __awaiter(void 0, void 0, void 0, function* () { return hre.network.name === "bsctestnet" || hre.network.name === "bscmainnet"; }); exports.default = func; //# sourceMappingURL=006-omnichain-executorOwner-remote.js.map