Skip to content

Report contract data and perform bridge upgrade #187

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,5 @@ yarn-error.log
.gitmodules

.DS_Store

.vscode
10 changes: 10 additions & 0 deletions sepolia/2024-07-09-migrate-bridge-ownership/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
OP_COMMIT=029fb1ccaffedd3e860deb157f752bbb1942f7c4
BASE_CONTRACTS_COMMIT=c14278a67d6eb029d3b9b505eea67d2b2ea637af

ANCHOR_STATE_REGISTRY_PROXY="0xfb17A817168BD4DFd48Fb6C9fd07B4409501e3E0"
DELAYED_WETH_PROXY="0x9dc3d8500c295e95D5C4EBDeD3222a74fF19e524"
DISPUTE_GAME_FACTORY_PROXY="0xe545eDE9d1FaDaD12984c31467F56405884b9398"
FAULT_DISPUTE_GAME="0x1E06BAADA3F0a89741B1e9A573d8F8cA9814af01"
PERMISSIONED_DISPUTE_GAME="0x50406f516C767f903677DD0875217B410F334540"

SEPOLIA_RPC_URL="https://sepolia.gateway.tenderly.co"
10 changes: 10 additions & 0 deletions sepolia/2024-07-09-migrate-bridge-ownership/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
include ../../Makefile
include ../.env
include .env

##
# Foundry commands
##
.PHONY: verify
verify:
forge script --rpc-url $(SEPOLIA_RPC_URL) VerifyContractState
20 changes: 20 additions & 0 deletions sepolia/2024-07-09-migrate-bridge-ownership/foundry.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
broadcast = 'records'
fs_permissions = [ {access = "read-write", path = "./"} ]
optimizer = true
optimizer_runs = 999999
solc_version = "0.8.15"
via-ir = true
remappings = [
'@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/',
'@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts',
'@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts',
'@rari-capital/solmate/=lib/solmate/',
'@base-contracts/=lib/base-contracts',
'solady/=lib/solady/src/'
]

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "forge-std/Script.sol";
import "forge-std/console.sol";

import "@eth-optimism-bedrock/src/dispute/AnchorStateRegistry.sol";
import "@eth-optimism-bedrock/src/dispute/weth/DelayedWETH.sol";
import {Constants} from "@eth-optimism-bedrock/src/libraries/Constants.sol";

contract VerifyContractState is Script {

function run() public {
verifyAnchorStateRegistry();
verifyDelayedWETH();
verifyDisputeGameFactory();
verifyFaultDisputeGame();
verifyPermissionedDisputeGame();
}

function verifyAnchorStateRegistry() internal view {
address addr = vm.envAddress("ANCHOR_STATE_REGISTRY_PROXY");

address impl = bytes32ToAddress(vm.load(addr, Constants.PROXY_IMPLEMENTATION_ADDRESS));

AnchorStateRegistry anchorStateRegistry = AnchorStateRegistry(addr);

string memory version = anchorStateRegistry.version();
address disputeGameFactoryAddr = address(anchorStateRegistry.disputeGameFactory());

// Note that Hash is a custom type around bytes32
(Hash rootCannon, uint256 l2BlockNumberCannon) = anchorStateRegistry.anchors(GameType.wrap(0));
(Hash rootPermissionedCannon, uint256 l2BlockNumberPermissionedCannon) = anchorStateRegistry.anchors(GameType.wrap(1));

console.log("AnchorStateRegistry: %s", addr);
console.log("- Implementation address: %s", impl);
console.log("- Version: %s", version);
console.log("- DisputeGameFactory address: %s", disputeGameFactoryAddr);
console.log("- Anchor for GameType.CANNON: %s, %s", vm.toString(Hash.unwrap(rootCannon)), l2BlockNumberCannon);
console.log("- Anchor for GameType.PERMISSIONED_CANNON: %s, %s", vm.toString(Hash.unwrap(rootPermissionedCannon)), l2BlockNumberPermissionedCannon);
console.log("==================\n");
}

function verifyDelayedWETH() internal {
address addr = vm.envAddress("DELAYED_WETH_PROXY");

address impl = bytes32ToAddress(vm.load(addr, Constants.PROXY_IMPLEMENTATION_ADDRESS));

DelayedWETH delayedWeth = DelayedWETH(payable(addr));

string memory version = delayedWeth.version();
address owner = delayedWeth.owner();
address config = address(delayedWeth.config());

console.log("DelayedWETH: %s", addr);
console.log("- Implementation address: %s", impl);
console.log("- Version: %s", version);
console.log("- Owner: %s", owner);
console.log("- SuperchainConfig address: %s", config);
console.log("==================\n");
}

function verifyDisputeGameFactory() internal {
// TODO: Implement
}

function verifyFaultDisputeGame() internal {
// TODO: Implement
}

function verifyPermissionedDisputeGame() internal {
// TODO: Implement
}

function bytes32ToAddress(bytes32 _bytes32) internal pure returns (address) {
return address(uint160(uint256(_bytes32)));
}
}