From f58a2c349fe364ce22d8116743708e3d22da7b86 Mon Sep 17 00:00:00 2001 From: stubbsta Date: Wed, 13 Aug 2025 11:00:45 +0200 Subject: [PATCH] Add proxy contract for TST --- script/DeployTokenWithProxy.s.sol | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 script/DeployTokenWithProxy.s.sol diff --git a/script/DeployTokenWithProxy.s.sol b/script/DeployTokenWithProxy.s.sol new file mode 100644 index 0000000..35920b1 --- /dev/null +++ b/script/DeployTokenWithProxy.s.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.19 <0.9.0; + +import { BaseScript } from "./Base.s.sol"; +import { TestStableToken } from "../test/TestStableToken.sol"; +import { + TransparentUpgradeableProxy, + ITransparentUpgradeableProxy +} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import { ProxyAdmin } from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +contract DeployTokenWithProxy is BaseScript { + function run() public broadcast returns (address proxy, address implementation, address admin) { + // Deploy the initial implementation + implementation = address(new TestStableToken()); + + // Deploy proxy admin + admin = address(new ProxyAdmin()); + + // Deploy the proxy with empty initialization data + proxy = address(new TransparentUpgradeableProxy(implementation, admin, "")); + + return (proxy, implementation, admin); + } +} + +contract UpdateTokenImplementation is BaseScript { + function run(address proxyAddress, address proxyAdminAddress) public broadcast returns (address newImplementation) { + // Deploy new implementation + newImplementation = address(new TestStableToken()); + + // Upgrade via ProxyAdmin + ProxyAdmin(proxyAdminAddress).upgradeAndCall( + ITransparentUpgradeableProxy(proxyAddress), + newImplementation, + "" + ); + + return newImplementation; + } +} \ No newline at end of file