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
Show 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 {
...
@@ -25,7 +25,7 @@ type Responder interface {
}
}
type
ClaimLoader
interface
{
type
ClaimLoader
interface
{
Fetch
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
GetAll
Claims
(
ctx
context
.
Context
)
([]
types
.
Claim
,
error
)
}
}
type
Agent
struct
{
type
Agent
struct
{
...
@@ -136,7 +136,7 @@ func (a *Agent) tryResolve(ctx context.Context) bool {
...
@@ -136,7 +136,7 @@ func (a *Agent) tryResolve(ctx context.Context) bool {
var
errNoResolvableClaims
=
errors
.
New
(
"no resolvable claims"
)
var
errNoResolvableClaims
=
errors
.
New
(
"no resolvable claims"
)
func
(
a
*
Agent
)
tryResolveClaims
(
ctx
context
.
Context
)
error
{
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
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to fetch claims: %w"
,
err
)
return
fmt
.
Errorf
(
"failed to fetch claims: %w"
,
err
)
}
}
...
@@ -189,7 +189,7 @@ func (a *Agent) resolveClaims(ctx context.Context) error {
...
@@ -189,7 +189,7 @@ func (a *Agent) resolveClaims(ctx context.Context) error {
// newGameFromContracts initializes a new game state from the state in the contract
// newGameFromContracts initializes a new game state from the state in the contract
func
(
a
*
Agent
)
newGameFromContracts
(
ctx
context
.
Context
)
(
types
.
Game
,
error
)
{
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
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch claims: %w"
,
err
)
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 {
...
@@ -124,7 +124,7 @@ type stubClaimLoader struct {
claims
[]
types
.
Claim
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
++
s
.
callCount
++
return
s
.
claims
,
nil
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
...
@@ -31,12 +31,28 @@ func NewFaultDisputeGameContract(addr common.Address, caller *MultiCaller) (*Fau
},
nil
},
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"
))
result
,
err
:=
f
.
multiCaller
.
SingleCallLatest
(
ctx
,
NewContractCall
(
f
.
abi
,
f
.
addr
,
"MAX_GAME_DEPTH"
))
if
err
!=
nil
{
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
)
{
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 (
...
@@ -14,6 +14,8 @@ import (
"github.com/ethereum/go-ethereum/rpc"
"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
{
type
EthRpc
interface
{
CallContext
(
ctx
context
.
Context
,
out
interface
{},
method
string
,
args
...
interface
{})
error
CallContext
(
ctx
context
.
Context
,
out
interface
{},
method
string
,
args
...
interface
{})
error
BatchCallContext
(
ctx
context
.
Context
,
b
[]
rpc
.
BatchElem
)
error
BatchCallContext
(
ctx
context
.
Context
,
b
[]
rpc
.
BatchElem
)
error
...
...
op-challenger/game/fault/player.go
View file @
757e8e43
...
@@ -5,22 +5,22 @@ import (
...
@@ -5,22 +5,22 @@ import (
"context"
"context"
"fmt"
"fmt"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"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/responder"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
gameTypes
"github.com/ethereum-optimism/optimism/op-challenger/game/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-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"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/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
)
)
type
actor
func
(
ctx
context
.
Context
)
error
type
actor
func
(
ctx
context
.
Context
)
error
type
GameInfo
interface
{
type
GameInfo
interface
{
Get
Game
Status
(
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
GetStatus
(
context
.
Context
)
(
gameTypes
.
GameStatus
,
error
)
GetClaimCount
(
context
.
Context
)
(
uint64
,
error
)
GetClaimCount
(
context
.
Context
)
(
uint64
,
error
)
}
}
...
@@ -42,18 +42,16 @@ func NewGamePlayer(
...
@@ -42,18 +42,16 @@ func NewGamePlayer(
dir
string
,
dir
string
,
addr
common
.
Address
,
addr
common
.
Address
,
txMgr
txmgr
.
TxManager
,
txMgr
txmgr
.
TxManager
,
client
bind
.
ContractCaller
,
client
*
ethclient
.
Client
,
creator
resourceCreator
,
creator
resourceCreator
,
)
(
*
GamePlayer
,
error
)
{
)
(
*
GamePlayer
,
error
)
{
logger
=
logger
.
New
(
"game"
,
addr
)
logger
=
logger
.
New
(
"game"
,
addr
)
contract
,
err
:=
bindings
.
NewFaultDisputeGameCaller
(
addr
,
client
)
loader
,
err
:=
contracts
.
NewFaultDisputeGameContract
(
addr
,
contracts
.
NewMultiCaller
(
client
.
Client
(),
100
)
)
if
err
!=
nil
{
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
.
GetStatus
(
ctx
)
status
,
err
:=
loader
.
GetGameStatus
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch game status: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to fetch game status: %w"
,
err
)
}
}
...
@@ -72,7 +70,7 @@ func NewGamePlayer(
...
@@ -72,7 +70,7 @@ func NewGamePlayer(
},
nil
},
nil
}
}
gameDepth
,
err
:=
loader
.
Fetch
GameDepth
(
ctx
)
gameDepth
,
err
:=
loader
.
GetMax
GameDepth
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to fetch the game depth: %w"
,
err
)
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 {
...
@@ -114,7 +112,7 @@ func (g *GamePlayer) ProgressGame(ctx context.Context) gameTypes.GameStatus {
if
err
:=
g
.
act
(
ctx
);
err
!=
nil
{
if
err
:=
g
.
act
(
ctx
);
err
!=
nil
{
g
.
logger
.
Error
(
"Error when acting on game"
,
"err"
,
err
)
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
{
if
err
!=
nil
{
g
.
logger
.
Warn
(
"Unable to retrieve game status"
,
"err"
,
err
)
g
.
logger
.
Warn
(
"Unable to retrieve game status"
,
"err"
,
err
)
return
gameTypes
.
GameStatusInProgress
return
gameTypes
.
GameStatusInProgress
...
@@ -148,7 +146,7 @@ func (g *GamePlayer) logGameStatus(ctx context.Context, status gameTypes.GameSta
...
@@ -148,7 +146,7 @@ func (g *GamePlayer) logGameStatus(ctx context.Context, status gameTypes.GameSta
}
}
type
PrestateLoader
interface
{
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.
// ValidateAbsolutePrestate validates the absolute prestate of the fault game.
...
@@ -157,7 +155,7 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo
...
@@ -157,7 +155,7 @@ func ValidateAbsolutePrestate(ctx context.Context, trace types.TraceProvider, lo
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get the trace provider's absolute prestate: %w"
,
err
)
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
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get the onchain absolute prestate: %w"
,
err
)
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 {
...
@@ -181,7 +181,7 @@ func (s *stubGameState) Act(ctx context.Context) error {
return
s
.
actErr
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
return
s
.
status
,
nil
}
}
...
@@ -234,7 +234,7 @@ func newMockPrestateLoader(prestateError bool, prestate common.Hash) *mockLoader
...
@@ -234,7 +234,7 @@ func newMockPrestateLoader(prestateError bool, prestate common.Hash) *mockLoader
prestate
:
prestate
,
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
{
if
m
.
prestateError
{
return
common
.
Hash
{},
mockLoaderError
return
common
.
Hash
{},
mockLoaderError
}
}
...
...
op-challenger/game/fault/register.go
View file @
757e8e43
...
@@ -12,8 +12,8 @@ import (
...
@@ -12,8 +12,8 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/types"
"github.com/ethereum-optimism/optimism/op-challenger/game/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"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/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
)
)
...
@@ -33,7 +33,7 @@ func RegisterGameTypes(
...
@@ -33,7 +33,7 @@ func RegisterGameTypes(
m
metrics
.
Metricer
,
m
metrics
.
Metricer
,
cfg
*
config
.
Config
,
cfg
*
config
.
Config
,
txMgr
txmgr
.
TxManager
,
txMgr
txmgr
.
TxManager
,
client
bind
.
ContractCaller
,
client
*
ethclient
.
Client
,
)
{
)
{
if
cfg
.
TraceTypeEnabled
(
config
.
TraceTypeCannon
)
{
if
cfg
.
TraceTypeEnabled
(
config
.
TraceTypeCannon
)
{
resourceCreator
:=
func
(
addr
common
.
Address
,
gameDepth
uint64
,
dir
string
)
(
faultTypes
.
TraceProvider
,
faultTypes
.
OracleUpdater
,
error
)
{
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