mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-06 21:03:57 -05:00
misc: Added mock admins to upgrade deployment script and upgrade script
This commit is contained in:
@@ -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
|
||||
|
||||
149
script/LensV1ToV2Upgrade.s.sol
Normal file
149
script/LensV1ToV2Upgrade.s.sol
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user