**What type of PR is this?** Bug fix **What does this PR do? Why is it needed?** **Before this PR:** When starting the node with the `--[semi-]supernode` flag with an already existing DB, the new value of the earliest available slot was set to the slot of the latest finalized checkpoint. ==> Between the latest finalized checkpoint and the slot where Prysm starts to actually sync (the justified checkpoint) after the reboot, Prysm advertises a higher `cgc` than it should. **With this PR:** If, at node start, the node needs to increase its `cgc`, then it uses the latest justified checkpoint (+ 1) for the new `eas`. **Which issues(s) does this PR fix?** - https://github.com/OffchainLabs/prysm/issues/16066 **Example of a test case:** 1. Start the node with an empty DB, without any validator connected. ``` [2026-01-09 13:38:21.77] DEBUG db: Custody info earliestAvailableSlot=2145952 groupCount=4 ``` 2. Try: ``` curl http://localhost:3500/eth/v1/beacon/blobs/2145952 | jq { "message": "Not found: the node does not custody enough data columns to reconstruct blobs - please start the beacon node with the `--semi-supernode` flag to ensure this call to succeed", "code": 404 } ``` ==> This is expected, since `cgc=4 < 64` 3. After a few epochs, add a few validators (< 64): ``` [2026-01-09 13:43:21.77] DEBUG db: Custody info earliestAvailableSlot=2146066 groupCount=10 ``` 4. Try: ``` curl http://localhost:3500/eth/v1/beacon/blobs/2146066 | jq { "message": "Not found: the node does not custody enough data columns to reconstruct blobs - please start the beacon node with the `--semi-supernode` flag to ensure this call to succeed", "code": 404 } ``` ==> This is expected, since `cgc=10 < 64` 5. After a few epochs, restart the node: ``` [2026-01-09 13:46:44.09] DEBUG db: Custody info earliestAvailableSlot=2146066 groupCount=10 ``` ==> OK (No change) 6. Restart the node with the `--semi-supernode` flag. ``` [2026-01-09 13:49:26.14] DEBUG db: Custody info earliestAvailableSlot=2146049 groupCount=64 ``` The `eas` goes backward which is expected, since the node restarts syncing from the latest justified checkpoint, which in this case is lower than the slot where we added validators during step `3.`. Try: ``` curl http://localhost:3500/eth/v1/beacon/blobs/2146049 | jq ==> OK ``` The whole `eas/cgc` advertisement management should probably be re-thinked, for example by using what the node actually has in its DB to decide what `eas/cgc` should be advertised. (With a particular attention to the full node case until https://github.com/OffchainLabs/prysm/issues/16065 is fixed.) However, this PR fixes the linked issue, so it's a good fix until a deeper redesign is done. **Acknowledgements** - [x] I have read [CONTRIBUTING.md](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md). - [x] I have included a uniquely named [changelog fragment file](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md#maintaining-changelogmd). - [x] I have added a description with sufficient context for reviewers to understand this PR. - [x] I have tested that my changes work as expected and I added a testing plan to the PR description (if applicable).
Prysm: An Ethereum Consensus Implementation Written in Go
📖 Overview
This is the core repository for Prysm, a Golang implementation of the Ethereum Consensus specification, developed by Offchain Labs.
See the Changelog for details of the latest releases and upcoming breaking changes.
🚀 Getting Started
A detailed set of installation and usage instructions as well as breakdowns of each individual component are available in the official documentation portal.
💬 Need help? Join our Discord Community for support.
🏆 Staking on Mainnet
To participate in staking, you can join the official Ethereum launchpad. The launchpad is the only recommended way to become a validator on mainnet.
🔍 Explore validator rewards/penalties:
🤝 Contributing
🔥 Branches
Prysm maintains two permanent branches:
master- This points to the latest stable release. It is ideal for most users.develop- This is used for development and contains the latest PRs. Developers should base their PRs on this branch.
🛠 Contribution Guide
Want to get involved? Check out our Contribution Guide to learn more!
📜 License
This project is licensed under the GNU General Public License v3.0.
