1+ import { assertBN } from '../../test/_helpers/bn' ;
2+ import { before , beforeEach , describe , it } from 'mocha' ;
3+ import { globalSnapShot } from '../../test/_utils/snapshotting' ;
4+ import { deployUpgrade , executeUpgrade } from '../_helpers/upgrade' ;
5+ import {
6+ artifacts , RocketDAONodeTrusted , RocketDAONodeTrustedUpgrade ,
7+ RocketDAOProtocolSettingsDeposit ,
8+ RocketDAOProtocolSettingsMegapool ,
9+ RocketDAOProtocolSettingsMinipool ,
10+ RocketDAOProtocolSettingsNetwork ,
11+ RocketDAOProtocolSettingsNode ,
12+ RocketDAOProtocolSettingsProposals ,
13+ RocketDAOProtocolSettingsSecurity ,
14+ RocketNetworkRevenues ,
15+ RocketStorage , RocketUpgradeOneDotFour ,
16+ } from '../../test/_utils/artifacts' ;
17+ import { setDefaultParameters } from '../../test/_helpers/defaults' ;
18+ import { printTitle } from '../../test/_utils/formatting' ;
19+ import assert from 'assert' ;
20+ import { registerNode , setNodeTrusted } from '../../test/_helpers/node' ;
21+ import { userDeposit } from '../../test/_helpers/deposit' ;
22+ import { deployMegapool , getMegapoolForNode , getValidatorInfo , nodeDeposit } from '../../test/_helpers/megapool' ;
23+ import { setDAOProtocolBootstrapSetting } from '../../test/dao/scenario-dao-protocol-bootstrap' ;
24+ import { compressABI } from '../../test/_utils/contract' ;
25+
26+ const helpers = require ( '@nomicfoundation/hardhat-network-helpers' ) ;
27+ const hre = require ( 'hardhat' ) ;
28+ const ethers = hre . ethers ;
29+
30+ const rocketStorageAddress = process . env . ROCKET_STORAGE || '0x5FbDB2315678afecb367f032d93F642f64180aa3' ;
31+
32+ const rocketUpgradeOneDotFourDissolveHotfix = artifacts . require ( 'RocketUpgradeOneDotFourDissolveHotfix' ) ;
33+
34+ async function executeHotfix ( rocketStorageAddress , trustedNode , owner ) {
35+ // Get contracts
36+ const rocketDAONodeTrusted = await RocketDAONodeTrusted . deployed ( ) ;
37+ const rocketDAONodeTrustedUpgrade = await RocketDAONodeTrustedUpgrade . deployed ( )
38+
39+ // Deploy hotfix conract
40+ const dissolveHotfixContract = await rocketUpgradeOneDotFourDissolveHotfix . new ( rocketStorageAddress ) ;
41+
42+ // Bootstrap add the upgrade contract and execute
43+ await rocketDAONodeTrusted . connect ( owner ) . bootstrapUpgrade ( 'addContract' , 'rocketUpgradeOneDotFourDissolveHotfix' , compressABI ( RocketUpgradeOneDotFour . abi ) , dissolveHotfixContract . target ) ;
44+ const upgradeProposalId = await rocketDAONodeTrustedUpgrade . getTotal ( )
45+
46+ // Wait for the SC veto window to end
47+ const vetoEnd = await rocketDAONodeTrustedUpgrade . getEnd ( upgradeProposalId ) ;
48+ await helpers . time . increaseTo ( vetoEnd + 1n ) ;
49+
50+ // Execute the upgrade
51+ await rocketDAONodeTrustedUpgrade . connect ( trustedNode ) . execute ( upgradeProposalId ) ;
52+
53+ // Execute the hotfix
54+ await dissolveHotfixContract . connect ( owner ) . execute ( ) ;
55+ }
56+
57+ export default function ( ) {
58+ describe ( 'Dissolve Hotfix' , ( ) => {
59+ let owner ,
60+ node ,
61+ nodeWithdrawalAddress ,
62+ trustedNode1 ,
63+ random ;
64+
65+ let upgradeContract ;
66+
67+ before ( async ( ) => {
68+ await globalSnapShot ( ) ;
69+
70+ [
71+ owner ,
72+ node ,
73+ nodeWithdrawalAddress ,
74+ trustedNode1 ,
75+ random ,
76+ ] = await ethers . getSigners ( ) ;
77+
78+ // Deploy upgrade while global artifacts are still latest version
79+ upgradeContract = await deployUpgrade ( rocketStorageAddress ) ;
80+ // Load artifacts from old deployment and initialise default parameters
81+ await artifacts . loadFromDeployment ( rocketStorageAddress ) ;
82+ await setDefaultParameters ( ) ;
83+ } ) ;
84+
85+ beforeEach ( async ( ) => {
86+ await artifacts . loadFromDeployment ( rocketStorageAddress ) ;
87+ } ) ;
88+
89+ it ( printTitle ( 'hotfix' , 'updated megapool.time.before.dissolve to 365 days' ) , async ( ) => {
90+ // Setup a trusted node to execute the upgrade
91+ await registerNode ( { from : trustedNode1 } ) ;
92+ await setNodeTrusted ( trustedNode1 , 'saas_1' , 'node@home.com' , owner ) ;
93+
94+ // Execute the upgrade
95+ await executeUpgrade ( owner , upgradeContract , rocketStorageAddress ) ;
96+
97+ // Get contracts
98+ const rocketDAOProtocolSettingsMegapool = await RocketDAOProtocolSettingsMegapool . deployed ( ) ;
99+
100+ // Check setting before is 28 days
101+ assertBN . equal ( await rocketDAOProtocolSettingsMegapool . getTimeBeforeDissolve ( ) , 60 * 60 * 24 * 28 ) ;
102+
103+ // Execute hotfix
104+ await executeHotfix ( rocketStorageAddress , trustedNode1 , owner ) ;
105+
106+ // Check setting after is 365 days
107+ assertBN . equal ( await rocketDAOProtocolSettingsMegapool . getTimeBeforeDissolve ( ) , 60 * 60 * 24 * 365 ) ;
108+ } ) ;
109+ } ) ;
110+ }
0 commit comments