Commit 4ca13882 authored by Inphi's avatar Inphi Committed by GitHub

op-program: fpp-verify in-process for deterministic exec (#8928)

* op-program: fpp-verify in-process for deterministic exec

* fix offline run settings
parent e3f1e07b
...@@ -12,7 +12,6 @@ import ( ...@@ -12,7 +12,6 @@ import (
"github.com/ethereum-optimism/optimism/op-node/chaincfg" "github.com/ethereum-optimism/optimism/op-node/chaincfg"
preimage "github.com/ethereum-optimism/optimism/op-preimage" preimage "github.com/ethereum-optimism/optimism/op-preimage"
cl "github.com/ethereum-optimism/optimism/op-program/client" cl "github.com/ethereum-optimism/optimism/op-program/client"
"github.com/ethereum-optimism/optimism/op-program/client/driver"
"github.com/ethereum-optimism/optimism/op-program/host/config" "github.com/ethereum-optimism/optimism/op-program/host/config"
"github.com/ethereum-optimism/optimism/op-program/host/flags" "github.com/ethereum-optimism/optimism/op-program/host/flags"
"github.com/ethereum-optimism/optimism/op-program/host/kvstore" "github.com/ethereum-optimism/optimism/op-program/host/kvstore"
...@@ -44,13 +43,10 @@ func Main(logger log.Logger, cfg *config.Config) error { ...@@ -44,13 +43,10 @@ func Main(logger log.Logger, cfg *config.Config) error {
return PreimageServer(ctx, logger, cfg, preimageChan, hinterChan) return PreimageServer(ctx, logger, cfg, preimageChan, hinterChan)
} }
if err := FaultProofProgram(ctx, logger, cfg); errors.Is(err, driver.ErrClaimNotValid) { if err := FaultProofProgram(ctx, logger, cfg); err != nil {
log.Crit("Claim is invalid", "err", err)
} else if err != nil {
return err return err
} else {
log.Info("Claim successfully verified")
} }
log.Info("Claim successfully verified")
return nil return nil
} }
......
...@@ -6,15 +6,20 @@ import ( ...@@ -6,15 +6,20 @@ import (
"fmt" "fmt"
"math/big" "math/big"
"os" "os"
"os/exec"
"path/filepath" "path/filepath"
"strings" "strings"
"time"
"github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-program/chainconfig"
"github.com/ethereum-optimism/optimism/op-program/host"
config "github.com/ethereum-optimism/optimism/op-program/host/config"
oplog "github.com/ethereum-optimism/optimism/op-service/log"
"github.com/ethereum-optimism/optimism/op-service/sources"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "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/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
) )
...@@ -127,30 +132,44 @@ func Run(l1RpcUrl string, l1RpcKind string, l2RpcUrl string, l2OracleAddr common ...@@ -127,30 +132,44 @@ func Run(l1RpcUrl string, l1RpcKind string, l2RpcUrl string, l2OracleAddr common
"--l2.blocknumber", l2BlockNumber.String(), "--l2.blocknumber", l2BlockNumber.String(),
} }
argsStr := strings.Join(args, " ") argsStr := strings.Join(args, " ")
// args.txt is used by run-goerli-verify job for offline verification in CI
if err := os.WriteFile(filepath.Join(dataDir, "args.txt"), []byte(argsStr), 0644); err != nil { if err := os.WriteFile(filepath.Join(dataDir, "args.txt"), []byte(argsStr), 0644); err != nil {
fmt.Printf("Could not write args: %v", err) fmt.Printf("Could not write args: %v", err)
os.Exit(1) os.Exit(1)
} }
fmt.Printf("Configuration: %s\n", argsStr) fmt.Printf("Configuration: %s\n", argsStr)
logger := oplog.DefaultCLIConfig()
logger.Level = log.LvlDebug
rollupCfg, err := rollup.LoadOPStackRollupConfig(chainconfig.OPGoerliChainConfig.ChainID.Uint64())
if err != nil {
return fmt.Errorf("failed to load rollup config: %w", err)
}
offlineCfg := config.Config{
Rollup: rollupCfg,
DataDir: dataDir,
L2ChainConfig: chainconfig.OPGoerliChainConfig,
L2Head: l2Head,
L2OutputRoot: agreedOutput.OutputRoot,
L2Claim: l2Claim,
L2ClaimBlockNumber: l2BlockNumber.Uint64(),
L1Head: l1Head,
}
onlineCfg := offlineCfg
onlineCfg.L1URL = l1RpcUrl
onlineCfg.L2URL = l2RpcUrl
onlineCfg.L1RPCKind = sources.RPCProviderKind(l1RpcKind)
fmt.Println("Running in online mode") fmt.Println("Running in online mode")
err = runFaultProofProgram(ctx, append(args, "--l1", l1RpcUrl, "--l2", l2RpcUrl, "--l1.rpckind", l1RpcKind)) err = host.Main(oplog.NewLogger(os.Stderr, logger), &onlineCfg)
if err != nil { if err != nil {
return fmt.Errorf("online mode failed: %w", err) return fmt.Errorf("online mode failed: %w", err)
} }
fmt.Println("Running in offline mode") fmt.Println("Running in offline mode")
err = runFaultProofProgram(ctx, args) err = host.Main(oplog.NewLogger(os.Stderr, logger), &offlineCfg)
if err != nil { if err != nil {
return fmt.Errorf("offline mode failed: %w", err) return fmt.Errorf("offline mode failed: %w", err)
} }
return nil return nil
} }
func runFaultProofProgram(ctx context.Context, args []string) error {
ctx, cancel := context.WithTimeout(ctx, 60*time.Minute)
defer cancel()
cmd := exec.CommandContext(ctx, "./bin/op-program", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
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