Commit f5f5e275 authored by Mark Tyneway's avatar Mark Tyneway

op-chain-ops: add L1Deployments helper

Adds a type that represents the set of L1Deployments.
Each contract, including proxies, are in the struct.
This is meant to be used as part of https://github.com/ethereum-optimism/optimism/pull/6412

This L1Deployments struct represents the intermediate JSON file
that is produced from the foundry scripts. The first deploy script
produces this JSON file and then the second turns this JSON
file into the set of hardhat-deploy style artifacts in the
`deployments` directory.
parent 49a765a4
......@@ -457,6 +457,44 @@ func NewDeployConfigWithNetwork(network, path string) (*DeployConfig, error) {
return NewDeployConfig(deployConfig)
}
// L1Deployments represents a set of L1 contracts that are deployed.
type L1Deployments struct {
AddressManager common.Address `json:"AddressManager"`
DisputeGameFactory common.Address `json:"DisputeGameFactory"`
DisputeGameFactoryProxy common.Address `json:"DisputeGameFactoryProxy"`
L1CrossDomainMessenger common.Address `json:"L1CrossDomainMessenger"`
L1CrossDomainMessengerProxy common.Address `json:"L1CrossDomainMessengerProxy"`
L1ERC721Bridge common.Address `json:"L1ERC721Bridge"`
L1ERC721BridgeProxy common.Address `json:"L1ERC721BridgeProxy"`
L1StandardBridge common.Address `json:"L1StandardBridge"`
L1StandardBridgeProxy common.Address `json:"L1StandardBridgeProxy"`
L2OutputOracle common.Address `json:"L2OutputOracle"`
L2OutputOracleProxy common.Address `json:"L2OutputOracleProxy"`
OptimismMintableERC20Factory common.Address `json:"OptimismMintableERC20Factory"`
OptimismMintableERC20FactoryProxy common.Address `json:"OptimismMintableERC20FactoryProxy"`
OptimismPortal common.Address `json:"OptimismPortal"`
OptimismPortalProxy common.Address `json:"OptimismPortalProxy"`
ProxyAdmin common.Address `json:"ProxyAdmin"`
SystemConfig common.Address `json:"SystemConfig"`
SystemConfigProxy common.Address `json:"SystemConfigProxy"`
}
// NewL1Deployments will create a new L1Deployments from a JSON file on disk
// at the given path.
func NewL1Deployments(path string) (*L1Deployments, error) {
file, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("L1 deployments at %s not found: %w", path, err)
}
var deployments L1Deployments
if err := json.Unmarshal(file, &deployments); err != nil {
return nil, fmt.Errorf("cannot unmarshal L1 deployements: %w", err)
}
return &deployments, nil
}
// NewL2ImmutableConfig will create an ImmutableConfig given an instance of a
// DeployConfig and a block.
func NewL2ImmutableConfig(config *DeployConfig, block *types.Block) (immutables.ImmutableConfig, error) {
......
......@@ -64,3 +64,29 @@ func TestCopy(t *testing.T) {
cpy.L2GenesisRegolithTimeOffset = &offset
require.NotEqual(t, decoded, cpy)
}
// TestL1Deployments ensures that NewL1Deployments can read a JSON file
// from disk and deserialize all of the key/value pairs correctly.
func TestL1Deployments(t *testing.T) {
deployments, err := NewL1Deployments("testdata/l1-deployments.json")
require.NoError(t, err)
require.NotEqual(t, deployments.AddressManager, common.Address{})
require.NotEqual(t, deployments.DisputeGameFactory, common.Address{})
require.NotEqual(t, deployments.DisputeGameFactoryProxy, common.Address{})
require.NotEqual(t, deployments.L1CrossDomainMessenger, common.Address{})
require.NotEqual(t, deployments.L1CrossDomainMessengerProxy, common.Address{})
require.NotEqual(t, deployments.L1ERC721Bridge, common.Address{})
require.NotEqual(t, deployments.L1ERC721BridgeProxy, common.Address{})
require.NotEqual(t, deployments.L1StandardBridge, common.Address{})
require.NotEqual(t, deployments.L1StandardBridgeProxy, common.Address{})
require.NotEqual(t, deployments.L2OutputOracle, common.Address{})
require.NotEqual(t, deployments.L2OutputOracleProxy, common.Address{})
require.NotEqual(t, deployments.OptimismMintableERC20Factory, common.Address{})
require.NotEqual(t, deployments.OptimismMintableERC20FactoryProxy, common.Address{})
require.NotEqual(t, deployments.OptimismPortal, common.Address{})
require.NotEqual(t, deployments.OptimismPortalProxy, common.Address{})
require.NotEqual(t, deployments.ProxyAdmin, common.Address{})
require.NotEqual(t, deployments.SystemConfig, common.Address{})
require.NotEqual(t, deployments.SystemConfigProxy, common.Address{})
}
{
"AddressManager": "0x439E2b672AABfD851625fA93487e815b790a5961",
"DisputeGameFactory": "0xDC9a4dba410aaC9D98a848710Aa82601752DBd44",
"DisputeGameFactoryProxy": "0x94fF195937A985a527Cb6187Ad6B03a9dc6033a1",
"L1CrossDomainMessenger": "0x8fc87Ee0439e744f6eb8106e9E48143D36cB6143",
"L1CrossDomainMessengerProxy": "0x294C0C894402cc036bdacF4526098558a5eD3Fec",
"L1ERC721Bridge": "0xadc28959b6f2608371AD42ddBeD1e01c0EC216A1",
"L1ERC721BridgeProxy": "0xEA2B8030d643687b77d2f60717492a2abda0CD0f",
"L1StandardBridge": "0x54470AE2f57A31C1B9A80F46E9033c114e2bCad6",
"L1StandardBridgeProxy": "0xa25356F7451262cD7c739532f4a0722D7C55e15d",
"L2OutputOracle": "0x46DFCe3DFfE7BB36890326D3724eA5ba13aE6124",
"L2OutputOracleProxy": "0x9F7D5524b2Bc81E78d0b9bdFA9Fa7ee19E965d6F",
"OptimismMintableERC20Factory": "0xd2e932f6C3f89bFdd38a2C67BF433811D5A52146",
"OptimismMintableERC20FactoryProxy": "0x437b9C8e7Ce6C75156710D4799cAf60a8AA66891",
"OptimismPortal": "0xbF6081C3f6b1C1D867656d06E3fAc64e9884aA18",
"OptimismPortalProxy": "0xaC425EECd4Fd8E9E669a62906D99aF89B9951516",
"ProxyAdmin": "0x3218c3b0dC0386BAe83A58E5F908c4b070210b4F",
"SystemConfig": "0x36bAcDD96F28e1ac0780bB9CbE6e20780840730F",
"SystemConfigProxy": "0x14065A373936533A0c88b7986CADabDD62d471e6"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment