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
3a6653d8
Unverified
Commit
3a6653d8
authored
Aug 31, 2023
by
OptimismBot
Committed by
GitHub
Aug 31, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7078 from ethereum-optimism/refcell/cannon-hist
feat(op-challenger): Record Cannon Execution Time
parents
30e76186
b60c3b7f
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
45 additions
and
16 deletions
+45
-16
player.go
op-challenger/game/fault/player.go
+1
-1
executor.go
op-challenger/game/fault/trace/cannon/executor.go
+11
-2
executor_test.go
op-challenger/game/fault/trace/cannon/executor_test.go
+2
-1
provider.go
op-challenger/game/fault/trace/cannon/provider.go
+8
-4
metrics.go
op-challenger/metrics/metrics.go
+14
-2
noop.go
op-challenger/metrics/noop.go
+5
-4
cannon_helper.go
op-e2e/e2eutils/disputegame/cannon_helper.go
+2
-1
helper.go
op-e2e/e2eutils/disputegame/helper.go
+2
-1
No files found.
op-challenger/game/fault/player.go
View file @
3a6653d8
...
...
@@ -81,7 +81,7 @@ func NewGamePlayer(
var
updater
types
.
OracleUpdater
switch
cfg
.
TraceType
{
case
config
.
TraceTypeCannon
:
cannonProvider
,
err
:=
cannon
.
NewTraceProvider
(
ctx
,
logger
,
cfg
,
client
,
dir
,
addr
)
cannonProvider
,
err
:=
cannon
.
NewTraceProvider
(
ctx
,
logger
,
m
,
cfg
,
client
,
dir
,
addr
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"create cannon trace provider: %w"
,
err
)
}
...
...
op-challenger/game/fault/trace/cannon/executor.go
View file @
3a6653d8
...
...
@@ -11,6 +11,7 @@ import (
"regexp"
"strconv"
"strings"
"time"
"github.com/ethereum-optimism/optimism/op-challenger/config"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
...
...
@@ -30,6 +31,7 @@ type cmdExecutor func(ctx context.Context, l log.Logger, binary string, args ...
type
Executor
struct
{
logger
log
.
Logger
metrics
CannonMetricer
l1
string
l2
string
inputs
LocalGameInputs
...
...
@@ -45,9 +47,10 @@ type Executor struct {
cmdExecutor
cmdExecutor
}
func
NewExecutor
(
logger
log
.
Logger
,
cfg
*
config
.
Config
,
inputs
LocalGameInputs
)
*
Executor
{
func
NewExecutor
(
logger
log
.
Logger
,
m
CannonMetricer
,
cfg
*
config
.
Config
,
inputs
LocalGameInputs
)
*
Executor
{
return
&
Executor
{
logger
:
logger
,
metrics
:
m
,
l1
:
cfg
.
L1EthRpc
,
l2
:
cfg
.
CannonL2
,
inputs
:
inputs
,
...
...
@@ -119,7 +122,13 @@ func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) erro
return
fmt
.
Errorf
(
"could not create proofs directory %v: %w"
,
proofDir
,
err
)
}
e
.
logger
.
Info
(
"Generating trace"
,
"proof"
,
i
,
"cmd"
,
e
.
cannon
,
"args"
,
strings
.
Join
(
args
,
", "
))
return
e
.
cmdExecutor
(
ctx
,
e
.
logger
.
New
(
"proof"
,
i
),
e
.
cannon
,
args
...
)
execStart
:=
time
.
Now
()
err
=
e
.
cmdExecutor
(
ctx
,
e
.
logger
.
New
(
"proof"
,
i
),
e
.
cannon
,
args
...
)
if
err
!=
nil
{
execDuration
:=
time
.
Since
(
execStart
)
.
Seconds
()
e
.
metrics
.
RecordCannonExecutionTime
(
execDuration
)
}
return
err
}
func
runCmd
(
ctx
context
.
Context
,
l
log
.
Logger
,
binary
string
,
args
...
string
)
error
{
...
...
op-challenger/game/fault/trace/cannon/executor_test.go
View file @
3a6653d8
...
...
@@ -11,6 +11,7 @@ import (
"time"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/log"
...
...
@@ -39,7 +40,7 @@ func TestGenerateProof(t *testing.T) {
L2BlockNumber
:
big
.
NewInt
(
3333
),
}
captureExec
:=
func
(
t
*
testing
.
T
,
cfg
config
.
Config
,
proofAt
uint64
)
(
string
,
string
,
map
[
string
]
string
)
{
executor
:=
NewExecutor
(
testlog
.
Logger
(
t
,
log
.
LvlInfo
),
&
cfg
,
inputs
)
executor
:=
NewExecutor
(
testlog
.
Logger
(
t
,
log
.
LvlInfo
),
metrics
.
NoopMetrics
,
&
cfg
,
inputs
)
executor
.
selectSnapshot
=
func
(
logger
log
.
Logger
,
dir
string
,
absolutePreState
string
,
i
uint64
)
(
string
,
error
)
{
return
input
,
nil
}
...
...
op-challenger/game/fault/trace/cannon/provider.go
View file @
3a6653d8
...
...
@@ -33,6 +33,10 @@ type proofData struct {
OracleOffset
uint32
`json:"oracle-offset,omitempty"`
}
type
CannonMetricer
interface
{
RecordCannonExecutionTime
(
t
float64
)
}
type
ProofGenerator
interface
{
// GenerateProof executes cannon to generate a proof at the specified trace index in dataDir.
GenerateProof
(
ctx
context
.
Context
,
dataDir
string
,
proofAt
uint64
)
error
...
...
@@ -51,7 +55,7 @@ type CannonTraceProvider struct {
lastProof
*
proofData
}
func
NewTraceProvider
(
ctx
context
.
Context
,
logger
log
.
Logger
,
cfg
*
config
.
Config
,
l1Client
bind
.
ContractCaller
,
dir
string
,
gameAddr
common
.
Address
)
(
*
CannonTraceProvider
,
error
)
{
func
NewTraceProvider
(
ctx
context
.
Context
,
logger
log
.
Logger
,
m
CannonMetricer
,
cfg
*
config
.
Config
,
l1Client
bind
.
ContractCaller
,
dir
string
,
gameAddr
common
.
Address
)
(
*
CannonTraceProvider
,
error
)
{
l2Client
,
err
:=
ethclient
.
DialContext
(
ctx
,
cfg
.
CannonL2
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"dial l2 client %v: %w"
,
cfg
.
CannonL2
,
err
)
...
...
@@ -65,15 +69,15 @@ func NewTraceProvider(ctx context.Context, logger log.Logger, cfg *config.Config
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"fetch local game inputs: %w"
,
err
)
}
return
NewTraceProviderFromInputs
(
logger
,
cfg
,
localInputs
,
dir
),
nil
return
NewTraceProviderFromInputs
(
logger
,
m
,
cfg
,
localInputs
,
dir
),
nil
}
func
NewTraceProviderFromInputs
(
logger
log
.
Logger
,
cfg
*
config
.
Config
,
localInputs
LocalGameInputs
,
dir
string
)
*
CannonTraceProvider
{
func
NewTraceProviderFromInputs
(
logger
log
.
Logger
,
m
CannonMetricer
,
cfg
*
config
.
Config
,
localInputs
LocalGameInputs
,
dir
string
)
*
CannonTraceProvider
{
return
&
CannonTraceProvider
{
logger
:
logger
,
dir
:
dir
,
prestate
:
cfg
.
CannonAbsolutePreState
,
generator
:
NewExecutor
(
logger
,
cfg
,
localInputs
),
generator
:
NewExecutor
(
logger
,
m
,
cfg
,
localInputs
),
}
}
...
...
op-challenger/metrics/metrics.go
View file @
3a6653d8
...
...
@@ -23,6 +23,7 @@ type Metricer interface {
RecordGameStep
()
RecordGameMove
()
RecordCannonExecutionTime
(
t
float64
)
}
type
Metrics
struct
{
...
...
@@ -37,6 +38,7 @@ type Metrics struct {
moves
prometheus
.
Counter
steps
prometheus
.
Counter
cannonExecutionTime
prometheus
.
Histogram
}
var
_
Metricer
=
(
*
Metrics
)(
nil
)
...
...
@@ -74,6 +76,12 @@ func NewMetrics() *Metrics {
Name
:
"steps"
,
Help
:
"Number of game steps made by the challenge agent"
,
}),
cannonExecutionTime
:
factory
.
NewHistogram
(
prometheus
.
HistogramOpts
{
Namespace
:
Namespace
,
Name
:
"cannon_execution_time"
,
Help
:
"Time (in seconds) to execute cannon"
,
Buckets
:
append
([]
float64
{
1.0
,
10.0
},
prometheus
.
ExponentialBuckets
(
30.0
,
2.0
,
14
)
...
),
}),
}
}
...
...
@@ -108,3 +116,7 @@ func (m *Metrics) RecordGameMove() {
func
(
m
*
Metrics
)
RecordGameStep
()
{
m
.
steps
.
Add
(
1
)
}
func
(
m
*
Metrics
)
RecordCannonExecutionTime
(
t
float64
)
{
m
.
cannonExecutionTime
.
Observe
(
t
)
}
op-challenger/metrics/noop.go
View file @
3a6653d8
...
...
@@ -14,3 +14,4 @@ func (*noopMetrics) RecordInfo(version string) {}
func
(
*
noopMetrics
)
RecordUp
()
{}
func
(
*
noopMetrics
)
RecordGameMove
()
{}
func
(
*
noopMetrics
)
RecordGameStep
()
{}
func
(
*
noopMetrics
)
RecordCannonExecutionTime
(
t
float64
)
{}
op-e2e/e2eutils/disputegame/cannon_helper.go
View file @
3a6653d8
...
...
@@ -5,6 +5,7 @@ import (
"path/filepath"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/challenger"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/testlog"
...
...
@@ -40,7 +41,7 @@ func (g *CannonGameHelper) CreateHonestActor(ctx context.Context, rollupCfg *rol
opts
=
append
(
opts
,
options
...
)
cfg
:=
challenger
.
NewChallengerConfig
(
g
.
t
,
l1Endpoint
,
opts
...
)
logger
:=
testlog
.
Logger
(
g
.
t
,
log
.
LvlInfo
)
.
New
(
"role"
,
"CorrectTrace"
)
provider
,
err
:=
cannon
.
NewTraceProvider
(
ctx
,
logger
,
cfg
,
l1Client
,
filepath
.
Join
(
cfg
.
Datadir
,
"honest"
),
g
.
addr
)
provider
,
err
:=
cannon
.
NewTraceProvider
(
ctx
,
logger
,
metrics
.
NoopMetrics
,
cfg
,
l1Client
,
filepath
.
Join
(
cfg
.
Datadir
,
"honest"
),
g
.
addr
)
g
.
require
.
NoError
(
err
,
"create cannon trace provider"
)
return
&
HonestHelper
{
...
...
op-e2e/e2eutils/disputegame/helper.go
View file @
3a6653d8
...
...
@@ -14,6 +14,7 @@ import (
"github.com/ethereum-optimism/optimism/op-chain-ops/genesis"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/alphabet"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/challenger"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait"
...
...
@@ -175,7 +176,7 @@ func (h *FactoryHelper) StartCannonGameWithCorrectRoot(ctx context.Context, roll
L2Claim
:
challengedOutput
.
OutputRoot
,
L2BlockNumber
:
challengedOutput
.
L2BlockNumber
,
}
provider
:=
cannon
.
NewTraceProviderFromInputs
(
testlog
.
Logger
(
h
.
t
,
log
.
LvlInfo
)
.
New
(
"role"
,
"CorrectTrace"
),
cfg
,
inputs
,
cfg
.
Datadir
)
provider
:=
cannon
.
NewTraceProviderFromInputs
(
testlog
.
Logger
(
h
.
t
,
log
.
LvlInfo
)
.
New
(
"role"
,
"CorrectTrace"
),
metrics
.
NoopMetrics
,
cfg
,
inputs
,
cfg
.
Datadir
)
rootClaim
,
err
:=
provider
.
Get
(
ctx
,
math
.
MaxUint64
)
h
.
require
.
NoError
(
err
,
"Compute correct root hash"
)
...
...
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