From 7710b453575007864fe94480599adde37e5237e6 Mon Sep 17 00:00:00 2001 From: primata Date: Thu, 12 Sep 2024 22:23:18 -0300 Subject: [PATCH] improve code --- .../mcr/contracts/script/CoreDeployer.s.sol | 15 ++++--- .../mcr/contracts/script/MCRDeployer.s.sol | 9 ++-- .../contracts/script/StakingDeployer.s.sol | 7 ++- .../contracts/script/StlMoveDeployer.s.sol | 7 ++- .../mcr/contracts/script/helpers/Helper.sol | 44 ++++++++++--------- .../contracts/script/helpers/upgrade/mcr.json | 2 +- .../mcr/contracts/test/Deployer.t.sol | 11 ++++- 7 files changed, 53 insertions(+), 42 deletions(-) diff --git a/protocol-units/settlement/mcr/contracts/script/CoreDeployer.s.sol b/protocol-units/settlement/mcr/contracts/script/CoreDeployer.s.sol index 84f079b35..f31bca5ba 100644 --- a/protocol-units/settlement/mcr/contracts/script/CoreDeployer.s.sol +++ b/protocol-units/settlement/mcr/contracts/script/CoreDeployer.s.sol @@ -12,7 +12,6 @@ import {TimelockController} from "@openzeppelin/contracts/governance/TimelockCon contract CoreDeployer is MCRDeployer, StakingDeployer, StlMoveDeployer { function run() external override(MCRDeployer, StakingDeployer, StlMoveDeployer) { - // load config data _loadConfig(); @@ -23,26 +22,30 @@ contract CoreDeployer is MCRDeployer, StakingDeployer, StlMoveDeployer { vm.startBroadcast(signer); // timelock is required for all deployments - if (deployment.timelock == ZERO) { - timelock = new TimelockController(config.minDelay, config.proposers, config.executors, config.admin); - deployment.timelock = address(timelock); - } + _deployTimelock(); // Deploy or upgrade contracts conditionally deployment.moveAdmin == ZERO && deployment.move == ZERO ? _deployMove() : deployment.moveAdmin != ZERO && deployment.move != ZERO ? + // if move is already deployed, upgrade it _upgradeMove() : revert("MOVE: both admin and proxy should be registered"); + // requires move to be deployed deployment.stakingAdmin == ZERO && deployment.staking == ZERO && deployment.move != ZERO ? _deployStaking() : deployment.stakingAdmin != ZERO && deployment.staking != ZERO ? + // if staking is already deployed, upgrade it _upgradeStaking() : revert("STAKING: both admin and proxy should be registered"); + // requires move to be deployed deployment.stlMoveAdmin == ZERO && deployment.stlMove == ZERO && deployment.move != ZERO ? _deployStlMove() : deployment.stlMoveAdmin != ZERO && deployment.stlMove != ZERO ? + // if stlMove is already deployed, upgrade it _upgradeStlMove() : revert("STL: both admin and proxy should be registered"); + // requires staking and move to be deployed deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? + // if mcr is already deployed, upgrade it _upgradeMCR() : revert("MCR: both admin and proxy should be registered"); // Only write to file if chainid is not running a foundry local chain @@ -57,6 +60,8 @@ contract CoreDeployer is MCRDeployer, StakingDeployer, StlMoveDeployer { vm.stopBroadcast(); } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• function _deployMove() internal { console.log("MOVE: deploying"); diff --git a/protocol-units/settlement/mcr/contracts/script/MCRDeployer.s.sol b/protocol-units/settlement/mcr/contracts/script/MCRDeployer.s.sol index dbfece5bb..51d4a6917 100644 --- a/protocol-units/settlement/mcr/contracts/script/MCRDeployer.s.sol +++ b/protocol-units/settlement/mcr/contracts/script/MCRDeployer.s.sol @@ -24,10 +24,7 @@ contract MCRDeployer is Helper { vm.startBroadcast(signer); // timelock is required for all deployments - if (deployment.timelock == ZERO) { - timelock = new TimelockController(config.minDelay, config.proposers, config.executors, config.admin); - deployment.timelock = address(timelock); - } + _deployTimelock(); deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? @@ -41,6 +38,8 @@ contract MCRDeployer is Helper { } } + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• + function _deployMCR() internal { console.log("MCR: deploying"); MCR mcrImplementation = new MCR(); @@ -79,7 +78,7 @@ contract MCRDeployer is Helper { ), bytes32(0), bytes32(0), - block.timestamp + config.minDelay + config.minDelay ); json.serialize("to", address(timelock)); string memory zero = "0"; diff --git a/protocol-units/settlement/mcr/contracts/script/StakingDeployer.s.sol b/protocol-units/settlement/mcr/contracts/script/StakingDeployer.s.sol index 11e31a57c..3b57fc145 100644 --- a/protocol-units/settlement/mcr/contracts/script/StakingDeployer.s.sol +++ b/protocol-units/settlement/mcr/contracts/script/StakingDeployer.s.sol @@ -21,10 +21,7 @@ contract StakingDeployer is Helper { vm.startBroadcast(signer); // timelock is required for all deployments - if (deployment.timelock == ZERO) { - timelock = new TimelockController(config.minDelay, config.proposers, config.executors, config.admin); - deployment.timelock = address(timelock); - } + _deployTimelock(); deployment.stakingAdmin == ZERO && deployment.staking == ZERO && deployment.move != ZERO ? _deployStaking() : deployment.stakingAdmin != ZERO && deployment.staking != ZERO ? @@ -38,6 +35,8 @@ contract StakingDeployer is Helper { } } + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• + function _deployStaking() internal { console.log("STAKING: deploying"); MovementStaking stakingImplementation = new MovementStaking(); diff --git a/protocol-units/settlement/mcr/contracts/script/StlMoveDeployer.s.sol b/protocol-units/settlement/mcr/contracts/script/StlMoveDeployer.s.sol index 710d78f1e..249d406a3 100644 --- a/protocol-units/settlement/mcr/contracts/script/StlMoveDeployer.s.sol +++ b/protocol-units/settlement/mcr/contracts/script/StlMoveDeployer.s.sol @@ -21,10 +21,7 @@ contract StlMoveDeployer is Helper { vm.startBroadcast(signer); // timelock is required for all deployments - if (deployment.timelock == ZERO) { - timelock = new TimelockController(config.minDelay, config.proposers, config.executors, config.admin); - deployment.timelock = address(timelock); - } + _deployTimelock(); deployment.stlMoveAdmin == ZERO && deployment.stlMove == ZERO && deployment.move != ZERO ? _deployStlMove() : deployment.stlMoveAdmin != ZERO && deployment.stlMove != ZERO ? @@ -38,6 +35,8 @@ contract StlMoveDeployer is Helper { } } + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• + function _deployStlMove() internal { console.log("STL: deploying"); stlMoveToken stlMoveImplementation = new stlMoveToken(); diff --git a/protocol-units/settlement/mcr/contracts/script/helpers/Helper.sol b/protocol-units/settlement/mcr/contracts/script/helpers/Helper.sol index 401f8ccdc..c756d5d22 100644 --- a/protocol-units/settlement/mcr/contracts/script/helpers/Helper.sol +++ b/protocol-units/settlement/mcr/contracts/script/helpers/Helper.sol @@ -14,7 +14,6 @@ contract Helper is Script { TransparentUpgradeableProxy public stlMoveProxy; TransparentUpgradeableProxy public stakingProxy; TransparentUpgradeableProxy public mcrProxy; - TimelockController public timelock; string public mcrSignature = "initialize(address,uint256,uint256,uint256,address[])"; string public stakingSignature = "initialize(address)"; @@ -65,6 +64,7 @@ contract Helper is Script { function _loadDeployments() internal { // load deployments + // Inspo https://github.com/traderjoe-xyz/joe-v2/blob/main/script/deploy-core.s.sol string memory path = string.concat(root, deploymentsPath); string memory json = vm.readFile(path); bytes memory rawDeploymentData = json.parseRaw(string(abi.encodePacked(".", chainId))); @@ -72,6 +72,13 @@ contract Helper is Script { storageJson = json; } + function _deployTimelock() internal { + if (deployment.timelock == ZERO) { + timelock = new TimelockController(config.minDelay, config.proposers, config.executors, config.admin); + deployment.timelock = address(timelock); + } + } + function _storeAdminDeployment() internal returns (address admin) { Vm.Log[] memory logs = vm.getRecordedLogs(); admin = logs[logs.length-2].emitter; @@ -82,17 +89,7 @@ contract Helper is Script { string memory path = string.concat(root, deploymentsPath); string memory json = storageJson; string memory base = "new"; - json.serialize("move", deployment.move); - json.serialize("moveAdmin", deployment.moveAdmin); - json.serialize("staking", deployment.staking); - json.serialize("stakingAdmin", deployment.stakingAdmin); - json.serialize("stlMove", deployment.stlMove); - json.serialize("stlMoveAdmin", deployment.stlMoveAdmin); - json.serialize("mcr", deployment.mcr); - json.serialize("mcrAdmin", deployment.mcrAdmin); - json.serialize("timelock", deployment.timelock); - string memory newChainData = json.serialize("multisig", deployment.multisig); - + string memory newChainData = _serializer(json, deployment); // take values from storageJson that were not updated (e.g. 3771) and serialize them uint256[] memory validChains = new uint256[](4); validChains[0] = 1; // ethereum @@ -113,18 +110,23 @@ contract Helper is Script { bytes memory rawDeploymentData = sJson.parseRaw(string(abi.encodePacked(".", uint2str(chain)))); Deployment memory deploymentData = abi.decode(rawDeploymentData, (Deployment)); string memory json = uint2str(chain); - json.serialize("move", deploymentData.move); - json.serialize("moveAdmin", deploymentData.moveAdmin); - json.serialize("staking", deploymentData.staking); - json.serialize("stakingAdmin", deploymentData.stakingAdmin); - json.serialize("stlMove", deploymentData.stlMove); - json.serialize("stlMoveAdmin", deploymentData.stlMoveAdmin); - json.serialize("mcr", deploymentData.mcr); - json.serialize("mcrAdmin", deploymentData.mcrAdmin); - string memory chainData = json.serialize("timelock", deploymentData.timelock); + string memory chainData = _serializer(json, deploymentData); base.serialize(uint2str(chain), chainData); } + function _serializer(string memory json, Deployment memory deployment) internal returns (string memory) { + json.serialize("move", deployment.move); + json.serialize("moveAdmin", deployment.moveAdmin); + json.serialize("staking", deployment.staking); + json.serialize("stakingAdmin", deployment.stakingAdmin); + json.serialize("stlMove", deployment.stlMove); + json.serialize("stlMoveAdmin", deployment.stlMoveAdmin); + json.serialize("mcr", deployment.mcr); + json.serialize("mcrAdmin", deployment.mcrAdmin); + json.serialize("timelock", deployment.timelock); + return json.serialize("multisig", deployment.multisig); + } + // string to address function s2a(bytes memory str) public returns (address addr) { bytes32 data = keccak256(str); diff --git a/protocol-units/settlement/mcr/contracts/script/helpers/upgrade/mcr.json b/protocol-units/settlement/mcr/contracts/script/helpers/upgrade/mcr.json index 9f7bae2f9..0d968ac69 100644 --- a/protocol-units/settlement/mcr/contracts/script/helpers/upgrade/mcr.json +++ b/protocol-units/settlement/mcr/contracts/script/helpers/upgrade/mcr.json @@ -1 +1 @@ -{"data":"0x01d5062a0000000000000000000000001d2fbd705240d438f00bc225643c0b342ed0ee35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000849623609d000000000000000000000000e0d1c060c7fcd0b8024a6486a83f35d3262e430100000000000000000000000030133f993afe13cbeccc84b07e98f1101075919a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","operation":"OperationType.Call","to":"0xF927E1Ab4b4Eb8D8811e4Ad224bF0eea7004F87c","value":0} \ No newline at end of file +{"chainId":"31337","data":"0x01d5062a0000000000000000000000001d2fbd705240d438f00bc225643c0b342ed0ee35000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000849623609d000000000000000000000000e0d1c060c7fcd0b8024a6486a83f35d3262e430100000000000000000000000030133f993afe13cbeccc84b07e98f1101075919a0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","operation":"OperationType.Call","safeAddress":"0x4494435752a88a5458F436c8a2E6D382A02b3A73","to":"0xF927E1Ab4b4Eb8D8811e4Ad224bF0eea7004F87c","value":"0"} \ No newline at end of file diff --git a/protocol-units/settlement/mcr/contracts/test/Deployer.t.sol b/protocol-units/settlement/mcr/contracts/test/Deployer.t.sol index f069eecd4..f66c39aa1 100644 --- a/protocol-units/settlement/mcr/contracts/test/Deployer.t.sol +++ b/protocol-units/settlement/mcr/contracts/test/Deployer.t.sol @@ -1,5 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import "forge-std/Test.sol"; +import "../../src/token/MOVEToken.sol"; contract DeployerTest is Test { - -} \ No newline at end of file + + function setUp() public { + // Set the sender address + } +}