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
a6b8a697
Unverified
Commit
a6b8a697
authored
Jul 29, 2022
by
Mark Tyneway
Committed by
GitHub
Jul 29, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into deps/safe-call
parents
7f6ea137
2a7be367
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
237 additions
and
55 deletions
+237
-55
batch_submitter.go
op-batcher/batch_submitter.go
+23
-0
config.go
op-batcher/config.go
+10
-2
flags.go
op-batcher/flags/flags.go
+20
-0
main.go
op-node/cmd/main.go
+24
-0
flags.go
op-node/flags/flags.go
+20
-0
config.go
op-node/node/config.go
+15
-0
service.go
op-node/service.go
+5
-0
config.go
op-proposer/config.go
+10
-2
flags.go
op-proposer/flags/flags.go
+20
-0
l2_output_submitter.go
op-proposer/l2_output_submitter.go
+24
-0
devnet-up.sh
ops-bedrock/devnet-up.sh
+6
-6
docker-compose.yml
ops-bedrock/docker-compose.yml
+8
-0
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+6
-6
OptimismPortal.t.sol
...ges/contracts-bedrock/contracts/test/OptimismPortal.t.sol
+8
-5
devnetL1.ts
packages/contracts-bedrock/deploy-config/devnetL1.ts
+5
-4
goerli.ts
packages/contracts-bedrock/deploy-config/goerli.ts
+3
-2
hardhat.ts
packages/contracts-bedrock/deploy-config/hardhat.ts
+5
-4
000-L2OutputOracle.deploy.ts
...ges/contracts-bedrock/deploy/000-L2OutputOracle.deploy.ts
+6
-9
hardhat.config.ts
packages/contracts-bedrock/hardhat.config.ts
+3
-6
genesis-l1.ts
packages/contracts-bedrock/tasks/genesis-l1.ts
+1
-1
genesis-l2.ts
packages/contracts-bedrock/tasks/genesis-l2.ts
+6
-2
rollup-config.ts
packages/contracts-bedrock/tasks/rollup-config.ts
+8
-3
tsconfig.json
packages/contracts-bedrock/tsconfig.json
+1
-3
No files found.
op-batcher/batch_submitter.go
View file @
a6b8a697
...
...
@@ -6,6 +6,9 @@ import (
"fmt"
"io"
"math/big"
"net"
"net/http"
_
"net/http/pprof"
"os"
"os/signal"
"sync"
...
...
@@ -76,6 +79,26 @@ func Main(version string) func(ctx *cli.Context) error {
defer
batchSubmitter
.
Stop
()
l
.
Info
(
"Batch Submitter started"
)
if
cfg
.
PprofEnabled
{
var
srv
http
.
Server
srv
.
Addr
=
net
.
JoinHostPort
(
cfg
.
PprofAddr
,
cfg
.
PprofPort
)
// Start pprof server + register it's shutdown
go
func
()
{
l
.
Info
(
"pprof server started"
,
"addr"
,
srv
.
Addr
)
if
err
:=
srv
.
ListenAndServe
();
err
!=
http
.
ErrServerClosed
{
l
.
Error
(
"error in pprof server"
,
"err"
,
err
)
}
else
{
l
.
Info
(
"pprof server shutting down"
)
}
}()
defer
func
()
{
shutCtx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
10
*
time
.
Second
)
defer
cancel
()
err
:=
srv
.
Shutdown
(
shutCtx
)
l
.
Info
(
"pprof server shut down"
,
"err"
,
err
)
}()
}
interruptChannel
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
interruptChannel
,
[]
os
.
Signal
{
...
...
op-batcher/config.go
View file @
a6b8a697
...
...
@@ -68,6 +68,11 @@ type Config struct {
// LogTerminal if true, will log to stdout in terminal format. Otherwise the
// output will be in JSON format.
LogTerminal
bool
// Flags for the pprof server
PprofEnabled
bool
PprofAddr
string
PprofPort
string
}
// NewConfig parses the Config from the provided flags or environment variables.
...
...
@@ -90,5 +95,8 @@ func NewConfig(ctx *cli.Context) Config {
/* Optional Flags */
LogLevel
:
ctx
.
GlobalString
(
flags
.
LogLevelFlag
.
Name
),
LogTerminal
:
ctx
.
GlobalBool
(
flags
.
LogTerminalFlag
.
Name
),
PprofEnabled
:
ctx
.
GlobalBool
(
flags
.
PprofEnabledFlag
.
Name
),
PprofAddr
:
ctx
.
GlobalString
(
flags
.
PprofAddrFlag
.
Name
),
PprofPort
:
ctx
.
GlobalString
(
flags
.
PprofPortFlag
.
Name
),
}
}
op-batcher/flags/flags.go
View file @
a6b8a697
...
...
@@ -113,6 +113,23 @@ var (
"in JSON format."
,
EnvVar
:
prefixEnvVar
(
"LOG_TERMINAL"
),
}
PprofEnabledFlag
=
cli
.
BoolFlag
{
Name
:
"pprof.enabled"
,
Usage
:
"Enable the pprof server"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ENABLED"
),
}
PprofAddrFlag
=
cli
.
StringFlag
{
Name
:
"pprof.addr"
,
Usage
:
"pprof listening address"
,
Value
:
"0.0.0.0"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ADDR"
),
}
PprofPortFlag
=
cli
.
IntFlag
{
Name
:
"pprof.port"
,
Usage
:
"pprof listening port"
,
Value
:
6060
,
EnvVar
:
prefixEnvVar
(
"PPROF_PORT"
),
}
)
var
requiredFlags
=
[]
cli
.
Flag
{
...
...
@@ -134,6 +151,9 @@ var requiredFlags = []cli.Flag{
var
optionalFlags
=
[]
cli
.
Flag
{
LogLevelFlag
,
LogTerminalFlag
,
PprofEnabledFlag
,
PprofAddrFlag
,
PprofPortFlag
,
}
// Flags contains the list of configuration options available to the binary.
...
...
op-node/cmd/main.go
View file @
a6b8a697
...
...
@@ -2,9 +2,12 @@ package main
import
(
"context"
"net"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"github.com/ethereum-optimism/optimism/op-node/metrics"
...
...
@@ -101,6 +104,27 @@ func RollupNodeMain(ctx *cli.Context) error {
m
.
RecordUp
()
log
.
Info
(
"Rollup node started"
)
if
cfg
.
Pprof
.
Enabled
{
var
srv
http
.
Server
srv
.
Addr
=
net
.
JoinHostPort
(
cfg
.
Pprof
.
ListenAddr
,
cfg
.
Pprof
.
ListenPort
)
// Start pprof server + register it's shutdown
go
func
()
{
log
.
Info
(
"pprof server started"
,
"addr"
,
srv
.
Addr
)
if
err
:=
srv
.
ListenAndServe
();
err
!=
http
.
ErrServerClosed
{
log
.
Error
(
"error in pprof server"
,
"err"
,
err
)
}
else
{
log
.
Info
(
"pprof server shutting down"
)
}
}()
defer
func
()
{
shutCtx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
10
*
time
.
Second
)
defer
cancel
()
err
:=
srv
.
Shutdown
(
shutCtx
)
log
.
Info
(
"pprof server shut down"
,
"err"
,
err
)
}()
}
interruptChannel
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
interruptChannel
,
[]
os
.
Signal
{
os
.
Interrupt
,
...
...
op-node/flags/flags.go
View file @
a6b8a697
...
...
@@ -111,6 +111,23 @@ var (
Value
:
7300
,
EnvVar
:
prefixEnvVar
(
"METRICS_PORT"
),
}
PprofEnabledFlag
=
cli
.
BoolFlag
{
Name
:
"pprof.enabled"
,
Usage
:
"Enable the pprof server"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ENABLED"
),
}
PprofAddrFlag
=
cli
.
StringFlag
{
Name
:
"pprof.addr"
,
Usage
:
"pprof listening address"
,
Value
:
"0.0.0.0"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ADDR"
),
}
PprofPortFlag
=
cli
.
IntFlag
{
Name
:
"pprof.port"
,
Usage
:
"pprof listening port"
,
Value
:
6060
,
EnvVar
:
prefixEnvVar
(
"PPROF_PORT"
),
}
SnapshotLog
=
cli
.
StringFlag
{
Name
:
"snapshotlog.file"
,
...
...
@@ -139,6 +156,9 @@ var optionalFlags = append([]cli.Flag{
MetricsEnabledFlag
,
MetricsAddrFlag
,
MetricsPortFlag
,
PprofEnabledFlag
,
PprofAddrFlag
,
PprofPortFlag
,
SnapshotLog
,
},
p2pFlags
...
)
...
...
op-node/node/config.go
View file @
a6b8a697
...
...
@@ -28,6 +28,8 @@ type Config struct {
Metrics
MetricsConfig
Pprof
PprofConfig
// Optional
Tracer
Tracer
}
...
...
@@ -59,6 +61,16 @@ func (m MetricsConfig) Check() error {
return
nil
}
type
PprofConfig
struct
{
Enabled
bool
ListenAddr
string
ListenPort
string
}
func
(
p
PprofConfig
)
Check
()
error
{
return
nil
}
// Check verifies that the given configuration makes sense
func
(
cfg
*
Config
)
Check
()
error
{
if
err
:=
cfg
.
L2
.
Check
();
err
!=
nil
{
...
...
@@ -70,6 +82,9 @@ func (cfg *Config) Check() error {
if
err
:=
cfg
.
Metrics
.
Check
();
err
!=
nil
{
return
fmt
.
Errorf
(
"metrics config error: %w"
,
err
)
}
if
err
:=
cfg
.
Pprof
.
Check
();
err
!=
nil
{
return
fmt
.
Errorf
(
"pprof config error: %w"
,
err
)
}
if
cfg
.
P2P
!=
nil
{
if
err
:=
cfg
.
P2P
.
Check
();
err
!=
nil
{
return
fmt
.
Errorf
(
"p2p config error: %w"
,
err
)
...
...
op-node/service.go
View file @
a6b8a697
...
...
@@ -68,6 +68,11 @@ func NewConfig(ctx *cli.Context, log log.Logger) (*node.Config, error) {
ListenAddr
:
ctx
.
GlobalString
(
flags
.
MetricsAddrFlag
.
Name
),
ListenPort
:
ctx
.
GlobalInt
(
flags
.
MetricsPortFlag
.
Name
),
},
Pprof
:
node
.
PprofConfig
{
Enabled
:
ctx
.
GlobalBool
(
flags
.
PprofEnabledFlag
.
Name
),
ListenAddr
:
ctx
.
GlobalString
(
flags
.
PprofAddrFlag
.
Name
),
ListenPort
:
ctx
.
GlobalString
(
flags
.
PprofPortFlag
.
Name
),
},
P2P
:
p2pConfig
,
P2PSigner
:
p2pSignerSetup
,
}
...
...
op-proposer/config.go
View file @
a6b8a697
...
...
@@ -57,6 +57,11 @@ type Config struct {
// LogTerminal if true, will log to stdout in terminal format. Otherwise the
// output will be in JSON format.
LogTerminal
bool
// Flags for the pprof server
PprofEnabled
bool
PprofAddr
string
PprofPort
string
}
// NewConfig parses the Config from the provided flags or environment variables.
...
...
@@ -76,5 +81,8 @@ func NewConfig(ctx *cli.Context) Config {
/* Optional Flags */
LogLevel
:
ctx
.
GlobalString
(
flags
.
LogLevelFlag
.
Name
),
LogTerminal
:
ctx
.
GlobalBool
(
flags
.
LogTerminalFlag
.
Name
),
PprofEnabled
:
ctx
.
GlobalBool
(
flags
.
PprofEnabledFlag
.
Name
),
PprofAddr
:
ctx
.
GlobalString
(
flags
.
PprofAddrFlag
.
Name
),
PprofPort
:
ctx
.
GlobalString
(
flags
.
PprofPortFlag
.
Name
),
}
}
op-proposer/flags/flags.go
View file @
a6b8a697
...
...
@@ -95,6 +95,23 @@ var (
"in JSON format."
,
EnvVar
:
prefixEnvVar
(
"LOG_TERMINAL"
),
}
PprofEnabledFlag
=
cli
.
BoolFlag
{
Name
:
"pprof.enabled"
,
Usage
:
"Enable the pprof server"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ENABLED"
),
}
PprofAddrFlag
=
cli
.
StringFlag
{
Name
:
"pprof.addr"
,
Usage
:
"pprof listening address"
,
Value
:
"0.0.0.0"
,
EnvVar
:
prefixEnvVar
(
"PPROF_ADDR"
),
}
PprofPortFlag
=
cli
.
IntFlag
{
Name
:
"pprof.port"
,
Usage
:
"pprof listening port"
,
Value
:
6060
,
EnvVar
:
prefixEnvVar
(
"PPROF_PORT"
),
}
)
var
requiredFlags
=
[]
cli
.
Flag
{
...
...
@@ -113,6 +130,9 @@ var requiredFlags = []cli.Flag{
var
optionalFlags
=
[]
cli
.
Flag
{
LogLevelFlag
,
LogTerminalFlag
,
PprofEnabledFlag
,
PprofAddrFlag
,
PprofPortFlag
,
}
// Flags contains the list of configuration options available to the binary.
...
...
op-proposer/l2_output_submitter.go
View file @
a6b8a697
...
...
@@ -3,6 +3,9 @@ package op_proposer
import
(
"context"
"fmt"
"net"
"net/http"
_
"net/http/pprof"
"os"
"os/signal"
"syscall"
...
...
@@ -68,6 +71,27 @@ func Main(version string) func(ctx *cli.Context) error {
l
.
Info
(
"L2 Output Submitter started"
)
if
cfg
.
PprofEnabled
{
var
srv
http
.
Server
srv
.
Addr
=
net
.
JoinHostPort
(
cfg
.
PprofAddr
,
cfg
.
PprofPort
)
// Start pprof server + register it's shutdown
go
func
()
{
l
.
Info
(
"pprof server started"
,
"addr"
,
srv
.
Addr
)
if
err
:=
srv
.
ListenAndServe
();
err
!=
http
.
ErrServerClosed
{
l
.
Error
(
"error in pprof server"
,
"err"
,
err
)
}
else
{
l
.
Info
(
"pprof server shutting down"
)
}
}()
defer
func
()
{
shutCtx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
10
*
time
.
Second
)
defer
cancel
()
err
:=
srv
.
Shutdown
(
shutCtx
)
l
.
Info
(
"pprof server shut down"
,
"err"
,
err
)
}()
}
interruptChannel
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
interruptChannel
,
[]
os
.
Signal
{
os
.
Interrupt
,
...
...
ops-bedrock/devnet-up.sh
View file @
a6b8a697
...
...
@@ -58,9 +58,9 @@ function wait_up {
mkdir
-p
./.devnet
if
[
!
-f
./.devnet/rollup.json
]
;
then
GENESIS_TIMESTAMP
=
$(
date
+%s | xargs
printf
"0x%x"
)
L1_
GENESIS_TIMESTAMP
=
$(
date
+%s | xargs
printf
"0x%x"
)
else
GENESIS_TIMESTAMP
=
$(
jq
'.timestamp'
< .devnet/genesis-l1.json
)
L1_
GENESIS_TIMESTAMP
=
$(
jq
'.timestamp'
< .devnet/genesis-l1.json
)
fi
# Regenerate the L1 genesis file if necessary. The existence of the genesis
...
...
@@ -69,7 +69,7 @@ if [ ! -f ./.devnet/genesis-l1.json ]; then
echo
"Regenerating L1 genesis."
(
cd
$CONTRACTS_BEDROCK
L
2OO_STARTING_BLOCK_TIMESTAMP
=
$
GENESIS_TIMESTAMP
npx hardhat genesis-l1
\
L
1_GENESIS_TIMESTAMP
=
$L1_
GENESIS_TIMESTAMP
npx hardhat genesis-l1
\
--outfile
genesis-l1.json
mv
genesis-l1.json ../../.devnet/genesis-l1.json
)
...
...
@@ -89,7 +89,7 @@ if [ ! -d $CONTRACTS_BEDROCK/deployments/$NETWORK ]; then
(
echo
"Deploying contracts."
cd
$CONTRACTS_BEDROCK
L
2OO_STARTING_BLOCK_TIMESTAMP
=
$
GENESIS_TIMESTAMP
yarn hardhat
--network
$NETWORK
deploy
L
1_GENESIS_TIMESTAMP
=
$L1_
GENESIS_TIMESTAMP
yarn hardhat
--network
$NETWORK
deploy
)
else
echo
"Contracts already deployed, skipping."
...
...
@@ -99,7 +99,7 @@ if [ ! -f ./.devnet/genesis-l2.json ]; then
(
echo
"Creating L2 genesis file."
cd
$CONTRACTS_BEDROCK
L
2OO_STARTING_BLOCK_TIMESTAMP
=
$
GENESIS_TIMESTAMP
npx hardhat
--network
$NETWORK
genesis-l2
L
1_GENESIS_TIMESTAMP
=
$L1_
GENESIS_TIMESTAMP
npx hardhat
--network
$NETWORK
genesis-l2
mv
genesis.json ../../.devnet/genesis-l2.json
echo
"Created L2 genesis."
)
...
...
@@ -120,7 +120,7 @@ if [ ! -f ./.devnet/rollup.json ]; then
(
echo
"Building rollup config..."
cd
$CONTRACTS_BEDROCK
L
2OO_STARTING_BLOCK_TIMESTAMP
=
$
GENESIS_TIMESTAMP
npx hardhat
--network
$NETWORK
rollup-config
L
1_GENESIS_TIMESTAMP
=
$L1_
GENESIS_TIMESTAMP
npx hardhat
--network
$NETWORK
rollup-config
mv
rollup.json ../../.devnet/rollup.json
)
else
...
...
ops-bedrock/docker-compose.yml
View file @
a6b8a697
...
...
@@ -63,10 +63,12 @@ services:
--metrics.enabled
--metrics.addr=0.0.0.0
--metrics.port=7300
--pprof.enabled
ports
:
-
"
7545:8545"
-
"
9003:9003"
-
"
7300:7300"
-
"
6060:6060"
volumes
:
-
${PWD}/p2p-sequencer-key.txt:/config/p2p-sequencer-key.txt
-
${PWD}/p2p-node-key.txt:/config/p2p-node-key.txt
...
...
@@ -82,6 +84,8 @@ services:
build
:
context
:
../
dockerfile
:
./op-proposer/Dockerfile
ports
:
-
"
6062:6060"
environment
:
L1_ETH_RPC
:
http://l1:8545
L2_ETH_RPC
:
http://l2:8545
...
...
@@ -94,6 +98,7 @@ services:
OUTPUT_SUBMITTER_L2_OUTPUT_HD_PATH
:
"
m/44'/60'/0'/0/1"
OUTPUT_SUBMITTER_LOG_TERMINAL
:
"
true"
L2OO_ADDRESS
:
"
${L2OO_ADDRESS}"
OUTPUT_SUBMITTER_PPROF_ENABLED
:
"
true"
op-batcher
:
depends_on
:
...
...
@@ -103,6 +108,8 @@ services:
build
:
context
:
../
dockerfile
:
./op-batcher/Dockerfile
ports
:
-
"
6061:6060"
environment
:
L1_ETH_RPC
:
http://l1:8545
L2_ETH_RPC
:
http://l2:8545
...
...
@@ -120,6 +127,7 @@ services:
BATCH_SUBMITTER_SEQUENCER_GENESIS_HASH
:
"
${SEQUENCER_GENESIS_HASH}"
BATCH_SUBMITTER_SEQUENCER_BATCH_INBOX_ADDRESS
:
"
${SEQUENCER_BATCH_INBOX_ADDRESS}"
BATCH_SUBMITTER_LOG_TERMINAL
:
"
true"
BATCH_SUBMITTER_PPROF_ENABLED
:
"
true"
stateviz
:
build
:
...
...
packages/contracts-bedrock/.gas-snapshot
View file @
a6b8a697
...
...
@@ -135,14 +135,14 @@ OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10686)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15662)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15967)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInsufficientGas() (gas: 16074
9
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInvalidOutputRootProof() (gas: 812
85
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInsufficientGas() (gas: 16074
3
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInvalidOutputRootProof() (gas: 812
41
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnRecentWithdrawal() (gas: 53001)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnReentrancy() (gas: 2055
86
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnReplay() (gas: 2789
19
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnSelfCall() (gas: 505
17
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnReentrancy() (gas: 2055
21
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnReplay() (gas: 2789
41
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnSelfCall() (gas: 505
39
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOninvalidWithdrawalProof() (gas: 148562)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_succeeds() (gas: 18
6991
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_succeeds() (gas: 18
7013
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails() (gas: 289662)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17341)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14199)
...
...
packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol
View file @
a6b8a697
...
...
@@ -275,7 +275,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is Portal_Initializer {
event WithdrawalFinalized(bytes32 indexed, bool success);
// Use a constructor to set the storage vars above, so as to minimize the number of ffi calls.
constructor()
public
{
constructor() {
super.setUp();
_defaultTx = Types.WithdrawalTransaction({
nonce: 0,
...
...
@@ -425,8 +425,8 @@ contract OptimismPortal_FinalizeWithdrawal_Test is Portal_Initializer {
(
bytes32 stateRoot,
bytes32 storageRoot,
bytes32 outputRoot
,
bytes32 withdrawalHash
,
,
,
bytes memory withdrawalProof
) = ffi.getFinalizeWithdrawalTransactionInputs(insufficientGasTx);
Types.OutputRootProof memory outputRootProof = Types.OutputRootProof({
...
...
@@ -526,12 +526,15 @@ contract OptimismPortal_FinalizeWithdrawal_Test is Portal_Initializer {
function test_finalizeWithdrawalTransaction_differential(
address _sender,
address _target,
uint
64
_value,
uint
8
_gasLimit,
uint
256
_value,
uint
256
_gasLimit,
bytes memory _data
) external {
// Cannot call the optimism portal
vm.assume(_target != address(op));
// Total ETH supply is currently about 120M ETH.
vm.assume(_value < 200_000_000 ether);
vm.assume(_gasLimit < 50_000_000);
uint256 _nonce = messagePasser.nonce();
Types.WithdrawalTransaction memory _tx = Types.WithdrawalTransaction({
nonce: _nonce,
...
...
packages/contracts-bedrock/deploy-config/devnetL1.ts
View file @
a6b8a697
...
...
@@ -2,19 +2,20 @@ import { ethers } from 'ethers'
const
{
env
}
=
process
const
starting
Timestamp
=
typeof
env
.
L
2OO_STARTING_BLOCK
_TIMESTAMP
===
'
string
'
?
ethers
.
BigNumber
.
from
(
env
.
L
2OO_STARTING_BLOCK
_TIMESTAMP
).
toNumber
()
const
l1Genesis
Timestamp
=
typeof
env
.
L
1_GENESIS
_TIMESTAMP
===
'
string
'
?
ethers
.
BigNumber
.
from
(
env
.
L
1_GENESIS
_TIMESTAMP
).
toNumber
()
:
Math
.
floor
(
Date
.
now
()
/
1000
)
const
config
=
{
submissionInterval
:
6
,
genesisOutput
:
ethers
.
constants
.
HashZero
,
historicalBlocks
:
0
,
l1StartingBlockTag
:
'
earliest
'
,
startingBlockNumber
:
0
,
l2BlockTime
:
2
,
starting
Timestamp
,
l1Genesis
Timestamp
,
sequencerAddress
:
'
0x70997970C51812dc3A010C7d01b50e0d17dc79C8
'
,
l2CrossDomainMessengerOwner
:
ethers
.
constants
.
AddressZero
,
...
...
packages/contracts-bedrock/deploy-config/goerli.ts
View file @
a6b8a697
import
{
ethers
}
from
'
ethers
'
const
sequencerAddress
=
'
0x6c23a0dcdfc44b7a57bed148de598895e398d984
'
const
startingTimestamp
=
1658777882
const
l1StartingBlockTag
=
'
0xafce66a0a2446856112e4069b275ad32b1f4a607888f9c4c59eddf9be81f8670
'
const
config
=
{
submissionInterval
:
6
,
...
...
@@ -9,7 +10,7 @@ const config = {
historicalBlocks
:
0
,
startingBlockNumber
:
0
,
l2BlockTime
:
2
,
startingTimestamp
,
l1StartingBlockTag
,
sequencerAddress
,
l2CrossDomainMessengerOwner
:
ethers
.
constants
.
AddressZero
,
...
...
packages/contracts-bedrock/deploy-config/hardhat.ts
View file @
a6b8a697
...
...
@@ -2,9 +2,9 @@ import { ethers } from 'ethers'
const
{
env
}
=
process
const
starting
Timestamp
=
typeof
env
.
L
2OO_STARTING_BLOCK
_TIMESTAMP
===
'
string
'
?
ethers
.
BigNumber
.
from
(
env
.
L
2OO_STARTING_BLOCK
_TIMESTAMP
).
toNumber
()
const
l1Genesis
Timestamp
=
typeof
env
.
L
1_GENESIS
_TIMESTAMP
===
'
string
'
?
ethers
.
BigNumber
.
from
(
env
.
L
1_GENESIS
_TIMESTAMP
).
toNumber
()
:
Math
.
floor
(
Date
.
now
()
/
1000
)
const
config
=
{
...
...
@@ -12,8 +12,9 @@ const config = {
genesisOutput
:
ethers
.
constants
.
HashZero
,
historicalBlocks
:
0
,
startingBlockNumber
:
0
,
l1StartingBlockTag
:
'
earliest
'
,
l2BlockTime
:
2
,
starting
Timestamp
,
l1Genesis
Timestamp
,
sequencerAddress
:
'
0x70997970C51812dc3A010C7d01b50e0d17dc79C8
'
,
maxSequencerDrift
:
10
,
sequencerWindowSize
:
4
,
...
...
packages/contracts-bedrock/deploy/000-L2OutputOracle.deploy.ts
View file @
a6b8a697
...
...
@@ -10,13 +10,10 @@ const deployFn: DeployFunction = async (hre) => {
const
{
deployer
}
=
await
hre
.
getNamedAccounts
()
const
{
deployConfig
}
=
hre
if
(
typeof
deployConfig
.
startingTimestamp
!==
'
number
'
||
isNaN
(
deployConfig
.
startingTimestamp
)
)
{
throw
new
Error
(
'
Cannot deploy L2OutputOracle without specifying a valid startingTimestamp.
'
)
const
l1
=
hre
.
ethers
.
getDefaultProvider
()
const
l1StartingBlock
=
await
l1
.
getBlock
(
deployConfig
.
l1StartingBlockTag
)
if
(
l1StartingBlock
===
null
)
{
throw
new
Error
(
`Cannot fetch block tag
${
deployConfig
.
l1StartingBlockTag
}
`
)
}
await
deploy
(
'
L2OutputOracleProxy
'
,
{
...
...
@@ -34,7 +31,7 @@ const deployFn: DeployFunction = async (hre) => {
deployConfig
.
genesisOutput
,
deployConfig
.
historicalBlocks
,
deployConfig
.
startingBlockNumber
,
deployConfig
.
startingT
imestamp
,
l1StartingBlock
.
t
imestamp
,
deployConfig
.
l2BlockTime
,
deployConfig
.
sequencerAddress
,
deployConfig
.
outputOracleOwner
,
...
...
@@ -84,7 +81,7 @@ const deployFn: DeployFunction = async (hre) => {
}
const
startingTimestamp
=
await
L2OutputOracle
.
STARTING_TIMESTAMP
()
if
(
!
startingTimestamp
.
eq
(
BigNumber
.
from
(
deployConfig
.
startingT
imestamp
)))
{
if
(
!
startingTimestamp
.
eq
(
BigNumber
.
from
(
l1StartingBlock
.
t
imestamp
)))
{
throw
new
Error
(
'
starting timestamp misconfigured
'
)
}
const
l2BlockTime
=
await
L2OutputOracle
.
L2_BLOCK_TIME
()
...
...
packages/contracts-bedrock/hardhat.config.ts
View file @
a6b8a697
...
...
@@ -74,18 +74,15 @@ const config: HardhatUserConfig = {
historicalBlocks
:
{
type
:
'
number
'
,
},
startingBlockNumber
:
{
type
:
'
number
'
,
},
startingTimestamp
:
{
type
:
'
number
'
,
},
sequencerAddress
:
{
type
:
'
address
'
,
},
outputOracleOwner
:
{
type
:
'
address
'
,
},
l1StartingBlockTag
:
{
type
:
'
string
'
,
},
},
external
:
{
contracts
:
[
...
...
packages/contracts-bedrock/tasks/genesis-l1.ts
View file @
a6b8a697
...
...
@@ -61,7 +61,7 @@ task('genesis-l1', 'create a genesis config')
}
}
const
timestamp
=
hre
.
deployConfig
.
starting
Timestamp
const
timestamp
=
hre
.
deployConfig
.
l1Genesis
Timestamp
if
(
timestamp
===
undefined
)
{
throw
new
Error
(
'
Must configure starting block timestamp
'
)
}
...
...
packages/contracts-bedrock/tasks/genesis-l2.ts
View file @
a6b8a697
...
...
@@ -462,8 +462,12 @@ task('genesis-l2', 'create a genesis config')
}
}
const
portal
=
await
hre
.
deployments
.
get
(
'
OptimismPortalProxy
'
)
const
l1StartingBlock
=
await
l1
.
getBlock
(
portal
.
receipt
.
blockHash
)
const
l1StartingBlock
=
await
l1
.
getBlock
(
deployConfig
.
l1StartingBlockTag
)
if
(
l1StartingBlock
===
null
)
{
throw
new
Error
(
`Cannot fetch block tag
${
deployConfig
.
l1StartingBlockTag
}
`
)
}
if
(
l1StartingBlock
===
null
)
{
console
.
log
(
`Unable to fetch L1 starting timestamp`
)
...
...
packages/contracts-bedrock/tasks/rollup-config.ts
View file @
a6b8a697
...
...
@@ -23,13 +23,18 @@ task('rollup-config', 'create a genesis config')
const
l2Genesis
=
await
l2
.
getBlock
(
'
earliest
'
)
const
portal
=
await
hre
.
deployments
.
get
(
'
OptimismPortalProxy
'
)
const
l1StartingBlock
=
await
l1
.
getBlock
(
portal
.
receipt
.
blockHash
)
const
l1StartingBlock
=
await
l1
.
getBlock
(
deployConfig
.
l1StartingBlockTag
)
if
(
l1StartingBlock
===
null
)
{
throw
new
Error
(
`Cannot fetch block tag
${
deployConfig
.
l1StartingBlockTag
}
`
)
}
const
config
:
OpNodeConfig
=
{
genesis
:
{
l1
:
{
hash
:
portal
.
receipt
.
blockH
ash
,
number
:
portal
.
receipt
.
blockN
umber
,
hash
:
l1StartingBlock
.
h
ash
,
number
:
l1StartingBlock
.
n
umber
,
},
l2
:
{
hash
:
l2Genesis
.
hash
,
...
...
packages/contracts-bedrock/tsconfig.json
View file @
a6b8a697
...
...
@@ -4,7 +4,5 @@
"rootDir"
:
"./src"
,
"outDir"
:
"./dist"
},
"include"
:
[
"src/**/*"
]
"include"
:
[
"src/**/*"
]
}
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