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
757e8e43
Unverified
Commit
757e8e43
authored
Oct 16, 2023
by
Adrian Sutton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
op-challenger: Use new contract wrapper for read calls.
parent
3fcb8b2c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
40 additions
and
24 deletions
+40
-24
agent.go
op-challenger/game/fault/agent.go
+3
-3
agent_test.go
op-challenger/game/fault/agent_test.go
+1
-1
faultdisputegame.go
op-challenger/game/fault/contracts/faultdisputegame.go
+19
-3
multicall.go
op-challenger/game/fault/contracts/multicall.go
+2
-0
player.go
op-challenger/game/fault/player.go
+11
-13
player_test.go
op-challenger/game/fault/player_test.go
+2
-2
register.go
op-challenger/game/fault/register.go
+2
-2
No files found.
op-challenger/game/fault/agent.go
View file @
757e8e43
...
...
@@ -25,7 +25,7 @@ type Responder interface {
}
type
ClaimLoader
interface
{
Fetch
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
GetAll
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
}
type
Agent
struct
{
...
...
@@ -136,7 +136,7 @@ func (a *Agent) tryResolve(ctx context.Context) bool {
var
errNoResolvableClaims
=
errors
.
New
(
"no resolvable claims"
)
func
(
a
*
Agent
)
tryResolveClaims
(
ctx
context
.
Context
)
error
{
claims
,
err
:=
a
.
loader
.
Fetch
Claims
(
ctx
)
claims
,
err
:=
a
.
loader
.
GetAll
Claims
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to fetch claims: %w"
,
err
)
}
...
...
@@ -189,7 +189,7 @@ func (a *Agent) resolveClaims(ctx context.Context) error {
// newGameFromContracts initializes a new game state from the state in the contract
func
(
a
*
Agent
)
newGameFromContracts
(
ctx
context
.
Context
)
(
types
.
Game
,
error
)
{
claims
,
err
:=
a
.
loader
.
Fetch
Claims
(
ctx
)
claims
,
err
:=
a
.
loader
.
GetAll
Claims
(
ctx
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch claims: %w"
,
err
)
}
...
...
op-challenger/game/fault/agent_test.go
View file @
757e8e43
...
...
@@ -124,7 +124,7 @@ type stubClaimLoader struct {
claims
[]
types
.
Claim
}
func
(
s
*
stubClaimLoader
)
Fetch
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
{
func
(
s
*
stubClaimLoader
)
GetAll
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
{
s
.
callCount
++
return
s
.
claims
,
nil
}
...
...
op-challenger/game/fault/contracts/faultdisputegame.go
View file @
757e8e43
...
...
@@ -31,12 +31,28 @@ func NewFaultDisputeGameContract(addr common.Address, caller *MultiCaller) (*Fau
},
nil
}
func
(
f
*
FaultDisputeGameContract
)
GetMaxGameDepth
(
ctx
context
.
Context
)
(
*
big
.
Int
,
error
)
{
func
(
f
*
FaultDisputeGameContract
)
GetGameDuration
(
ctx
context
.
Context
)
(
uint64
,
error
)
{
result
,
err
:=
f
.
multiCaller
.
SingleCallLatest
(
ctx
,
NewContractCall
(
f
.
abi
,
f
.
addr
,
"GAME_DURATION"
))
if
err
!=
nil
{
return
0
,
fmt
.
Errorf
(
"failed to fetch game duration: %w"
,
err
)
}
return
result
.
GetBigInt
(
0
)
.
Uint64
(),
nil
}
func
(
f
*
FaultDisputeGameContract
)
GetMaxGameDepth
(
ctx
context
.
Context
)
(
uint64
,
error
)
{
result
,
err
:=
f
.
multiCaller
.
SingleCallLatest
(
ctx
,
NewContractCall
(
f
.
abi
,
f
.
addr
,
"MAX_GAME_DEPTH"
))
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch max game depth: %w"
,
err
)
return
0
,
fmt
.
Errorf
(
"failed to fetch max game depth: %w"
,
err
)
}
return
result
.
GetBigInt
(
0
)
.
Uint64
(),
nil
}
func
(
f
*
FaultDisputeGameContract
)
GetAbsolutePrestateHash
(
ctx
context
.
Context
)
(
common
.
Hash
,
error
)
{
result
,
err
:=
f
.
multiCaller
.
SingleCallLatest
(
ctx
,
NewContractCall
(
f
.
abi
,
f
.
addr
,
"ABSOLUTE_PRESTATE"
))
if
err
!=
nil
{
return
common
.
Hash
{},
fmt
.
Errorf
(
"failed to fetch absolute prestate hash: %w"
,
err
)
}
return
result
.
Get
BigInt
(
0
),
nil
return
result
.
Get
Hash
(
0
),
nil
}
func
(
f
*
FaultDisputeGameContract
)
GetStatus
(
ctx
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
{
...
...
op-challenger/game/fault/contracts/multicall.go
View file @
757e8e43
...
...
@@ -14,6 +14,8 @@ import (
"github.com/ethereum/go-ethereum/rpc"
)
// Note: All of this stuff would wind up moving to somewhere in op-service so it can be easily reused.
type
EthRpc
interface
{
CallContext
(
ctx
context
.
Context
,
out
interface
{},
method
string
,
args
...
interface
{})
error
BatchCallContext
(
ctx
context
.
Context
,
b
[]
rpc
.
BatchElem
)
error
...
...
op-challenger/game/fault/player.go
View file @
757e8e43
...
...
@@ -5,22 +5,22 @@ import (
"context"
"fmt"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/responder"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
gameTypes
"github.com/ethereum-optimism/optimism/op-challenger/game/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
)
type
actor
func
(
ctx
context
.
Context
)
error
type
GameInfo
interface
{
Get
Game
Status
(
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
GetStatus
(
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
GetClaimCount
(
context
.
Context
)
(
uint64
,
error
)
}
...
...
@@ -42,18 +42,16 @@ func NewGamePlayer(
dir
string
,
addr
common
.
Address
,
txMgr
txmgr
.
TxManager
,
client
bind
.
ContractCaller
,
client
*
ethclient
.
Client
,
creator
resourceCreator
,
)
(
*
GamePlayer
,
error
)
{
logger
=
logger
.
New
(
"game"
,
addr
)
contract
,
err
:=
bindings
.
NewFaultDisputeGameCaller
(
addr
,
client
)
loader
,
err
:=
contracts
.
NewFaultDisputeGameContract
(
addr
,
contracts
.
NewMultiCaller
(
client
.
Client
(),
100
)
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to
bind the fault dispute game contract
: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to
create fault dispute game contract wrapper
: %w"
,
err
)
}
loader
:=
NewLoader
(
contract
)
status
,
err
:=
loader
.
GetGameStatus
(
ctx
)
status
,
err
:=
loader
.
GetStatus
(
ctx
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch game status: %w"
,
err
)
}
...
...
@@ -72,7 +70,7 @@ func NewGamePlayer(
},
nil
}
gameDepth
,
err
:=
loader
.
Fetch
GameDepth
(
ctx
)
gameDepth
,
err
:=
loader
.
GetMax
GameDepth
(
ctx
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch the game depth: %w"
,
err
)
}
...
...
@@ -114,7 +112,7 @@ func (g *GamePlayer) ProgressGame(ctx context.Context) gameTypes.GameStatus {
if
err
:=
g
.
act
(
ctx
);
err
!=
nil
{
g
.
logger
.
Error
(
"Error when acting on game"
,
"err"
,
err
)
}
status
,
err
:=
g
.
loader
.
Get
Game
Status
(
ctx
)
status
,
err
:=
g
.
loader
.
GetStatus
(
ctx
)
if
err
!=
nil
{
g
.
logger
.
Warn
(
"Unable to retrieve game status"
,
"err"
,
err
)
return
gameTypes
.
GameStatusInProgress
...
...
@@ -148,7 +146,7 @@ func (g *GamePlayer) logGameStatus(ctx context.Context, status gameTypes.GameSta
}
type
PrestateLoader
interface
{
Fetch
AbsolutePrestateHash
(
ctx
context
.
Context
)
(
common
.
Hash
,
error
)
Get
AbsolutePrestateHash
(
ctx
context
.
Context
)
(
common
.
Hash
,
error
)
}
// ValidateAbsolutePrestate validates the absolute prestate of the fault game.
...
...
@@ -157,7 +155,7 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get the trace provider's absolute prestate: %w"
,
err
)
}
onchainPrestate
,
err
:=
loader
.
Fetch
AbsolutePrestateHash
(
ctx
)
onchainPrestate
,
err
:=
loader
.
Get
AbsolutePrestateHash
(
ctx
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get the onchain absolute prestate: %w"
,
err
)
}
...
...
op-challenger/game/fault/player_test.go
View file @
757e8e43
...
...
@@ -181,7 +181,7 @@ func (s *stubGameState) Act(ctx context.Context) error {
return
s
.
actErr
}
func
(
s
*
stubGameState
)
Get
Game
Status
(
ctx
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
{
func
(
s
*
stubGameState
)
GetStatus
(
ctx
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
{
return
s
.
status
,
nil
}
...
...
@@ -234,7 +234,7 @@ func newMockPrestateLoader(prestateError bool, prestate common.Hash) *mockLoader
prestate
:
prestate
,
}
}
func
(
m
*
mockLoader
)
Fetch
AbsolutePrestateHash
(
ctx
context
.
Context
)
(
common
.
Hash
,
error
)
{
func
(
m
*
mockLoader
)
Get
AbsolutePrestateHash
(
ctx
context
.
Context
)
(
common
.
Hash
,
error
)
{
if
m
.
prestateError
{
return
common
.
Hash
{},
mockLoaderError
}
...
...
op-challenger/game/fault/register.go
View file @
757e8e43
...
...
@@ -12,8 +12,8 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
)
...
...
@@ -33,7 +33,7 @@ func RegisterGameTypes(
m
metrics
.
Metricer
,
cfg
*
config
.
Config
,
txMgr
txmgr
.
TxManager
,
client
bind
.
ContractCaller
,
client
*
ethclient
.
Client
,
)
{
if
cfg
.
TraceTypeEnabled
(
config
.
TraceTypeCannon
)
{
resourceCreator
:=
func
(
addr
common
.
Address
,
gameDepth
uint64
,
dir
string
)
(
faultTypes
.
TraceProvider
,
faultTypes
.
OracleUpdater
,
error
)
{
...
...
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