From b7fb2b4258a9a7ce73e6d62fcabd9ed0b9ee0b78 Mon Sep 17 00:00:00 2001 From: zeroXbrock <2791467+zeroXbrock@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:28:11 -0700 Subject: [PATCH 1/3] add --contender.target, spam 'op-geth' in opstack instead of 'el' --- main.go | 7 +++++-- playground/components.go | 14 ++++++++++++-- playground/manifest.go | 14 +++++++++++++- playground/recipe_buildernet.go | 6 +----- playground/recipe_l1.go | 6 +----- playground/recipe_opstack.go | 7 +++---- 6 files changed, 35 insertions(+), 19 deletions(-) diff --git a/main.go b/main.go index 144fa24..1ddeffb 100644 --- a/main.go +++ b/main.go @@ -32,6 +32,7 @@ var disableLogs bool var platform string var contenderEnabled bool var contenderArgs []string +var contenderTarget string var rootCmd = &cobra.Command{ Use: "playground", @@ -183,6 +184,7 @@ func main() { recipeCmd.Flags().StringVar(&platform, "platform", "", "docker platform to use") recipeCmd.Flags().BoolVar(&contenderEnabled, "contender", false, "spam nodes with contender") recipeCmd.Flags().StringArrayVar(&contenderArgs, "contender.arg", []string{}, "add/override contender CLI flags") + recipeCmd.Flags().StringVar(&contenderTarget, "contender.target", "", "override the node that contender spams -- accepts names like \"el\"") cookCmd.AddCommand(recipeCmd) } @@ -232,8 +234,9 @@ func runIt(recipe playground.Recipe) error { svcManager := recipe.Apply(&playground.ExContext{ LogLevel: logLevel, Contender: &playground.ContenderContext{ - Enabled: contenderEnabled, - ExtraArgs: contenderArgs, + Enabled: contenderEnabled, + ExtraArgs: contenderArgs, + TargetChain: contenderTarget, }, }, artifacts) if err := svcManager.Validate(); err != nil { diff --git a/playground/components.go b/playground/components.go index 753ad4f..85ab3fe 100644 --- a/playground/components.go +++ b/playground/components.go @@ -813,7 +813,8 @@ func (n *nullService) Name() string { } type Contender struct { - ExtraArgs []string + ExtraArgs []string + TargetChain string // defaults to "el", may be any chain name in a recipe's spec } func (c *Contender) Name() string { @@ -854,10 +855,16 @@ func (c *Contender) Run(service *Service, ctx *ExContext) { val string hasVal bool } + + targetChain := "el" + if c.TargetChain != "" { + targetChain = c.TargetChain + } + defaults := []opt{ {name: "-l"}, {name: "--min-balance", val: "10 ether", hasVal: true}, - {name: "-r", val: Connect("el", "http"), hasVal: true}, + {name: "-r", val: Connect(targetChain, "http"), hasVal: true}, {name: "--tps", val: "20", hasVal: true}, } @@ -888,6 +895,9 @@ func (c *Contender) Run(service *Service, ctx *ExContext) { if flag == "-l" && seen["--loops"] { return true } + if flag == "-r" && seen["--rpc-url"] { + return true + } return false } diff --git a/playground/manifest.go b/playground/manifest.go index ee49f9a..38fb23b 100644 --- a/playground/manifest.go +++ b/playground/manifest.go @@ -74,8 +74,11 @@ type ContenderContext struct { // Run `contender spam` automatically once all playground services are running. Enabled bool - // Provide additional args to contender's CLI + // Provide additional args to contender's CLI. ExtraArgs []string + + // Override the default target chain for contender to spam. + TargetChain string } // Execution context @@ -603,3 +606,12 @@ func ReadManifest(outputFolder string) (*Manifest, error) { } return &manifestData, nil } + +func (svcManager *Manifest) RunContenderIfEnabled() { + if svcManager.ctx.Contender.Enabled { + svcManager.AddService("contender", &Contender{ + ExtraArgs: svcManager.ctx.Contender.ExtraArgs, + TargetChain: svcManager.ctx.Contender.TargetChain, + }) + } +} diff --git a/playground/recipe_buildernet.go b/playground/recipe_buildernet.go index e5216fb..d205095 100644 --- a/playground/recipe_buildernet.go +++ b/playground/recipe_buildernet.go @@ -59,11 +59,7 @@ func (b *BuilderNetRecipe) Apply(ctx *ExContext, artifacts *Artifacts) *Manifest }) } - if ctx.Contender.Enabled { - svcManager.AddService("contender", &Contender{ - ExtraArgs: ctx.Contender.ExtraArgs, - }) - } + svcManager.RunContenderIfEnabled() return svcManager } diff --git a/playground/recipe_l1.go b/playground/recipe_l1.go index 9d4cfb5..b45c2b0 100644 --- a/playground/recipe_l1.go +++ b/playground/recipe_l1.go @@ -107,11 +107,7 @@ func (l *L1Recipe) Apply(ctx *ExContext, artifacts *Artifacts) *Manifest { }) } - if ctx.Contender.Enabled { - svcManager.AddService("contender", &Contender{ - ExtraArgs: ctx.Contender.ExtraArgs, - }) - } + svcManager.RunContenderIfEnabled() return svcManager } diff --git a/playground/recipe_opstack.go b/playground/recipe_opstack.go index 98cf50f..d0b1a0e 100644 --- a/playground/recipe_opstack.go +++ b/playground/recipe_opstack.go @@ -175,11 +175,10 @@ func (o *OpRecipe) Apply(ctx *ExContext, artifacts *Artifacts) *Manifest { MaxChannelDuration: o.batcherMaxChannelDuration, }) - if ctx.Contender.Enabled { - svcManager.AddService("contender", &Contender{ - ExtraArgs: ctx.Contender.ExtraArgs, - }) + if svcManager.ctx.Contender.TargetChain == "" { + svcManager.ctx.Contender.TargetChain = "op-geth" } + svcManager.RunContenderIfEnabled() return svcManager } From 65d937436e9556452d7238211ba55318e366fe4d Mon Sep 17 00:00:00 2001 From: zeroXbrock <2791467+zeroXbrock@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:55:20 -0700 Subject: [PATCH 2/3] move contender service conversion logic to components.go --- playground/components.go | 8 ++++++++ playground/manifest.go | 5 +---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/playground/components.go b/playground/components.go index 85ab3fe..085e29b 100644 --- a/playground/components.go +++ b/playground/components.go @@ -817,6 +817,14 @@ type Contender struct { TargetChain string // defaults to "el", may be any chain name in a recipe's spec } +// Converts a `ContenderContext` into a `Contender` service. `Enabled` is ignored. +func (cc *ContenderContext) Contender() *Contender { + return &Contender{ + ExtraArgs: cc.ExtraArgs, + TargetChain: cc.TargetChain, + } +} + func (c *Contender) Name() string { return "contender" } diff --git a/playground/manifest.go b/playground/manifest.go index 38fb23b..e06b9c9 100644 --- a/playground/manifest.go +++ b/playground/manifest.go @@ -609,9 +609,6 @@ func ReadManifest(outputFolder string) (*Manifest, error) { func (svcManager *Manifest) RunContenderIfEnabled() { if svcManager.ctx.Contender.Enabled { - svcManager.AddService("contender", &Contender{ - ExtraArgs: svcManager.ctx.Contender.ExtraArgs, - TargetChain: svcManager.ctx.Contender.TargetChain, - }) + svcManager.AddService("contender", svcManager.ctx.Contender.Contender()) } } From d27ad27a59053971c670665f54db49fb810ff194 Mon Sep 17 00:00:00 2001 From: zeroXbrock <2791467+zeroXbrock@users.noreply.github.com> Date: Thu, 14 Aug 2025 13:25:17 -0700 Subject: [PATCH 3/3] prevent "chain is indexing" error in contender --- playground/components.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/playground/components.go b/playground/components.go index 085e29b..2ea62bf 100644 --- a/playground/components.go +++ b/playground/components.go @@ -940,4 +940,7 @@ func (c *Contender) Run(service *Service, ctx *ExContext) { WithArgs(args...). DependsOnHealthy("beacon") + if c.TargetChain == "op-geth" { + service.DependsOnRunning("op-node") + } }