Reland OPENAUDIO_ prefixed env vars (reverts #197) - #271
Merged
Conversation
This re-applies #195 (reverted in #197). The handshake panic that prompted the original revert (`state.AppHash does not match AppHash after replay. Got E3B0..., expected .`) was caused by an unrelated state-sync bug: CometBFT's state.db could end up at height 0 while the app database had block records, producing the mismatch. That class of failure has since been fixed by #253 and related state-sync reliability work, so the env-var change is safe to bring back on top of current main. Changes since #195: - Keep state-sync defaults from #255 (Keep=2, BlockInterval=100000) - Carry forward #224's separate archive bucket DSN (now goes through env.String with AUDIUS_ARCHIVE_STORAGE_DRIVER_URL fallback) - Update pkg/uptime/uptime.go which post-revert added a `mustGetenv("nodeEndpoint")` call — read OPENAUDIO_NODE_ENDPOINT first with legacy fallback, drop the now-unused mustGetenv/getenvWithDefault - CLAUDE.md: keep the validator-node terminology from #264 and add the pkg/env helper list Legacy env vars (nodeEndpoint, delegatePrivateKey, dbUrl, audius_core_root_dir, spOwnerWallet, etc.) continue to work via fallback, so legacy creator / discovery node registrations are unchanged. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
On a legacy creator/discovery node, the bundled /env/${NETWORK}.env
declares OPENAUDIO_ defaults (e.g. OPENAUDIO_CORE_ROOT_DIR=/data/core).
If the operator only set the legacy name with a *different* value
(e.g. audius_core_root_dir=/data/bolt), the Go env helper would pick
the OPENAUDIO_ default and look at a path that has no chain data —
producing the CometBFT `state.AppHash does not match AppHash after
replay` panic that originally got #195 reverted.
Promote externally-set legacy keys to their OPENAUDIO_ counterparts
before source_env_file runs. source_env_file is a no-op for already-set
keys, so the legacy value wins; if the operator instead set the
OPENAUDIO_ name directly, that already-set value is left alone.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Re-lands #195 ("Add OPENAUDIO_ prefixed env vars for all configuration"), which was reverted in #197.
Why the original crash wasn't actually #195's fault
#197 was opened after legacy creator-node deployments panicked during CometBFT handshake:
```
panic: state.AppHash does not match AppHash after replay. Got E3B0..., expected .
```
That was a state-sync bug: CometBFT's state.db could end up at height 0 while the app DB already had block records (the very scenario the comment at `pkg/core/server/abci.go`'s state-sync restore block now warns about). It has since been fixed by #253 (state-sync snapshot reliability) and related work, so this can be safely re-applied on top of current main.
Changes vs the original #195 patch
Backward compatibility
Every legacy env var (`nodeEndpoint`, `delegatePrivateKey`, `delegateOwnerWallet`, `spOwnerWallet`, `dbUrl`, `audius_core_root_dir`, `ethProviderUrl`, `ethRegistryAddress`, `stateSync*`, `AUDIUS_STORAGE_DRIVER_URL`, etc.) continues to work via fallback. Legacy creator / discovery node registrations behave identically.
Test plan
🤖 Generated with Claude Code