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
848f0bcc
Unverified
Commit
848f0bcc
authored
Jan 25, 2023
by
mergify[bot]
Committed by
GitHub
Jan 25, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into clabby/op-chain-ops/eof-crawler
parents
cc7866f2
e92bc23c
Changes
37
Show whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
1749 additions
and
290 deletions
+1749
-290
go.work.sum
go.work.sum
+719
-2
driver.go
op-batcher/batcher/driver.go
+1
-1
txmgr.go
op-batcher/batcher/txmgr.go
+1
-1
main.go
op-batcher/cmd/main.go
+1
-1
go.mod
op-batcher/go.mod
+4
-4
go.sum
op-batcher/go.sum
+7
-8
go.mod
op-chain-ops/go.mod
+2
-2
go.sum
op-chain-ops/go.sum
+4
-4
garbage_channel_out.go
op-e2e/actions/garbage_channel_out.go
+263
-0
l2_batcher.go
op-e2e/actions/l2_batcher.go
+93
-2
l2_batcher_test.go
op-e2e/actions/l2_batcher_test.go
+82
-0
l2_proposer.go
op-e2e/actions/l2_proposer.go
+3
-3
go.mod
op-e2e/go.mod
+10
-7
go.sum
op-e2e/go.sum
+21
-15
migration_test.go
op-e2e/migration_test.go
+1
-1
setup.go
op-e2e/setup.go
+1
-1
go.mod
op-node/go.mod
+3
-3
go.sum
op-node/go.sum
+6
-6
node.go
op-node/node/node.go
+8
-0
types.go
op-node/rollup/types.go
+89
-0
types_test.go
op-node/rollup/types_test.go
+157
-0
eth_client.go
op-node/sources/eth_client.go
+11
-0
version.go
op-node/version/version.go
+1
-1
main.go
op-proposer/cmd/main.go
+10
-2
go.mod
op-proposer/go.mod
+3
-12
go.sum
op-proposer/go.sum
+6
-53
config.go
op-proposer/proposer/config.go
+4
-2
l2_output_submitter.go
op-proposer/proposer/l2_output_submitter.go
+72
-137
signature.go
op-service/crypto/signature.go
+77
-0
go.mod
op-service/go.mod
+19
-4
go.sum
op-service/go.sum
+64
-12
send_state.go
op-service/txmgr/send_state.go
+0
-0
send_state_test.go
op-service/txmgr/send_state_test.go
+1
-1
txmgr.go
op-service/txmgr/txmgr.go
+0
-0
txmgr_test.go
op-service/txmgr/txmgr_test.go
+1
-1
batch-deriv-chain.svg
specs/assets/batch-deriv-chain.svg
+3
-3
engine.svg
specs/assets/engine.svg
+1
-1
No files found.
go.work.sum
View file @
848f0bcc
This source diff could not be displayed because it is too large. You can
view the blob
instead.
op-batcher/batcher/driver.go
View file @
848f0bcc
...
...
@@ -13,7 +13,7 @@ import (
hdwallet
"github.com/ethereum-optimism/go-ethereum-hdwallet"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-
proposer
/txmgr"
"github.com/ethereum-optimism/optimism/op-
service
/txmgr"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
...
...
op-batcher/batcher/txmgr.go
View file @
848f0bcc
...
...
@@ -6,7 +6,7 @@ import (
"math/big"
"time"
"github.com/ethereum-optimism/optimism/op-
proposer
/txmgr"
"github.com/ethereum-optimism/optimism/op-
service
/txmgr"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
...
...
op-batcher/cmd/main.go
View file @
848f0bcc
...
...
@@ -13,7 +13,7 @@ import (
)
var
(
Version
=
"v0.10.1
0
"
Version
=
"v0.10.1
1
"
GitCommit
=
""
GitDate
=
""
)
...
...
op-batcher/go.mod
View file @
848f0bcc
...
...
@@ -4,9 +4,8 @@ go 1.18
require (
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3
github.com/ethereum-optimism/optimism/op-node v0.10.10
github.com/ethereum-optimism/optimism/op-proposer v0.10.10
github.com/ethereum-optimism/optimism/op-service v0.10.10
github.com/ethereum-optimism/optimism/op-node v0.10.11
github.com/ethereum-optimism/optimism/op-service v0.10.11
github.com/ethereum-optimism/optimism/op-signer v0.1.0
github.com/ethereum/go-ethereum v1.10.26
github.com/urfave/cli v1.22.9
...
...
@@ -25,7 +24,7 @@ require (
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/dyson/certman v0.3.0 // indirect
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
// indirect
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
// indirect
github.com/fjl/memsize v0.0.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
...
...
@@ -93,6 +92,7 @@ require (
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 // indirect
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
lukechampine.com/blake3 v1.1.7 // indirect
...
...
op-batcher/go.sum
View file @
848f0bcc
...
...
@@ -109,14 +109,12 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-bindings v0.10.10 h1:Khi7m2IyNdB2JeMdW3Y1YibePTiAzuLMHe8hBE2WQzs=
github.com/ethereum-optimism/optimism/op-bindings v0.10.10/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-node v0.10.10 h1:edmxboiYSIk9n4A3paEF7I0m5qi+v+6FBFkqAfpFU7Y=
github.com/ethereum-optimism/optimism/op-node v0.10.10/go.mod h1:EEcHgMdKiWasJGO5uzspRN2xM1/OB+ehgVgMj4RgPas=
github.com/ethereum-optimism/optimism/op-proposer v0.10.10 h1:VOpHt1T/CnaYhjbhj/rG+yU+/Tay3fkHSrU/2s8e2po=
github.com/ethereum-optimism/optimism/op-proposer v0.10.10/go.mod h1:oRPWIlr9DsVT4iNHmXs1AVhUYlU6I9GZ50YqnKcADWc=
github.com/ethereum-optimism/optimism/op-service v0.10.10 h1:B5mGpATX6zPkDABoh6smCjh6Z5mA2KWh71MD1i6T5ww=
github.com/ethereum-optimism/optimism/op-service v0.10.10/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-bindings v0.10.11 h1:RDiRyHo0G/UuxHZQdMJyqIuHtWvpionuFNfczNaWCcM=
github.com/ethereum-optimism/optimism/op-bindings v0.10.11/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-node v0.10.11 h1:ED72b68ainzcXr5/cLOYRwv+LdE4hRDnkq3SmNRY1+Q=
github.com/ethereum-optimism/optimism/op-node v0.10.11/go.mod h1:/CDpkMxc3mDklZ1nqz2lmxfeUyAUz7yC/OLmX8egAUw=
github.com/ethereum-optimism/optimism/op-service v0.10.11 h1:o+SazhFXlE3EM9Re5KIPEQklZ9uTI8rNkjl0h5OwRtU=
github.com/ethereum-optimism/optimism/op-service v0.10.11/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-signer v0.1.0 h1:wH44Deai43YQWO0pEd44pDm3BahdAtSmrOHKiPvTB8Y=
github.com/ethereum-optimism/optimism/op-signer v0.1.0/go.mod h1:u8sN6X/c20pP9F1Ey7jH3fi19D08Y+T9ep3PGJfdyi8=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
...
...
@@ -604,6 +602,7 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ=
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
...
...
op-chain-ops/go.mod
View file @
848f0bcc
...
...
@@ -3,7 +3,7 @@ module github.com/ethereum-optimism/optimism/op-chain-ops
go 1.18
require (
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
github.com/ethereum-optimism/optimism/op-node v0.10.1
github.com/ethereum/go-ethereum v1.10.26
github.com/holiman/uint256 v1.2.0
...
...
@@ -23,7 +23,7 @@ require (
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
// indirect
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
// indirect
github.com/go-kit/kit v0.10.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-stack/stack v1.8.1 // indirect
...
...
op-chain-ops/go.sum
View file @
848f0bcc
...
...
@@ -79,12 +79,12 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0 h1:Khi7m2IyNdB2JeMdW3Y1YibePTiAzuLMHe8hBE2WQzs
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1 h1:RDiRyHo0G/UuxHZQdMJyqIuHtWvpionuFNfczNaWCcM
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-node v0.10.1 h1:kVBaOEOYLV22XEHRhB7dfdmoXepO0kx/RsZQK+Bpk1Y=
github.com/ethereum-optimism/optimism/op-node v0.10.1/go.mod h1:pup7wiiUs9g8cZKwXeB5tEGCqwUUwFVmej9MmSIm6S8=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0 h1:B5mGpATX6zPkDABoh6smCjh6Z5mA2KWh71MD1i6T5ww
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1 h1:o+SazhFXlE3EM9Re5KIPEQklZ9uTI8rNkjl0h5OwRtU
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
...
...
op-e2e/actions/garbage_channel_out.go
0 → 100644
View file @
848f0bcc
package
actions
import
(
"bytes"
"compress/gzip"
"compress/zlib"
"crypto/rand"
"errors"
"fmt"
"io"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
)
type
GarbageKind
int64
const
(
STRIP_VERSION
GarbageKind
=
iota
RANDOM
TRUNCATE_END
DIRTY_APPEND
INVALID_COMPRESSION
MALFORM_RLP
)
var
GarbageKinds
=
[]
GarbageKind
{
STRIP_VERSION
,
RANDOM
,
TRUNCATE_END
,
DIRTY_APPEND
,
INVALID_COMPRESSION
,
MALFORM_RLP
,
}
// GarbageChannelCfg is the configuration for a `GarbageChannelOut`
type
GarbageChannelCfg
struct
{
useInvalidCompression
bool
malformRLP
bool
}
// Writer is the interface shared between `zlib.Writer` and `gzip.Writer`
type
Writer
interface
{
Close
()
error
Flush
()
error
Reset
(
io
.
Writer
)
Write
([]
byte
)
(
int
,
error
)
}
// ChannelOutIface is the interface implemented by ChannelOut & GarbageChannelOut
type
ChannelOutIface
interface
{
ID
()
derive
.
ChannelID
Reset
()
error
AddBlock
(
block
*
types
.
Block
)
error
ReadyBytes
()
int
Flush
()
error
Close
()
error
OutputFrame
(
w
*
bytes
.
Buffer
,
maxSize
uint64
)
error
}
// Compile-time check for ChannelOutIface interface implementation for the ChannelOut type.
var
_
ChannelOutIface
=
(
*
derive
.
ChannelOut
)(
nil
)
// Compile-time check for ChannelOutIface interface implementation for the GarbageChannelOut type.
var
_
ChannelOutIface
=
(
*
GarbageChannelOut
)(
nil
)
// GarbageChannelOut is a modified `derive.ChannelOut` that can be configured to behave differently
// than the original
type
GarbageChannelOut
struct
{
id
derive
.
ChannelID
// Frame ID of the next frame to emit. Increment after emitting
frame
uint64
// rlpLength is the uncompressed size of the channel. Must be less than MAX_RLP_BYTES_PER_CHANNEL
rlpLength
int
// Compressor stage. Write input data to it
compress
Writer
// post compression buffer
buf
bytes
.
Buffer
closed
bool
// Garbage channel configuration
cfg
*
GarbageChannelCfg
}
func
(
co
*
GarbageChannelOut
)
ID
()
derive
.
ChannelID
{
return
co
.
id
}
// NewGarbageChannelOut creates a new `GarbageChannelOut` with the given configuration.
func
NewGarbageChannelOut
(
cfg
*
GarbageChannelCfg
)
(
*
GarbageChannelOut
,
error
)
{
c
:=
&
GarbageChannelOut
{
id
:
derive
.
ChannelID
{},
// TODO: use GUID here instead of fully random data
frame
:
0
,
rlpLength
:
0
,
cfg
:
cfg
,
}
_
,
err
:=
rand
.
Read
(
c
.
id
[
:
])
if
err
!=
nil
{
return
nil
,
err
}
// Optionally use zlib or gzip compression
var
compress
Writer
if
cfg
.
useInvalidCompression
{
compress
,
err
=
gzip
.
NewWriterLevel
(
&
c
.
buf
,
gzip
.
BestCompression
)
}
else
{
compress
,
err
=
zlib
.
NewWriterLevel
(
&
c
.
buf
,
zlib
.
BestCompression
)
}
if
err
!=
nil
{
return
nil
,
err
}
c
.
compress
=
compress
return
c
,
nil
}
// TODO: reuse ChannelOut for performance
func
(
co
*
GarbageChannelOut
)
Reset
()
error
{
co
.
frame
=
0
co
.
rlpLength
=
0
co
.
buf
.
Reset
()
co
.
compress
.
Reset
(
&
co
.
buf
)
co
.
closed
=
false
_
,
err
:=
rand
.
Read
(
co
.
id
[
:
])
return
err
}
// AddBlock adds a block to the channel. It returns an error
// if there is a problem adding the block. The only sentinel
// error that it returns is ErrTooManyRLPBytes. If this error
// is returned, the channel should be closed and a new one
// should be made.
func
(
co
*
GarbageChannelOut
)
AddBlock
(
block
*
types
.
Block
)
error
{
if
co
.
closed
{
return
errors
.
New
(
"already closed"
)
}
batch
,
err
:=
blockToBatch
(
block
)
if
err
!=
nil
{
return
err
}
// We encode to a temporary buffer to determine the encoded length to
// ensure that the total size of all RLP elements is less than or equal to MAX_RLP_BYTES_PER_CHANNEL
var
buf
bytes
.
Buffer
if
err
:=
rlp
.
Encode
(
&
buf
,
batch
);
err
!=
nil
{
return
err
}
if
co
.
cfg
.
malformRLP
{
// Malform the RLP by incrementing the length prefix by 1.
bufBytes
:=
buf
.
Bytes
()
bufBytes
[
0
]
+=
1
buf
.
Reset
()
buf
.
Write
(
bufBytes
)
}
if
co
.
rlpLength
+
buf
.
Len
()
>
derive
.
MaxRLPBytesPerChannel
{
return
fmt
.
Errorf
(
"could not add %d bytes to channel of %d bytes, max is %d. err: %w"
,
buf
.
Len
(),
co
.
rlpLength
,
derive
.
MaxRLPBytesPerChannel
,
derive
.
ErrTooManyRLPBytes
)
}
co
.
rlpLength
+=
buf
.
Len
()
_
,
err
=
io
.
Copy
(
co
.
compress
,
&
buf
)
return
err
}
// ReadyBytes returns the number of bytes that the channel out can immediately output into a frame.
// Use `Flush` or `Close` to move data from the compression buffer into the ready buffer if more bytes
// are needed. Add blocks may add to the ready buffer, but it is not guaranteed due to the compression stage.
func
(
co
*
GarbageChannelOut
)
ReadyBytes
()
int
{
return
co
.
buf
.
Len
()
}
// Flush flushes the internal compression stage to the ready buffer. It enables pulling a larger & more
// complete frame. It reduces the compression efficiency.
func
(
co
*
GarbageChannelOut
)
Flush
()
error
{
return
co
.
compress
.
Flush
()
}
func
(
co
*
GarbageChannelOut
)
Close
()
error
{
if
co
.
closed
{
return
errors
.
New
(
"already closed"
)
}
co
.
closed
=
true
return
co
.
compress
.
Close
()
}
// OutputFrame writes a frame to w with a given max size
// Use `ReadyBytes`, `Flush`, and `Close` to modify the ready buffer.
// Returns io.EOF when the channel is closed & there are no more frames
// Returns nil if there is still more buffered data.
// Returns and error if it ran into an error during processing.
func
(
co
*
GarbageChannelOut
)
OutputFrame
(
w
*
bytes
.
Buffer
,
maxSize
uint64
)
error
{
f
:=
derive
.
Frame
{
ID
:
co
.
id
,
FrameNumber
:
uint16
(
co
.
frame
),
}
// Copy data from the local buffer into the frame data buffer
// Don't go past the maxSize with the fixed frame overhead.
// Fixed overhead: 32 + 8 + 2 + 4 + 1 = 47 bytes.
// Add one extra byte for the version byte (for the entire L1 tx though)
maxDataSize
:=
maxSize
-
47
-
1
if
maxDataSize
>
uint64
(
co
.
buf
.
Len
())
{
maxDataSize
=
uint64
(
co
.
buf
.
Len
())
// If we are closed & will not spill past the current frame
// mark it is the final frame of the channel.
if
co
.
closed
{
f
.
IsLast
=
true
}
}
f
.
Data
=
make
([]
byte
,
maxDataSize
)
if
_
,
err
:=
io
.
ReadFull
(
&
co
.
buf
,
f
.
Data
);
err
!=
nil
{
return
err
}
if
err
:=
f
.
MarshalBinary
(
w
);
err
!=
nil
{
return
err
}
co
.
frame
+=
1
if
f
.
IsLast
{
return
io
.
EOF
}
else
{
return
nil
}
}
// blockToBatch transforms a block into a batch object that can easily be RLP encoded.
func
blockToBatch
(
block
*
types
.
Block
)
(
*
derive
.
BatchData
,
error
)
{
opaqueTxs
:=
make
([]
hexutil
.
Bytes
,
0
,
len
(
block
.
Transactions
()))
for
i
,
tx
:=
range
block
.
Transactions
()
{
if
tx
.
Type
()
==
types
.
DepositTxType
{
continue
}
otx
,
err
:=
tx
.
MarshalBinary
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"could not encode tx %v in block %v: %w"
,
i
,
tx
.
Hash
(),
err
)
}
opaqueTxs
=
append
(
opaqueTxs
,
otx
)
}
l1InfoTx
:=
block
.
Transactions
()[
0
]
if
l1InfoTx
.
Type
()
!=
types
.
DepositTxType
{
return
nil
,
derive
.
ErrNotDepositTx
}
l1Info
,
err
:=
derive
.
L1InfoDepositTxData
(
l1InfoTx
.
Data
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"could not parse the L1 Info deposit: %w"
,
err
)
}
return
&
derive
.
BatchData
{
BatchV1
:
derive
.
BatchV1
{
ParentHash
:
block
.
ParentHash
(),
EpochNum
:
rollup
.
Epoch
(
l1Info
.
Number
),
EpochHash
:
l1Info
.
BlockHash
,
Timestamp
:
block
.
Time
(),
Transactions
:
opaqueTxs
,
},
},
nil
}
op-e2e/actions/l2_batcher.go
View file @
848f0bcc
...
...
@@ -4,6 +4,7 @@ import (
"bytes"
"context"
"crypto/ecdsa"
"crypto/rand"
"io"
"math/big"
...
...
@@ -40,6 +41,8 @@ type BatcherCfg struct {
MaxL1TxSize
uint64
BatcherKey
*
ecdsa
.
PrivateKey
GarbageCfg
*
GarbageChannelCfg
}
// L2Batcher buffers and submits L2 batches to L1.
...
...
@@ -58,7 +61,7 @@ type L2Batcher struct {
l1Signer
types
.
Signer
l2ChannelOut
*
derive
.
ChannelOut
l2ChannelOut
ChannelOutIface
l2Submitting
bool
// when the channel out is being submitted, and not safe to write to without resetting
l2BufferedBlock
eth
.
BlockID
l2SubmittedBlock
eth
.
BlockID
...
...
@@ -122,7 +125,12 @@ func (s *L2Batcher) ActL2BatchBuffer(t Testing) {
}
// Create channel if we don't have one yet
if
s
.
l2ChannelOut
==
nil
{
ch
,
err
:=
derive
.
NewChannelOut
()
var
ch
ChannelOutIface
if
s
.
l2BatcherCfg
.
GarbageCfg
!=
nil
{
ch
,
err
=
NewGarbageChannelOut
(
s
.
l2BatcherCfg
.
GarbageCfg
)
}
else
{
ch
,
err
=
derive
.
NewChannelOut
()
}
require
.
NoError
(
t
,
err
,
"failed to create channel"
)
s
.
l2ChannelOut
=
ch
}
...
...
@@ -195,6 +203,89 @@ func (s *L2Batcher) ActL2BatchSubmit(t Testing) {
require
.
NoError
(
t
,
err
,
"need to send tx"
)
}
// ActL2BatchSubmitGarbage constructs a malformed channel frame and submits it to the
// batch inbox. This *should* cause the batch inbox to reject the blocks
// encoded within the frame, even if the blocks themselves are valid.
func
(
s
*
L2Batcher
)
ActL2BatchSubmitGarbage
(
t
Testing
,
kind
GarbageKind
)
{
// Don't run this action if there's no data to submit
if
s
.
l2ChannelOut
==
nil
{
t
.
InvalidAction
(
"need to buffer data first, cannot batch submit with empty buffer"
)
return
}
// Collect the output frame
data
:=
new
(
bytes
.
Buffer
)
data
.
WriteByte
(
derive
.
DerivationVersion0
)
// subtract one, to account for the version byte
if
err
:=
s
.
l2ChannelOut
.
OutputFrame
(
data
,
s
.
l2BatcherCfg
.
MaxL1TxSize
-
1
);
err
==
io
.
EOF
{
s
.
l2ChannelOut
=
nil
s
.
l2Submitting
=
false
}
else
if
err
!=
nil
{
s
.
l2Submitting
=
false
t
.
Fatalf
(
"failed to output channel data to frame: %v"
,
err
)
}
outputFrame
:=
data
.
Bytes
()
// Malform the output frame
switch
kind
{
// Strip the derivation version byte from the output frame
case
STRIP_VERSION
:
outputFrame
=
outputFrame
[
1
:
]
// Replace the output frame with random bytes of length [1, 512]
case
RANDOM
:
i
,
err
:=
rand
.
Int
(
rand
.
Reader
,
big
.
NewInt
(
512
))
require
.
NoError
(
t
,
err
,
"error generating random bytes length"
)
buf
:=
make
([]
byte
,
i
.
Int64
()
+
1
)
_
,
err
=
rand
.
Read
(
buf
)
require
.
NoError
(
t
,
err
,
"error generating random bytes"
)
outputFrame
=
buf
// Remove 4 bytes from the tail end of the output frame
case
TRUNCATE_END
:
outputFrame
=
outputFrame
[
:
len
(
outputFrame
)
-
4
]
// Append 4 garbage bytes to the end of the output frame
case
DIRTY_APPEND
:
outputFrame
=
append
(
outputFrame
,
[]
byte
{
0xBA
,
0xD0
,
0xC0
,
0xDE
}
...
)
case
INVALID_COMPRESSION
:
// Do nothing post frame encoding- the `GarbageChannelOut` used for this case is modified to
// use gzip compression rather than zlib, which is invalid.
break
case
MALFORM_RLP
:
// Do nothing post frame encoding- the `GarbageChannelOut` used for this case is modified to
// write malformed RLP each time a block is added to the channel.
break
default
:
t
.
Fatalf
(
"Unexpected garbage kind: %v"
,
kind
)
}
nonce
,
err
:=
s
.
l1
.
PendingNonceAt
(
t
.
Ctx
(),
s
.
batcherAddr
)
require
.
NoError
(
t
,
err
,
"need batcher nonce"
)
gasTipCap
:=
big
.
NewInt
(
2
*
params
.
GWei
)
pendingHeader
,
err
:=
s
.
l1
.
HeaderByNumber
(
t
.
Ctx
(),
big
.
NewInt
(
-
1
))
require
.
NoError
(
t
,
err
,
"need l1 pending header for gas price estimation"
)
gasFeeCap
:=
new
(
big
.
Int
)
.
Add
(
gasTipCap
,
new
(
big
.
Int
)
.
Mul
(
pendingHeader
.
BaseFee
,
big
.
NewInt
(
2
)))
rawTx
:=
&
types
.
DynamicFeeTx
{
ChainID
:
s
.
rollupCfg
.
L1ChainID
,
Nonce
:
nonce
,
To
:
&
s
.
rollupCfg
.
BatchInboxAddress
,
GasTipCap
:
gasTipCap
,
GasFeeCap
:
gasFeeCap
,
Data
:
outputFrame
,
}
gas
,
err
:=
core
.
IntrinsicGas
(
rawTx
.
Data
,
nil
,
false
,
true
,
true
)
require
.
NoError
(
t
,
err
,
"need to compute intrinsic gas"
)
rawTx
.
Gas
=
gas
tx
,
err
:=
types
.
SignNewTx
(
s
.
l2BatcherCfg
.
BatcherKey
,
s
.
l1Signer
,
rawTx
)
require
.
NoError
(
t
,
err
,
"need to sign tx"
)
err
=
s
.
l1
.
SendTransaction
(
t
.
Ctx
(),
tx
)
require
.
NoError
(
t
,
err
,
"need to send tx"
)
}
func
(
s
*
L2Batcher
)
ActBufferAll
(
t
Testing
)
{
stat
,
err
:=
s
.
syncStatusAPI
.
SyncStatus
(
t
.
Ctx
())
require
.
NoError
(
t
,
err
)
...
...
op-e2e/actions/l2_batcher_test.go
View file @
848f0bcc
...
...
@@ -196,6 +196,88 @@ func TestL2Finalization(gt *testing.T) {
require
.
Equal
(
t
,
heightToSubmit
,
sequencer
.
SyncStatus
()
.
FinalizedL2
.
Number
,
"unknown/bad finalized L1 blocks are ignored"
)
}
// TestGarbageBatch tests the behavior of an invalid/malformed output channel frame containing
// valid batches being submitted to the batch inbox. These batches should always be rejected
// and the safe L2 head should remain unaltered.
func
TestGarbageBatch
(
gt
*
testing
.
T
)
{
t
:=
NewDefaultTesting
(
gt
)
p
:=
defaultRollupTestParams
dp
:=
e2eutils
.
MakeDeployParams
(
t
,
p
)
for
_
,
garbageKind
:=
range
GarbageKinds
{
sd
:=
e2eutils
.
Setup
(
t
,
dp
,
defaultAlloc
)
log
:=
testlog
.
Logger
(
t
,
log
.
LvlError
)
miner
,
engine
,
sequencer
:=
setupSequencerTest
(
t
,
sd
,
log
)
_
,
verifier
:=
setupVerifier
(
t
,
sd
,
log
,
miner
.
L1Client
(
t
,
sd
.
RollupCfg
))
batcherCfg
:=
&
BatcherCfg
{
MinL1TxSize
:
0
,
MaxL1TxSize
:
128
_000
,
BatcherKey
:
dp
.
Secrets
.
Batcher
,
}
if
garbageKind
==
MALFORM_RLP
||
garbageKind
==
INVALID_COMPRESSION
{
// If the garbage kind is `INVALID_COMPRESSION` or `MALFORM_RLP`, use the `actions` packages
// modified `ChannelOut`.
batcherCfg
.
GarbageCfg
=
&
GarbageChannelCfg
{
useInvalidCompression
:
garbageKind
==
INVALID_COMPRESSION
,
malformRLP
:
garbageKind
==
MALFORM_RLP
,
}
}
batcher
:=
NewL2Batcher
(
log
,
sd
.
RollupCfg
,
batcherCfg
,
sequencer
.
RollupClient
(),
miner
.
EthClient
(),
engine
.
EthClient
())
sequencer
.
ActL2PipelineFull
(
t
)
verifier
.
ActL2PipelineFull
(
t
)
syncAndBuildL2
:=
func
()
{
// Send a head signal to the sequencer and verifier
sequencer
.
ActL1HeadSignal
(
t
)
verifier
.
ActL1HeadSignal
(
t
)
// Run the derivation pipeline on the sequencer and verifier
sequencer
.
ActL2PipelineFull
(
t
)
verifier
.
ActL2PipelineFull
(
t
)
// Build the L2 chain to the L1 head
sequencer
.
ActBuildToL1Head
(
t
)
}
// Build an empty block on L1 and run the derivation pipeline + build L2
// to the L1 head (block #1)
miner
.
ActEmptyBlock
(
t
)
syncAndBuildL2
()
// Ensure that the L2 safe head has an L1 Origin at genesis before any
// batches are submitted.
require
.
Equal
(
t
,
uint64
(
0
),
sequencer
.
L2Safe
()
.
L1Origin
.
Number
)
require
.
Equal
(
t
,
uint64
(
1
),
sequencer
.
L2Unsafe
()
.
L1Origin
.
Number
)
// Submit a batch containing all blocks built on L2 while catching up
// to the L1 head above. The output channel frame submitted to the batch
// inbox will be invalid- it will be malformed depending on the passed
// `garbageKind`.
batcher
.
ActBufferAll
(
t
)
batcher
.
ActL2ChannelClose
(
t
)
batcher
.
ActL2BatchSubmitGarbage
(
t
,
garbageKind
)
// Include the batch on L1 in block #2
miner
.
ActL1StartBlock
(
12
)(
t
)
miner
.
ActL1IncludeTx
(
dp
.
Addresses
.
Batcher
)(
t
)
miner
.
ActL1EndBlock
(
t
)
// Send a head signal + run the derivation pipeline on the sequencer
// and verifier.
syncAndBuildL2
()
// Verify that the L2 blocks that were batch submitted were *not* marked
// as safe due to the malformed output channel frame. The safe head should
// still have an L1 Origin at genesis.
require
.
Equal
(
t
,
uint64
(
0
),
sequencer
.
L2Safe
()
.
L1Origin
.
Number
)
require
.
Equal
(
t
,
uint64
(
2
),
sequencer
.
L2Unsafe
()
.
L1Origin
.
Number
)
}
}
func
TestExtendedTimeWithoutL1Batches
(
gt
*
testing
.
T
)
{
t
:=
NewDefaultTesting
(
gt
)
p
:=
&
e2eutils
.
TestParams
{
...
...
op-e2e/actions/l2_proposer.go
View file @
848f0bcc
...
...
@@ -15,8 +15,8 @@ import (
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-proposer/proposer"
"github.com/ethereum-optimism/optimism/op-proposer/txmgr"
opcrypto
"github.com/ethereum-optimism/optimism/op-service/crypto"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
)
type
ProposerCfg
struct
{
...
...
@@ -34,7 +34,7 @@ type L2Proposer struct {
}
func
NewL2Proposer
(
t
Testing
,
log
log
.
Logger
,
cfg
*
ProposerCfg
,
l1
*
ethclient
.
Client
,
rollupCl
*
sources
.
RollupClient
)
*
L2Proposer
{
signer
:=
func
(
chainID
*
big
.
Int
)
proposer
.
SignerFn
{
signer
:=
func
(
chainID
*
big
.
Int
)
opcrypto
.
SignerFn
{
s
:=
opcrypto
.
PrivateKeySignerFn
(
cfg
.
ProposerKey
,
chainID
)
return
func
(
_
context
.
Context
,
addr
common
.
Address
,
tx
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
{
return
s
(
addr
,
tx
)
...
...
@@ -60,7 +60,7 @@ func NewL2Proposer(t Testing, log log.Logger, cfg *ProposerCfg, l1 *ethclient.Cl
SignerFnFactory
:
signer
,
}
dr
,
err
:=
proposer
.
NewL2OutputSubmitter
WithSigner
(
proposerCfg
,
log
)
dr
,
err
:=
proposer
.
NewL2OutputSubmitter
(
proposerCfg
,
log
)
require
.
NoError
(
t
,
err
)
return
&
L2Proposer
{
...
...
op-e2e/go.mod
View file @
848f0bcc
...
...
@@ -10,12 +10,12 @@ require (
github.com/docker/docker v20.10.21+incompatible
github.com/docker/go-connections v0.4.0
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3
github.com/ethereum-optimism/optimism/op-batcher v0.10.1
0
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
0
github.com/ethereum-optimism/optimism/op-node v0.10.1
0
github.com/ethereum-optimism/optimism/op-proposer v0.10.1
0
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
github.com/ethereum-optimism/optimism/op-batcher v0.10.1
1
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
1
github.com/ethereum-optimism/optimism/op-node v0.10.1
1
github.com/ethereum-optimism/optimism/op-proposer v0.10.1
1
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
github.com/ethereum/go-ethereum v1.10.26
github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8
github.com/libp2p/go-libp2p v0.23.3
...
...
@@ -44,10 +44,13 @@ require (
github.com/deepmap/oapi-codegen v1.8.2 // indirect
github.com/docker/distribution v2.8.1+incompatible // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dyson/certman v0.3.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/elastic/gosigar v0.14.2 // indirect
github.com/ethereum-optimism/optimism/op-signer v0.1.0 // indirect
github.com/fjl/memsize v0.0.1 // indirect
github.com/flynn/noise v1.0.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-stack/stack v1.8.1 // indirect
...
...
@@ -157,7 +160,7 @@ require (
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.0.0-20220920183852-bf014ff85ad5 // indirect
golang.org/x/sync v0.
0.0-20220722155255-886fb9371eb4
// indirect
golang.org/x/sync v0.
1.0
// indirect
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 // indirect
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
golang.org/x/text v0.3.7 // indirect
...
...
op-e2e/go.sum
View file @
848f0bcc
...
...
@@ -145,6 +145,8 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dyson/certman v0.3.0 h1:S7WCUim5faT/OiBhiY3u5cMaiC9MNKiA+8PJDXLaIYQ=
github.com/dyson/certman v0.3.0/go.mod h1:RMWlyA9op6D9SxOBRRX3sxnParehv9gf52WWUJPd1JA=
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ=
github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
...
...
@@ -159,18 +161,20 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-batcher v0.10.10 h1:uujkdVCjRv7WJA9205PMwqXpCAeG0IxYu4hREPkK1IY=
github.com/ethereum-optimism/optimism/op-batcher v0.10.10/go.mod h1:dhTcmYjZyHKKfLAP9qQgXRBbrDvckBmNo3/Yu4zqaqg=
github.com/ethereum-optimism/optimism/op-bindings v0.10.10 h1:Khi7m2IyNdB2JeMdW3Y1YibePTiAzuLMHe8hBE2WQzs=
github.com/ethereum-optimism/optimism/op-bindings v0.10.10/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.10 h1:99OW6aQMSsBLTSplvVfvSrZy8ZH3qs5dG5T0o1Ffwd0=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.10/go.mod h1:dWZgOwVz2nK/pFY9fVFxStjYFVqnbz954pwIysStmEY=
github.com/ethereum-optimism/optimism/op-node v0.10.10 h1:edmxboiYSIk9n4A3paEF7I0m5qi+v+6FBFkqAfpFU7Y=
github.com/ethereum-optimism/optimism/op-node v0.10.10/go.mod h1:EEcHgMdKiWasJGO5uzspRN2xM1/OB+ehgVgMj4RgPas=
github.com/ethereum-optimism/optimism/op-proposer v0.10.10 h1:VOpHt1T/CnaYhjbhj/rG+yU+/Tay3fkHSrU/2s8e2po=
github.com/ethereum-optimism/optimism/op-proposer v0.10.10/go.mod h1:oRPWIlr9DsVT4iNHmXs1AVhUYlU6I9GZ50YqnKcADWc=
github.com/ethereum-optimism/optimism/op-service v0.10.10 h1:B5mGpATX6zPkDABoh6smCjh6Z5mA2KWh71MD1i6T5ww=
github.com/ethereum-optimism/optimism/op-service v0.10.10/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-batcher v0.10.11 h1:aqTOE3UnTrX/rngXruT815CyRhcKi9kvZ4xJllW9l6I=
github.com/ethereum-optimism/optimism/op-batcher v0.10.11/go.mod h1:HIsxM0YihXGGImsUuPdI0T+L1LuS8UXgZnaZweXUGug=
github.com/ethereum-optimism/optimism/op-bindings v0.10.11 h1:RDiRyHo0G/UuxHZQdMJyqIuHtWvpionuFNfczNaWCcM=
github.com/ethereum-optimism/optimism/op-bindings v0.10.11/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.11 h1:6ihrVPJYN1HvD4KG0Fk1zIJCM4ZB109kCu9fq81jznQ=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.11/go.mod h1:6mub7Tx1cC4gDrfX9o9n+kA4R2qLlYvfWkG8es21EQI=
github.com/ethereum-optimism/optimism/op-node v0.10.11 h1:ED72b68ainzcXr5/cLOYRwv+LdE4hRDnkq3SmNRY1+Q=
github.com/ethereum-optimism/optimism/op-node v0.10.11/go.mod h1:/CDpkMxc3mDklZ1nqz2lmxfeUyAUz7yC/OLmX8egAUw=
github.com/ethereum-optimism/optimism/op-proposer v0.10.11 h1:uG+CXcac1LVRAnivv+3q7qJZDTgdKLv0D3mbu2o7nKI=
github.com/ethereum-optimism/optimism/op-proposer v0.10.11/go.mod h1:O/BolDMRNanlblBQKwq2UGwnl7hTdKrnVlmXfijG7vw=
github.com/ethereum-optimism/optimism/op-service v0.10.11 h1:o+SazhFXlE3EM9Re5KIPEQklZ9uTI8rNkjl0h5OwRtU=
github.com/ethereum-optimism/optimism/op-service v0.10.11/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-signer v0.1.0 h1:wH44Deai43YQWO0pEd44pDm3BahdAtSmrOHKiPvTB8Y=
github.com/ethereum-optimism/optimism/op-signer v0.1.0/go.mod h1:u8sN6X/c20pP9F1Ey7jH3fi19D08Y+T9ep3PGJfdyi8=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
github.com/fjl/memsize v0.0.1/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ=
...
...
@@ -179,8 +183,9 @@ github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays=
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
...
...
@@ -823,8 +828,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.
0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw
=
golang.org/x/sync v0.
0.0-20220722155255-886fb9371eb4
/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.
1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o
=
golang.org/x/sync v0.
1.0
/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
...
...
@@ -898,6 +903,7 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 h1:OK7RB6t2WQX54srQQYSXMW8dF5C6/8+oA/s5QBmmto4=
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
...
...
op-e2e/migration_test.go
View file @
848f0bcc
...
...
@@ -342,7 +342,7 @@ func TestMigration(t *testing.T) {
batcher
.
Stop
()
})
proposer
,
err
:=
l2os
.
NewL2OutputSubmitter
(
l2os
.
CLIConfig
{
proposer
,
err
:=
l2os
.
NewL2OutputSubmitter
FromCLIConfig
(
l2os
.
CLIConfig
{
L1EthRpc
:
forkedL1URL
,
RollupRpc
:
rollupNode
.
HTTPEndpoint
(),
L2OOAddress
:
l2OS
.
Address
.
String
(),
...
...
op-e2e/setup.go
View file @
848f0bcc
...
...
@@ -498,7 +498,7 @@ func (cfg SystemConfig) Start() (*System, error) {
}
// L2Output Submitter
sys
.
L2OutputSubmitter
,
err
=
l2os
.
NewL2OutputSubmitter
(
l2os
.
CLIConfig
{
sys
.
L2OutputSubmitter
,
err
=
l2os
.
NewL2OutputSubmitter
FromCLIConfig
(
l2os
.
CLIConfig
{
L1EthRpc
:
sys
.
Nodes
[
"l1"
]
.
WSEndpoint
(),
RollupRpc
:
sys
.
RollupNodes
[
"sequencer"
]
.
HTTPEndpoint
(),
L2OOAddress
:
predeploys
.
DevL2OutputOracleAddr
.
String
(),
...
...
op-node/go.mod
View file @
848f0bcc
...
...
@@ -6,9 +6,9 @@ require (
github.com/btcsuite/btcd v0.23.3
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
0
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
1
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
github.com/ethereum/go-ethereum v1.10.26
github.com/golang/snappy v0.0.4
github.com/google/go-cmp v0.5.8
...
...
op-node/go.sum
View file @
848f0bcc
...
...
@@ -145,12 +145,12 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0 h1:Khi7m2IyNdB2JeMdW3Y1YibePTiAzuLMHe8hBE2WQzs
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
0 h1:99OW6aQMSsBLTSplvVfvSrZy8ZH3qs5dG5T0o1Ffwd0
=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
0/go.mod h1:dWZgOwVz2nK/pFY9fVFxStjYFVqnbz954pwIysStmEY
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0 h1:B5mGpATX6zPkDABoh6smCjh6Z5mA2KWh71MD1i6T5ww
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1 h1:RDiRyHo0G/UuxHZQdMJyqIuHtWvpionuFNfczNaWCcM
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
1 h1:6ihrVPJYN1HvD4KG0Fk1zIJCM4ZB109kCu9fq81jznQ
=
github.com/ethereum-optimism/optimism/op-chain-ops v0.10.1
1/go.mod h1:6mub7Tx1cC4gDrfX9o9n+kA4R2qLlYvfWkG8es21EQI
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1 h1:o+SazhFXlE3EM9Re5KIPEQklZ9uTI8rNkjl0h5OwRtU
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
github.com/fjl/memsize v0.0.1/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
...
...
op-node/node/node.go
View file @
848f0bcc
...
...
@@ -124,6 +124,10 @@ func (n *OpNode) initL1(ctx context.Context, cfg *Config) error {
return
fmt
.
Errorf
(
"failed to create L1 source: %w"
,
err
)
}
if
err
:=
cfg
.
Rollup
.
ValidateL1Config
(
ctx
,
n
.
l1Source
);
err
!=
nil
{
return
err
}
// Keep subscribed to the L1 heads, which keeps the L1 maintainer pointing to the best headers to sync
n
.
l1HeadsSub
=
event
.
ResubscribeErr
(
time
.
Second
*
10
,
func
(
ctx
context
.
Context
,
err
error
)
(
event
.
Subscription
,
error
)
{
if
err
!=
nil
{
...
...
@@ -189,6 +193,10 @@ func (n *OpNode) initL2(ctx context.Context, cfg *Config, snapshotLog log.Logger
return
fmt
.
Errorf
(
"failed to create Engine client: %w"
,
err
)
}
if
err
:=
cfg
.
Rollup
.
ValidateL2Config
(
ctx
,
n
.
l2Source
);
err
!=
nil
{
return
err
}
n
.
l2Driver
=
driver
.
NewDriver
(
&
cfg
.
Driver
,
&
cfg
.
Rollup
,
n
.
l2Source
,
n
.
l1Source
,
n
,
n
.
log
,
snapshotLog
,
n
.
metrics
)
return
nil
...
...
op-node/rollup/types.go
View file @
848f0bcc
package
rollup
import
(
"context"
"errors"
"fmt"
"math/big"
...
...
@@ -55,6 +56,94 @@ type Config struct {
L1SystemConfigAddress
common
.
Address
`json:"l1_system_config_address"`
}
// ValidateL1Config checks L1 config variables for errors.
func
(
cfg
*
Config
)
ValidateL1Config
(
ctx
context
.
Context
,
client
L1Client
)
error
{
// Validate the L1 Client Chain ID
if
err
:=
cfg
.
CheckL1ChainID
(
ctx
,
client
);
err
!=
nil
{
return
err
}
// Validate the Rollup L1 Genesis Blockhash
if
err
:=
cfg
.
CheckL1GenesisBlockHash
(
ctx
,
client
);
err
!=
nil
{
return
err
}
return
nil
}
// ValidateL2Config checks L2 config variables for errors.
func
(
cfg
*
Config
)
ValidateL2Config
(
ctx
context
.
Context
,
client
L2Client
)
error
{
// Validate the L2 Client Chain ID
if
err
:=
cfg
.
CheckL2ChainID
(
ctx
,
client
);
err
!=
nil
{
return
err
}
// Validate the Rollup L2 Genesis Blockhash
if
err
:=
cfg
.
CheckL2GenesisBlockHash
(
ctx
,
client
);
err
!=
nil
{
return
err
}
return
nil
}
type
L1Client
interface
{
ChainID
(
context
.
Context
)
(
*
big
.
Int
,
error
)
L1BlockRefByNumber
(
context
.
Context
,
uint64
)
(
eth
.
L1BlockRef
,
error
)
}
// CheckL1ChainID checks that the configured L1 chain ID matches the client's chain ID.
func
(
cfg
*
Config
)
CheckL1ChainID
(
ctx
context
.
Context
,
client
L1Client
)
error
{
id
,
err
:=
client
.
ChainID
(
ctx
)
if
err
!=
nil
{
return
err
}
if
cfg
.
L1ChainID
.
Cmp
(
id
)
!=
0
{
return
fmt
.
Errorf
(
"incorrect L1 RPC chain id %d, expected %d"
,
cfg
.
L1ChainID
,
id
)
}
return
nil
}
// CheckL1GenesisBlockHash checks that the configured L1 genesis block hash is valid for the given client.
func
(
cfg
*
Config
)
CheckL1GenesisBlockHash
(
ctx
context
.
Context
,
client
L1Client
)
error
{
l1GenesisBlockRef
,
err
:=
client
.
L1BlockRefByNumber
(
ctx
,
cfg
.
Genesis
.
L1
.
Number
)
if
err
!=
nil
{
return
err
}
if
l1GenesisBlockRef
.
Hash
!=
cfg
.
Genesis
.
L1
.
Hash
{
return
fmt
.
Errorf
(
"incorrect L1 genesis block hash %d, expected %d"
,
cfg
.
Genesis
.
L1
.
Hash
,
l1GenesisBlockRef
.
Hash
)
}
return
nil
}
type
L2Client
interface
{
ChainID
(
context
.
Context
)
(
*
big
.
Int
,
error
)
L2BlockRefByNumber
(
context
.
Context
,
uint64
)
(
eth
.
L2BlockRef
,
error
)
}
// CheckL2ChainID checks that the configured L2 chain ID matches the client's chain ID.
func
(
cfg
*
Config
)
CheckL2ChainID
(
ctx
context
.
Context
,
client
L2Client
)
error
{
id
,
err
:=
client
.
ChainID
(
ctx
)
if
err
!=
nil
{
return
err
}
if
cfg
.
L2ChainID
.
Cmp
(
id
)
!=
0
{
return
fmt
.
Errorf
(
"incorrect L2 RPC chain id %d, expected %d"
,
cfg
.
L2ChainID
,
id
)
}
return
nil
}
// CheckL2GenesisBlockHash checks that the configured L2 genesis block hash is valid for the given client.
func
(
cfg
*
Config
)
CheckL2GenesisBlockHash
(
ctx
context
.
Context
,
client
L2Client
)
error
{
l2GenesisBlockRef
,
err
:=
client
.
L2BlockRefByNumber
(
ctx
,
cfg
.
Genesis
.
L2
.
Number
)
if
err
!=
nil
{
return
err
}
if
l2GenesisBlockRef
.
Hash
!=
cfg
.
Genesis
.
L2
.
Hash
{
return
fmt
.
Errorf
(
"incorrect L2 genesis block hash %d, expected %d"
,
cfg
.
Genesis
.
L2
.
Hash
,
l2GenesisBlockRef
.
Hash
)
}
return
nil
}
// Check verifies that the given configuration makes sense
func
(
cfg
*
Config
)
Check
()
error
{
if
cfg
.
BlockTime
==
0
{
...
...
op-node/rollup/types_test.go
View file @
848f0bcc
package
rollup
import
(
"context"
"encoding/json"
"math/big"
"math/rand"
...
...
@@ -55,3 +56,159 @@ func TestConfigJSON(t *testing.T) {
assert
.
NoError
(
t
,
json
.
Unmarshal
(
data
,
&
roundTripped
))
assert
.
Equal
(
t
,
&
roundTripped
,
config
)
}
type
mockL1Client
struct
{
chainID
*
big
.
Int
Hash
common
.
Hash
}
func
(
m
*
mockL1Client
)
ChainID
(
context
.
Context
)
(
*
big
.
Int
,
error
)
{
return
m
.
chainID
,
nil
}
func
(
m
*
mockL1Client
)
L1BlockRefByNumber
(
ctx
context
.
Context
,
number
uint64
)
(
eth
.
L1BlockRef
,
error
)
{
return
eth
.
L1BlockRef
{
Hash
:
m
.
Hash
,
Number
:
100
,
},
nil
}
func
TestValidateL1Config
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L1ChainID
=
big
.
NewInt
(
100
)
config
.
Genesis
.
L1
.
Number
=
100
config
.
Genesis
.
L1
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL1Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL1Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
NoError
(
t
,
err
)
}
func
TestValidateL1ConfigInvalidChainIdFails
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L1ChainID
=
big
.
NewInt
(
101
)
config
.
Genesis
.
L1
.
Number
=
100
config
.
Genesis
.
L1
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL1Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL1Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
config
.
L1ChainID
=
big
.
NewInt
(
99
)
err
=
config
.
ValidateL1Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
func
TestValidateL1ConfigInvalidGenesisHashFails
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L1ChainID
=
big
.
NewInt
(
100
)
config
.
Genesis
.
L1
.
Number
=
100
config
.
Genesis
.
L1
.
Hash
=
[
32
]
byte
{
0x00
}
mockClient
:=
mockL1Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL1Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
config
.
Genesis
.
L1
.
Hash
=
[
32
]
byte
{
0x02
}
err
=
config
.
ValidateL1Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
func
TestCheckL1ChainID
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L1ChainID
=
big
.
NewInt
(
100
)
err
:=
config
.
CheckL1ChainID
(
context
.
TODO
(),
&
mockL1Client
{
chainID
:
big
.
NewInt
(
100
)})
assert
.
NoError
(
t
,
err
)
err
=
config
.
CheckL1ChainID
(
context
.
TODO
(),
&
mockL1Client
{
chainID
:
big
.
NewInt
(
101
)})
assert
.
Error
(
t
,
err
)
err
=
config
.
CheckL1ChainID
(
context
.
TODO
(),
&
mockL1Client
{
chainID
:
big
.
NewInt
(
99
)})
assert
.
Error
(
t
,
err
)
}
func
TestCheckL1BlockRefByNumber
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
Genesis
.
L1
.
Number
=
100
config
.
Genesis
.
L1
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL1Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
CheckL1GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
NoError
(
t
,
err
)
mockClient
.
Hash
=
common
.
Hash
{
0x02
}
err
=
config
.
CheckL1GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
mockClient
.
Hash
=
common
.
Hash
{
0x00
}
err
=
config
.
CheckL1GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
type
mockL2Client
struct
{
chainID
*
big
.
Int
Hash
common
.
Hash
}
func
(
m
*
mockL2Client
)
ChainID
(
context
.
Context
)
(
*
big
.
Int
,
error
)
{
return
m
.
chainID
,
nil
}
func
(
m
*
mockL2Client
)
L2BlockRefByNumber
(
ctx
context
.
Context
,
number
uint64
)
(
eth
.
L2BlockRef
,
error
)
{
return
eth
.
L2BlockRef
{
Hash
:
m
.
Hash
,
Number
:
100
,
},
nil
}
func
TestValidateL2Config
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L2ChainID
=
big
.
NewInt
(
100
)
config
.
Genesis
.
L2
.
Number
=
100
config
.
Genesis
.
L2
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL2Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL2Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
NoError
(
t
,
err
)
}
func
TestValidateL2ConfigInvalidChainIdFails
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L2ChainID
=
big
.
NewInt
(
101
)
config
.
Genesis
.
L2
.
Number
=
100
config
.
Genesis
.
L2
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL2Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL2Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
config
.
L2ChainID
=
big
.
NewInt
(
99
)
err
=
config
.
ValidateL2Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
func
TestValidateL2ConfigInvalidGenesisHashFails
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L2ChainID
=
big
.
NewInt
(
100
)
config
.
Genesis
.
L2
.
Number
=
100
config
.
Genesis
.
L2
.
Hash
=
[
32
]
byte
{
0x00
}
mockClient
:=
mockL2Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
ValidateL2Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
config
.
Genesis
.
L2
.
Hash
=
[
32
]
byte
{
0x02
}
err
=
config
.
ValidateL2Config
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
func
TestCheckL2ChainID
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
L2ChainID
=
big
.
NewInt
(
100
)
err
:=
config
.
CheckL2ChainID
(
context
.
TODO
(),
&
mockL2Client
{
chainID
:
big
.
NewInt
(
100
)})
assert
.
NoError
(
t
,
err
)
err
=
config
.
CheckL2ChainID
(
context
.
TODO
(),
&
mockL2Client
{
chainID
:
big
.
NewInt
(
101
)})
assert
.
Error
(
t
,
err
)
err
=
config
.
CheckL2ChainID
(
context
.
TODO
(),
&
mockL2Client
{
chainID
:
big
.
NewInt
(
99
)})
assert
.
Error
(
t
,
err
)
}
func
TestCheckL2BlockRefByNumber
(
t
*
testing
.
T
)
{
config
:=
randConfig
()
config
.
Genesis
.
L2
.
Number
=
100
config
.
Genesis
.
L2
.
Hash
=
[
32
]
byte
{
0x01
}
mockClient
:=
mockL2Client
{
chainID
:
big
.
NewInt
(
100
),
Hash
:
common
.
Hash
{
0x01
}}
err
:=
config
.
CheckL2GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
NoError
(
t
,
err
)
mockClient
.
Hash
=
common
.
Hash
{
0x02
}
err
=
config
.
CheckL2GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
mockClient
.
Hash
=
common
.
Hash
{
0x00
}
err
=
config
.
CheckL2GenesisBlockHash
(
context
.
TODO
(),
&
mockClient
)
assert
.
Error
(
t
,
err
)
}
op-node/sources/eth_client.go
View file @
848f0bcc
...
...
@@ -12,6 +12,7 @@ package sources
import
(
"context"
"fmt"
"math/big"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -216,6 +217,16 @@ func (s *EthClient) payloadCall(ctx context.Context, method string, id any) (*et
return
payload
,
nil
}
// ChainID fetches the chain id of the internal RPC.
func
(
s
*
EthClient
)
ChainID
(
ctx
context
.
Context
)
(
*
big
.
Int
,
error
)
{
var
id
hexutil
.
Big
err
:=
s
.
client
.
CallContext
(
ctx
,
&
id
,
"eth_chainId"
)
if
err
!=
nil
{
return
nil
,
err
}
return
(
*
big
.
Int
)(
&
id
),
nil
}
func
(
s
*
EthClient
)
InfoByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
BlockInfo
,
error
)
{
if
header
,
ok
:=
s
.
headersCache
.
Get
(
hash
);
ok
{
return
header
.
(
*
HeaderInfo
),
nil
...
...
op-node/version/version.go
View file @
848f0bcc
package
version
var
(
Version
=
"v0.10.1
0
"
Version
=
"v0.10.1
1
"
Meta
=
"dev"
)
op-proposer/cmd/main.go
View file @
848f0bcc
...
...
@@ -13,7 +13,7 @@ import (
)
var
(
Version
=
"v0.10.1
0
"
Version
=
"v0.10.1
1
"
GitCommit
=
""
GitDate
=
""
)
...
...
@@ -28,9 +28,17 @@ func main() {
app
.
Usage
=
"L2Output Submitter"
app
.
Description
=
"Service for generating and submitting L2 Output checkpoints to the L2OutputOracle contract"
app
.
Action
=
proposer
.
Main
(
Version
)
app
.
Action
=
curry
Main
(
Version
)
err
:=
app
.
Run
(
os
.
Args
)
if
err
!=
nil
{
log
.
Crit
(
"Application failed"
,
"message"
,
err
)
}
}
// curryMain transforms the proposer.Main function into an app.Action
// This is done to capture the Version of the proposer.
func
curryMain
(
version
string
)
func
(
ctx
*
cli
.
Context
)
error
{
return
func
(
ctx
*
cli
.
Context
)
error
{
return
proposer
.
Main
(
version
,
ctx
)
}
}
op-proposer/go.mod
View file @
848f0bcc
...
...
@@ -3,13 +3,11 @@ module github.com/ethereum-optimism/optimism/op-proposer
go 1.18
require (
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3
github.com/ethereum-optimism/optimism/op-bindings v0.10.10
github.com/ethereum-optimism/optimism/op-node v0.10.10
github.com/ethereum-optimism/optimism/op-service v0.10.10
github.com/ethereum-optimism/optimism/op-bindings v0.10.11
github.com/ethereum-optimism/optimism/op-node v0.10.11
github.com/ethereum-optimism/optimism/op-service v0.10.11
github.com/ethereum-optimism/optimism/op-signer v0.1.0
github.com/ethereum/go-ethereum v1.10.26
github.com/stretchr/testify v1.8.1
github.com/urfave/cli v1.22.9
)
...
...
@@ -17,13 +15,9 @@ require (
github.com/VictoriaMetrics/fastcache v1.10.0 // indirect
github.com/benbjohnson/clock v1.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/btcsuite/btcd v0.23.3 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/btcsuite/btcd/btcutil v1.1.0 // indirect
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/dyson/certman v0.3.0 // indirect
...
...
@@ -71,7 +65,6 @@ require (
github.com/multiformats/go-varint v0.0.6 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.13.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
...
...
@@ -87,7 +80,6 @@ require (
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.5.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
...
...
@@ -98,7 +90,6 @@ require (
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.1.7 // indirect
)
...
...
op-proposer/go.sum
View file @
848f0bcc
...
...
@@ -36,7 +36,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/VictoriaMetrics/fastcache v1.10.0 h1:5hDJnLsKLpnUEToub7ETuRu8RCkb40woBZAUiKonXzY=
github.com/VictoriaMetrics/fastcache v1.10.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
...
...
@@ -50,27 +49,10 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
github.com/btcsuite/btcd v0.23.3 h1:4KH/JKy9WiCd+iUS9Mu0Zp7Dnj17TGdKrg9xc/FGj24=
github.com/btcsuite/btcd v0.23.3/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
github.com/btcsuite/btcd/btcutil v1.1.0 h1:MO4klnGY+EWJdoWF12Wkuf4AWDBPMpZNeN/jRLrklUU=
github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
...
...
@@ -85,18 +67,14 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4=
github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dyson/certman v0.3.0 h1:S7WCUim5faT/OiBhiY3u5cMaiC9MNKiA+8PJDXLaIYQ=
github.com/dyson/certman v0.3.0/go.mod h1:RMWlyA9op6D9SxOBRRX3sxnParehv9gf52WWUJPd1JA=
...
...
@@ -105,16 +83,14 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc=
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0 h1:Khi7m2IyNdB2JeMdW3Y1YibePTiAzuLMHe8hBE2WQzs
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
0
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-node v0.10.1
0 h1:edmxboiYSIk9n4A3paEF7I0m5qi+v+6FBFkqAfpFU7Y
=
github.com/ethereum-optimism/optimism/op-node v0.10.1
0/go.mod h1:EEcHgMdKiWasJGO5uzspRN2xM1/OB+ehgVgMj4RgPas
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0 h1:B5mGpATX6zPkDABoh6smCjh6Z5mA2KWh71MD1i6T5ww
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
0
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1 h1:RDiRyHo0G/UuxHZQdMJyqIuHtWvpionuFNfczNaWCcM
=
github.com/ethereum-optimism/optimism/op-bindings v0.10.1
1
/go.mod h1:9ZSUq/rjlzp3uYyBN4sZmhTc3oZgDVqJ4wrUja7vj6c=
github.com/ethereum-optimism/optimism/op-node v0.10.1
1 h1:ED72b68ainzcXr5/cLOYRwv+LdE4hRDnkq3SmNRY1+Q
=
github.com/ethereum-optimism/optimism/op-node v0.10.1
1/go.mod h1:/CDpkMxc3mDklZ1nqz2lmxfeUyAUz7yC/OLmX8egAUw
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1 h1:o+SazhFXlE3EM9Re5KIPEQklZ9uTI8rNkjl0h5OwRtU
=
github.com/ethereum-optimism/optimism/op-service v0.10.1
1
/go.mod h1:wbtHqi1fv00B3agj7a2zdP3OFanEfGZ23zPgGgFCF/c=
github.com/ethereum-optimism/optimism/op-signer v0.1.0 h1:wH44Deai43YQWO0pEd44pDm3BahdAtSmrOHKiPvTB8Y=
github.com/ethereum-optimism/optimism/op-signer v0.1.0/go.mod h1:u8sN6X/c20pP9F1Ey7jH3fi19D08Y+T9ep3PGJfdyi8=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
...
...
@@ -238,10 +214,7 @@ github.com/ipfs/go-cid v0.3.2 h1:OGgOd+JCFM+y1DjWPmVH+2/4POtpDzwcr7VgnB7mZXc=
github.com/ipfs/go-cid v0.3.2/go.mod h1:gQ8pKqT/sUxGY+tIwy1RPpAojYu7jAyCp5Tz1svoupw=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
...
...
@@ -252,7 +225,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0=
...
...
@@ -261,10 +233,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM=
...
...
@@ -324,15 +294,11 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
...
...
@@ -377,7 +343,6 @@ github.com/rivo/uniseg v0.3.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8=
github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U=
github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
...
...
@@ -397,19 +362,14 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI=
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
...
...
@@ -418,7 +378,6 @@ github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hM
github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A=
github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo=
github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
github.com/urfave/cli v1.22.9 h1:cv3/KhXGBGjEXLC4bH0sLuJ9BewaAbpk5oyMOveu4pw=
github.com/urfave/cli v1.22.9/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q=
...
...
@@ -436,7 +395,6 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
...
...
@@ -475,7 +433,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
...
...
@@ -505,7 +462,6 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
...
...
@@ -567,12 +523,10 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...
...
@@ -740,7 +694,6 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
...
...
op-proposer/proposer/config.go
View file @
848f0bcc
...
...
@@ -9,11 +9,13 @@ import (
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-proposer/flags"
"github.com/ethereum-optimism/optimism/op-proposer/txmgr"
opcrypto
"github.com/ethereum-optimism/optimism/op-service/crypto"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
oprpc
"github.com/ethereum-optimism/optimism/op-service/rpc"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
opsigner
"github.com/ethereum-optimism/optimism/op-signer/client"
)
...
...
@@ -27,7 +29,7 @@ type Config struct {
RollupClient
*
sources
.
RollupClient
AllowNonFinalized
bool
From
common
.
Address
SignerFnFactory
SignerFactory
SignerFnFactory
opcrypto
.
SignerFactory
}
// CLIConfig is a well typed config that is parsed from the CLI params.
...
...
op-proposer/proposer/l2_output_submitter.go
View file @
848f0bcc
...
...
@@ -2,7 +2,6 @@ package proposer
import
(
"context"
"crypto/ecdsa"
"errors"
"fmt"
"math/big"
...
...
@@ -14,28 +13,23 @@ import (
"syscall"
"time"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/urfave/cli"
hdwallet
"github.com/ethereum-optimism/go-ethereum-hdwallet"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-proposer/txmgr"
opcrypto
"github.com/ethereum-optimism/optimism/op-service/crypto"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
oprpc
"github.com/ethereum-optimism/optimism/op-service/rpc"
opsigner
"github.com/ethereum-optimism/optimism/op-signer/client
"
"github.com/ethereum-optimism/optimism/op-service/txmgr
"
)
const
(
...
...
@@ -46,16 +40,9 @@ const (
var
supportedL2OutputVersion
=
eth
.
Bytes32
{}
type
SignerFn
func
(
context
.
Context
,
common
.
Address
,
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
type
SignerFactory
func
(
chainID
*
big
.
Int
)
SignerFn
// Main is the entrypoint into the L2 Output Submitter. This method returns a
// closure that executes the service and blocks until the service exits. The use
// of a closure allows the parameters bound to the top-level main package, e.g.
// GitVersion, to be captured and used once the function is executed.
func
Main
(
version
string
)
func
(
ctx
*
cli
.
Context
)
error
{
return
func
(
cliCtx
*
cli
.
Context
)
error
{
// Main is the entrypoint into the L2 Output Submitter. This method executes the
// service and blocks until the service exits.
func
Main
(
version
string
,
cliCtx
*
cli
.
Context
)
error
{
cfg
:=
NewConfig
(
cliCtx
)
if
err
:=
cfg
.
Check
();
err
!=
nil
{
return
fmt
.
Errorf
(
"invalid CLI flags: %w"
,
err
)
...
...
@@ -64,9 +51,9 @@ func Main(version string) func(ctx *cli.Context) error {
l
:=
oplog
.
NewLogger
(
cfg
.
LogConfig
)
l
.
Info
(
"Initializing L2 Output Submitter"
)
l2OutputSubmitter
,
err
:=
NewL2OutputSubmitter
(
cfg
,
l
)
l2OutputSubmitter
,
err
:=
NewL2OutputSubmitterFromCLIConfig
(
cfg
,
l
)
if
err
!=
nil
{
l
.
Error
(
"Unable to creat
e L2 Output Submitter"
,
"error"
,
err
)
l
.
Error
(
"Unable to create th
e L2 Output Submitter"
,
"error"
,
err
)
return
err
}
...
...
@@ -122,7 +109,6 @@ func Main(version string) func(ctx *cli.Context) error {
cancel
()
return
nil
}
}
// L2OutputSubmitter is responsible for proposing outputs
...
...
@@ -151,75 +137,24 @@ type L2OutputSubmitter struct {
// From is the address to send transactions from
from
common
.
Address
// SignerFn is the function used to sign transactions
signerFn
SignerFn
signerFn
opcrypto
.
SignerFn
// How frequently to poll L2 for new finalized outputs
pollInterval
time
.
Duration
}
// NewL2OutputSubmitter initializes the L2OutputSubmitter, gathering any resources
// that will be needed during operation.
func
NewL2OutputSubmitter
(
cfg
CLIConfig
,
l
log
.
Logger
)
(
*
L2OutputSubmitter
,
error
)
{
var
l2OutputPrivKey
*
ecdsa
.
PrivateKey
var
err
error
var
signer
SignerFactory
var
fromAddress
common
.
Address
if
cfg
.
SignerConfig
.
Enabled
()
{
signerClient
,
err
:=
opsigner
.
NewSignerClientFromConfig
(
l
,
cfg
.
SignerConfig
)
// NewL2OutputSubmitterFromCLIConfig creates a new L2 Output Submitter given the CLI Config
func
NewL2OutputSubmitterFromCLIConfig
(
cfg
CLIConfig
,
l
log
.
Logger
)
(
*
L2OutputSubmitter
,
error
)
{
signer
,
fromAddress
,
err
:=
opcrypto
.
SignerFactoryFromConfig
(
l
,
cfg
.
PrivateKey
,
cfg
.
Mnemonic
,
cfg
.
L2OutputHDPath
,
cfg
.
SignerConfig
)
if
err
!=
nil
{
l
.
Error
(
"Unable to create Signer Client"
,
"error"
,
err
)
return
nil
,
err
}
fromAddress
=
common
.
BytesToAddress
(
hexutil
.
MustDecode
(
cfg
.
SignerConfig
.
Address
))
signer
=
func
(
chainID
*
big
.
Int
)
SignerFn
{
return
func
(
ctx
context
.
Context
,
address
common
.
Address
,
tx
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
{
if
address
.
String
()
!=
cfg
.
SignerConfig
.
Address
{
return
nil
,
fmt
.
Errorf
(
"attempting to sign for %s, expected %s: "
,
address
,
cfg
.
SignerConfig
.
Address
)
}
return
signerClient
.
SignTransaction
(
ctx
,
chainID
,
tx
)
}
}
}
else
{
if
cfg
.
PrivateKey
!=
""
&&
cfg
.
Mnemonic
!=
""
{
return
nil
,
errors
.
New
(
"cannot specify both a private key and a mnemonic"
)
}
if
cfg
.
PrivateKey
==
""
{
// Parse l2output wallet private key and L2OO contract address.
wallet
,
err
:=
hdwallet
.
NewFromMnemonic
(
cfg
.
Mnemonic
)
if
err
!=
nil
{
return
nil
,
err
}
l2OutputPrivKey
,
err
=
wallet
.
PrivateKey
(
accounts
.
Account
{
URL
:
accounts
.
URL
{
Path
:
cfg
.
L2OutputHDPath
,
},
})
if
err
!=
nil
{
return
nil
,
err
}
}
else
{
l2OutputPrivKey
,
err
=
crypto
.
HexToECDSA
(
strings
.
TrimPrefix
(
cfg
.
PrivateKey
,
"0x"
))
if
err
!=
nil
{
return
nil
,
err
}
}
fromAddress
=
crypto
.
PubkeyToAddress
(
l2OutputPrivKey
.
PublicKey
)
signer
=
func
(
chainID
*
big
.
Int
)
SignerFn
{
s
:=
opcrypto
.
PrivateKeySignerFn
(
l2OutputPrivKey
,
chainID
)
return
func
(
_
context
.
Context
,
addr
common
.
Address
,
tx
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
{
return
s
(
addr
,
tx
)
}
}
}
l2ooAddress
,
err
:=
parseAddress
(
cfg
.
L2OOAddress
)
if
err
!=
nil
{
return
nil
,
err
}
// Connect to L1 and L2 providers. Perform these last since they are the
// most expensive.
// Connect to L1 and L2 providers. Perform these last since they are the most expensive.
ctx
:=
context
.
Background
()
l1Client
,
err
:=
dialEthClientWithTimeout
(
ctx
,
cfg
.
L1EthRpc
)
if
err
!=
nil
{
...
...
@@ -251,11 +186,11 @@ func NewL2OutputSubmitter(cfg CLIConfig, l log.Logger) (*L2OutputSubmitter, erro
SignerFnFactory
:
signer
,
}
return
NewL2OutputSubmitter
WithSigner
(
proposerCfg
,
l
)
return
NewL2OutputSubmitter
(
proposerCfg
,
l
)
}
// NewL2OutputSubmitter
WithSigner
creates a new L2 Output Submitter
func
NewL2OutputSubmitter
WithSigner
(
cfg
Config
,
l
log
.
Logger
)
(
*
L2OutputSubmitter
,
error
)
{
// NewL2OutputSubmitter creates a new L2 Output Submitter
func
NewL2OutputSubmitter
(
cfg
Config
,
l
log
.
Logger
)
(
*
L2OutputSubmitter
,
error
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
context
.
Background
())
cCtx
,
cCancel
:=
context
.
WithTimeout
(
ctx
,
defaultDialTimeout
)
...
...
op-service/crypto/signature.go
View file @
848f0bcc
package
crypto
import
(
"context"
"crypto/ecdsa"
"errors"
"fmt"
"math/big"
"strings"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
hdwallet
"github.com/ethereum-optimism/go-ethereum-hdwallet"
opsigner
"github.com/ethereum-optimism/optimism/op-signer/client"
)
func
PrivateKeySignerFn
(
key
*
ecdsa
.
PrivateKey
,
chainID
*
big
.
Int
)
bind
.
SignerFn
{
...
...
@@ -24,3 +33,71 @@ func PrivateKeySignerFn(key *ecdsa.PrivateKey, chainID *big.Int) bind.SignerFn {
return
tx
.
WithSignature
(
signer
,
signature
)
}
}
// SignerFn is a generic transaction signing function. It may be a remote signer so it takes a context.
// It also takes the address that should be used to sign the transaction with.
type
SignerFn
func
(
context
.
Context
,
common
.
Address
,
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
// SignerFactory creates a SignerFn that is bound to a specific ChainID
type
SignerFactory
func
(
chainID
*
big
.
Int
)
SignerFn
// SignerFactoryFromConfig considers three ways that signers are created & then creates single factory from those config options.
// It can either take a remote signer (via opsigner.CLIConfig) or it can be provided either a mnemonic + derivation path or a private key.
// It prefers the remote signer, then the mnemonic or private key (only one of which can be provided).
func
SignerFactoryFromConfig
(
l
log
.
Logger
,
privateKey
,
mnemonic
,
hdPath
string
,
signerConfig
opsigner
.
CLIConfig
)
(
SignerFactory
,
common
.
Address
,
error
)
{
var
signer
SignerFactory
var
fromAddress
common
.
Address
if
signerConfig
.
Enabled
()
{
signerClient
,
err
:=
opsigner
.
NewSignerClientFromConfig
(
l
,
signerConfig
)
if
err
!=
nil
{
l
.
Error
(
"Unable to create Signer Client"
,
"error"
,
err
)
return
nil
,
common
.
Address
{},
fmt
.
Errorf
(
"failed to create the signer client: %w"
,
err
)
}
fromAddress
=
common
.
HexToAddress
(
signerConfig
.
Address
)
signer
=
func
(
chainID
*
big
.
Int
)
SignerFn
{
return
func
(
ctx
context
.
Context
,
address
common
.
Address
,
tx
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
{
if
address
.
String
()
!=
signerConfig
.
Address
{
return
nil
,
fmt
.
Errorf
(
"attempting to sign for %s, expected %s: "
,
address
,
signerConfig
.
Address
)
}
return
signerClient
.
SignTransaction
(
ctx
,
chainID
,
tx
)
}
}
}
else
{
var
privKey
*
ecdsa
.
PrivateKey
var
err
error
if
privateKey
!=
""
&&
mnemonic
!=
""
{
return
nil
,
common
.
Address
{},
errors
.
New
(
"cannot specify both a private key and a mnemonic"
)
}
if
privateKey
==
""
{
// Parse l2output wallet private key and L2OO contract address.
wallet
,
err
:=
hdwallet
.
NewFromMnemonic
(
mnemonic
)
if
err
!=
nil
{
return
nil
,
common
.
Address
{},
fmt
.
Errorf
(
"failed to parse mnemonic: %w"
,
err
)
}
privKey
,
err
=
wallet
.
PrivateKey
(
accounts
.
Account
{
URL
:
accounts
.
URL
{
Path
:
hdPath
,
},
})
if
err
!=
nil
{
return
nil
,
common
.
Address
{},
fmt
.
Errorf
(
"failed to create a wallet: %w"
,
err
)
}
}
else
{
privKey
,
err
=
crypto
.
HexToECDSA
(
strings
.
TrimPrefix
(
privateKey
,
"0x"
))
if
err
!=
nil
{
return
nil
,
common
.
Address
{},
fmt
.
Errorf
(
"failed to parse the private key: %w"
,
err
)
}
}
fromAddress
=
crypto
.
PubkeyToAddress
(
privKey
.
PublicKey
)
signer
=
func
(
chainID
*
big
.
Int
)
SignerFn
{
s
:=
PrivateKeySignerFn
(
privKey
,
chainID
)
return
func
(
_
context
.
Context
,
addr
common
.
Address
,
tx
*
types
.
Transaction
)
(
*
types
.
Transaction
,
error
)
{
return
s
(
addr
,
tx
)
}
}
}
return
signer
,
fromAddress
,
nil
}
op-service/go.mod
View file @
848f0bcc
...
...
@@ -3,6 +3,8 @@ module github.com/ethereum-optimism/optimism/op-service
go 1.18
require (
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3
github.com/ethereum-optimism/optimism/op-signer v0.1.0
github.com/ethereum/go-ethereum v1.10.26
github.com/prometheus/client_golang v1.13.0
github.com/stretchr/testify v1.8.1
...
...
@@ -13,23 +15,33 @@ require (
require (
github.com/VictoriaMetrics/fastcache v1.9.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/btcsuite/btcd v0.23.3 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/btcsuite/btcd/btcutil v1.1.0 // indirect
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set v1.8.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/dyson/certman v0.3.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/fjl/memsize v0.0.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect
github.com/go-kit/kit v0.10.0 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/golang-jwt/jwt/v4 v4.3.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/uuid v1.
2
.0 // indirect
github.com/google/uuid v1.
3
.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/hashicorp/go-bexpr v0.1.11 // indirect
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e // indirect
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
github.com/holiman/uint256 v1.2.0 // indirect
github.com/huin/goupnp v1.0.3 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/kr/pretty v0.3.0 // indirect
...
...
@@ -46,21 +58,24 @@ require (
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/prometheus/tsdb v0.10.0 // indirect
github.com/rivo/uniseg v0.2.
0
// indirect
github.com/rjeczalik/notify v0.9.
1
// indirect
github.com/rivo/uniseg v0.2.
1-0.20211004051800-57c86be7915a
// indirect
github.com/rjeczalik/notify v0.9.
2
// indirect
github.com/rogpeppe/go-internal v1.8.1 // indirect
github.com/rs/cors v1.8.2 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/status-im/keycard-go v0.0.0-20211109104530-b0e0482ba91d // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.4.0 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 // indirect
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
...
...
op-service/go.sum
View file @
848f0bcc
...
...
@@ -40,12 +40,14 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx
github.com/VictoriaMetrics/fastcache v1.9.0 h1:oMwsS6c8abz98B7ytAewQ7M1ZN/Im/iwKoE1euaFvhs=
github.com/VictoriaMetrics/fastcache v1.9.0/go.mod h1:otoTS3xu+6IzF/qByjqzjp3rTuzM3Qf0ScU1UTj97iU=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8=
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
...
...
@@ -61,9 +63,27 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
github.com/btcsuite/btcd v0.23.3 h1:4KH/JKy9WiCd+iUS9Mu0Zp7Dnj17TGdKrg9xc/FGj24=
github.com/btcsuite/btcd v0.23.3/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
github.com/btcsuite/btcd/btcutil v1.1.0 h1:MO4klnGY+EWJdoWF12Wkuf4AWDBPMpZNeN/jRLrklUU=
github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
...
...
@@ -88,6 +108,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
...
...
@@ -95,23 +116,32 @@ github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsP
github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dyson/certman v0.3.0 h1:S7WCUim5faT/OiBhiY3u5cMaiC9MNKiA+8PJDXLaIYQ=
github.com/dyson/certman v0.3.0/go.mod h1:RMWlyA9op6D9SxOBRRX3sxnParehv9gf52WWUJPd1JA=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ=
github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc=
github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468 h1:7KgjBYDji5AKi42eRYI+n8Gs+ZJVilSASL3WBu82c3M=
github.com/ethereum-optimism/op-geth v0.0.0-20221216190603-60b51d600468/go.mod h1:p0Yox74PhYlq1HvijrCBCD9A3cI7rXco7hT6KrQr+rY=
github.com/ethereum-optimism/optimism/op-signer v0.1.0 h1:wH44Deai43YQWO0pEd44pDm3BahdAtSmrOHKiPvTB8Y=
github.com/ethereum-optimism/optimism/op-signer v0.1.0/go.mod h1:u8sN6X/c20pP9F1Ey7jH3fi19D08Y+T9ep3PGJfdyi8=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ=
github.com/fjl/memsize v0.0.1/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
...
...
@@ -119,9 +149,11 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays=
github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
...
...
@@ -208,8 +240,8 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.
2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs
=
github.com/google/uuid v1.
2
.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.
3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I
=
github.com/google/uuid v1.
3
.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
...
...
@@ -247,8 +279,11 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e h1:pIYdhNkDh+YENVNi3gto8n9hAmRxKxoar0iE6BLucjw=
github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e/go.mod h1:j9cQbcqHQujT0oKJ38PylVfqohClLr3CvDC+Qcg+lhU=
github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao=
github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA=
github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM=
github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
...
...
@@ -260,9 +295,12 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
...
...
@@ -276,6 +314,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
...
...
@@ -342,10 +381,12 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
...
...
@@ -412,10 +453,11 @@ github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0ua
github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic=
github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE=
github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho=
github.com/rivo/uniseg v0.2.1-0.20211004051800-57c86be7915a h1:s7GrsqeorVkFR1vGmQ6WVL9nup0eyQCC+YVUeSQLH/Q=
github.com/rivo/uniseg v0.2.1-0.20211004051800-57c86be7915a/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8=
github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
...
...
@@ -442,7 +484,8 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
github.com/status-im/keycard-go v0.0.0-20211109104530-b0e0482ba91d h1:vmirMegf1vqPJ+lDBxLQ0MAt3tz+JL57UPxu44JBOjA=
github.com/status-im/keycard-go v0.0.0-20211109104530-b0e0482ba91d/go.mod h1:97vT0Rym0wCnK4B++hNA3nCetr0Mh1KXaVxzSt1arjg=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
...
...
@@ -467,7 +510,8 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4=
github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.9 h1:cv3/KhXGBGjEXLC4bH0sLuJ9BewaAbpk5oyMOveu4pw=
...
...
@@ -499,6 +543,7 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
...
...
@@ -539,6 +584,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
...
...
@@ -573,6 +619,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
...
...
@@ -605,6 +652,7 @@ golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
...
...
@@ -639,10 +687,12 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...
...
@@ -658,6 +708,7 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43 h1:OK7RB6t2WQX54srQQYSXMW8dF5C6/8+oA/s5QBmmto4=
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
...
...
@@ -675,7 +726,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
...
...
op-
proposer
/txmgr/send_state.go
→
op-
service
/txmgr/send_state.go
View file @
848f0bcc
File moved
op-
proposer
/txmgr/send_state_test.go
→
op-
service
/txmgr/send_state_test.go
View file @
848f0bcc
...
...
@@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/ethereum-optimism/optimism/op-
proposer
/txmgr"
"github.com/ethereum-optimism/optimism/op-
service
/txmgr"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
)
...
...
op-
proposer
/txmgr/txmgr.go
→
op-
service
/txmgr/txmgr.go
View file @
848f0bcc
File moved
op-
proposer
/txmgr/txmgr_test.go
→
op-
service
/txmgr/txmgr_test.go
View file @
848f0bcc
...
...
@@ -10,7 +10,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/ethereum-optimism/optimism/op-
proposer
/txmgr"
"github.com/ethereum-optimism/optimism/op-
service
/txmgr"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
...
...
specs/assets/batch-deriv-chain.svg
View file @
848f0bcc
...
...
@@ -631,10 +631,10 @@
<foreignObject
style=
"overflow: visible; text-align: left;"
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
>
<div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-end; width: 96px; height: 1px; padding-top: 1341px; margin-left: 2191px;"
>
<div
style=
"box-sizing: border-box; font-size: 0px; text-align: right;"
data-drawio-colors=
"color: #000000; "
>
<div
style=
"display: inline-block; font-size: 30px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
100-
2
</div>
<div
style=
"display: inline-block; font-size: 30px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
100-
4
</div>
</div>
</div>
</foreignObject><text
x=
"2287"
y=
"1341"
fill=
"#000000"
font-family=
"Helvetica"
font-size=
"30px"
text-anchor=
"end"
>
100-
2
</text>
</foreignObject><text
x=
"2287"
y=
"1341"
fill=
"#000000"
font-family=
"Helvetica"
font-size=
"30px"
text-anchor=
"end"
>
100-
4
</text>
</switch>
</g>
<path
d=
"M 9360 5420 L 9440 5180 L 9840 5180 L 9760 5420 Z"
fill=
"#ffff66"
stroke=
"rgb(0, 0, 0)"
stroke-width=
"4"
stroke-miterlimit=
"10"
pointer-events=
"all"
/>
...
...
specs/assets/engine.svg
View file @
848f0bcc
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than diagrams.net -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
version=
"1.1"
width=
"601px"
height=
"429px"
viewBox=
"-0.5 -0.5 601 429"
content=
"<mxfile host="app.diagrams.net" modified="2022-04-04T03:32:26.727Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36" version="17.2.5" etag="mDLUNmfDK830O24fIwir" type="google"><diagram id="2atPNEeVetM65dO3bovw">3Vtbb+I4FP41SLsPrexcIDxS2u5UmpWqQXuZp5VJDPE2xMgxU5hfv07ihNgOJEAa6L6g+OTYTs75ztVhYE9X298YWoe/0wBHAwsE24H9OLCskTcUvylhlxMgtGFOWTISSNqeMCM/sSQCSd2QACcKI6c04mStEn0ax9jnCg0xRt9VtgWN1F3XaIkNwsxHkUn9iwQ8zKmeC/b0L5gsw2JnCOSdFSqYJSEJUUDfKyT7aWBPGaU8v1ptpzhKhVfIJZ/3fOBu+WAMx7zNBCuf8ANFG/lu8rn4rnhZHAeTVGZiFNNYEB9CvorECIpLRjdxgNPFgBiJTdnu73Rw7xbD75IzGzxuq5yPOzlKOGJc2yR/DhxomhCcSyxfzTbfFpYyFODDdIXFNoLlfa+lQklhRUEFjeEIcfJD3RFJsCzL5codXikRG1tAAntsu/kUiWvHBuoSCd0wH8tZVa1oC0HoAGUle6itlIvBWElcVN57T8q0Xo8A20DANxpFm7WgPTIhC2YAQtX5e0g4nq2Rn959F/auAkSujhnH24MYPaA1OcEbaWKVsqgoFVo1WrXAYQUqAjsiHceQzlO8JAKgFpi8vlxdNBB44GqycZt9R9/yGFsqVDxTHHXSsGEH4hh+Zlfq3JgrNTxgd750/GGudHR7BiFSK/Xt+7QIr0Yew0js8DAXF8v04hXtIoqCCeeMzDdcJHWSQ6xdMpWz2GHKXQpossIC/6t1/W2G4oCu6u8lm+VSzMXBM8bfsE/WJBVw/S5inQT5nNA4uUy/qWaJyConEVnGgsZpyoDkKMKLdMsFiaIpjSjLNrADF3uBkxk6o2+4csez5vZw2BFsrKEKmzKIVANLnf2Xqe4lwBk3A+eZsrdpSImPZxxxfAlsQoyCh4j6b19QEh6AB1rgBpYFiYXmfuLqUpeAQ9c7wt7Cr9P70PfwfNEWTh8BjiLoNiUdXgfQKPxSBRvP01nfou4iVRk3W5jrmkLsInOD0BDi66RbGfbjpoDjXk+IZu28zqPZy6MhyzT5mskhZTykSyrcxdOeqqV/e56vNDXjTMb/Ys53shuCNpyqGsBbwvOEEbhy+D0bpvVTPt7njOmgSBkrqebYqeaa4N4eew35ZjZ6xUyEXo5ZZXmdNqhPQvM0TpJkLVpNTE8AReuUs7WGzdr4BhI6LZ0tA25DRtdJYIZmPfwSE06yCAzmaeQzo+Oa0WCT5UvXNAuo2IR13CROAGt71QnDtF1ZI1xcHun5mR5bD1Q1ojJEuwrbOmVIjmxkAT1MudX1WkzwlA6kuMifQZu+q5UEXSwSfGlZBs1GBc6aOP8syiTyj3UgMBz8WSi6X4iWDlj1vhC653pfE/HAhUchf6bPrmsmnGAal3ZcXQ1sRVBu6BKcgyKzvyPD/VWDvaLjtoEeqjgbgbNw1sZJjm4sot9ki0aL6GWN0xDR9TOBswRi9mikb0yjR47v1CnqMf2XMtX99ZY8ptUI5MI33gNLMR13aB23nQ7d46g396gjq6jUP8A91vVsbs6yWnY/uygPLbNRIS0Lb7G/4biFdd2UbZ1gWo5afw57s6xxb5alt8D0U4X2xxNaCmPZmo12dz5RvOYt2ah+Zt62nO3GRs0WzueoDJpssY391DVb3O7tp7UubrDZooPTtnuMH841AFd3fJzRnkn6pBJq5Sm2H6EkIX5OlCwqbtXTa9ABbt0a3Hp9+X1Pyyg+rO2iRQXb0b7japoAj/N7jn0Ju3Okp3NOYLrBT0nMb7D6NH6z2fD/OOWyXVOIZcjvXIqjzxSzO3K9bVyoZ7rQoudwldBvNiGmG5Y9hwW+pnfMEkmeNYDw4oP2DlDuQc351nRwhjXHkE4XIDcLb1k93s8PfonQ63HkWD2OHIHjnZbOU5DTy9iOytHCi7cH0h2411LOu2J8WuJyasIxhuq2luscTQh0/uID5YZTnkvOdcRw/118zr7/d4H99B8=</diagram></mxfile>"
style=
"background-color: rgb(255, 255, 255);"
><defs/><g><path
d=
"M 125 427 L 125 57"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><rect
x=
"65"
y=
"37"
width=
"120"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 47px; margin-left: 66px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Rollup Driver
</div></div></div></foreignObject><text
x=
"125"
y=
"51"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Rollup Driver
</text></switch></g><rect
x=
"270"
y=
"37"
width=
"120"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 47px; margin-left: 271px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Engine API
</div></div></div></foreignObject><text
x=
"330"
y=
"51"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Engine API
</text></switch></g><rect
x=
"115"
y=
"77"
width=
"20"
height=
"310"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 330 427 L 330 57"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><rect
x=
"320"
y=
"77"
width=
"20"
height=
"310"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><rect
x=
"450"
y=
"117"
width=
"150"
height=
"100"
fill=
"#d5e8d4"
stroke=
"#82b366"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 148px; height: 1px; padding-top: 124px; margin-left: 452px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: left;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
><b>
PayloadAttributes
</b><br
/><br
/>
- timestamp
<br
/>
- random
<br
/>
- suggestedFeeRecipient
<br
/>
- transactions
</div></div></div></foreignObject><text
x=
"452"
y=
"136"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
>
PayloadAttributes...
</text></switch></g><rect
x=
"450"
y=
"22"
width=
"120"
height=
"80"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 118px; height: 1px; padding-top: 29px; margin-left: 452px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: left;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
><b>
ForkChoiceState
</b><br
/><br
/>
- headBlockHash
<br
/>
- safeBlockHash
<br
/>
- finalizedBlockHash
</div></div></div></foreignObject><text
x=
"452"
y=
"41"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
>
ForkChoiceState...
</text></switch></g><rect
x=
"180"
y=
"117"
width=
"55"
height=
"20"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 53px; height: 1px; padding-top: 127px; margin-left: 181px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
FCS
</div></div></div></foreignObject><text
x=
"208"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
FCS
</text></switch></g><rect
x=
"235"
y=
"117"
width=
"55"
height=
"20"
fill=
"#d5e8d4"
stroke=
"#82b366"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 53px; height: 1px; padding-top: 127px; margin-left: 236px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
PA
</div></div></div></foreignObject><text
x=
"263"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
PA
</text></switch></g><path
d=
"M 331 184.5 L 237.5 184.5 L 150.17 184.56"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 144.92 184.56 L 151.92 181.05 L 150.17 184.56 L 151.92 188.05 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 185px; margin-left: 237px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payloadID
</div></div></div></foreignObject><text
x=
"237"
y=
"188"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payloadID
</text></switch></g><rect
x=
"330"
y=
"97"
width=
"20"
height=
"100"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 350 122 L 390 122 L 390 177 L 356.37 177"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 351.12 177 L 358.12 173.5 L 356.37 177 L 358.12 180.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 153px; margin-left: 390px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
Initiate block
<br
/>
production
</div></div></div></foreignObject><text
x=
"390"
y=
"156"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
Initiate block...
</text></switch></g><path
d=
"M 145 108.22 L 237.5 108.2 L 323.63 108.48"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 108.5 L 321.87 111.97 L 323.63 108.48 L 321.89 104.97 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 109px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_forkChoiceUpdatedV1
</div></div></div></foreignObject><text
x=
"238"
y=
"112"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_forkChoiceUpdatedV1
</text></switch></g><path
d=
"M 330 252 L 237.5 252 L 151.37 252.09"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 146.12 252.1 L 153.11 248.59 L 151.37 252.09 L 153.12 255.59 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 252px; margin-left: 237px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payload
</div></div></div></foreignObject><text
x=
"237"
y=
"255"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payload
</text></switch></g><rect
x=
"330"
y=
"207"
width=
"20"
height=
"60"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145.4 220.64 L 237.5 220.6 L 237.5 222 L 323.63 222"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 222 L 321.88 225.5 L 323.63 222 L 321.88 218.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 221px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_getPayloadV1
<br
/>
(payloadID)
</div></div></div></foreignObject><text
x=
"238"
y=
"225"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_getPayloadV1...
</text></switch></g><rect
x=
"330"
y=
"277"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145.8 286.2 L 237.5 286.2 L 323.63 286.94"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 286.99 L 321.85 290.43 L 323.63 286.94 L 321.91 283.43 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 287px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_executePayloadV1
<br
/>
(payload)
</div></div></div></foreignObject><text
x=
"238"
y=
"290"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_executePayloadV1...
</text></switch></g><rect
x=
"125"
y=
"97"
width=
"20"
height=
"220"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145 337 L 323.63 337"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 337 L 321.88 340.5 L 323.63 337 L 321.88 333.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 337px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_forkChoiceUpdatedV1
</div></div></div></foreignObject><text
x=
"238"
y=
"340"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_forkChoiceUpdatedV1
</text></switch></g><rect
x=
"125"
y=
"327"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 350 337 L 440 337 L 440 7 L 33 7 L 33 37 L 32.55 100.63"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 32.51 105.88 L 29.06 98.86 L 32.55 100.63 L 36.06 98.91 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><rect
x=
"330"
y=
"327"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><rect
x=
"180"
y=
"347"
width=
"100"
height=
"20"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 357px; margin-left: 181px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
FCS
</div></div></div></foreignObject><text
x=
"230"
y=
"361"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
FCS
</text></switch></g><path
d=
"M 65 127 L 173.63 127"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 178.88 127 L 171.88 130.5 L 173.63 127 L 171.88 123.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><rect
x=
"0"
y=
"107"
width=
"65"
height=
"40"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 63px; height: 1px; padding-top: 127px; margin-left: 1px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Current L2
<br
/>
block hash
</div></div></div></foreignObject><text
x=
"33"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Current L2...
</text></switch></g><path
d=
"M 144 251.44 L 105 251.4 L 105 357 L 173.63 357"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 178.88 357 L 171.88 360.5 L 173.63 357 L 171.88 353.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 283px; margin-left: 70px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payload.blockHash
</div></div></div></foreignObject><text
x=
"70"
y=
"287"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payload.blockHash
</text></switch></g></g><switch><g
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
/><a
transform=
"translate(0,-5)"
xlink:href=
"https://www.diagrams.net/doc/faq/svg-export-text-problems"
target=
"_blank"
><text
text-anchor=
"middle"
font-size=
"10px"
x=
"50%"
y=
"100%"
>
Text is not SVG - cannot display
</text></a></switch></svg>
\ No newline at end of file
<svg
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
version=
"1.1"
width=
"601px"
height=
"429px"
viewBox=
"-0.5 -0.5 601 429"
content=
"<mxfile host="app.diagrams.net" modified="2022-04-04T03:32:26.727Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36" version="17.2.5" etag="mDLUNmfDK830O24fIwir" type="google"><diagram id="2atPNEeVetM65dO3bovw">3Vtbb+I4FP41SLsPrexcIDxS2u5UmpWqQXuZp5VJDPE2xMgxU5hfv07ihNgOJEAa6L6g+OTYTs75ztVhYE9X298YWoe/0wBHAwsE24H9OLCskTcUvylhlxMgtGFOWTISSNqeMCM/sSQCSd2QACcKI6c04mStEn0ax9jnCg0xRt9VtgWN1F3XaIkNwsxHkUn9iwQ8zKmeC/b0L5gsw2JnCOSdFSqYJSEJUUDfKyT7aWBPGaU8v1ptpzhKhVfIJZ/3fOBu+WAMx7zNBCuf8ANFG/lu8rn4rnhZHAeTVGZiFNNYEB9CvorECIpLRjdxgNPFgBiJTdnu73Rw7xbD75IzGzxuq5yPOzlKOGJc2yR/DhxomhCcSyxfzTbfFpYyFODDdIXFNoLlfa+lQklhRUEFjeEIcfJD3RFJsCzL5codXikRG1tAAntsu/kUiWvHBuoSCd0wH8tZVa1oC0HoAGUle6itlIvBWElcVN57T8q0Xo8A20DANxpFm7WgPTIhC2YAQtX5e0g4nq2Rn959F/auAkSujhnH24MYPaA1OcEbaWKVsqgoFVo1WrXAYQUqAjsiHceQzlO8JAKgFpi8vlxdNBB44GqycZt9R9/yGFsqVDxTHHXSsGEH4hh+Zlfq3JgrNTxgd750/GGudHR7BiFSK/Xt+7QIr0Yew0js8DAXF8v04hXtIoqCCeeMzDdcJHWSQ6xdMpWz2GHKXQpossIC/6t1/W2G4oCu6u8lm+VSzMXBM8bfsE/WJBVw/S5inQT5nNA4uUy/qWaJyConEVnGgsZpyoDkKMKLdMsFiaIpjSjLNrADF3uBkxk6o2+4csez5vZw2BFsrKEKmzKIVANLnf2Xqe4lwBk3A+eZsrdpSImPZxxxfAlsQoyCh4j6b19QEh6AB1rgBpYFiYXmfuLqUpeAQ9c7wt7Cr9P70PfwfNEWTh8BjiLoNiUdXgfQKPxSBRvP01nfou4iVRk3W5jrmkLsInOD0BDi66RbGfbjpoDjXk+IZu28zqPZy6MhyzT5mskhZTykSyrcxdOeqqV/e56vNDXjTMb/Ys53shuCNpyqGsBbwvOEEbhy+D0bpvVTPt7njOmgSBkrqebYqeaa4N4eew35ZjZ6xUyEXo5ZZXmdNqhPQvM0TpJkLVpNTE8AReuUs7WGzdr4BhI6LZ0tA25DRtdJYIZmPfwSE06yCAzmaeQzo+Oa0WCT5UvXNAuo2IR13CROAGt71QnDtF1ZI1xcHun5mR5bD1Q1ojJEuwrbOmVIjmxkAT1MudX1WkzwlA6kuMifQZu+q5UEXSwSfGlZBs1GBc6aOP8syiTyj3UgMBz8WSi6X4iWDlj1vhC653pfE/HAhUchf6bPrmsmnGAal3ZcXQ1sRVBu6BKcgyKzvyPD/VWDvaLjtoEeqjgbgbNw1sZJjm4sot9ki0aL6GWN0xDR9TOBswRi9mikb0yjR47v1CnqMf2XMtX99ZY8ptUI5MI33gNLMR13aB23nQ7d46g396gjq6jUP8A91vVsbs6yWnY/uygPLbNRIS0Lb7G/4biFdd2UbZ1gWo5afw57s6xxb5alt8D0U4X2xxNaCmPZmo12dz5RvOYt2ah+Zt62nO3GRs0WzueoDJpssY391DVb3O7tp7UubrDZooPTtnuMH841AFd3fJzRnkn6pBJq5Sm2H6EkIX5OlCwqbtXTa9ABbt0a3Hp9+X1Pyyg+rO2iRQXb0b7japoAj/N7jn0Ju3Okp3NOYLrBT0nMb7D6NH6z2fD/OOWyXVOIZcjvXIqjzxSzO3K9bVyoZ7rQoudwldBvNiGmG5Y9hwW+pnfMEkmeNYDw4oP2DlDuQc351nRwhjXHkE4XIDcLb1k93s8PfonQ63HkWD2OHIHjnZbOU5DTy9iOytHCi7cH0h2411LOu2J8WuJyasIxhuq2luscTQh0/uID5YZTnkvOdcRw/118zr7/d4H99B8=</diagram></mxfile>"
style=
"background-color: rgb(255, 255, 255);"
><defs/><g><path
d=
"M 125 427 L 125 57"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><rect
x=
"65"
y=
"37"
width=
"120"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 47px; margin-left: 66px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Rollup Driver
</div></div></div></foreignObject><text
x=
"125"
y=
"51"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Rollup Driver
</text></switch></g><rect
x=
"270"
y=
"37"
width=
"120"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 47px; margin-left: 271px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Engine API
</div></div></div></foreignObject><text
x=
"330"
y=
"51"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Engine API
</text></switch></g><rect
x=
"115"
y=
"77"
width=
"20"
height=
"310"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 330 427 L 330 57"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><rect
x=
"320"
y=
"77"
width=
"20"
height=
"310"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><rect
x=
"450"
y=
"117"
width=
"150"
height=
"100"
fill=
"#d5e8d4"
stroke=
"#82b366"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 148px; height: 1px; padding-top: 124px; margin-left: 452px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: left;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
><b>
PayloadAttributes
</b><br
/><br
/>
- timestamp
<br
/>
- random
<br
/>
- suggestedFeeRecipient
<br
/>
- transactions
</div></div></div></foreignObject><text
x=
"452"
y=
"136"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
>
PayloadAttributes...
</text></switch></g><rect
x=
"450"
y=
"22"
width=
"120"
height=
"80"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 118px; height: 1px; padding-top: 29px; margin-left: 452px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: left;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
><b>
ForkChoiceState
</b><br
/><br
/>
- headBlockHash
<br
/>
- safeBlockHash
<br
/>
- finalizedBlockHash
</div></div></div></foreignObject><text
x=
"452"
y=
"41"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
>
ForkChoiceState...
</text></switch></g><rect
x=
"180"
y=
"117"
width=
"55"
height=
"20"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 53px; height: 1px; padding-top: 127px; margin-left: 181px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
FCS
</div></div></div></foreignObject><text
x=
"208"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
FCS
</text></switch></g><rect
x=
"235"
y=
"117"
width=
"55"
height=
"20"
fill=
"#d5e8d4"
stroke=
"#82b366"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 53px; height: 1px; padding-top: 127px; margin-left: 236px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
PA
</div></div></div></foreignObject><text
x=
"263"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
PA
</text></switch></g><path
d=
"M 331 184.5 L 237.5 184.5 L 150.17 184.56"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 144.92 184.56 L 151.92 181.05 L 150.17 184.56 L 151.92 188.05 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 185px; margin-left: 237px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payloadID
</div></div></div></foreignObject><text
x=
"237"
y=
"188"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payloadID
</text></switch></g><rect
x=
"330"
y=
"97"
width=
"20"
height=
"100"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 350 122 L 390 122 L 390 177 L 356.37 177"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 351.12 177 L 358.12 173.5 L 356.37 177 L 358.12 180.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 153px; margin-left: 390px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
Initiate block
<br
/>
production
</div></div></div></foreignObject><text
x=
"390"
y=
"156"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
Initiate block...
</text></switch></g><path
d=
"M 145 108.22 L 237.5 108.2 L 323.63 108.48"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 108.5 L 321.87 111.97 L 323.63 108.48 L 321.89 104.97 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 109px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_forkChoiceUpdatedV1
</div></div></div></foreignObject><text
x=
"238"
y=
"112"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_forkChoiceUpdatedV1
</text></switch></g><path
d=
"M 330 252 L 237.5 252 L 151.37 252.09"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 146.12 252.1 L 153.11 248.59 L 151.37 252.09 L 153.12 255.59 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 252px; margin-left: 237px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payload
</div></div></div></foreignObject><text
x=
"237"
y=
"255"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payload
</text></switch></g><rect
x=
"330"
y=
"207"
width=
"20"
height=
"60"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145.4 220.64 L 237.5 220.6 L 237.5 222 L 323.63 222"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 222 L 321.88 225.5 L 323.63 222 L 321.88 218.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 221px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_getPayloadV1
<br
/>
(payloadID)
</div></div></div></foreignObject><text
x=
"238"
y=
"225"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_getPayloadV1...
</text></switch></g><rect
x=
"330"
y=
"277"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145.8 286.2 L 237.5 286.2 L 323.63 286.94"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 286.99 L 321.85 290.43 L 323.63 286.94 L 321.91 283.43 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 287px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_newPayloadV1
<br
/>
(payload)
</div></div></div></foreignObject><text
x=
"238"
y=
"290"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_newPayloadV1...
</text></switch></g><rect
x=
"125"
y=
"97"
width=
"20"
height=
"220"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 145 337 L 323.63 337"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 328.88 337 L 321.88 340.5 L 323.63 337 L 321.88 333.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 337px; margin-left: 238px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
engine_forkChoiceUpdatedV1
</div></div></div></foreignObject><text
x=
"238"
y=
"340"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
engine_forkChoiceUpdatedV1
</text></switch></g><rect
x=
"125"
y=
"327"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><path
d=
"M 350 337 L 440 337 L 440 7 L 33 7 L 33 37 L 32.55 100.63"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 32.51 105.88 L 29.06 98.86 L 32.55 100.63 L 36.06 98.91 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><rect
x=
"330"
y=
"327"
width=
"20"
height=
"20"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><rect
x=
"180"
y=
"347"
width=
"100"
height=
"20"
fill=
"#dae8fc"
stroke=
"#6c8ebf"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 357px; margin-left: 181px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
FCS
</div></div></div></foreignObject><text
x=
"230"
y=
"361"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
FCS
</text></switch></g><path
d=
"M 65 127 L 173.63 127"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 178.88 127 L 171.88 130.5 L 173.63 127 L 171.88 123.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><rect
x=
"0"
y=
"107"
width=
"65"
height=
"40"
fill=
"rgb(255, 255, 255)"
stroke=
"rgb(0, 0, 0)"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 63px; height: 1px; padding-top: 127px; margin-left: 1px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"
>
Current L2
<br
/>
block hash
</div></div></div></foreignObject><text
x=
"33"
y=
"131"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"12px"
text-anchor=
"middle"
>
Current L2...
</text></switch></g><path
d=
"M 144 251.44 L 105 251.4 L 105 357 L 173.63 357"
fill=
"none"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"stroke"
/><path
d=
"M 178.88 357 L 171.88 360.5 L 173.63 357 L 171.88 353.5 Z"
fill=
"rgb(0, 0, 0)"
stroke=
"rgb(0, 0, 0)"
stroke-miterlimit=
"10"
pointer-events=
"all"
/><g
transform=
"translate(-0.5 -0.5)"
><switch><foreignObject
pointer-events=
"none"
width=
"100%"
height=
"100%"
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
style=
"overflow: visible; text-align: left;"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 283px; margin-left: 70px;"
><div
data-drawio-colors=
"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "
style=
"box-sizing: border-box; font-size: 0px; text-align: center;"
><div
style=
"display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"
>
payload.blockHash
</div></div></div></foreignObject><text
x=
"70"
y=
"287"
fill=
"rgb(0, 0, 0)"
font-family=
"Helvetica"
font-size=
"11px"
text-anchor=
"middle"
>
payload.blockHash
</text></switch></g></g><switch><g
requiredFeatures=
"http://www.w3.org/TR/SVG11/feature#Extensibility"
/><a
transform=
"translate(0,-5)"
xlink:href=
"https://www.diagrams.net/doc/faq/svg-export-text-problems"
target=
"_blank"
><text
text-anchor=
"middle"
font-size=
"10px"
x=
"50%"
y=
"100%"
>
Text is not SVG - cannot display
</text></a></switch></svg>
\ No newline at end of file
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