misc: Added mock admins to upgrade deployment script and upgrade script

This commit is contained in:
vicnaum
2023-10-04 23:04:35 +02:00
parent 7bbafe8cc9
commit 67ad90e52f
3 changed files with 203 additions and 8 deletions

View File

@@ -14,3 +14,6 @@ TENDERLY_HEAD_ID=
# TESTING_FORK=mainnet
# TESTING_FORK_CURRENT_VERSION=1
# TESTING_FORK_BLOCK=45504400
# Uncomment to deploy to production using production proxyAdmin and Governance addresses
# DEPLOYMENT_ENVIRONMENT=production

View File

@@ -0,0 +1,149 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import {ForkManagement} from 'script/helpers/ForkManagement.sol';
import 'forge-std/Script.sol';
import {LensHub as LegacyLensHub} from './../lib/core-private/contracts/core/LensHub.sol';
import {Governance} from 'contracts/misc/access/Governance.sol';
import {LensV2UpgradeContract} from 'contracts/misc/LensV2UpgradeContract.sol';
import {ProxyAdmin} from 'contracts/misc/access/ProxyAdmin.sol';
import {TransparentUpgradeableProxy} from '@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol';
contract LensV1ToV2Upgrade is Script, ForkManagement {
using stdJson for string;
bytes32 constant ADMIN_SLOT = bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1);
struct LensAccount {
uint256 ownerPk;
address owner;
uint256 profileId;
}
string mnemonic;
LensAccount _deployer;
LensAccount _governance;
LensAccount _proxyAdmin;
LegacyLensHub legacyLensHub;
TransparentUpgradeableProxy lensHubAsProxy;
LensV2UpgradeContract lensV2UpgradeContract;
Governance governanceContract;
address proxyAdmin;
ProxyAdmin proxyAdminContract;
function loadBaseAddresses() internal override {
address lensHubProxyAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHubProxy')));
legacyLensHub = LegacyLensHub(lensHubProxyAddress);
vm.label(lensHubProxyAddress, 'LensHub');
console.log('Legacy Lens Hub: %s', address(legacyLensHub));
lensHubAsProxy = TransparentUpgradeableProxy(payable(lensHubProxyAddress));
address lensV2UpgradeContractAddress = json.readAddress(
string(abi.encodePacked('.', targetEnv, '.LensV2UpgradeContract'))
);
lensV2UpgradeContract = LensV2UpgradeContract(lensV2UpgradeContractAddress);
vm.label(lensV2UpgradeContractAddress, 'LensV2UpgradeContract');
console.log('Lens V2 Upgrade Contract: %s', address(lensV2UpgradeContract));
address governanceContractAddress = json.readAddress(
string(abi.encodePacked('.', targetEnv, '.GovernanceContract'))
);
governanceContract = Governance(governanceContractAddress);
vm.label(governanceContractAddress, 'GovernanceContract');
console.log('Governance Contract: %s', address(governanceContract));
proxyAdmin = address(uint160(uint256(vm.load(lensHubProxyAddress, ADMIN_SLOT))));
vm.label(proxyAdmin, 'ProxyAdmin');
console.log('Proxy Admin: %s', proxyAdmin);
address proxyAdminContractAddress = json.readAddress(
string(abi.encodePacked('.', targetEnv, '.ProxyAdminContract'))
);
proxyAdminContract = ProxyAdmin(proxyAdminContractAddress);
vm.label(proxyAdminContractAddress, 'ProxyAdmin');
console.log('Proxy Admin Contract: %s', address(proxyAdminContract));
}
function loadPrivateKeys() internal {
if (isEnvSet('MNEMONIC')) {
mnemonic = vm.envString('MNEMONIC');
}
if (bytes(mnemonic).length == 0) {
revert('Missing mnemonic');
}
console.log('\n');
(_deployer.owner, _deployer.ownerPk) = deriveRememberKey(mnemonic, 0);
console.log('Deployer address: %s', address(_deployer.owner));
(_governance.owner, _governance.ownerPk) = deriveRememberKey(mnemonic, 1);
console.log('Governance address: %s', address(_governance.owner));
(_proxyAdmin.owner, _proxyAdmin.ownerPk) = deriveRememberKey(mnemonic, 2);
console.log('ProxyAdmin address: %s', address(_proxyAdmin.owner));
console.log('\n');
console.log('Current block:', block.number);
}
function run(string memory targetEnv_) external {
targetEnv = targetEnv_;
loadJson();
checkNetworkParams();
loadBaseAddresses();
loadPrivateKeys();
address governance = legacyLensHub.getGovernance();
console.log('LensHub Current governance: %s', address(governance));
require(governance == address(governanceContract), 'LensHub Governance should be set to GovernanceContract');
// vm.broadcast(_governance.ownerPk);
// legacyLensHub.setGovernance(address(governanceContract));
// console.log('Changed the governance from %s to %s', address(governance), address(governanceContract));
// vm.broadcast(_deployer.ownerPk);
// lensHubAsProxy.changeAdmin(address(proxyAdminContract));
// console.log('Changed the proxy admin from %s to %s', address(_deployer.owner), address(proxyAdminContract));
console.log('proxyAdminContract owner(): %s', proxyAdminContract.owner());
vm.broadcast(_proxyAdmin.ownerPk);
proxyAdminContract.setControllerContract(address(lensV2UpgradeContract));
console.log(
'Changed the proxyAdminContract controller contract from %s to %s',
address(0),
address(lensV2UpgradeContract)
);
console.log('governanceContract owner(): %s', governanceContract.owner());
vm.broadcast(_governance.ownerPk);
governanceContract.setControllerContract(address(lensV2UpgradeContract));
console.log(
'Changed the governanceContract controller contract from %s to %s',
address(0),
address(lensV2UpgradeContract)
);
console.log('New Implementation: %s', lensV2UpgradeContract.newImplementation());
console.log('PROXY_ADMIN: %s', address(lensV2UpgradeContract.PROXY_ADMIN()));
console.log('GOVERNANCE: %s', address(lensV2UpgradeContract.GOVERNANCE()));
vm.broadcast(_governance.ownerPk);
lensV2UpgradeContract.executeLensV2Upgrade();
console.log('Upgrade complete!');
bytes32 PROXY_IMPLEMENTATION_STORAGE_SLOT = bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1);
address hubImplAddr = address(
uint160(uint256(vm.load(address(legacyLensHub), PROXY_IMPLEMENTATION_STORAGE_SLOT)))
);
console.log('New implementation:', hubImplAddr);
}
}

