From 31818e0a5d8640fb722fe6cf63f6e28b20ea9d18 Mon Sep 17 00:00:00 2001 From: jeff <113397187+cyberhorsey@users.noreply.github.com> Date: Sun, 11 Jun 2023 08:26:02 -0700 Subject: [PATCH] feat(protocol): proxy upgrade scripts (#13944) --- packages/protocol/package.json | 3 +- .../upgrade/UpgradeAddressManager.s.sol | 26 +++++++++++++++ .../script/upgrade/UpgradeBridge.s.sol | 25 ++++++++++++++ .../script/upgrade/UpgradeScript.s.sol | 33 +++++++++++++++++++ .../script/upgrade/UpgradeSignalService.sol | 26 +++++++++++++++ .../script/upgrade/UpgradeTaikoL1.s.sol | 25 ++++++++++++++ .../script/upgrade/UpgradeTaikoL2.s.sol | 25 ++++++++++++++ .../script/upgrade/UpgradeTaikoToken.s.sol | 26 +++++++++++++++ .../script/upgrade/UpgradeTokenVault.s.sol | 26 +++++++++++++++ packages/protocol/script/upgrade_to.sh | 10 ++++++ 10 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 packages/protocol/script/upgrade/UpgradeAddressManager.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeBridge.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeScript.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeSignalService.sol create mode 100644 packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol create mode 100644 packages/protocol/script/upgrade/UpgradeTokenVault.s.sol create mode 100755 packages/protocol/script/upgrade_to.sh diff --git a/packages/protocol/package.json b/packages/protocol/package.json index eec3c18ed3..3cfb8ca4e0 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -20,7 +20,8 @@ "snapshot": "forge snapshot --match-path test/**/*.t.sol", "test": "forge test -vvv --gas-report --fuzz-seed $(date +%s) --match-path test/**/*.t.sol", "test:coverage": "forge coverage --report lcov", - "test:genesis": "./test/genesis/generate_genesis.test.sh" + "test:genesis": "./test/genesis/generate_genesis.test.sh", + "upgrade": "./script/upgrade_to.sh" }, "keywords": [ "ZKP", diff --git a/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol b/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol new file mode 100644 index 0000000000..426bcbb52b --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeAddressManager.s.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/common/AddressManager.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeAddressManager is UpgradeScript { + function run() external setUp { + AddressManager newAddressManager = new ProxiedAddressManager(); + proxy.upgradeTo(address(newAddressManager)); + console2.log( + "proxy upgraded AddressManager implementation to", + address(newAddressManager) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeBridge.s.sol b/packages/protocol/script/upgrade/UpgradeBridge.s.sol new file mode 100644 index 0000000000..fd52329292 --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeBridge.s.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/bridge/Bridge.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeBridge is UpgradeScript { + function run() external setUp { + Bridge newBridge = new ProxiedBridge(); + proxy.upgradeTo(address(newBridge)); + console2.log( + "proxy upgraded Bridge implementation to", address(newBridge) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeScript.s.sol b/packages/protocol/script/upgrade/UpgradeScript.s.sol new file mode 100644 index 0000000000..1b0f414182 --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeScript.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; + +contract UpgradeScript is Script { + uint256 public deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + address public proxyAddress = vm.envAddress("PROXY_ADDRESS"); + + TransparentUpgradeableProxy proxy; + + modifier setUp() { + require(deployerPrivateKey != 0, "PRIVATE_KEY not set"); + require(proxyAddress != address(0), "PROXY_ADDRESS not set"); + + vm.startBroadcast(deployerPrivateKey); + + proxy = TransparentUpgradeableProxy(payable(proxyAddress)); + _; + + vm.stopBroadcast(); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeSignalService.sol b/packages/protocol/script/upgrade/UpgradeSignalService.sol new file mode 100644 index 0000000000..64da9258e4 --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeSignalService.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/signal/SignalService.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeSignalService is UpgradeScript { + function run() external setUp { + SignalService newSignalService = new ProxiedSignalService(); + proxy.upgradeTo(address(newSignalService)); + console2.log( + "proxy upgraded SignalService implementation to", + address(newSignalService) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol new file mode 100644 index 0000000000..8379996c2a --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/L1/TaikoL1.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeTaikoL1 is UpgradeScript { + function run() external setUp { + TaikoL1 newTaikoL1 = new ProxiedTaikoL1(); + proxy.upgradeTo(address(newTaikoL1)); + console2.log( + "proxy upgraded taiko L1 implementation to", address(newTaikoL1) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol new file mode 100644 index 0000000000..85c042eda7 --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeTaikoL2.s.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/L2/TaikoL2.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeTaikoL2 is UpgradeScript { + function run() external setUp { + TaikoL2 newTaikoL2 = new ProxiedTaikoL2(); + proxy.upgradeTo(address(newTaikoL2)); + console2.log( + "proxy upgraded TaikoL2 implementation to", address(newTaikoL2) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol new file mode 100644 index 0000000000..4d4104b5b3 --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeTaikoToken.s.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/L1/TaikoToken.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeTaikoToken is UpgradeScript { + function run() external setUp { + TaikoToken newTaikoToken = new ProxiedTaikoToken(); + proxy.upgradeTo(address(newTaikoToken)); + console2.log( + "proxy upgraded TaikoToken implementation to", + address(newTaikoToken) + ); + } +} diff --git a/packages/protocol/script/upgrade/UpgradeTokenVault.s.sol b/packages/protocol/script/upgrade/UpgradeTokenVault.s.sol new file mode 100644 index 0000000000..b0dc597cbf --- /dev/null +++ b/packages/protocol/script/upgrade/UpgradeTokenVault.s.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +// _____ _ _ _ _ +// |_ _|_ _(_) |_____ | | __ _| |__ ___ +// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< +// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ + +pragma solidity ^0.8.18; + +import "forge-std/Script.sol"; +import "forge-std/console2.sol"; +import + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; +import "../../contracts/bridge/TokenVault.sol"; +import "./UpgradeScript.s.sol"; + +contract UpgradeTokenVault is UpgradeScript { + function run() external setUp { + TokenVault newTokenVault = new ProxiedTokenVault(); + proxy.upgradeTo(address(newTokenVault)); + console2.log( + "proxy upgraded TokenVault implementation to", + address(newTokenVault) + ); + } +} diff --git a/packages/protocol/script/upgrade_to.sh b/packages/protocol/script/upgrade_to.sh new file mode 100755 index 0000000000..9f68e09dce --- /dev/null +++ b/packages/protocol/script/upgrade_to.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e +: "${FORK_URL:=http://localhost:8545}" + +forge script script/upgrade/Upgrade$CONTRACT.s.sol:Upgrade$CONTRACT \ + --fork-url $FORK_URL \ + --broadcast \ + --ffi \ + -vvvv \ No newline at end of file