UNPKG

@vechain/vebetterdao-contracts

Version:

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

163 lines (162 loc) 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const upgrades_1 = require("../../scripts/helpers/upgrades"); const deploy_1 = require("../helpers/deploy"); const chai_1 = require("chai"); const mocha_1 = require("mocha"); const config_1 = require("../helpers/config"); (0, mocha_1.describe)("VeBetterPassport Upgrade - @shard8a", function () { (0, mocha_1.it)("Should upgrade from V1 -> V2 -> V3 -> V4 -> V5 (latest) and preserve storage", async function () { const config = (0, config_1.createTestConfig)(); const { owner, galaxyMember, x2EarnApps, passportChecksLogicV1, passportConfiguratorV1, passportDelegationLogicV1, passportPersonhoodLogicV1, passportPoPScoreLogicV1, passportSignalingLogicV1, passportEntityLogicV1, passportWhitelistAndBlacklistLogicV1, passportChecksLogicV2, passportConfiguratorV2, passportDelegationLogicV2, passportPersonhoodLogicV2, passportPoPScoreLogicV2, passportSignalingLogicV2, passportEntityLogicV2, passportWhitelistAndBlacklistLogicV2, passportChecksLogicV3, passportConfiguratorV3, passportDelegationLogicV3, passportPersonhoodLogicV3, passportPoPScoreLogicV3, passportSignalingLogicV3, passportWhitelistAndBlacklistLogicV3, passportEntityLogicV3, passportChecksLogicV4, passportConfiguratorV4, passportDelegationLogicV4, passportPersonhoodLogicV4, passportPoPScoreLogicV4, passportSignalingLogicV4, passportWhitelistAndBlacklistLogicV4, passportEntityLogicV4, passportChecksLogic, passportConfigurator, passportDelegationLogic, passportPersonhoodLogic, passportPoPScoreLogic, passportSignalingLogic, passportWhitelistAndBlacklistLogic, passportEntityLogic, xAllocationVoting: deployedXAllocationVoting, // Use deployed instance if available } = await (0, deploy_1.getOrDeployContractInstances)({ forceDeploy: true, config, }); // Use deployed xAllocationVoting or deploy a mock if needed for initialization const xAllocationVotingAddress = deployedXAllocationVoting ? await deployedXAllocationVoting.getAddress() : owner.address; // Deploy V1 Proxy const veBetterPassportContractAddress = await (0, upgrades_1.deployProxyOnly)("VeBetterPassportV1", { PassportChecksLogicV1: await passportChecksLogicV1.getAddress(), PassportConfiguratorV1: await passportConfiguratorV1.getAddress(), PassportEntityLogicV1: await passportEntityLogicV1.getAddress(), PassportDelegationLogicV1: await passportDelegationLogicV1.getAddress(), PassportPersonhoodLogicV1: await passportPersonhoodLogicV1.getAddress(), PassportPoPScoreLogicV1: await passportPoPScoreLogicV1.getAddress(), PassportSignalingLogicV1: await passportSignalingLogicV1.getAddress(), PassportWhitelistAndBlacklistLogicV1: await passportWhitelistAndBlacklistLogicV1.getAddress(), }); // Initialize V1 const veBetterPassportV1 = (await (0, upgrades_1.initializeProxy)(veBetterPassportContractAddress, "VeBetterPassportV1", [ { x2EarnApps: await x2EarnApps.getAddress(), xAllocationVoting: xAllocationVotingAddress, galaxyMember: await galaxyMember.getAddress(), signalingThreshold: config.VEPASSPORT_BOT_SIGNALING_THRESHOLD, roundsForCumulativeScore: config.VEPASSPORT_ROUNDS_FOR_CUMULATIVE_PARTICIPATION_SCORE, minimumGalaxyMemberLevel: config.VEPASSPORT_GALAXY_MEMBER_MINIMUM_LEVEL, blacklistThreshold: config.VEPASSPORT_BLACKLIST_THRESHOLD_PERCENTAGE, whitelistThreshold: config.VEPASSPORT_WHITELIST_THRESHOLD_PERCENTAGE, maxEntitiesPerPassport: config.VEPASSPORT_PASSPORT_MAX_ENTITIES, decayRate: config.VEPASSPORT_DECAY_RATE, }, { admin: owner.address, botSignaler: owner.address, upgrader: owner.address, settingsManager: owner.address, roleGranter: owner.address, blacklister: owner.address, whitelister: owner.address, actionRegistrar: owner.address, actionScoreManager: owner.address, }, ], { PassportChecksLogicV1: await passportChecksLogicV1.getAddress(), PassportConfiguratorV1: await passportConfiguratorV1.getAddress(), PassportEntityLogicV1: await passportEntityLogicV1.getAddress(), PassportDelegationLogicV1: await passportDelegationLogicV1.getAddress(), PassportPersonhoodLogicV1: await passportPersonhoodLogicV1.getAddress(), PassportPoPScoreLogicV1: await passportPoPScoreLogicV1.getAddress(), PassportSignalingLogicV1: await passportSignalingLogicV1.getAddress(), PassportWhitelistAndBlacklistLogicV1: await passportWhitelistAndBlacklistLogicV1.getAddress(), })); (0, chai_1.expect)(await veBetterPassportV1.version()).to.equal("1"); // Upgrade V1 -> V2 const veBetterPassportV2 = (await (0, upgrades_1.upgradeProxy)("VeBetterPassportV1", "VeBetterPassportV2", await veBetterPassportV1.getAddress(), [], // No initialization args for V2 upgrade { version: 2, libraries: { PassportChecksLogicV2: await passportChecksLogicV2.getAddress(), PassportConfiguratorV2: await passportConfiguratorV2.getAddress(), PassportEntityLogicV2: await passportEntityLogicV2.getAddress(), PassportDelegationLogicV2: await passportDelegationLogicV2.getAddress(), PassportPersonhoodLogicV2: await passportPersonhoodLogicV2.getAddress(), PassportPoPScoreLogicV2: await passportPoPScoreLogicV2.getAddress(), PassportSignalingLogicV2: await passportSignalingLogicV2.getAddress(), PassportWhitelistAndBlacklistLogicV2: await passportWhitelistAndBlacklistLogicV2.getAddress(), }, })); (0, chai_1.expect)(await veBetterPassportV2.version()).to.equal("2"); // Upgrade V2 -> V3 const veBetterPassportV3 = (await (0, upgrades_1.upgradeProxy)("VeBetterPassportV2", "VeBetterPassportV3", await veBetterPassportV2.getAddress(), [], // No initialization args for V3 upgrade { version: 3, libraries: { PassportChecksLogicV3: await passportChecksLogicV3.getAddress(), PassportConfiguratorV3: await passportConfiguratorV3.getAddress(), PassportEntityLogicV3: await passportEntityLogicV3.getAddress(), PassportDelegationLogicV3: await passportDelegationLogicV3.getAddress(), PassportPersonhoodLogicV3: await passportPersonhoodLogicV3.getAddress(), PassportPoPScoreLogicV3: await passportPoPScoreLogicV3.getAddress(), PassportSignalingLogicV3: await passportSignalingLogicV3.getAddress(), PassportWhitelistAndBlacklistLogicV3: await passportWhitelistAndBlacklistLogicV3.getAddress(), }, })); // Upgrade V3 -> V4 const veBetterPassportV4 = (await (0, upgrades_1.upgradeProxy)("VeBetterPassportV3", "VeBetterPassportV4", await veBetterPassportV3.getAddress(), [config.CONTRACTS_ADMIN_ADDRESS], // initializeV4: resetSignaler address { version: 4, libraries: { PassportChecksLogicV4: await passportChecksLogicV4.getAddress(), PassportConfiguratorV4: await passportConfiguratorV4.getAddress(), PassportEntityLogicV4: await passportEntityLogicV4.getAddress(), PassportDelegationLogicV4: await passportDelegationLogicV4.getAddress(), PassportPersonhoodLogicV4: await passportPersonhoodLogicV4.getAddress(), PassportPoPScoreLogicV4: await passportPoPScoreLogicV4.getAddress(), PassportSignalingLogicV4: await passportSignalingLogicV4.getAddress(), PassportWhitelistAndBlacklistLogicV4: await passportWhitelistAndBlacklistLogicV4.getAddress(), }, })); (0, chai_1.expect)(await veBetterPassportV4.version()).to.equal("4"); // Upgrade V4 -> V5 (latest) const veBetterPassportV5 = (await (0, upgrades_1.upgradeProxy)("VeBetterPassportV4", "VeBetterPassport", await veBetterPassportV4.getAddress(), [], { version: 5, libraries: { PassportChecksLogic: await passportChecksLogic.getAddress(), PassportConfigurator: await passportConfigurator.getAddress(), PassportEntityLogic: await passportEntityLogic.getAddress(), PassportDelegationLogic: await passportDelegationLogic.getAddress(), PassportPersonhoodLogic: await passportPersonhoodLogic.getAddress(), PassportPoPScoreLogic: await passportPoPScoreLogic.getAddress(), PassportSignalingLogic: await passportSignalingLogic.getAddress(), PassportWhitelistAndBlacklistLogic: await passportWhitelistAndBlacklistLogic.getAddress(), }, })); (0, chai_1.expect)(await veBetterPassportV5.version()).to.equal("5"); const adminRoleV1 = await veBetterPassportV1.DEFAULT_ADMIN_ROLE(); const ownerHasAdminV1 = await veBetterPassportV1.hasRole(adminRoleV1, owner.address); const thresholdV1 = await veBetterPassportV1.thresholdPoPScore(); const adminRoleV2 = await veBetterPassportV2.DEFAULT_ADMIN_ROLE(); const ownerHasAdminV2 = await veBetterPassportV2.hasRole(adminRoleV2, owner.address); const thresholdV2 = await veBetterPassportV2.thresholdPoPScore(); const adminRoleV3 = await veBetterPassportV3.DEFAULT_ADMIN_ROLE(); const ownerHasAdminV3 = await veBetterPassportV3.hasRole(adminRoleV3, owner.address); const thresholdV3 = await veBetterPassportV3.thresholdPoPScore(); const adminRoleV4 = await veBetterPassportV4.DEFAULT_ADMIN_ROLE(); const ownerHasAdminV4 = await veBetterPassportV4.hasRole(adminRoleV4, owner.address); const thresholdV4 = await veBetterPassportV4.thresholdPoPScore(); const adminRoleV5 = await veBetterPassportV5.DEFAULT_ADMIN_ROLE(); const ownerHasAdminV5 = await veBetterPassportV5.hasRole(adminRoleV5, owner.address); const thresholdV5 = await veBetterPassportV5.thresholdPoPScore(); (0, chai_1.expect)(ownerHasAdminV1).to.be.true; (0, chai_1.expect)(ownerHasAdminV2).to.equal(ownerHasAdminV1); // Check admin role persisted (0, chai_1.expect)(thresholdV2).to.equal(thresholdV1); (0, chai_1.expect)(ownerHasAdminV3).to.equal(ownerHasAdminV2); // Check admin role persisted (0, chai_1.expect)(thresholdV3).to.equal(thresholdV2); (0, chai_1.expect)(ownerHasAdminV4).to.equal(ownerHasAdminV3); // Check admin role persisted (0, chai_1.expect)(thresholdV4).to.equal(thresholdV3); (0, chai_1.expect)(ownerHasAdminV5).to.equal(ownerHasAdminV4); // Check admin role persisted (0, chai_1.expect)(thresholdV5).to.equal(thresholdV4); // Check if the RESET_SIGNALER_ROLE was assigned during V4 initialization const RESET_SIGNALER_ROLE = await veBetterPassportV5.RESET_SIGNALER_ROLE(); (0, chai_1.expect)(await veBetterPassportV5.hasRole(RESET_SIGNALER_ROLE, config.CONTRACTS_ADMIN_ADDRESS)).to.be.true; // Verify a role granted in V1 still exists in V5 const SETTINGS_MANAGER_ROLE = await veBetterPassportV5.SETTINGS_MANAGER_ROLE(); (0, chai_1.expect)(await veBetterPassportV5.hasRole(SETTINGS_MANAGER_ROLE, owner.address)).to.be.true; // Verify the new userRoundAppCount function exists in V5 (0, chai_1.expect)(veBetterPassportV5.userRoundAppCount).to.be.a("function"); }); });