Skip to content

[DRAFT, DO NOT MERGE] chore(genesis): activate senderBlacklist fork on testnet at block 94550000#144

Draft
lockchainco wants to merge 1 commit into
testnetfrom
feature/testnet-senderBlacklist-activation
Draft

[DRAFT, DO NOT MERGE] chore(genesis): activate senderBlacklist fork on testnet at block 94550000#144
lockchainco wants to merge 1 commit into
testnetfrom
feature/testnet-senderBlacklist-activation

Conversation

@lockchainco
Copy link
Copy Markdown
Contributor

⚠️ DRAFT — DO NOT MERGE UNTIL BINARIES ARE ROLLED

This is the operational follow-up to the merged code PR #143. Sets the activation block for the senderBlacklist consensus fork on testnet.

Setting Value
Fork senderBlacklist
Genesis file chain/public-configs/genesis-testnet.json
Activation block 94,550,000
Current testnet head ~94,498,427
Block-margin ~52,000 (~28 hours at testnet block rate)

⛔ Hard rollout prerequisite — binary-first, then genesis

server.go performs a strict AllForksEnabled membership check at startup. Any validator running an unpatched binary against a genesis carrying senderBlacklist will hard-error with:

fork is not available: senderBlacklist

and refuse to start. So this PR can only safely merge after all testnet validators are on the patched binary (commit 8e3a6963 on testnet branch).

Operational checklist (for the user — driven manually)

  • Build patched image: publish hydral1/hydragon-docker:patched-2026-05-15 (or similar tag) containing the merged testnet branch.
  • Coordinate with external testnet validators: testnet has ~7 peers per validator including non-local nodes — those operators need the same image.
  • Roll containers: restart every testnet validator on the new image. Verify peering + block production on all 5 local containers + external validators.
  • Confirm rollout health for ~1 hour before merging this PR.
  • Merge this PR: testnet validators redeploy with the new genesis-testnet.json. The activation block (94,550,000) is still in the future, so behaviour stays unchanged until then.
  • Observe at activation: monitor the patched verifier logs for rejected transaction from consensus-blacklisted sender around block 94,550,000 and beyond. Verify no chain halt, no fork-off, control wallets still mining.
  • ≥1 day observation past activation before promoting to mainnet (PR [MAINNET — DO NOT MERGE WITHOUT USER SIGNOFF] feat(consensus): senderBlacklist fork #142).

2/3 invariant reminder

Once the fork is active, if the patched fraction of the active validator set drops below 2/3, the chain halts (no quorum on any block containing a blacklisted-sender tx that an unpatched proposer keeps including). This is by design — better halt than admit. Avoid pulling patched validators out of the set post-activation.

🤖 Generated with Claude Code

…50000

Follow-up to the testnet code PR #143 (merged). Sets the activation block
for the senderBlacklist consensus fork. Current testnet head ~94,498,427
+ ~52,000 blocks = ~28 hours of margin at testnet block rate.

DO NOT MERGE UNTIL ALL TESTNET VALIDATORS ARE ON THE PATCHED BINARY.
server.go performs a strict AllForksEnabled membership check on every
genesis fork name at startup; any validator on the old binary against
this genesis hard-errors with `fork is not available: senderBlacklist`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant