Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
e8f0b356
Unverified
Commit
e8f0b356
authored
Nov 09, 2023
by
Mark Tyneway
Committed by
GitHub
Nov 09, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #8102 from ethereum-optimism/feat/op-node-genesis
op-node: flexible L2 genesis generation
parents
8158ef07
fb0d08f3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
37 deletions
+48
-37
config.go
op-chain-ops/genesis/config.go
+10
-23
cmd.go
op-node/cmd/genesis/cmd.go
+38
-14
No files found.
op-chain-ops/genesis/config.go
View file @
e8f0b356
...
@@ -388,41 +388,28 @@ func (d *DeployConfig) SetDeployments(deployments *L1Deployments) {
...
@@ -388,41 +388,28 @@ func (d *DeployConfig) SetDeployments(deployments *L1Deployments) {
}
}
// GetDeployedAddresses will get the deployed addresses of deployed L1 contracts
// GetDeployedAddresses will get the deployed addresses of deployed L1 contracts
// required for the L2 genesis creation. Legacy systems use the `Proxy__` prefix
// required for the L2 genesis creation.
// while modern systems use the `Proxy` suffix. First check for the legacy
// deployments so that this works with upgrading a system.
func
(
d
*
DeployConfig
)
GetDeployedAddresses
(
hh
*
hardhat
.
Hardhat
)
error
{
func
(
d
*
DeployConfig
)
GetDeployedAddresses
(
hh
*
hardhat
.
Hardhat
)
error
{
var
err
error
if
d
.
L1StandardBridgeProxy
==
(
common
.
Address
{})
{
if
d
.
L1StandardBridgeProxy
==
(
common
.
Address
{})
{
var
l1StandardBridgeProxyDeployment
*
hardhat
.
Deployment
l1StandardBridgeProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"L1StandardBridgeProxy"
)
l1StandardBridgeProxyDeployment
,
err
=
hh
.
GetDeployment
(
"Proxy__OVM_L1StandardBridge"
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
hardhat
.
ErrCannotFindDeployment
)
{
return
fmt
.
Errorf
(
"cannot find L1StandardBridgeProxy artifact: %w"
,
err
)
l1StandardBridgeProxyDeployment
,
err
=
hh
.
GetDeployment
(
"L1StandardBridgeProxy"
)
if
err
!=
nil
{
return
err
}
}
}
d
.
L1StandardBridgeProxy
=
l1StandardBridgeProxyDeployment
.
Address
d
.
L1StandardBridgeProxy
=
l1StandardBridgeProxyDeployment
.
Address
}
}
if
d
.
L1CrossDomainMessengerProxy
==
(
common
.
Address
{})
{
if
d
.
L1CrossDomainMessengerProxy
==
(
common
.
Address
{})
{
var
l1CrossDomainMessengerProxyDeployment
*
hardhat
.
Deployment
l1CrossDomainMessengerProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"L1CrossDomainMessengerProxy"
)
l1CrossDomainMessengerProxyDeployment
,
err
=
hh
.
GetDeployment
(
"Proxy__OVM_L1CrossDomainMessenger"
)
if
err
!=
nil
{
if
errors
.
Is
(
err
,
hardhat
.
ErrCannotFindDeployment
)
{
return
fmt
.
Errorf
(
"cannot find L1CrossDomainMessengerProxy artifact: %w"
,
err
)
l1CrossDomainMessengerProxyDeployment
,
err
=
hh
.
GetDeployment
(
"L1CrossDomainMessengerProxy"
)
if
err
!=
nil
{
return
err
}
}
}
d
.
L1CrossDomainMessengerProxy
=
l1CrossDomainMessengerProxyDeployment
.
Address
d
.
L1CrossDomainMessengerProxy
=
l1CrossDomainMessengerProxyDeployment
.
Address
}
}
if
d
.
L1ERC721BridgeProxy
==
(
common
.
Address
{})
{
if
d
.
L1ERC721BridgeProxy
==
(
common
.
Address
{})
{
// There is no legacy deployment of this contract
l1ERC721BridgeProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"L1ERC721BridgeProxy"
)
l1ERC721BridgeProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"L1ERC721BridgeProxy"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
fmt
.
Errorf
(
"cannot find L1ERC721BridgeProxy artifact: %w"
,
err
)
}
}
d
.
L1ERC721BridgeProxy
=
l1ERC721BridgeProxyDeployment
.
Address
d
.
L1ERC721BridgeProxy
=
l1ERC721BridgeProxyDeployment
.
Address
}
}
...
@@ -430,7 +417,7 @@ func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error {
...
@@ -430,7 +417,7 @@ func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error {
if
d
.
SystemConfigProxy
==
(
common
.
Address
{})
{
if
d
.
SystemConfigProxy
==
(
common
.
Address
{})
{
systemConfigProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"SystemConfigProxy"
)
systemConfigProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"SystemConfigProxy"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
fmt
.
Errorf
(
"cannot find SystemConfigProxy artifact: %w"
,
err
)
}
}
d
.
SystemConfigProxy
=
systemConfigProxyDeployment
.
Address
d
.
SystemConfigProxy
=
systemConfigProxyDeployment
.
Address
}
}
...
@@ -438,7 +425,7 @@ func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error {
...
@@ -438,7 +425,7 @@ func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error {
if
d
.
OptimismPortalProxy
==
(
common
.
Address
{})
{
if
d
.
OptimismPortalProxy
==
(
common
.
Address
{})
{
optimismPortalProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"OptimismPortalProxy"
)
optimismPortalProxyDeployment
,
err
:=
hh
.
GetDeployment
(
"OptimismPortalProxy"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
fmt
.
Errorf
(
"cannot find OptimismPortalProxy artifact: %w"
,
err
)
}
}
d
.
OptimismPortalProxy
=
optimismPortalProxyDeployment
.
Address
d
.
OptimismPortalProxy
=
optimismPortalProxyDeployment
.
Address
}
}
...
...
op-node/cmd/genesis/cmd.go
View file @
e8f0b356
...
@@ -28,7 +28,7 @@ var Subcommands = cli.Commands{
...
@@ -28,7 +28,7 @@ var Subcommands = cli.Commands{
Flags
:
[]
cli
.
Flag
{
Flags
:
[]
cli
.
Flag
{
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
Name
:
"deploy-config"
,
Name
:
"deploy-config"
,
Usage
:
"Path to
hardhat
deploy config file"
,
Usage
:
"Path to deploy config file"
,
Required
:
true
,
Required
:
true
,
},
},
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
...
@@ -91,18 +91,26 @@ var Subcommands = cli.Commands{
...
@@ -91,18 +91,26 @@ var Subcommands = cli.Commands{
{
{
Name
:
"l2"
,
Name
:
"l2"
,
Usage
:
"Generates an L2 genesis file and rollup config suitable for a deployed network"
,
Usage
:
"Generates an L2 genesis file and rollup config suitable for a deployed network"
,
Description
:
"Generating the L2 genesis depends on knowledge of L1 contract addresses for the bridge to be secure. "
+
"A deploy config and either a deployment directory or an L1 deployments file are used to create the L2 genesis. "
+
"The deploy directory and L1 deployments file are generated by the L1 contract deployments."
,
Flags
:
[]
cli
.
Flag
{
Flags
:
[]
cli
.
Flag
{
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
Name
:
"l1-rpc"
,
Name
:
"l1-rpc"
,
Usage
:
"L1 RPC URL"
,
Usage
:
"L1 RPC URL"
,
},
},
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
Name
:
"deploy-config"
,
Name
:
"deploy-config"
,
Usage
:
"Path to deploy config file"
,
Usage
:
"Path to deploy config file"
,
Required
:
true
,
},
},
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
Name
:
"deployment-dir"
,
Name
:
"deployment-dir"
,
Usage
:
"Path to network deployment directory"
,
Usage
:
"Path to network deployment directory. Cannot be used with --l1-deployments"
,
},
&
cli
.
StringFlag
{
Name
:
"l1-deployments"
,
Usage
:
"Path to L1 deployments JSON file. Cannot be used with --deployment-dir"
,
},
},
&
cli
.
StringFlag
{
&
cli
.
StringFlag
{
Name
:
"outfile.l2"
,
Name
:
"outfile.l2"
,
...
@@ -122,20 +130,36 @@ var Subcommands = cli.Commands{
...
@@ -122,20 +130,36 @@ var Subcommands = cli.Commands{
}
}
deployDir
:=
ctx
.
String
(
"deployment-dir"
)
deployDir
:=
ctx
.
String
(
"deployment-dir"
)
if
deployDir
==
""
{
l1Deployments
:=
ctx
.
String
(
"l1-deployments"
)
return
errors
.
New
(
"Must specify --deployment-dir"
)
if
deployDir
!=
""
&&
l1Deployments
!=
""
{
return
errors
.
New
(
"cannot specify both --deployment-dir and --l1-deployments"
)
}
if
deployDir
==
""
&&
l1Deployments
==
""
{
return
errors
.
New
(
"must specify either --deployment-dir or --l1-deployments"
)
}
}
log
.
Info
(
"Deployment directory"
,
"path"
,
deployDir
)
if
deployDir
!=
""
{
depPath
,
network
:=
filepath
.
Split
(
deployDir
)
log
.
Info
(
"Deployment directory"
,
"path"
,
deployDir
)
hh
,
err
:=
hardhat
.
New
(
network
,
nil
,
[]
string
{
depPath
})
depPath
,
network
:=
filepath
.
Split
(
deployDir
)
if
err
!=
nil
{
hh
,
err
:=
hardhat
.
New
(
network
,
nil
,
[]
string
{
depPath
})
return
err
if
err
!=
nil
{
return
err
}
// Read the appropriate deployment addresses from disk
if
err
:=
config
.
GetDeployedAddresses
(
hh
);
err
!=
nil
{
return
err
}
}
}
// Read the appropriate deployment addresses from disk
if
l1Deployments
!=
""
{
if
err
:=
config
.
GetDeployedAddresses
(
hh
);
err
!=
nil
{
log
.
Info
(
"L1 deployments"
,
"path"
,
l1Deployments
)
return
err
deployments
,
err
:=
genesis
.
NewL1Deployments
(
l1Deployments
)
if
err
!=
nil
{
return
err
}
config
.
SetDeployments
(
deployments
)
}
}
client
,
err
:=
ethclient
.
Dial
(
ctx
.
String
(
"l1-rpc"
))
client
,
err
:=
ethclient
.
Dial
(
ctx
.
String
(
"l1-rpc"
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment