From 002c89818cdae1bd0cc485c2d8d5968114f14d7d Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Wed, 15 Jan 2025 14:52:00 -0500 Subject: [PATCH] execution script --- .../contract-upgrades/2.1.2/.env.sample | 6 +++ ...teNitroContracts2Point1Point2Upgrade.s.sol | 44 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 scripts/foundry/contract-upgrades/2.1.2/.env.sample create mode 100644 scripts/foundry/contract-upgrades/2.1.2/ExecuteNitroContracts2Point1Point2Upgrade.s.sol diff --git a/scripts/foundry/contract-upgrades/2.1.2/.env.sample b/scripts/foundry/contract-upgrades/2.1.2/.env.sample new file mode 100644 index 0000000..eba03a6 --- /dev/null +++ b/scripts/foundry/contract-upgrades/2.1.2/.env.sample @@ -0,0 +1,6 @@ +## These env vars are used for ExecuteNitroContracts2Point1Point2UpgradeScript + +UPGRADE_ACTION_ADDRESS= +INBOX_ADDRESS= +PROXY_ADMIN_ADDRESS= +PARENT_UPGRADE_EXECUTOR_ADDRESS= \ No newline at end of file diff --git a/scripts/foundry/contract-upgrades/2.1.2/ExecuteNitroContracts2Point1Point2Upgrade.s.sol b/scripts/foundry/contract-upgrades/2.1.2/ExecuteNitroContracts2Point1Point2Upgrade.s.sol new file mode 100644 index 0000000..c397b03 --- /dev/null +++ b/scripts/foundry/contract-upgrades/2.1.2/ExecuteNitroContracts2Point1Point2Upgrade.s.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.8.16; + +import "forge-std/Script.sol"; +import { + NitroContracts2Point1Point2UpgradeAction, + ProxyAdmin +} from "../../../../contracts/parent-chain/contract-upgrades/NitroContracts2Point1Point2UpgradeAction.sol"; +import {IInboxBase} from "@arbitrum/nitro-contracts-1.2.1/src/bridge/IInboxBase.sol"; +import {IERC20Bridge} from "@arbitrum/nitro-contracts-2.1.2/src/bridge/IERC20Bridge.sol"; +import {IUpgradeExecutor} from "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; + +/** + * @title ExecuteNitroContracts1Point2Point1UpgradeScript + * @notice This script executes nitro contracts 2.1.0 upgrade through UpgradeExecutor + */ +contract ExecuteNitroContracts2Point1Point2UpgradeScript is Script { + function run() public { + + NitroContracts2Point1Point2UpgradeAction upgradeAction = + NitroContracts2Point1Point2UpgradeAction(vm.envAddress("UPGRADE_ACTION_ADDRESS")); + + IInboxBase inbox = IInboxBase(vm.envAddress("INBOX_ADDRESS")); + + address bridge = address(inbox.bridge()); + + vm.startBroadcast(); + + // prepare upgrade calldata + ProxyAdmin proxyAdmin = ProxyAdmin(vm.envAddress("PROXY_ADMIN_ADDRESS")); + bytes memory upgradeCalldata = + abi.encodeCall(NitroContracts2Point1Point2UpgradeAction.perform, (bridge, proxyAdmin)); + + // execute the upgrade + // action checks prerequisites, and script will fail if the action reverts + IUpgradeExecutor executor = IUpgradeExecutor(vm.envAddress("PARENT_UPGRADE_EXECUTOR_ADDRESS")); + executor.execute(address(upgradeAction), upgradeCalldata); + + // sanity check, full checks are done on-chain by the upgrade action + require(IERC20Bridge(bridge).nativeTokenDecimals() == 18, "Unexpected native token decimals"); + + vm.stopBroadcast(); + } +}