diff --git a/upgrade/.env.example b/upgrade/.env.example index ce973f966..4068b02a7 100644 --- a/upgrade/.env.example +++ b/upgrade/.env.example @@ -13,6 +13,10 @@ FOREIGN_GAS_PRICE=1000000000 # leader or confirm ROLE=confirm + +# Optional parameters, depends on the script used NEW_IMPLEMENTATION_XDAI_BRIDGE= NEW_IMPLEMENTATION_ETH_VALIDATORS= NEW_IMPLEMENTATION_ETH_BRIDGE= +HOME_DAILY_LIMIT=100000000000000000000001 +CHAI_INTEREST_RECEIVER= diff --git a/upgrade/README.md b/upgrade/README.md index 4e8f1d068..33c327ee5 100644 --- a/upgrade/README.md +++ b/upgrade/README.md @@ -21,7 +21,16 @@ cp .env.example .env Complete the variables in `.env` file. The `ROLE` variable indicates if the validator will send the creation transaction on the multisig wallet or if it will send the confirmation. Run the script. The following are available: -* `npm run upgradeBridgeOnHome` -* `npm run upgradeValidatorsOnForeign` -* `npm run upgradeBridgeOnForeign` -* `npm run migrateToMCD` + +Scripts related to MCD migration upgrade: +* `npm run mcdUpgrade:upgradeBridgeOnHome` +* `npm run mcdUpgrade:upgradeValidatorsOnForeign` +* `npm run mcdUpgrade:upgradeBridgeOnForeign` +* `npm run mcdUpgrade:migrateToMCD` + +Scripts related to Chai upgrade: +* `npm run chaiUpgrade:upgradeBridgeOnForeign` (Requires `NEW_IMPLEMENTATION_ETH_BRIDGE` .env param) +* `npm run chaiUpgrade:initializeChai` (Requires `CHAI_INTEREST_RECEIVER` .env param) + +Scripts useful for changing bridge parameters: +* `npm run setHomeDailyLimit` (Requires `HOME_DAILY_LIMIT` .env param) diff --git a/upgrade/package.json b/upgrade/package.json index 3ed1e461f..deb2b48db 100644 --- a/upgrade/package.json +++ b/upgrade/package.json @@ -4,10 +4,14 @@ "main": "index.js", "license": "GPLv3", "scripts": { - "upgradeBridgeOnHome": "node src/upgradeBridgeOnHome.js", - "upgradeValidatorsOnForeign": "node src/upgradeValidatorsOnForeign.js", - "upgradeBridgeOnForeign": "node src/upgradeBridgeOnForeign.js", - "migrateToMCD": "node src/migrateToMCD.js" + "mcdUpgrade:upgradeBridgeOnHome": "node src/mcdUpgrade/upgradeBridgeOnHome.js", + "mcdUpgrade:upgradeValidatorsOnForeign": "node src/mcdUpgrade/upgradeValidatorsOnForeign.js", + "mcdUpgrade:upgradeBridgeOnForeign": "node src/mcdUpgrade/upgradeBridgeOnForeign.js", + "mcdUpgrade:migrateToMCD": "node src/mcdUpgrade/migrateToMCD.js", + "chaiUpgrade:upgradeBridgeOnForeign": "node src/chaiUpgrade/upgradeBridgeOnForeign.js", + "chaiUpgrade:initializeChai": "node src/chaiUpgrade/initializeChai.js", + "setHomeDailyLimit": "node src/setHomeDailyLimit.js", + "lint": "eslint ." }, "dependencies": { "dotenv": "^8.2.0", diff --git a/upgrade/src/chaiUpgrade/initializeChai.js b/upgrade/src/chaiUpgrade/initializeChai.js new file mode 100644 index 000000000..de5686a83 --- /dev/null +++ b/upgrade/src/chaiUpgrade/initializeChai.js @@ -0,0 +1,48 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + FOREIGN_PRIVKEY, + FOREIGN_RPC_URL, + FOREING_BRIDGE_ADDRESS, + ROLE, + FOREIGN_START_BLOCK, + FOREIGN_GAS_PRICE, + CHAI_INTEREST_RECEIVER +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) + +const initializeChai = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) + const bridge = new web3.eth.Contract(foreignBridgeAbi, FOREING_BRIDGE_ADDRESS) + + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = bridge.methods.initializeChaiToken(CHAI_INTEREST_RECEIVER).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +initializeChai() diff --git a/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js b/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js new file mode 100644 index 000000000..d15cc0d39 --- /dev/null +++ b/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js @@ -0,0 +1,45 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + FOREIGN_PRIVKEY, + FOREIGN_RPC_URL, + FOREING_BRIDGE_ADDRESS, + ROLE, + FOREIGN_START_BLOCK, + FOREIGN_GAS_PRICE, + NEW_IMPLEMENTATION_ETH_BRIDGE +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) + +const upgradeBridgeOnForeign = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = proxy.methods.upgradeTo('4', NEW_IMPLEMENTATION_ETH_BRIDGE).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +upgradeBridgeOnForeign() diff --git a/upgrade/src/mcdUpgrade/migrateToMCD.js b/upgrade/src/mcdUpgrade/migrateToMCD.js new file mode 100644 index 000000000..0aeb2ce18 --- /dev/null +++ b/upgrade/src/mcdUpgrade/migrateToMCD.js @@ -0,0 +1,47 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + FOREIGN_PRIVKEY, + FOREIGN_RPC_URL, + FOREING_BRIDGE_ADDRESS, + ROLE, + FOREIGN_START_BLOCK, + FOREIGN_GAS_PRICE +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) + +const migrateToMCD = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) + const bridge = new web3.eth.Contract(foreignBridgeAbi, FOREING_BRIDGE_ADDRESS) + + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = bridge.methods.migrateToMCD().encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +migrateToMCD() diff --git a/upgrade/src/upgradeBridgeOnForeign.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js similarity index 57% rename from upgrade/src/upgradeBridgeOnForeign.js rename to upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js index 1ba660d0a..2e177a62f 100644 --- a/upgrade/src/upgradeBridgeOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js @@ -1,9 +1,9 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') const { FOREIGN_PRIVKEY, @@ -42,24 +42,15 @@ const upgradeBridgeOnForeign = async () => { const upgradeData = bridge.methods.upgradeToV250().encodeABI() const data = proxy.methods.upgradeToAndCall('3', NEW_IMPLEMENTATION_ETH_BRIDGE, upgradeData).encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data).estimateGas({ - from: address - }) - const receipt = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: FOREING_BRIDGE_ADDRESS, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js new file mode 100644 index 000000000..62bd1dcea --- /dev/null +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js @@ -0,0 +1,46 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + HOME_PRIVKEY, + HOME_RPC_URL, + HOME_BRIDGE_ADDRESS, + ROLE, + HOME_START_BLOCK, + HOME_GAS_PRICE, + NEW_IMPLEMENTATION_XDAI_BRIDGE +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(HOME_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(HOME_PRIVKEY) + +const proxy = new web3.eth.Contract(proxyAbi, HOME_BRIDGE_ADDRESS) + +const upgradeBridgeOnHome = async () => { + try { + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = proxy.methods.upgradeTo('3', NEW_IMPLEMENTATION_XDAI_BRIDGE).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: HOME_BRIDGE_ADDRESS, + fromBlock: HOME_START_BLOCK, + gasPrice: HOME_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +upgradeBridgeOnHome() diff --git a/upgrade/src/upgradeValidatorsOnForeign.js b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js similarity index 58% rename from upgrade/src/upgradeValidatorsOnForeign.js rename to upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js index 76eea31b0..162d0bb0b 100644 --- a/upgrade/src/upgradeValidatorsOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js @@ -1,10 +1,10 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const foreignBridgeAbi = require('../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') const migrationMethodAbi = [ { @@ -49,24 +49,15 @@ const upgradeValidatorsOnForeign = async () => { const data = proxy.methods.upgradeToAndCall('2', NEW_IMPLEMENTATION_ETH_VALIDATORS, upgradeData).encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(validatorsAddress, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(validatorsAddress, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: validatorsAddress, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/migrateToMCD.js b/upgrade/src/migrateToMCD.js deleted file mode 100644 index 2dd04519c..000000000 --- a/upgrade/src/migrateToMCD.js +++ /dev/null @@ -1,56 +0,0 @@ -require('dotenv').config() -const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const foreignBridgeAbi = require('../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') - -const { - FOREIGN_PRIVKEY, - FOREIGN_RPC_URL, - FOREING_BRIDGE_ADDRESS, - ROLE, - FOREIGN_START_BLOCK, - FOREIGN_GAS_PRICE -} = process.env - -const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) -const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) - -const migrateToMCD = async () => { - try { - const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) - const bridge = new web3.eth.Contract(foreignBridgeAbi, FOREING_BRIDGE_ADDRESS) - - const ownerAddress = await proxy.methods.upgradeabilityOwner().call() - const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) - - await validatorState(web3, address, multiSigWallet) - - const data = bridge.methods.migrateToMCD().encodeABI() - - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: FOREING_BRIDGE_ADDRESS, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } - } catch (e) { - console.log(e.message) - } -} - -migrateToMCD() diff --git a/upgrade/src/setHomeDailyLimit.js b/upgrade/src/setHomeDailyLimit.js new file mode 100644 index 000000000..4069c2740 --- /dev/null +++ b/upgrade/src/setHomeDailyLimit.js @@ -0,0 +1,48 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../abi/multiSigwallet') +const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi +const homeBridgeAbi = require('../../build/contracts/HomeBridgeErcToNative').abi +const validatorState = require('./utils/validatorState') +const callMultiSigWallet = require('./utils/callMultiSigWallet') + +const { + HOME_PRIVKEY, + HOME_RPC_URL, + HOME_BRIDGE_ADDRESS, + ROLE, + HOME_START_BLOCK, + HOME_GAS_PRICE, + HOME_DAILY_LIMIT +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(HOME_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(HOME_PRIVKEY) + +const setHomeDailyLimit = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, HOME_BRIDGE_ADDRESS) + const bridge = new web3.eth.Contract(homeBridgeAbi, HOME_BRIDGE_ADDRESS) + + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = bridge.methods.setDailyLimit(HOME_DAILY_LIMIT).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: HOME_BRIDGE_ADDRESS, + fromBlock: HOME_START_BLOCK, + gasPrice: HOME_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +setHomeDailyLimit() diff --git a/upgrade/src/upgradeBridgeOnHome.js b/upgrade/src/upgradeBridgeOnHome.js deleted file mode 100644 index acd2eb3bb..000000000 --- a/upgrade/src/upgradeBridgeOnHome.js +++ /dev/null @@ -1,55 +0,0 @@ -require('dotenv').config() -const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') - -const { - HOME_PRIVKEY, - HOME_RPC_URL, - HOME_BRIDGE_ADDRESS, - ROLE, - HOME_START_BLOCK, - HOME_GAS_PRICE, - NEW_IMPLEMENTATION_XDAI_BRIDGE -} = process.env - -const web3 = new Web3(new Web3.providers.HttpProvider(HOME_RPC_URL)) -const { address } = web3.eth.accounts.wallet.add(HOME_PRIVKEY) - -const proxy = new web3.eth.Contract(proxyAbi, HOME_BRIDGE_ADDRESS) - -const upgradeBridgeOnHome = async () => { - try { - const ownerAddress = await proxy.methods.upgradeabilityOwner().call() - const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) - - await validatorState(web3, address, multiSigWallet) - - const data = proxy.methods.upgradeTo('3', NEW_IMPLEMENTATION_XDAI_BRIDGE).encodeABI() - - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(HOME_BRIDGE_ADDRESS, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(HOME_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: HOME_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: HOME_START_BLOCK, - contract: multiSigWallet, - destination: HOME_BRIDGE_ADDRESS, - data, - address, - gasPrice: HOME_GAS_PRICE - }) - } - } catch (e) { - console.log(e.message) - } -} - -upgradeBridgeOnHome() diff --git a/upgrade/src/confirmTransaction.js b/upgrade/src/utils/callMultiSigWallet.js similarity index 70% rename from upgrade/src/confirmTransaction.js rename to upgrade/src/utils/callMultiSigWallet.js index 7a6a3ff81..531732813 100644 --- a/upgrade/src/confirmTransaction.js +++ b/upgrade/src/utils/callMultiSigWallet.js @@ -39,11 +39,30 @@ const confirmTransaction = async ({ contract, fromBlock = 0, destination, data, console.log(`Confirmation status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) } -function addExtraGas(gas) { - gas = toBN(gas) +function addExtraGas(initialGas) { + const gas = toBN(initialGas) const extraPercentage = toBN(4) return gas.mul(extraPercentage) } -module.exports = confirmTransaction +const callMultiSigWallet = async ({ role, contract, destination, fromBlock, gasPrice, address, data }) => { + if (role === 'leader') { + const gas = await contract.methods.submitTransaction(destination, 0, data).estimateGas({ from: address }) + const receipt = await contract.methods + .submitTransaction(destination, 0, data) + .send({ from: address, gas, gasPrice }) + console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) + } else { + await confirmTransaction({ + fromBlock, + contract, + destination, + data, + address, + gasPrice + }) + } +} + +module.exports = callMultiSigWallet diff --git a/upgrade/src/validatorState.js b/upgrade/src/utils/validatorState.js similarity index 100% rename from upgrade/src/validatorState.js rename to upgrade/src/utils/validatorState.js