From 294a6fc0335dcb24d81e7f025d84f15f9cc53515 Mon Sep 17 00:00:00 2001 From: Andreas Bigger <abigger87@gmail.com> Date: Wed, 2 Aug 2023 18:32:50 -0400 Subject: [PATCH] parent 58a2d8945e65caf8a5ccd588a33bdd60851fe11d author Andreas Bigger <abigger87@gmail.com> 1691015570 -0400 committer Andreas Bigger <abigger87@gmail.com> 1691404554 -0400 Wire up the Challenger preimage loading. --- op-challenger/fault/agent.go | 15 ++++++++++++++- op-challenger/fault/service.go | 5 ++--- op-challenger/fault/solver/solver.go | 6 ++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/op-challenger/fault/agent.go b/op-challenger/fault/agent.go index 2724f5d41..9deb45894 100644 --- a/op-challenger/fault/agent.go +++ b/op-challenger/fault/agent.go @@ -23,16 +23,18 @@ type Agent struct { solver *solver.Solver loader Loader responder Responder + updater types.OracleUpdater maxDepth int agreeWithProposedOutput bool log log.Logger } -func NewAgent(loader Loader, maxDepth int, trace types.TraceProvider, responder Responder, agreeWithProposedOutput bool, log log.Logger) *Agent { +func NewAgent(loader Loader, maxDepth int, trace types.TraceProvider, responder Responder, updater types.OracleUpdater, agreeWithProposedOutput bool, log log.Logger) *Agent { return &Agent{ solver: solver.NewSolver(maxDepth, trace), loader: loader, responder: responder, + updater: updater, maxDepth: maxDepth, agreeWithProposedOutput: agreeWithProposedOutput, log: log, @@ -132,6 +134,17 @@ func (a *Agent) step(ctx context.Context, claim types.Claim, game types.Game) er return nil } + oracleData, err := a.solver.GetOracleData(ctx, claim) + if err != nil { + a.log.Debug("Failed to get oracle data", "err", err) + return nil + } + + a.log.Info("Updating oracle data", "oracleKey", oracleData.OracleKey, "oracleData", oracleData.OracleData) + if err := a.updater.UpdateOracle(ctx, *oracleData); err != nil { + return fmt.Errorf("failed to load oracle data: %w", err) + } + a.log.Info("Attempting step", "claim_depth", claim.Depth(), "maxDepth", a.maxDepth) step, err := a.solver.AttemptStep(ctx, claim, agreeWithClaimLevel) if err != nil { diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go index d1bb39f32..5d1d00f35 100644 --- a/op-challenger/fault/service.go +++ b/op-challenger/fault/service.go @@ -64,8 +64,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se } // newTypedService creates a new Service from a provided trace provider. -func newTypedService(ctx context.Context, logger log.Logger, cfg *config.Config, client *ethclient.Client, provider types.TraceProvider, uploader types.OracleUpdater, txMgr txmgr.TxManager) (*service, error) { - +func newTypedService(ctx context.Context, logger log.Logger, cfg *config.Config, client *ethclient.Client, provider types.TraceProvider, updater types.OracleUpdater, txMgr txmgr.TxManager) (*service, error) { contract, err := bindings.NewFaultDisputeGameCaller(cfg.GameAddress, client) if err != nil { return nil, fmt.Errorf("failed to bind the fault dispute game contract: %w", err) @@ -83,7 +82,7 @@ func newTypedService(ctx context.Context, logger log.Logger, cfg *config.Config, return nil, fmt.Errorf("failed to bind the fault contract: %w", err) } - agent := NewAgent(loader, cfg.GameDepth, provider, responder, cfg.AgreeWithProposedOutput, gameLogger) + agent := NewAgent(loader, cfg.GameDepth, provider, responder, updater, cfg.AgreeWithProposedOutput, gameLogger) return &service{ agent: agent, diff --git a/op-challenger/fault/solver/solver.go b/op-challenger/fault/solver/solver.go index 78cbb729a..11b5e906d 100644 --- a/op-challenger/fault/solver/solver.go +++ b/op-challenger/fault/solver/solver.go @@ -28,6 +28,12 @@ func NewSolver(gameDepth int, traceProvider types.TraceProvider) *Solver { } } +// GetOracleData returns the oracle data for the provided claim. +// It passes through to the [TraceProvider] by finding the trace index for the claim. +func (s *Solver) GetOracleData(ctx context.Context, claim types.Claim) (*types.PreimageOracleData, error) { + return s.trace.GetOracleData(ctx, claim.TraceIndex(s.gameDepth)) +} + // NextMove returns the next move to make given the current state of the game. func (s *Solver) NextMove(ctx context.Context, claim types.Claim, agreeWithClaimLevel bool) (*types.Claim, error) { if agreeWithClaimLevel { -- 2.23.0