Repository navigation
feat(cmd): add node-mode bootnode - #5690
Merged
Merged
Conversation
Bootnodes can be configured with node-mode: bootnode instead of node-mode: full plus the bootnode-mode option. It resolves to the same node as before, full mode with bootnode-mode set, so nothing changes on the network. A bootnode requires an RPC endpoint, implies no swap, chequebook or storage incentives, and warns when storage incentives are enabled, since it never runs them. bootnode-mode is deprecated. It keeps working in configs without node-mode, where the migration warning now lists node-mode=bootnode, and next to node-mode: full, where it logs a deprecation warning.
akrem-chabchoub
approved these changes
Nov 10, 2026
martinconic
requested review from
acud,
aloknerurkar,
gacevicljubisa and
sbackend123
November 10, 2026 15:54
gacevicljubisa
approved these changes
Nov 11, 2026
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.
Checklist
Description
Closes #5689. Follow-up to #5596, proposed by @gacevicljubisa there.
Bootnodes can now be configured with
node-mode: bootnodeinstead ofnode-mode: fullplus the separatebootnode-modeoption. Like #5596, this changes configuration only:node-mode: bootnoderesolves to exactly the node thatfull-node: true+bootnode-mode: truegives today (full mode with bootnode mode set), so nothing changes on the network. No code underpkg/changes;/nodekeeps reportingbeeMode: fullfor bootnodes.node-mode: bootnodeswap-enable: trueis set, and chequebook follows swap, as for bootnodes today.storage-incentives-enable: trueis accepted with a warning that it has no effect on a bootnode.reserve-capacity-doublingis passed through unchanged, as today: it is not unused on a bootnode (NewBeerange-checks it, derives the push-sync receipt tolerance from it and passes it to staking).bootnode-mode: falseis overridden, with a warning.bootnode-modeis deprecated, not removed.node-mode(legacy),full-node: true+bootnode-mode: truekeeps working. The migration warning now reportsnode_mode=bootnodeand listsset=[node-mode=bootnode],remove=[full-node, bootnode-mode].node-mode: full+bootnode-mode: truekeeps working as a bootnode and logs thatbootnode-modeis deprecated in favor ofnode-mode: bootnode.--bootnode-modeflag is marked deprecated, like--full-node.Packaging: the four
bee.yamlvariants, the Docker env template and the Docker README documentbootnode, markbootnode-modedeprecated, and list bootnodes under the RPC requirement.Motivation and Context
A bootnode is effectively its own mode: full mode exempts it from the options it implies, and
bootnode-modeis only valid together with full mode. Making it anode-modevalue lets operators say what they run in one option. Landing it before the release that shipsnode-modeavoids migrating bootnode configs twice (first tonode-mode: full+bootnode-mode, then tonode-mode: bootnode).Related Issue
node-mode: full+bootnode-mode: true(with the deprecation warning) and can move tonode-mode: bootnodeas a follow-up.Test plan
TestResolveNodeModeandTestResolveNodeModeWithBoundFlagscovernode-mode: bootnode: implied defaults, case-insensitive value, missing RPC endpoint, swap with chequebook following it, chequebook without swap rejected, verification without swap, explicitbootnode-mode: false, storage incentives and reserve doubling.TestResolveNodeModeWarningsasserts the deprecation warning fornode-mode: full+bootnode-mode, the bootnode warnings, and the legacy migration (node_mode=bootnode,set/removelists).TestNodeModeBootnodeMatchesFullBootnoderesolvesnode-mode: bootnodeandnode-mode: full+bootnode-mode: trueover every combination of RPC, swap, chequebook, incentives, verification and reserve doubling (216) and requires identical results or identical errors.TestLegacyMigrationPreservesBehaviornow also variesbootnode-mode(unset, true, false) andreserve-capacity-doubling: across 1944 legacy combinations, every config that starts (504) runs the same after applying the migration warning, and the rejected ones match the pre-node-mode rules.node-mode: bootnoderows change (previously an invalid value); 168 other rows change only their error message (the two improved bootnode messages).blockchain-rpckeys) andBEE_*environment variables checked through the real config pipeline;bee startsmoke tests withnode-mode: bootnode, the deprecated alias and a legacy bootnode.go vet ./..., golangci-lint v2.15.0 (0 issues),make build,make check-whitespaceandmake testpass.AI Disclosure