@dydxfoundation/governance
Version:
dYdX governance smart contracts
60 lines (59 loc) • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deploySafetyModuleRecovery = void 0;
const types_1 = require("../../types");
const deploy_config_1 = require("../deploy-config");
const get_deployer_address_1 = require("../deploy-config/get-deployer-address");
const logging_1 = require("../lib/logging");
const util_1 = require("../lib/util");
const deploy_upgradeable_1 = require("./helpers/deploy-upgradeable");
async function deploySafetyModuleRecovery({ startStep = 0, onlyStep, dydxTokenAddress, shortTimelockAddress, rewardsTreasuryAddress, safetyModuleNewImplAddress, safetyModuleRecoveryAddress, safetyModuleRecoveryProxyAdminAddress, }) {
(0, logging_1.log)('Beginning safety module recovery deployment\n');
const deployConfig = (0, deploy_config_1.getDeployConfig)();
const deployer = await (0, get_deployer_address_1.getDeployerSigner)();
const deployerAddress = deployer.address;
(0, logging_1.log)(`Beginning deployment with deployer ${deployerAddress}\n`);
const shortTimelock = new types_1.Executor__factory(deployer).attach(shortTimelockAddress);
let safetyModuleNewImpl;
let safetyModuleRecovery;
let safetyModuleRecoveryProxyAdmin;
if (onlyStep ? onlyStep === 1 : startStep <= 1) {
(0, logging_1.log)('Step 1. Deploy new safety module implementation contract.');
safetyModuleNewImpl = await new types_1.SafetyModuleV2__factory(deployer).deploy(dydxTokenAddress, dydxTokenAddress, rewardsTreasuryAddress, deployConfig.SM_RECOVERY_DISTRIBUTION_START, deployConfig.SM_RECOVERY_DISTRIBUTION_END);
await (0, util_1.waitForTx)(safetyModuleNewImpl.deployTransaction);
safetyModuleNewImplAddress = safetyModuleNewImpl.address;
}
else {
if (!safetyModuleNewImplAddress) {
throw new Error('Expected parameter safetyModuleNewImplAddress to be specified.');
}
safetyModuleNewImpl = new types_1.SafetyModuleV2__factory(deployer).attach(safetyModuleNewImplAddress);
}
if (onlyStep ? onlyStep === 2 : startStep <= 2) {
(0, logging_1.log)('Step 2. Deploy the upgradeable Safety Module recovery contract.');
[safetyModuleRecovery, , safetyModuleRecoveryProxyAdmin] = await (0, deploy_upgradeable_1.deployUpgradeable)(types_1.SM2Recovery__factory, deployer, [dydxTokenAddress], []);
safetyModuleRecoveryAddress = safetyModuleRecovery.address;
safetyModuleRecoveryProxyAdminAddress = safetyModuleRecoveryProxyAdmin.address;
}
else {
if (!safetyModuleRecoveryAddress) {
throw new Error('Expected parameter safetyModuleRecoveryAddress to be specified.');
}
if (!safetyModuleRecoveryProxyAdminAddress) {
throw new Error('Expected parameter safetyModuleRecoveryProxyAdminAddress to be specified.');
}
safetyModuleRecovery = new types_1.SM2Recovery__factory(deployer).attach(safetyModuleRecoveryAddress);
safetyModuleRecoveryProxyAdmin = new types_1.ProxyAdmin__factory(deployer).attach(safetyModuleRecoveryProxyAdminAddress);
}
if (onlyStep ? onlyStep === 3 : startStep <= 3) {
(0, logging_1.log)('Step 3. Transfer SM2Recovery proxy admin ownership to the short timelock.');
await (0, util_1.waitForTx)(await safetyModuleRecoveryProxyAdmin.transferOwnership(shortTimelock.address));
}
(0, logging_1.log)('\n=== SAFETY MODULE RECOVERY DEPLOYMENT COMPLETE ===\n');
return {
safetyModuleNewImpl,
safetyModuleRecovery,
safetyModuleRecoveryProxyAdmin,
};
}
exports.deploySafetyModuleRecovery = deploySafetyModuleRecovery;