UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

195 lines (194 loc) 10.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transferUpgraderRole = exports.transferSettingsManagerRole = exports.validateContractRole = exports.transferGovernorFunctionSettingsRole = exports.transferDecaySettingsManagerRole = exports.transferContractsAddressManagerRole = exports.transferGovernanceRole = exports.transferMinterRole = exports.transferAdminRole = void 0; const transferAdminRole = async (contract, oldAdmin, newAdminAddress) => { if (oldAdmin.address === newAdminAddress) return; const adminRole = await contract.DEFAULT_ADMIN_ROLE(); await contract .connect(oldAdmin) .grantRole(adminRole, newAdminAddress) .then(async (tx) => await tx.wait()); await contract .connect(oldAdmin) .renounceRole(adminRole, oldAdmin.address) .then(async (tx) => await tx.wait()); const newAdminSet = await contract.hasRole(adminRole, newAdminAddress); const oldAdminRemoved = !(await contract.hasRole(adminRole, oldAdmin.address)); if (!newAdminSet || !oldAdminRemoved) throw new Error("Admin role not set correctly on " + (await contract.getAddress())); console.log("Admin role transferred successfully on " + (await contract.getAddress())); }; exports.transferAdminRole = transferAdminRole; const transferMinterRole = async (contract, admin, oldMinterAddress, newMinterAddress) => { if (oldMinterAddress === newMinterAddress) return; const minterRole = await contract.MINTER_ROLE(); // If newMinterAddress is provided, set a new minter before revoking the old one // otherwise just revoke the old one if (newMinterAddress) { await contract .connect(admin) .grantRole(minterRole, newMinterAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .revokeRole(minterRole, oldMinterAddress) .then(async (tx) => await tx.wait()); const newMinterSet = await contract.hasRole(minterRole, newMinterAddress); const oldMinterRemoved = !(await contract.hasRole(minterRole, oldMinterAddress)); if (!newMinterSet || !oldMinterRemoved) throw new Error("Minter role not set correctly on " + (await contract.getAddress())); console.log("Minter role transferred successfully on " + (await contract.getAddress())); } else { await contract .connect(admin) .revokeRole(minterRole, oldMinterAddress) .then(async (tx) => await tx.wait()); const oldMinterRemoved = !(await contract.hasRole(minterRole, oldMinterAddress)); if (!oldMinterRemoved) throw new Error("Minter role not removed correctly on " + (await contract.getAddress())); console.log("Minter role revoked (without granting new) successfully on " + (await contract.getAddress())); } }; exports.transferMinterRole = transferMinterRole; // Transfer governance role to treasury contract admin for intial phases of project const transferGovernanceRole = async (contract, admin, oldAddress, newAddress) => { if (oldAddress === newAddress) return; const governanceRole = await contract.GOVERNANCE_ROLE(); // If newAddress is provided, set a new admin before revoking the old one // otherwise just revoke the old one if (newAddress) { await contract .connect(admin) .grantRole(governanceRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .revokeRole(governanceRole, oldAddress) .then(async (tx) => await tx.wait()); const newGovernanceSet = await contract.hasRole(governanceRole, newAddress); const oldGovernanceRemoved = !(await contract.hasRole(governanceRole, oldAddress)); if (!newGovernanceSet || !oldGovernanceRemoved) throw new Error("Minter role not set correctly on " + (await contract.getAddress())); console.log("Governance role transferred successfully on " + (await contract.getAddress())); } else { await contract .connect(admin) .revokeRole(governanceRole, oldAddress) .then(async (tx) => await tx.wait()); const oldGovernanceRemoved = !(await contract.hasRole(governanceRole, oldAddress)); if (!oldGovernanceRemoved) throw new Error("Governance role not removed correctly on " + (await contract.getAddress())); console.log("Governance role revoked (without granting new) successfully on " + (await contract.getAddress())); } }; exports.transferGovernanceRole = transferGovernanceRole; const transferContractsAddressManagerRole = async (contract, admin, newAddress) => { if (admin.address === newAddress) return; const contractsAddressManagerRole = await contract.CONTRACTS_ADDRESS_MANAGER_ROLE(); await contract .connect(admin) .grantRole(contractsAddressManagerRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .renounceRole(contractsAddressManagerRole, admin.address) .then(async (tx) => await tx.wait()); const newRoleSet = await contract.hasRole(contractsAddressManagerRole, newAddress); const oldRoleRemoved = !(await contract.hasRole(contractsAddressManagerRole, admin.address)); if (!newRoleSet || !oldRoleRemoved) throw new Error("Role not set correctly on " + (await contract.getAddress())); console.log("Contract Address Manager Role transferred successfully on " + (await contract.getAddress())); }; exports.transferContractsAddressManagerRole = transferContractsAddressManagerRole; const transferDecaySettingsManagerRole = async (contract, admin, newAddress) => { if (admin.address === newAddress) return; const decaySettingsManagerRole = await contract.DECAY_SETTINGS_MANAGER_ROLE(); await contract .connect(admin) .grantRole(decaySettingsManagerRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .renounceRole(decaySettingsManagerRole, admin.address) .then(async (tx) => await tx.wait()); const newRoleSet = await contract.hasRole(decaySettingsManagerRole, newAddress); const oldRoleRemoved = !(await contract.hasRole(decaySettingsManagerRole, admin.address)); if (!newRoleSet || !oldRoleRemoved) throw new Error("Role not set correctly on " + (await contract.getAddress())); console.log("Decay Settings Manager Role transferred successfully on " + (await contract.getAddress())); }; exports.transferDecaySettingsManagerRole = transferDecaySettingsManagerRole; const transferGovernorFunctionSettingsRole = async (contract, admin, newAddress) => { if (admin.address === newAddress) return; const governorFunctionSettingsRole = await contract.GOVERNOR_FUNCTIONS_SETTINGS_ROLE(); await contract .connect(admin) .grantRole(governorFunctionSettingsRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .renounceRole(governorFunctionSettingsRole, admin.address) .then(async (tx) => await tx.wait()); const newRoleSet = await contract.hasRole(governorFunctionSettingsRole, newAddress); const oldRoleRemoved = !(await contract.hasRole(governorFunctionSettingsRole, admin.address)); if (!newRoleSet || !oldRoleRemoved) throw new Error("Role not set correctly on " + (await contract.getAddress())); console.log("Governor Function Settings Role transferred successfully on " + (await contract.getAddress())); }; exports.transferGovernorFunctionSettingsRole = transferGovernorFunctionSettingsRole; // Function that checks that roles are set correctly on the contracts const validateContractRole = async (contract, expectedAddress, tempAdmin, role) => { if (expectedAddress === tempAdmin) return; const roleSet = await contract.hasRole(role, expectedAddress); // Check that the temporary admin does not have the role const roleRemoved = !(await contract.hasRole(role, tempAdmin)); if (!roleSet || !roleRemoved) throw new Error("Role " + role + " not set correctly on " + (await contract.getAddress())); }; exports.validateContractRole = validateContractRole; const transferSettingsManagerRole = async (contract, admin, newAddress) => { if (admin.address === newAddress) return; const settingsManagerRole = await contract.SETTINGS_MANAGER_ROLE(); await contract .connect(admin) .grantRole(settingsManagerRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .renounceRole(settingsManagerRole, admin.address) .then(async (tx) => await tx.wait()); const newRoleSet = await contract.hasRole(settingsManagerRole, newAddress); const oldRoleRemoved = !(await contract.hasRole(settingsManagerRole, admin.address)); if (!newRoleSet || !oldRoleRemoved) throw new Error("Role not set correctly on " + (await contract.getAddress())); console.log("Settings Manager Role transferred successfully on " + (await contract.getAddress())); }; exports.transferSettingsManagerRole = transferSettingsManagerRole; const transferUpgraderRole = async (contract, admin, newAddress) => { if (admin.address === newAddress) return; const upgraderRole = await contract.UPGRADER_ROLE(); await contract .connect(admin) .grantRole(upgraderRole, newAddress) .then(async (tx) => await tx.wait()); await contract .connect(admin) .renounceRole(upgraderRole, admin.address) .then(async (tx) => await tx.wait()); const newRoleSet = await contract.hasRole(upgraderRole, newAddress); const oldRoleRemoved = !(await contract.hasRole(upgraderRole, admin.address)); if (!newRoleSet || !oldRoleRemoved) throw new Error("Role not set correctly on " + (await contract.getAddress())); }; exports.transferUpgraderRole = transferUpgraderRole;