Commit 8c19065a authored by Park Changwan's avatar Park Changwan Committed by GitHub

op-challenger: Share providers across different asterisc game instances (#10314)

* op-challenger: Share providers across different asterisc game instances

Avoids loading the full state to extract the commitment for each individual game.

* Fix flag error
parent 8447d165
...@@ -437,7 +437,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro ...@@ -437,7 +437,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
if ctx.IsSet(AsteriscPreStatesURLFlag.Name) { if ctx.IsSet(AsteriscPreStatesURLFlag.Name) {
parsed, err := url.Parse(ctx.String(AsteriscPreStatesURLFlag.Name)) parsed, err := url.Parse(ctx.String(AsteriscPreStatesURLFlag.Name))
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid asterisc pre states url (%v): %w", ctx.String(CannonPreStatesURLFlag.Name), err) return nil, fmt.Errorf("invalid asterisc pre states url (%v): %w", ctx.String(AsteriscPreStatesURLFlag.Name), err)
} }
asteriscPreStatesURL = parsed asteriscPreStatesURL = parsed
} }
......
...@@ -209,6 +209,13 @@ func registerAsterisc( ...@@ -209,6 +209,13 @@ func registerAsterisc(
} else { } else {
prestateSource = prestates.NewSinglePrestateSource(cfg.AsteriscAbsolutePreState) prestateSource = prestates.NewSinglePrestateSource(cfg.AsteriscAbsolutePreState)
} }
prestateProviderCache := prestates.NewPrestateProviderCache(m, fmt.Sprintf("prestates-%v", gameType), func(prestateHash common.Hash) (faultTypes.PrestateProvider, error) {
prestatePath, err := prestateSource.PrestatePath(prestateHash)
if err != nil {
return nil, fmt.Errorf("required prestate %v not available: %w", prestateHash, err)
}
return asterisc.NewPrestateProvider(prestatePath), nil
})
playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) { playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) {
contract, err := contracts.NewFaultDisputeGameContract(ctx, m, game.Proxy, caller) contract, err := contracts.NewFaultDisputeGameContract(ctx, m, game.Proxy, caller)
if err != nil { if err != nil {
...@@ -218,11 +225,10 @@ func registerAsterisc( ...@@ -218,11 +225,10 @@ func registerAsterisc(
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to load prestate hash for game %v: %w", game.Proxy, err) return nil, fmt.Errorf("failed to load prestate hash for game %v: %w", game.Proxy, err)
} }
prestatePath, err := prestateSource.PrestatePath(requiredPrestatehash) asteriscPrestateProvider, err := prestateProviderCache.GetOrCreate(requiredPrestatehash)
if err != nil { if err != nil {
return nil, fmt.Errorf("required prestate %v not available for game %v: %w", requiredPrestatehash, game.Proxy, err) return nil, fmt.Errorf("required prestate %v not available for game %v: %w", requiredPrestatehash, game.Proxy, err)
} }
asteriscPrestateProvider := asterisc.NewPrestateProvider(prestatePath)
oracle, err := contract.GetOracle(ctx) oracle, err := contract.GetOracle(ctx)
if err != nil { if err != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment