mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-09 14:18:04 -05:00
172 lines
7.6 KiB
Solidity
172 lines
7.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.13;
|
|
|
|
import {ForkManagement} from 'script/helpers/ForkManagement.sol';
|
|
import 'forge-std/Script.sol';
|
|
import {ILensGovernable} from 'contracts/interfaces/ILensGovernable.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';
|
|
import {LibString} from 'solady/utils/LibString.sol';
|
|
|
|
contract S04_PerformV2Upgrade is Script, ForkManagement {
|
|
// add this to be excluded from coverage report
|
|
function testLensV1ToV2Upgrade() public {}
|
|
|
|
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;
|
|
|
|
ILensGovernable legacyLensHub; // We just need the `getGovernance` function
|
|
TransparentUpgradeableProxy lensHubAsProxy;
|
|
LensV2UpgradeContract lensV2UpgradeContract;
|
|
Governance governanceContract;
|
|
address proxyAdmin;
|
|
ProxyAdmin proxyAdminContract;
|
|
|
|
function loadBaseAddresses() internal override {
|
|
address lensHubProxyAddress = json.readAddress(string(abi.encodePacked('.', targetEnv, '.LensHub')));
|
|
legacyLensHub = ILensGovernable(lensHubProxyAddress);
|
|
vm.label(lensHubProxyAddress, 'LensHub');
|
|
console.log('Lens Hub Proxy: %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('LensHubProxy Current 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 mock owner address: %s', address(_governance.owner));
|
|
|
|
(_proxyAdmin.owner, _proxyAdmin.ownerPk) = deriveRememberKey(mnemonic, 2);
|
|
console.log('ProxyAdmin mock owner 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());
|
|
console.log('governanceContract owner(): %s', governanceContract.owner());
|
|
|
|
if (isEnvSet('DEPLOYMENT_ENVIRONMENT')) {
|
|
if (LibString.eq(vm.envString('DEPLOYMENT_ENVIRONMENT'), 'production')) {
|
|
console.log('proxyAdminContract controllerContract(): %s', proxyAdminContract.controllerContract());
|
|
console.log('governanceContract controllerContract(): %s', governanceContract.controllerContract());
|
|
console.log('LensV2 Upgrade Contract PROXY_ADMIN: %s', address(lensV2UpgradeContract.PROXY_ADMIN()));
|
|
console.log('LensV2 Upgrade Contract GOVERNANCE: %s', address(lensV2UpgradeContract.GOVERNANCE()));
|
|
console.log('New Implementation: %s', lensV2UpgradeContract.newImplementation());
|
|
|
|
console.log('This script is not allowed to run on production');
|
|
revert();
|
|
} else {
|
|
console.log('DEPLOYMENT_ENVIRONMENT is not production');
|
|
revert();
|
|
}
|
|
} else {
|
|
vm.broadcast(_proxyAdmin.ownerPk);
|
|
proxyAdminContract.setControllerContract(address(lensV2UpgradeContract));
|
|
console.log(
|
|
'Changed the proxyAdminContract controller contract from %s to %s',
|
|
address(0),
|
|
address(lensV2UpgradeContract)
|
|
);
|
|
|
|
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('proxyAdminContract controllerContract(): %s', proxyAdminContract.controllerContract());
|
|
console.log('governanceContract controllerContract(): %s', governanceContract.controllerContract());
|
|
|
|
console.log('New Implementation: %s', lensV2UpgradeContract.newImplementation());
|
|
|
|
console.log('LensV2 Upgrade Contract PROXY_ADMIN: %s', address(lensV2UpgradeContract.PROXY_ADMIN()));
|
|
console.log('LensV2 Upgrade Contract 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);
|
|
}
|
|
}
|
|
}
|