|
| 1 | +package presets |
| 2 | + |
| 3 | +import ( |
| 4 | + "github.com/ethereum/go-ethereum/log" |
| 5 | + "github.com/stretchr/testify/require" |
| 6 | + |
| 7 | + "github.com/ethereum-optimism/optimism/op-devstack/devtest" |
| 8 | + "github.com/ethereum-optimism/optimism/op-devstack/dsl" |
| 9 | + "github.com/ethereum-optimism/optimism/op-devstack/shim" |
| 10 | + "github.com/ethereum-optimism/optimism/op-devstack/stack" |
| 11 | + "github.com/ethereum-optimism/optimism/op-devstack/stack/match" |
| 12 | + "github.com/ethereum-optimism/optimism/op-devstack/sysgo" |
| 13 | +) |
| 14 | + |
| 15 | +// TwoL2 represents a two-L2 setup without interop considerations. |
| 16 | +// It is useful for testing components which bridge multiple L2s without necessarily using interop. |
| 17 | +type TwoL2 struct { |
| 18 | + Log log.Logger |
| 19 | + T devtest.T |
| 20 | + ControlPlane stack.ControlPlane |
| 21 | + |
| 22 | + L1Network *dsl.L1Network |
| 23 | + L1EL *dsl.L1ELNode |
| 24 | + |
| 25 | + L2A *dsl.L2Network |
| 26 | + L2B *dsl.L2Network |
| 27 | + L2ACL *dsl.L2CLNode |
| 28 | + L2BCL *dsl.L2CLNode |
| 29 | +} |
| 30 | + |
| 31 | +func WithTwoL2() stack.CommonOption { |
| 32 | + return stack.MakeCommon(sysgo.DefaultTwoL2System(&sysgo.DefaultTwoL2SystemIDs{})) |
| 33 | +} |
| 34 | + |
| 35 | +func WithTwoL2Supernode() stack.CommonOption { |
| 36 | + return stack.MakeCommon(sysgo.DefaultSupernodeTwoL2System(&sysgo.DefaultTwoL2SystemIDs{})) |
| 37 | +} |
| 38 | + |
| 39 | +func NewTwoL2(t devtest.T) *TwoL2 { |
| 40 | + system := shim.NewSystem(t) |
| 41 | + orch := Orchestrator() |
| 42 | + orch.Hydrate(system) |
| 43 | + |
| 44 | + l1Net := system.L1Network(match.FirstL1Network) |
| 45 | + l2a := system.L2Network(match.Assume(t, match.L2ChainA)) |
| 46 | + l2b := system.L2Network(match.Assume(t, match.L2ChainB)) |
| 47 | + l2aCL := l2a.L2CLNode(match.Assume(t, match.WithSequencerActive(t.Ctx()))) |
| 48 | + l2bCL := l2b.L2CLNode(match.Assume(t, match.WithSequencerActive(t.Ctx()))) |
| 49 | + |
| 50 | + require.NotEqual(t, l2a.ChainID(), l2b.ChainID()) |
| 51 | + |
| 52 | + return &TwoL2{ |
| 53 | + Log: t.Logger(), |
| 54 | + T: t, |
| 55 | + ControlPlane: orch.ControlPlane(), |
| 56 | + L1Network: dsl.NewL1Network(l1Net), |
| 57 | + L1EL: dsl.NewL1ELNode(l1Net.L1ELNode(match.Assume(t, match.FirstL1EL))), |
| 58 | + L2A: dsl.NewL2Network(l2a, orch.ControlPlane()), |
| 59 | + L2B: dsl.NewL2Network(l2b, orch.ControlPlane()), |
| 60 | + L2ACL: dsl.NewL2CLNode(l2aCL, orch.ControlPlane()), |
| 61 | + L2BCL: dsl.NewL2CLNode(l2bCL, orch.ControlPlane()), |
| 62 | + } |
| 63 | +} |
0 commit comments