Commit d1e54cd5 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #6445 from ethereum-optimism/feat/l1-deployments

op-chain-ops: add L1Deployments helper
parents 1f93dbae b5515f2a
......@@ -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