55
66 "github.com/ethereum-optimism/optimism/op-e2e/actions/helpers"
77 "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/fakebeacon"
8- "github.com/ethereum-optimism/optimism/op-node/rollup"
98 "github.com/ethereum-optimism/optimism/op-program/host"
109 hostcommon "github.com/ethereum-optimism/optimism/op-program/host/common"
1110 "github.com/ethereum-optimism/optimism/op-program/host/config"
@@ -14,7 +13,6 @@ import (
1413 "github.com/ethereum-optimism/optimism/op-service/client"
1514 "github.com/ethereum-optimism/optimism/op-service/sources"
1615 "github.com/ethereum/go-ethereum/common"
17- "github.com/ethereum/go-ethereum/core"
1816 "github.com/ethereum/go-ethereum/log"
1917 "github.com/stretchr/testify/require"
2018)
@@ -26,33 +24,50 @@ type L2 interface {
2624 RollupClient () * sources.RollupClient
2725}
2826
29- func RunFaultProofProgram (t helpers.Testing , logger log.Logger , l1 * helpers.L1Miner , l2 * helpers.L2Verifier , l2Eng * helpers.L2Engine , l2ChainConfig * core.Genesis , l2ClaimBlockNum uint64 , checkResult CheckResult , fixtureInputParams ... FixtureInputParam ) {
30- // Fetch the pre and post output roots for the fault proof.
31- l2PreBlockNum := l2ClaimBlockNum - 1
32- if l2ClaimBlockNum == 0 {
33- // If we are at genesis, we assert that we don't move the chain at all.
34- l2PreBlockNum = 0
27+ func WithPreInteropDefaults (t helpers.Testing , l2ClaimBlockNum uint64 , l2 * helpers.L2Verifier , l2Eng * helpers.L2Engine ) FixtureInputParam {
28+ return func (f * FixtureInputs ) {
29+ // Fetch the pre and post output roots for the fault proof.
30+ l2PreBlockNum := l2ClaimBlockNum - 1
31+ if l2ClaimBlockNum == 0 {
32+ // If we are at genesis, we assert that we don't move the chain at all.
33+ l2PreBlockNum = 0
34+ }
35+ rollupClient := l2 .RollupClient ()
36+ preRoot , err := rollupClient .OutputAtBlock (t .Ctx (), l2PreBlockNum )
37+ require .NoError (t , err )
38+ claimRoot , err := rollupClient .OutputAtBlock (t .Ctx (), l2ClaimBlockNum )
39+ require .NoError (t , err )
40+
41+ f .L2BlockNumber = l2ClaimBlockNum
42+ f .L2Claim = common .Hash (claimRoot .OutputRoot )
43+ f .L2Head = preRoot .BlockRef .Hash
44+ f .L2OutputRoot = common .Hash (preRoot .OutputRoot )
45+ f .L2ChainID = l2 .RollupCfg .L2ChainID .Uint64 ()
46+
47+ f .L2Sources = []* FaultProofProgramL2Source {
48+ {
49+ Node : l2 ,
50+ Engine : l2Eng ,
51+ ChainConfig : l2Eng .L2Chain ().Config (),
52+ },
53+ }
3554 }
36- preRoot , err := l2 .RollupClient ().OutputAtBlock (t .Ctx (), l2PreBlockNum )
37- require .NoError (t , err )
38- claimRoot , err := l2 .RollupClient ().OutputAtBlock (t .Ctx (), l2ClaimBlockNum )
39- require .NoError (t , err )
55+ }
56+
57+ func RunFaultProofProgram (t helpers.Testing , logger log.Logger , l1 * helpers.L1Miner , checkResult CheckResult , fixtureInputParams ... FixtureInputParam ) {
4058 l1Head := l1 .L1Chain ().CurrentBlock ()
4159
4260 fixtureInputs := & FixtureInputs {
43- L2BlockNumber : l2ClaimBlockNum ,
44- L2Claim : common .Hash (claimRoot .OutputRoot ),
45- L2Head : preRoot .BlockRef .Hash ,
46- L2OutputRoot : common .Hash (preRoot .OutputRoot ),
47- L2ChainID : l2 .RollupCfg .L2ChainID .Uint64 (),
48- L1Head : l1Head .Hash (),
61+ L1Head : l1Head .Hash (),
4962 }
5063 for _ , apply := range fixtureInputParams {
5164 apply (fixtureInputs )
5265 }
66+ require .Greater (t , len (fixtureInputs .L2Sources ), 0 , "Must specify at least one L2 source" )
5367
5468 // Run the fault proof program from the state transition from L2 block l2ClaimBlockNum - 1 -> l2ClaimBlockNum.
5569 workDir := t .TempDir ()
70+ var err error
5671 if IsKonaConfigured () {
5772 fakeBeacon := fakebeacon .NewBeacon (
5873 logger ,
@@ -63,29 +78,28 @@ func RunFaultProofProgram(t helpers.Testing, logger log.Logger, l1 *helpers.L1Mi
6378 require .NoError (t , fakeBeacon .Start ("127.0.0.1:0" ))
6479 defer fakeBeacon .Close ()
6580
66- err := RunKonaNative (t , workDir , l2 .RollupCfg , l1 .HTTPEndpoint (), fakeBeacon .BeaconAddr (), l2Eng .HTTPEndpoint (), * fixtureInputs )
81+ l2Source := fixtureInputs .L2Sources [0 ]
82+ err = RunKonaNative (t , workDir , l2Source .Node .RollupCfg , l1 .HTTPEndpoint (), fakeBeacon .BeaconAddr (), l2Source .Engine .HTTPEndpoint (), * fixtureInputs )
6783 checkResult (t , err )
6884 } else {
69- programCfg := NewOpProgramCfg (
70- t ,
71- l2 .RollupCfg ,
72- l2ChainConfig .Config ,
73- fixtureInputs ,
74- )
85+ programCfg := NewOpProgramCfg (fixtureInputs )
7586 withInProcessPrefetcher := hostcommon .WithPrefetcher (func (ctx context.Context , logger log.Logger , kv kvstore.KV , cfg * config.Config ) (hostcommon.Prefetcher , error ) {
7687 // Set up in-process L1 sources
77- l1Cl := l1 .L1Client ( t , l2 . RollupCfg )
88+ l1Cl := l1 .L1ClientSimple ( t )
7889 l1BlobFetcher := l1 .BlobSource ()
7990
8091 // Set up in-process L2 source
81- sources , err := prefetcher .NewRetryingL2Sources (ctx , logger , []* rollup.Config {l2 .RollupCfg }, []client.RPC {l2Eng .RPCClient ()}, nil )
92+ var rpcClients []client.RPC
93+ for _ , source := range fixtureInputs .L2Sources {
94+ rpcClients = append (rpcClients , source .Engine .RPCClient ())
95+ }
96+ sources , err := prefetcher .NewRetryingL2Sources (ctx , logger , programCfg .Rollups , rpcClients , nil )
8297 require .NoError (t , err , "failed to create L2 client" )
8398
8499 executor := host .MakeProgramExecutor (logger , programCfg )
85- return prefetcher .NewPrefetcher (logger , l1Cl , l1BlobFetcher , l2 . RollupCfg . L2ChainID . Uint64 () , sources , kv , executor , cfg .L2Head , cfg .AgreedPrestate ), nil
100+ return prefetcher .NewPrefetcher (logger , l1Cl , l1BlobFetcher , fixtureInputs . L2ChainID , sources , kv , executor , cfg .L2Head , cfg .AgreedPrestate ), nil
86101 })
87102 err = hostcommon .FaultProofProgram (t .Ctx (), logger , programCfg , withInProcessPrefetcher )
88103 checkResult (t , err )
89104 }
90- tryDumpTestFixture (t , err , t .Name (), l2 .RollupCfg , l2ChainConfig , * fixtureInputs , workDir )
91105}
0 commit comments