View File

@@ -57,6 +57,9 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
address moduleRegistry;
LensAccount _deployer;
LensAccount _proxyAdmin;
LensAccount _governance;
address governance;
address proxyAdmin;
address migrationAdmin;
@@ -87,9 +90,36 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
vm.label(legacyProfileFollowModule, 'LegacyProfileFollowModule');
console.log('Legacy Profile Follow Module: %s', legacyProfileFollowModule);
proxyAdmin = address(uint160(uint256(vm.load(lensHub, ADMIN_SLOT))));
console.log('\n');
if (isEnvSet('DEPLOYMENT_ENVIRONMENT')) {
if (LibString.eq(vm.envString('DEPLOYMENT_ENVIRONMENT'), 'production')) {} else {
console.log('DEPLOYMENT_ENVIRONMENT is not production');
revert();
}
console.log('DEPLOYMENT_ENVIRONMENT is production');
console.log('Using governance and proxy admin from the LensHub to set as admins of contracts:');
governance = legacyLensHub.getGovernance();
console.log('\tReal Governance: %s', governance);
proxyAdmin = address(uint160(uint256(vm.load(lensHub, ADMIN_SLOT))));
console.log('Real ProxyAdmin: %s', proxyAdmin);
} else {
console.log('Using governance and proxy admin from test mnemonic:');
(_governance.owner, _governance.ownerPk) = deriveRememberKey(mnemonic, 1);
console.log('\tMock Governance: %s', _governance.owner);
governance = _governance.owner;
(_proxyAdmin.owner, _proxyAdmin.ownerPk) = deriveRememberKey(mnemonic, 2);
console.log('\tMock ProxyAdmin: %s', _proxyAdmin.owner);
proxyAdmin = _proxyAdmin.owner;
}
console.log('\n');
vm.label(proxyAdmin, 'ProxyAdmin');
console.log('Proxy Admin: %s', proxyAdmin);
vm.label(governance, 'Governance');
migrationAdmin = proxyAdmin;
// TODO: change this to the real migration admin
@@ -129,18 +159,14 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
targetEnv = targetEnv_;
loadJson();
checkNetworkParams();
loadBaseAddresses();
loadPrivateKeys();
governance = legacyLensHub.getGovernance();
vm.label(governance, 'Governance');
console.log('Governance: %s', governance);
loadBaseAddresses();
deploy();
}
function saveContractAddress(string memory contractName, address deployedAddress) internal {
console.log('Saving %s (%s) into addresses under %s environment', contractName, deployedAddress, targetEnv);
// console.log('Saving %s (%s) into addresses under %s environment', contractName, deployedAddress, targetEnv);
string[] memory inputs = new string[](5);
inputs[0] = 'node';
inputs[1] = 'script/helpers/saveAddress.js';
@@ -226,6 +252,7 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
})
)
);
saveContractAddress('migrationAdmin', migrationAdmin);
// "arguments": [
// "0x072E491679Ed6f4fF4d419Ba909D5789116f2182",
@@ -267,10 +294,12 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
vm.writeLine(addressesFile, string.concat('GovernanceContract: ', vm.toString(address(governanceContract))));
saveContractAddress('GovernanceContract', address(governanceContract));
console.log('GovernanceContract: %s', address(governanceContract));
saveContractAddress('GovernanceContractAdmin', governance);
proxyAdminContract = new ProxyAdmin(address(legacyLensHub), legacyLensHubImpl, proxyAdmin);
vm.writeLine(addressesFile, string.concat('ProxyAdminContract: ', vm.toString(address(proxyAdminContract))));
saveContractAddress('ProxyAdminContract', address(proxyAdminContract));
saveContractAddress('ProxyAdminContractAdmin', proxyAdmin);
console.log('ProxyAdminContract: %s', address(proxyAdminContract));
address lensV2UpgradeContract = address(
@@ -294,6 +323,20 @@ contract LensV2UpgradeDeployment is Script, ForkManagement, ArrayHelpers {
console.log('\t"%s"', lensHubV2Impl);
console.log(']');
console.log('\n');
console.log('After running this script - change LensHub proxy admin and governance to:');
console.log(
'From: %s -> To: Governance contract: %s',
legacyLensHub.getGovernance(),
address(governanceContract)
);
console.log(
'From: %s -> To: ProxyAdmin contract: %s',
address(uint160(uint256(vm.load(lensHub, ADMIN_SLOT)))),
address(proxyAdminContract)
);
console.log('\n');
vm.stopBroadcast();
}