You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Both validator/entrypoint.sh and beacon-chain/entrypoint.sh build their argv as a single unquoted string (FLAGS="…" + exec lighthouse $FLAGS). That pattern silently breaks on any flag value that contains whitespace or shell metacharacters, because the shell word-splits the unquoted expansion.
#61 ("Allow graffiti to have spaces") is a localized patch: it pulls --graffiti out of the FLAGS string and passes it separately. That fixes the immediate symptom for --graffiti only and leaves the underlying footgun in place for every other flag (and for any future flag we add) in both entrypoints.
Proposed approach
Replace the FLAGS="…" / exec lighthouse $FLAGS pattern with a set -- based argv builder, then exec with "$@".
Supersedes the local workaround introduced by Allow graffiti to have spaces #61 — the line exec lighthouse $FLAGS --graffiti "$VALID_GRAFFITI" can be reverted once the validator refactor lands.
Cross-client consistency ⚠️
The same FLAGS="…" + exec … $FLAGS anti-pattern exists in every DAppNode consensus client entrypoint — both validator/entrypoint.sh and beacon-chain/entrypoint.sh:
Repo
validator/entrypoint.sh
beacon-chain/entrypoint.sh
dappnode/DAppNodePackage-lighthouse-generic
yes
yes
dappnode/DAppNodePackage-prysm-generic
yes
yes
dappnode/DAppNodePackage-teku-generic
yes
yes
dappnode/DAppNodePackage-lodestar-generic
yes
yes
dappnode/DAppNodePackage-nimbus-generic
yes
yes
To keep operator-facing behavior identical across clients, the same set -- / exec "$@" $EXTRA_OPTS refactor must be replicated in every one of these entrypoints. This issue tracks the lighthouse-side fix (validator + beacon-chain); each sibling repo should get its own linked issue with the same body so the refactor lands consistently.
In each sibling repo (prysm, teku, lodestar, nimbus):
validator/entrypoint.sh
beacon-chain/entrypoint.sh
(One PR per repo is fine; the goal is that all five clients ship the same argv-construction pattern.)
Acceptance criteria
validator/entrypoint.sh builds its argv via set -- and uses exec lighthouse "$@" $MEVBOOST_FLAG $EXTRA_OPTS.
beacon-chain/entrypoint.sh builds its argv via set -- and uses exec lighthouse "$@" $CHECKPOINT_SYNC_FLAG $MEVBOOST_FLAG $EXTRA_OPTS.
All flag values are quoted; --graffiti "$VALID_GRAFFITI" round-trips spaces.
MEVBOOST_FLAG, CHECKPOINT_SYNC_FLAG, and EXTRA_OPTS remain intentionally unquoted (multi-token, as today) with # shellcheck disable=SC2086.
The PR 61 local workaround (exec lighthouse $FLAGS --graffiti "…") is removed since it is no longer needed.
sync-test workflow stays green.
Echo lines for the launched flags are updated to reflect the new argv builder.
The same refactor is mirrored in the validator/entrypoint.sh and beacon-chain/entrypoint.sh of: dappnode/DAppNodePackage-prysm-generic, dappnode/DAppNodePackage-teku-generic, dappnode/DAppNodePackage-lodestar-generic, dappnode/DAppNodePackage-nimbus-generic.
Sibling repos to mirror this in: dappnode/DAppNodePackage-prysm-generic, dappnode/DAppNodePackage-teku-generic, dappnode/DAppNodePackage-lodestar-generic, dappnode/DAppNodePackage-nimbus-generic
Summary
Both
validator/entrypoint.shandbeacon-chain/entrypoint.shbuild their argv as a single unquoted string (FLAGS="…"+exec lighthouse $FLAGS). That pattern silently breaks on any flag value that contains whitespace or shell metacharacters, because the shell word-splits the unquoted expansion.#61 ("Allow graffiti to have spaces") is a localized patch: it pulls
--graffitiout of theFLAGSstring and passes it separately. That fixes the immediate symptom for--graffitionly and leaves the underlying footgun in place for every other flag (and for any future flag we add) in both entrypoints.Proposed approach
Replace the
FLAGS="…"/exec lighthouse $FLAGSpattern with aset --based argv builder, then exec with"$@".validator/entrypoint.shbeacon-chain/entrypoint.shThis:
MEVBOOST_FLAG,CHECKPOINT_SYNC_FLAG, andEXTRA_OPTSintentionally unquoted, matching today's multi-token behavior.exec lighthouse $FLAGS --graffiti "$VALID_GRAFFITI"can be reverted once the validator refactor lands.Cross-client consistency⚠️
The same
FLAGS="…"+exec … $FLAGSanti-pattern exists in every DAppNode consensus client entrypoint — bothvalidator/entrypoint.shandbeacon-chain/entrypoint.sh:validator/entrypoint.shbeacon-chain/entrypoint.shdappnode/DAppNodePackage-lighthouse-genericdappnode/DAppNodePackage-prysm-genericdappnode/DAppNodePackage-teku-genericdappnode/DAppNodePackage-lodestar-genericdappnode/DAppNodePackage-nimbus-genericTo keep operator-facing behavior identical across clients, the same
set --/exec "$@" $EXTRA_OPTSrefactor must be replicated in every one of these entrypoints. This issue tracks the lighthouse-side fix (validator + beacon-chain); each sibling repo should get its own linked issue with the same body so the refactor lands consistently.Scope
In this repo:
In each sibling repo (
prysm,teku,lodestar,nimbus):validator/entrypoint.shbeacon-chain/entrypoint.sh(One PR per repo is fine; the goal is that all five clients ship the same argv-construction pattern.)
Acceptance criteria
validator/entrypoint.shbuilds its argv viaset --and usesexec lighthouse "$@" $MEVBOOST_FLAG $EXTRA_OPTS.beacon-chain/entrypoint.shbuilds its argv viaset --and usesexec lighthouse "$@" $CHECKPOINT_SYNC_FLAG $MEVBOOST_FLAG $EXTRA_OPTS.--graffiti "$VALID_GRAFFITI"round-trips spaces.MEVBOOST_FLAG,CHECKPOINT_SYNC_FLAG, andEXTRA_OPTSremain intentionally unquoted (multi-token, as today) with# shellcheck disable=SC2086.exec lighthouse $FLAGS --graffiti "…") is removed since it is no longer needed.sync-testworkflow stays green.validator/entrypoint.shandbeacon-chain/entrypoint.shof:dappnode/DAppNodePackage-prysm-generic,dappnode/DAppNodePackage-teku-generic,dappnode/DAppNodePackage-lodestar-generic,dappnode/DAppNodePackage-nimbus-generic.References
dappnode/DAppNodePackage-prysm-generic,dappnode/DAppNodePackage-teku-generic,dappnode/DAppNodePackage-lodestar-generic,dappnode/DAppNodePackage-nimbus-generic