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
bf79d5c4
Unverified
Commit
bf79d5c4
authored
Aug 07, 2023
by
mergify[bot]
Committed by
GitHub
Aug 07, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into 08-07-remove_individual_test_time_limit_in_ci
parents
9cba5c44
4ef1634c
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
95 additions
and
110 deletions
+95
-110
go.mod
cannon/example/claim/go.mod
+2
-2
go.sum
cannon/example/claim/go.sum
+5
-5
go.mod
cannon/example/hello/go.mod
+1
-0
go.mod
go.mod
+5
-5
go.sum
go.sum
+10
-10
main_test.go
op-challenger/cmd/main_test.go
+12
-34
config.go
op-challenger/config/config.go
+2
-8
config_test.go
op-challenger/config/config_test.go
+1
-8
executor.go
op-challenger/fault/cannon/executor.go
+18
-5
executor_test.go
op-challenger/fault/cannon/executor_test.go
+7
-3
local.go
op-challenger/fault/cannon/local.go
+0
-6
local_test.go
op-challenger/fault/cannon/local_test.go
+0
-1
updater.go
op-challenger/fault/cannon/updater.go
+30
-1
updater_test.go
op-challenger/fault/cannon/updater_test.go
+1
-1
service.go
op-challenger/fault/service.go
+1
-1
flags.go
op-challenger/flags/flags.go
+0
-20
No files found.
cannon/example/claim/go.mod
View file @
bf79d5c4
...
...
@@ -5,8 +5,8 @@ go 1.20
require github.com/ethereum-optimism/optimism v0.0.0
require (
golang.org/x/crypto v0.
8
.0 // indirect
golang.org/x/sys v0.
7
.0 // indirect
golang.org/x/crypto v0.
12
.0 // indirect
golang.org/x/sys v0.
11
.0 // indirect
)
replace github.com/ethereum-optimism/optimism v0.0.0 => ../../..
cannon/example/claim/go.sum
View file @
bf79d5c4
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.
1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs
k=
golang.org/x/crypto v0.
8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ
=
golang.org/x/crypto v0.
8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE
=
golang.org/x/sys v0.
7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU
=
golang.org/x/sys v0.
7
.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
github.com/stretchr/testify v1.8.
4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
k=
golang.org/x/crypto v0.
12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk
=
golang.org/x/crypto v0.
12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw
=
golang.org/x/sys v0.
11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM
=
golang.org/x/sys v0.
11
.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
cannon/example/hello/go.mod
View file @
bf79d5c4
module hello
go 1.20
go.mod
View file @
bf79d5c4
...
...
@@ -40,10 +40,10 @@ require (
github.com/stretchr/testify v1.8.4
github.com/urfave/cli v1.22.14
github.com/urfave/cli/v2 v2.25.7
golang.org/x/crypto v0.
8
.0
golang.org/x/crypto v0.
12
.0
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df
golang.org/x/sync v0.3.0
golang.org/x/term v0.
7
.0
golang.org/x/term v0.
11
.0
golang.org/x/time v0.3.0
gorm.io/driver/postgres v1.5.2
gorm.io/gorm v1.25.2
...
...
@@ -185,9 +185,9 @@ require (
go.uber.org/multierr v1.9.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/mod v0.11.0 // indirect
golang.org/x/net v0.
9
.0 // indirect
golang.org/x/sys v0.
7
.0 // indirect
golang.org/x/text v0.
9
.0 // indirect
golang.org/x/net v0.
10
.0 // indirect
golang.org/x/sys v0.
11
.0 // indirect
golang.org/x/text v0.
12
.0 // indirect
golang.org/x/tools v0.7.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
...
...
go.sum
View file @
bf79d5c4
...
...
@@ -860,8 +860,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.
8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ
=
golang.org/x/crypto v0.
8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE
=
golang.org/x/crypto v0.
12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk
=
golang.org/x/crypto v0.
12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw
=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
...
...
@@ -911,8 +911,8 @@ golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.
9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzO
M=
golang.org/x/net v0.
9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns
=
golang.org/x/net v0.
10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951
M=
golang.org/x/net v0.
10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg
=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
...
...
@@ -982,13 +982,13 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc
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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.
7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU
=
golang.org/x/sys v0.
7
.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.
11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM
=
golang.org/x/sys v0.
11
.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.
7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ
=
golang.org/x/term v0.
7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY
=
golang.org/x/term v0.
11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0
=
golang.org/x/term v0.
11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU
=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
...
...
@@ -997,8 +997,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.
9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE
=
golang.org/x/text v0.
9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8
=
golang.org/x/text v0.
12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc
=
golang.org/x/text v0.
12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE
=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
...
...
op-challenger/cmd/main_test.go
View file @
bf79d5c4
...
...
@@ -13,17 +13,16 @@ import (
)
var
(
l1EthRpc
=
"http://example.com:8545"
gameAddressValue
=
"0xaa00000000000000000000000000000000000000"
preimageOracleAddressValue
=
"0xbb00000000000000000000000000000000000000"
cannonBin
=
"./bin/cannon"
cannonServer
=
"./bin/op-program"
cannonPreState
=
"./pre.json"
cannonDatadir
=
"./test_data"
cannonL2
=
"http://example.com:9545"
alphabetTrace
=
"abcdefghijz"
agreeWithProposedOutput
=
"true"
gameDepth
=
"4"
l1EthRpc
=
"http://example.com:8545"
gameAddressValue
=
"0xaa00000000000000000000000000000000000000"
cannonBin
=
"./bin/cannon"
cannonServer
=
"./bin/op-program"
cannonPreState
=
"./pre.json"
cannonDatadir
=
"./test_data"
cannonL2
=
"http://example.com:9545"
alphabetTrace
=
"abcdefghijz"
agreeWithProposedOutput
=
"true"
gameDepth
=
"4"
)
func
TestLogLevel
(
t
*
testing
.
T
)
{
...
...
@@ -43,14 +42,14 @@ func TestLogLevel(t *testing.T) {
func
TestDefaultCLIOptionsMatchDefaultConfig
(
t
*
testing
.
T
)
{
cfg
:=
configForArgs
(
t
,
addRequiredArgs
(
config
.
TraceTypeAlphabet
))
defaultCfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
),
co
mmon
.
HexToAddress
(
preimageOracleAddressValue
),
co
nfig
.
TraceTypeAlphabet
,
true
,
4
)
defaultCfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
),
config
.
TraceTypeAlphabet
,
true
,
4
)
// Add in the extra CLI options required when using alphabet trace type
defaultCfg
.
AlphabetTrace
=
alphabetTrace
require
.
Equal
(
t
,
defaultCfg
,
cfg
)
}
func
TestDefaultConfigIsValid
(
t
*
testing
.
T
)
{
cfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
),
co
mmon
.
HexToAddress
(
preimageOracleAddressValue
),
co
nfig
.
TraceTypeAlphabet
,
true
,
4
)
cfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
),
config
.
TraceTypeAlphabet
,
true
,
4
)
// Add in options that are required based on the specific trace type
// To avoid needing to specify unused options, these aren't included in the params for NewConfig
cfg
.
AlphabetTrace
=
alphabetTrace
...
...
@@ -140,26 +139,6 @@ func TestGameDepth(t *testing.T) {
})
}
func
TestPreimageOracleAddress
(
t
*
testing
.
T
)
{
t
.
Run
(
"NotRequiredForAlphabetTrace"
,
func
(
t
*
testing
.
T
)
{
configForArgs
(
t
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--preimage-oracle-address"
))
})
t
.
Run
(
"Required"
,
func
(
t
*
testing
.
T
)
{
verifyArgsInvalid
(
t
,
"flag preimage-oracle-address is required"
,
addRequiredArgsExcept
(
config
.
TraceTypeCannon
,
"--preimage-oracle-address"
))
})
t
.
Run
(
"Valid"
,
func
(
t
*
testing
.
T
)
{
addr
:=
common
.
Address
{
0xbb
,
0xcc
,
0xdd
}
cfg
:=
configForArgs
(
t
,
addRequiredArgsExcept
(
config
.
TraceTypeCannon
,
"--preimage-oracle-address"
,
"--preimage-oracle-address="
+
addr
.
Hex
()))
require
.
Equal
(
t
,
addr
,
cfg
.
PreimageOracleAddress
)
})
t
.
Run
(
"Invalid"
,
func
(
t
*
testing
.
T
)
{
verifyArgsInvalid
(
t
,
"invalid address: foo"
,
addRequiredArgsExcept
(
config
.
TraceTypeCannon
,
"--preimage-oracle-address"
,
"--preimage-oracle-address=foo"
))
})
}
func
TestCannonBin
(
t
*
testing
.
T
)
{
t
.
Run
(
"NotRequiredForAlphabetTrace"
,
func
(
t
*
testing
.
T
)
{
configForArgs
(
t
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--cannon-bin"
))
...
...
@@ -288,7 +267,6 @@ func requiredArgs(traceType config.TraceType) map[string]string {
"--agree-with-proposed-output"
:
agreeWithProposedOutput
,
"--l1-eth-rpc"
:
l1EthRpc
,
"--game-address"
:
gameAddressValue
,
"--preimage-oracle-address"
:
preimageOracleAddressValue
,
"--trace-type"
:
traceType
.
String
(),
}
switch
traceType
{
...
...
op-challenger/config/config.go
View file @
bf79d5c4
...
...
@@ -61,7 +61,6 @@ const DefaultCannonSnapshotFreq = uint(10_000)
type
Config
struct
{
L1EthRpc
string
// L1 RPC Url
GameAddress
common
.
Address
// Address of the fault game
PreimageOracleAddress
common
.
Address
// Address of the pre-image oracle
AgreeWithProposedOutput
bool
// Temporary config if we agree or disagree with the posted output
GameDepth
int
// Depth of the game tree
...
...
@@ -84,15 +83,13 @@ type Config struct {
func
NewConfig
(
l1EthRpc
string
,
gameAddress
common
.
Address
,
preimageOracleAddress
common
.
Address
,
traceType
TraceType
,
agreeWithProposedOutput
bool
,
gameDepth
int
,
)
Config
{
return
Config
{
L1EthRpc
:
l1EthRpc
,
GameAddress
:
gameAddress
,
PreimageOracleAddress
:
preimageOracleAddress
,
L1EthRpc
:
l1EthRpc
,
GameAddress
:
gameAddress
,
AgreeWithProposedOutput
:
agreeWithProposedOutput
,
GameDepth
:
gameDepth
,
...
...
@@ -116,9 +113,6 @@ func (c Config) Check() error {
return
ErrMissingTraceType
}
if
c
.
TraceType
==
TraceTypeCannon
{
if
c
.
PreimageOracleAddress
==
(
common
.
Address
{})
{
return
ErrMissingPreimageOracleAddress
}
if
c
.
CannonBin
==
""
{
return
ErrMissingCannonBin
}
...
...
op-challenger/config/config_test.go
View file @
bf79d5c4
...
...
@@ -11,7 +11,6 @@ import (
var
(
validL1EthRpc
=
"http://localhost:8545"
validGameAddress
=
common
.
HexToAddress
(
"0x7bdd3b028C4796eF0EAf07d11394d0d9d8c24139"
)
validPreimageOracleAddress
=
common
.
HexToAddress
(
"0x7bdd3b028C4796eF0EAf07d11394d0d9d8c24139"
)
validAlphabetTrace
=
"abcdefgh"
validCannonBin
=
"./bin/cannon"
validCannonOpProgramBin
=
"./bin/op-program"
...
...
@@ -23,7 +22,7 @@ var (
)
func
validConfig
(
traceType
TraceType
)
Config
{
cfg
:=
NewConfig
(
validL1EthRpc
,
validGameAddress
,
validPreimageOracleAddress
,
traceType
,
agreeWithProposedOutput
,
gameDepth
)
cfg
:=
NewConfig
(
validL1EthRpc
,
validGameAddress
,
traceType
,
agreeWithProposedOutput
,
gameDepth
)
switch
traceType
{
case
TraceTypeAlphabet
:
cfg
.
AlphabetTrace
=
validAlphabetTrace
...
...
@@ -74,12 +73,6 @@ func TestAlphabetTraceRequired(t *testing.T) {
require
.
ErrorIs
(
t
,
config
.
Check
(),
ErrMissingAlphabetTrace
)
}
func
TestCannonPreimageOracleAddressRequired
(
t
*
testing
.
T
)
{
config
:=
validConfig
(
TraceTypeCannon
)
config
.
PreimageOracleAddress
=
common
.
Address
{}
require
.
ErrorIs
(
t
,
config
.
Check
(),
ErrMissingPreimageOracleAddress
)
}
func
TestCannonBinRequired
(
t
*
testing
.
T
)
{
config
:=
validConfig
(
TraceTypeCannon
)
config
.
CannonBin
=
""
...
...
op-challenger/fault/cannon/executor.go
View file @
bf79d5c4
...
...
@@ -56,31 +56,44 @@ func NewExecutor(logger log.Logger, cfg *config.Config, inputs localGameInputs)
}
func
(
e
*
Executor
)
GenerateProof
(
ctx
context
.
Context
,
dir
string
,
i
uint64
)
error
{
start
,
err
:=
e
.
selectSnapshot
(
e
.
logger
,
filepath
.
Join
(
e
.
dataDir
,
snapsDir
),
e
.
absolutePreState
,
i
)
snapshotDir
:=
filepath
.
Join
(
dir
,
snapsDir
)
start
,
err
:=
e
.
selectSnapshot
(
e
.
logger
,
snapshotDir
,
e
.
absolutePreState
,
i
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"find starting snapshot: %w"
,
err
)
}
proofDir
:=
filepath
.
Join
(
dir
,
proofsDir
)
dataDir
:=
filepath
.
Join
(
e
.
dataDir
,
preimagesDir
)
args
:=
[]
string
{
"run"
,
"--input"
,
start
,
"--output"
,
filepath
.
Join
(
dir
,
"out.json"
),
"--meta"
,
""
,
"--proof-at"
,
"="
+
strconv
.
FormatUint
(
i
,
10
),
"--stop-at"
,
"="
+
strconv
.
FormatUint
(
i
+
1
,
10
),
"--proof-fmt"
,
filepath
.
Join
(
dir
,
proofs
Dir
,
"%d.json"
),
"--proof-fmt"
,
filepath
.
Join
(
proof
Dir
,
"%d.json"
),
"--snapshot-at"
,
"%"
+
strconv
.
FormatUint
(
uint64
(
e
.
snapshotFreq
),
10
),
"--snapshot-fmt"
,
filepath
.
Join
(
e
.
dataDir
,
snaps
Dir
,
"%d.json"
),
"--snapshot-fmt"
,
filepath
.
Join
(
snapshot
Dir
,
"%d.json"
),
"--"
,
e
.
server
,
"--l1"
,
e
.
l1
,
"--l2"
,
e
.
l2
,
"--datadir"
,
filepath
.
Join
(
e
.
dataDir
,
preimagesDir
)
,
"--datadir"
,
dataDir
,
"--l1.head"
,
e
.
inputs
.
l1Head
.
Hex
(),
"--l2.head"
,
e
.
inputs
.
l2Head
.
Hex
(),
"--l2.outputroot"
,
e
.
inputs
.
l2OutputRoot
.
Hex
(),
"--l2.claim"
,
e
.
inputs
.
l2Claim
.
Hex
(),
"--l2.blocknumber"
,
e
.
inputs
.
l2BlockNumber
.
Text
(
10
),
"--l2.chainid"
,
e
.
inputs
.
l2ChainId
.
Text
(
10
),
}
if
err
:=
os
.
MkdirAll
(
snapshotDir
,
0755
);
err
!=
nil
{
return
fmt
.
Errorf
(
"could not create snapshot directory %v: %w"
,
snapshotDir
,
err
)
}
if
err
:=
os
.
MkdirAll
(
dataDir
,
0755
);
err
!=
nil
{
return
fmt
.
Errorf
(
"could not create preimage cache directory %v: %w"
,
dataDir
,
err
)
}
if
err
:=
os
.
MkdirAll
(
proofDir
,
0755
);
err
!=
nil
{
return
fmt
.
Errorf
(
"could not create proofs directory %v: %w"
,
proofDir
,
err
)
}
e
.
logger
.
Info
(
"Generating trace"
,
"proof"
,
i
,
"cmd"
,
e
.
cannon
,
"args"
,
args
)
return
e
.
cmdExecutor
(
ctx
,
e
.
logger
.
New
(
"proof"
,
i
),
e
.
cannon
,
args
...
)
}
...
...
op-challenger/fault/cannon/executor_test.go
View file @
bf79d5c4
...
...
@@ -20,7 +20,7 @@ const execTestCannonPrestate = "/foo/pre.json"
func
TestGenerateProof
(
t
*
testing
.
T
)
{
input
:=
"starting.json"
cfg
:=
config
.
NewConfig
(
"http://localhost:8888"
,
common
.
Address
{
0xaa
},
co
mmon
.
Address
{
0xbb
},
co
nfig
.
TraceTypeCannon
,
true
,
5
)
cfg
:=
config
.
NewConfig
(
"http://localhost:8888"
,
common
.
Address
{
0xaa
},
config
.
TraceTypeCannon
,
true
,
5
)
cfg
.
CannonDatadir
=
t
.
TempDir
()
cfg
.
CannonAbsolutePreState
=
"pre.json"
cfg
.
CannonBin
=
"./bin/cannon"
...
...
@@ -30,7 +30,6 @@ func TestGenerateProof(t *testing.T) {
inputs
:=
localGameInputs
{
l1Head
:
common
.
Hash
{
0x11
},
l2ChainId
:
big
.
NewInt
(
2342
),
l2Head
:
common
.
Hash
{
0x22
},
l2OutputRoot
:
common
.
Hash
{
0x33
},
l2Claim
:
common
.
Hash
{
0x44
},
...
...
@@ -54,9 +53,15 @@ func TestGenerateProof(t *testing.T) {
}
err
:=
executor
.
GenerateProof
(
context
.
Background
(),
cfg
.
CannonDatadir
,
150
_000_000
)
require
.
NoError
(
t
,
err
)
require
.
DirExists
(
t
,
filepath
.
Join
(
cfg
.
CannonDatadir
,
preimagesDir
))
require
.
DirExists
(
t
,
filepath
.
Join
(
cfg
.
CannonDatadir
,
proofsDir
))
require
.
DirExists
(
t
,
filepath
.
Join
(
cfg
.
CannonDatadir
,
snapsDir
))
require
.
Equal
(
t
,
cfg
.
CannonBin
,
binary
)
require
.
Equal
(
t
,
"run"
,
subcommand
)
require
.
Equal
(
t
,
input
,
args
[
"--input"
])
require
.
Contains
(
t
,
args
,
"--meta"
)
require
.
Equal
(
t
,
""
,
args
[
"--meta"
])
require
.
Equal
(
t
,
filepath
.
Join
(
cfg
.
CannonDatadir
,
"out.json"
),
args
[
"--output"
])
require
.
Equal
(
t
,
"=150000000"
,
args
[
"--proof-at"
])
require
.
Equal
(
t
,
"=150000001"
,
args
[
"--stop-at"
])
require
.
Equal
(
t
,
"%500"
,
args
[
"--snapshot-at"
])
...
...
@@ -73,7 +78,6 @@ func TestGenerateProof(t *testing.T) {
require
.
Equal
(
t
,
inputs
.
l2OutputRoot
.
Hex
(),
args
[
"--l2.outputroot"
])
require
.
Equal
(
t
,
inputs
.
l2Claim
.
Hex
(),
args
[
"--l2.claim"
])
require
.
Equal
(
t
,
"3333"
,
args
[
"--l2.blocknumber"
])
require
.
Equal
(
t
,
"2342"
,
args
[
"--l2.chainid"
])
}
func
TestRunCmdLogsOutput
(
t
*
testing
.
T
)
{
...
...
op-challenger/fault/cannon/local.go
View file @
bf79d5c4
...
...
@@ -13,7 +13,6 @@ import (
type
localGameInputs
struct
{
l1Head
common
.
Hash
l2ChainId
*
big
.
Int
l2Head
common
.
Hash
l2OutputRoot
common
.
Hash
l2Claim
common
.
Hash
...
...
@@ -39,10 +38,6 @@ func fetchLocalInputs(ctx context.Context, gameAddr common.Address, caller GameI
if
err
!=
nil
{
return
localGameInputs
{},
fmt
.
Errorf
(
"fetch L1 head for game %v: %w"
,
gameAddr
,
err
)
}
l2ChainId
,
err
:=
l2Client
.
ChainID
(
ctx
)
if
err
!=
nil
{
return
localGameInputs
{},
fmt
.
Errorf
(
"fetch L2 chain ID: %w"
,
err
)
}
proposals
,
err
:=
caller
.
Proposals
(
opts
)
if
err
!=
nil
{
...
...
@@ -58,7 +53,6 @@ func fetchLocalInputs(ctx context.Context, gameAddr common.Address, caller GameI
return
localGameInputs
{
l1Head
:
l1Head
,
l2ChainId
:
l2ChainId
,
l2Head
:
l2Head
,
l2OutputRoot
:
agreedOutput
.
OutputRoot
,
l2Claim
:
claimedOutput
.
OutputRoot
,
...
...
op-challenger/fault/cannon/local_test.go
View file @
bf79d5c4
...
...
@@ -40,7 +40,6 @@ func TestFetchLocalInputs(t *testing.T) {
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
l1Client
.
l1Head
,
inputs
.
l1Head
)
require
.
Equal
(
t
,
l2Client
.
chainID
,
inputs
.
l2ChainId
)
require
.
Equal
(
t
,
l2Client
.
header
.
Hash
(),
inputs
.
l2Head
)
require
.
EqualValues
(
t
,
l1Client
.
starting
.
OutputRoot
,
inputs
.
l2OutputRoot
)
require
.
EqualValues
(
t
,
l1Client
.
disputed
.
OutputRoot
,
inputs
.
l2Claim
)
...
...
op-challenger/fault/cannon/updater.go
View file @
bf79d5c4
...
...
@@ -8,6 +8,7 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-challenger/fault/types"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -28,8 +29,36 @@ type cannonUpdater struct {
preimageOracleAddr
common
.
Address
}
// NewOracleUpdater returns a new updater.
// NewOracleUpdater returns a new updater.
The pre-image oracle address is loaded from the fault dispute game.
func
NewOracleUpdater
(
ctx
context
.
Context
,
logger
log
.
Logger
,
txMgr
txmgr
.
TxManager
,
fdgAddr
common
.
Address
,
client
bind
.
ContractCaller
,
)
(
*
cannonUpdater
,
error
)
{
gameCaller
,
err
:=
bindings
.
NewFaultDisputeGameCaller
(
fdgAddr
,
client
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"create caller for game %v: %w"
,
fdgAddr
,
err
)
}
opts
:=
&
bind
.
CallOpts
{
Context
:
ctx
}
vm
,
err
:=
gameCaller
.
VM
(
opts
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to load VM address from game %v: %w"
,
fdgAddr
,
err
)
}
mipsCaller
,
err
:=
bindings
.
NewMIPSCaller
(
vm
,
client
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to create MIPS caller for address %v: %w"
,
vm
,
err
)
}
oracleAddr
,
err
:=
mipsCaller
.
Oracle
(
opts
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to load pre-image oracle address from game %v: %w"
,
fdgAddr
,
err
)
}
return
NewOracleUpdaterWithOracle
(
logger
,
txMgr
,
fdgAddr
,
oracleAddr
)
}
// NewOracleUpdaterWithOracle returns a new updater using a specified pre-image oracle address.
func
NewOracleUpdaterWithOracle
(
logger
log
.
Logger
,
txMgr
txmgr
.
TxManager
,
fdgAddr
common
.
Address
,
...
...
op-challenger/fault/cannon/updater_test.go
View file @
bf79d5c4
...
...
@@ -64,7 +64,7 @@ func newTestCannonUpdater(t *testing.T, sendFails bool) (*cannonUpdater, *mockTx
from
:
mockFdgAddress
,
sendFails
:
sendFails
,
}
updater
,
err
:=
NewOracleUpdater
(
logger
,
txMgr
,
mockFdgAddress
,
mockPreimageOracleAddress
)
updater
,
err
:=
NewOracleUpdater
WithOracle
(
logger
,
txMgr
,
mockFdgAddress
,
mockPreimageOracleAddress
)
require
.
NoError
(
t
,
err
)
return
updater
,
txMgr
}
...
...
op-challenger/fault/service.go
View file @
bf79d5c4
...
...
@@ -49,7 +49,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"create cannon trace provider: %w"
,
err
)
}
updater
,
err
=
cannon
.
NewOracleUpdater
(
logger
,
txMgr
,
cfg
.
GameAddress
,
cfg
.
PreimageOracleAddress
)
updater
,
err
=
cannon
.
NewOracleUpdater
(
ctx
,
logger
,
txMgr
,
cfg
.
GameAddress
,
client
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to create the cannon updater: %w"
,
err
)
}
...
...
op-challenger/flags/flags.go
View file @
bf79d5c4
...
...
@@ -10,7 +10,6 @@ import (
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/common"
"github.com/urfave/cli/v2"
)
...
...
@@ -59,11 +58,6 @@ var (
Usage
:
"Correct Alphabet Trace (alphabet trace type only)"
,
EnvVars
:
prefixEnvVars
(
"ALPHABET"
),
}
PreimageOracleAddressFlag
=
&
cli
.
StringFlag
{
Name
:
"preimage-oracle-address"
,
Usage
:
"Address of the Preimage Oracle contract (only required for cannon)."
,
EnvVars
:
prefixEnvVars
(
"PREIMAGE_ORACLE_ADDRESS"
),
}
CannonBinFlag
=
&
cli
.
StringFlag
{
Name
:
"cannon-bin"
,
Usage
:
"Path to cannon executable to use when generating trace data (cannon trace type only)"
,
...
...
@@ -109,7 +103,6 @@ var requiredFlags = []cli.Flag{
// optionalFlags is a list of unchecked cli flags
var
optionalFlags
=
[]
cli
.
Flag
{
AlphabetFlag
,
PreimageOracleAddressFlag
,
CannonBinFlag
,
CannonServerFlag
,
CannonPreStateFlag
,
...
...
@@ -137,9 +130,6 @@ func CheckRequired(ctx *cli.Context) error {
gameType
:=
config
.
TraceType
(
strings
.
ToLower
(
ctx
.
String
(
TraceTypeFlag
.
Name
)))
switch
gameType
{
case
config
.
TraceTypeCannon
:
if
!
ctx
.
IsSet
(
PreimageOracleAddressFlag
.
Name
)
{
return
fmt
.
Errorf
(
"flag %s is required"
,
PreimageOracleAddressFlag
.
Name
)
}
if
!
ctx
.
IsSet
(
CannonBinFlag
.
Name
)
{
return
fmt
.
Errorf
(
"flag %s is required"
,
CannonBinFlag
.
Name
)
}
...
...
@@ -179,21 +169,11 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) {
traceTypeFlag
:=
config
.
TraceType
(
strings
.
ToLower
(
ctx
.
String
(
TraceTypeFlag
.
Name
)))
preimageOracleAddress
:=
common
.
Address
{}
preimageOracleValue
:=
ctx
.
String
(
PreimageOracleAddressFlag
.
Name
)
if
traceTypeFlag
==
config
.
TraceTypeCannon
||
preimageOracleValue
!=
""
{
preimageOracleAddress
,
err
=
opservice
.
ParseAddress
(
preimageOracleValue
)
if
err
!=
nil
{
return
nil
,
err
}
}
return
&
config
.
Config
{
// Required Flags
L1EthRpc
:
ctx
.
String
(
L1EthRpcFlag
.
Name
),
TraceType
:
traceTypeFlag
,
GameAddress
:
dgfAddress
,
PreimageOracleAddress
:
preimageOracleAddress
,
AlphabetTrace
:
ctx
.
String
(
AlphabetFlag
.
Name
),
CannonBin
:
ctx
.
String
(
CannonBinFlag
.
Name
),
CannonServer
:
ctx
.
String
(
CannonServerFlag
.
Name
),
...
...
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