A validator in Berachain is a participant responsible for proposing and attesting to new blocks, helping secure the network and maintain consensus. Validators stake a required amount of the network’s native token ($BERA) as collateral, which serves both as an economic incentive to behave honestly and as a mechanism for penalizing malicious behavior.Validators can operate independently with direct staking, or they can operate staking pools that allow community members to stake BERA through smart contracts and receive liquid shares (stBERA). For information about operating staking pools, see the Staking Pools documentation.Validators have several key responsibilities:
Proposing new blocks when selected
Attesting to blocks proposed by other validators
Participating in consensus by voting on the canonical chain
Maintaining network security through their staked tokens
The Validator’s Voting Power is the amount of $BERA they have deposited, rounded down to the nearest 10,000 BERA. Their Voting Power, as a proportion of the total Voting Power among all validators, is their probability of being selected to propose a block.
The Active Set is the limited group of validators currently participating in the consensus layer and proposing blocks. The current limit of validators in the active set is 69.To enter the active set, you must meet the minimum stake requirements. This requirement depends on whether the active set is full:
If the active set is not full, the minimum stake requirement is 250,000$BERA.
If the active set is full, the minimum stake requirement is 10,000$BERA more than the amount staked by the last validator in the active set.
It can take up to 3 epochs (192 blocks per epoch) for deposits to be processed and for a validator to be included in the active set.For step-by-step instructions on spinning up a validator, see the Become a Validator guide.
Berachain follows Proof-of-Stake (PoS) direct staking, which allows $BERA holders to directly stake their $BERA to a validator.The validator’s journey begins with a deposit transaction on the Execution Layer to the deposit contract at 0x4242424242424242424242424242424242424242. The deposit emits a custom deposit event.When a validator makes their first deposit, they define a Withdrawal Credentials Address. If funds are withdrawn from a validator, or if the validator is evicted from the active set, all funds are returned to this single address.This means that validators must communicate clearly with their delegators about how they will handle and manually return funds if the validator is removed from the active set.
Avoid staking to validators without knowing how they handle funds when a validator is removed from the active set.
The validator’s journey begins with a deposit transaction on the Execution Layer (via the Deposit Contract). Once this transaction is successful, beacon-kit nodes capture it and process it for signature verification.The initial deposit transaction establishes a connection between a validator’s Consensus Layer identity and its Execution Layer identity and decides the withdrawal address for the $BERA stake.
No Verification Delay: On the first deposit, the validator’s signature is fully verified (similar to ETH2), but deposits are not assessed until end of epoch. Subsequent deposits simply increase the validator’s balance (no additional signature verification is done).
Minimum Requirement: A total of 250,000 BERA is required for a validator to reach the Deposited state. (Multiple deposits can accumulate to this amount.)
Signature Verification: On the first deposit, the validator’s signature is fully verified. Subsequent deposits simply increase the validator’s balance.
Per-block deposit cap Up to 8192 deposits can land in a single block. With ~45,000 gas per deposit and a 30M gas block limit, the cap is unreachable in practice.
After remaining in the Deposited state for 1 epoch, the validator automatically moves to the Eligible state and becomes eligible for activation.
Once the validator enters the Deposited state at epoch N, the system marks it as eligible for the activation queue as soon as epoch N+1 starts. This is guaranteed because there is no cap on the activation queue size.The validator remains in this Eligible state for 1 epoch. Afterward, it is added to the Active set, provided the validator set cap (69) is not exceeded, or if the validator is of higher priority (i.e., higher effective balance or lower-order pubKey among equals).
After spending 1 epoch in the Eligible state (say at N+1), the validator is marked Active at the start of epoch N+2 and joins the Active Set (provided the 69-validator limit is not exceeded, or if the validator has a higher priority than an existing validator).A validator remains active indefinitely until it is forced out by a validator with a higher stake, or until it voluntarily withdraws its stake.Once Active:
CometBFT Consensus will use the validator for block proposals, validations, and voting.
The higher a validator’s effective balance, the higher its voting power—and thus, the more frequently it will be polled for block proposals.
A Validator may choose to exit by withdrawing their complete stake. Otherwise, the only reason for a validator to be evicted from the set (and have its funds returned) is if the validator set cap (69) is reached and another validator with a higher priority enters. Higher priority is determined by:
Larger Effective Balance
If Equal Effective Balance, a lower-order pubKey (alphabetically).
When the validator is evicted from the validator set, it is marked Exited.
Once the validator is marked Exited (say at epoch M), its funds are fully withdrawn at epoch M + 256 on mainnet (M + 32 on Bepolia). Because BeaconKit does not currently enforce a cap on validator churn, this finalizes the validator’s lifecycle and returns all $BERA to the Withdrawal Credentials Address.
Staking with a previously-used CometBFT identity — a validator that was removed from the active set — will result in the funds being returned to that validator’s withdrawal address at the end of the current epoch. The old identity can never be re-activated.
A validator’s voting power is its effective balance, the actual stake rounded down to a 10,000 BERA increment. Effective balance updates lazily: the consensus state only moves it at the turn of an epoch when actual balance crosses an asymmetric buffer around the next increment, which prevents minor balance fluctuations from churning voting power.The buffer is asymmetric because protecting against unintentional drops matters more than keeping pace with top-ups:
Downward buffer: 100 BERA. Actual balance must fall more than 100 BERA below an increment boundary before effective balance steps down to the next-lower increment.
Upward buffer: 1,000 BERA (~110% of the 10,000 BERA increment). Actual balance must exceed an increment boundary by more than 1,000 BERA before effective balance steps up.
For example, a validator who wants to lift effective balance from 250,000 to 260,000 BERA needs an actual balance of 261,000 BERA: 260,000 BERA at the increment boundary plus 1,000 BERA over the upward buffer. The Increase validator stake guide walks through this.These buffers are consensus chain spec parameters. See BRIP-0008 for the derivation.
Putting it all together, the following diagram shows the complete Berachain validator lifecycle:
Deposited → 1 epoch → Eligible → 1 epoch → Active
Potential forced exit due to the validator set cap (69) → Exited → 256 (mainnet) / 32 (Bepolia) → Withdrawn
Deposited → 1 epoch → Eligible → 1 epoch → Exited due to the validator set cap (69) + balance too low → 256 (mainnet) / 32 (Bepolia) → Withdrawn
Note that the system processes state transitions via a queue, on a FIFO basis, with a cap on the number of transitions in each state to limit excessive churn in the validator set.
Once active, validators receive block rewards for proposing blocks. Block rewards are in the form of $WBERA, with a base reward of 0.4$WBERA per block proposed.The network distributes block rewards automatically through the Distributor contract. Validators no longer need to manually trigger this distribution.For ongoing operational guides, see the Being a Validator section:
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Berachain","colors":{"primary":"#92400E","light":"#FBBF24","dark":"#D97706"},"logo":{"light":"https://mintcdn.com/berachain-422fce37/sVHHuWrozTnTMuyP/logo/light.svg?fit=max\u0026auto=format\u0026n=sVHHuWrozTnTMuyP\u0026q=85\u0026s=89a596c06b1db60f4506c32513e60cd3","dark":"https://mintcdn.com/berachain-422fce37/sVHHuWrozTnTMuyP/logo/dark.svg?fit=max\u0026auto=format\u0026n=sVHHuWrozTnTMuyP\u0026q=85\u0026s=8eb432aaac3acced0085cc6271e11280","href":"https://docs.berachain.com"},"favicon":{"light":"https://mintcdn.com/berachain-422fce37/EVzCtRIfTYlsSSCJ/favicon-core.svg?fit=max\u0026auto=format\u0026n=EVzCtRIfTYlsSSCJ\u0026q=85\u0026s=d153b670e1addfdb55539763d610a38e","dark":"https://mintcdn.com/berachain-422fce37/EVzCtRIfTYlsSSCJ/favicon-core.svg?fit=max\u0026auto=format\u0026n=EVzCtRIfTYlsSSCJ\u0026q=85\u0026s=d153b670e1addfdb55539763d610a38e"},"navbar":{"links":[{"href":"https://hub.berachain.com","label":"Bera Hub"},{"href":"https://busd.berachain.com","label":"BUSD Swap"},{"href":"https://bend.berachain.com/","label":"Bend"},{"icon":"discord","href":"https://discord.gg/berachain","label":""},{"icon":"github","href":"https://github.com/berachain/docs","label":""},{"icon":"x-twitter","href":"https://x.com/berachain","label":""},{"icon":"telegram","href":"https://t.me/berachain","label":""}]},"footer":{"socials":{"x":"https://x.com/berachain","github":"https://github.com/berachain/docs","discord":"https://discord.gg/berachain","telegram":"https://t.me/berachain"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"berachain-422fce37","hasAudioNarration":false,"actualSubdomain":"berachain-422fce37","customDomains":["docs.berachain.com"],"gitSource":{"type":"github","owner":"berachain","repo":"docs","deployBranch":"main","isPrivate":false,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a984bf3afddb22030d04896","collectionId":"64b7ab4c-cd68-4e4d-9baf-affa72532a08","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a984bf3afddb22030d04896"},"feedback":{"thumbs":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a984bf3afddb22030d04896","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Build","count":61},{"language":"default","tag":"BEX","count":33},{"language":"default","tag":"Getting Started","count":28},{"language":"default","tag":"Concepts","count":27},{"language":"default","tag":"Nodes","count":26},{"language":"default","tag":"Bend","count":23},{"language":"default","tag":"Community Guides","count":20},{"language":"default","tag":"General","count":20},{"language":"default","tag":"Proof of Liquidity","count":15},{"language":"default","tag":"User Guides","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar,[data-sidebar]{display:flex;flex-direction:column}#sidebar .nav-anchors,.nav-anchors,[data-sidebar] .nav-anchors{order:999;margin-top:auto;padding-top:1rem;border-top:1px solid rgba(128,128,128,.2)}[data-component-name=mermaid-container]{overflow-x:auto!important}[data-component-name=mermaid-container] svg{min-width:650px!important;max-width:none!important}#navbar .nav-logo img,[data-navbar] .nav-logo img{height:28px!important;width:auto!important;max-height:28px!important}"}],"page":{"pagePath":"nodes/architecture/validator-lifecycle","slug":"/nodes/architecture/validator-lifecycle","pageMetadata":{"title":"Validator Lifecycle","description":"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.","href":"/nodes/architecture/validator-lifecycle"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Mermaid,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`A validator in Berachain is a participant responsible for proposing and attesting to new blocks, helping secure the network and maintain consensus. Validators stake a required amount of the network’s native token ($BERA) as collateral, which serves both as an economic incentive to behave honestly and as a mechanism for penalizing malicious behavior.`}),`\n`,_jsxs(_components.p,{children:[`Validators can operate independently with direct staking, or they can operate `,_jsx(_components.strong,{children:`staking pools`}),` that allow community members to stake BERA through smart contracts and receive liquid shares (stBERA). For information about operating staking pools, see the `,_jsx(_components.a,{href:`/nodes/staking-pools/overview`,children:`Staking Pools documentation`}),`.`]}),`\n`,_jsx(_components.p,{children:`Validators have several key responsibilities:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Proposing new blocks when selected`}),`\n`,_jsx(_components.li,{children:`Attesting to blocks proposed by other validators`}),`\n`,_jsx(_components.li,{children:`Participating in consensus by voting on the canonical chain`}),`\n`,_jsx(_components.li,{children:`Maintaining network security through their staked tokens`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The Validator’s Voting Power is the amount of $BERA they have deposited, rounded down to the nearest `,_jsx(_components.strong,{children:`10,000 BERA`}),`. Their Voting Power, as a proportion of the total Voting Power among all validators, is their probability of being selected to propose a block.`]}),`\n`,_jsx(Frame,{children:_jsx(Mermaid,{chart:`flowchart TB\nsubgraph EL1[\"Execution Layer\"]\n DC[\"Deposit Contract\"]\nend\nsubgraph CL[\"Consensus Layer\"]\n direction TB\n DEP[\"Deposited\"]\n ELG[\"Eligible\"]\n ACT[\"Active\"]\n EXT[\"Exited\"]\n DEP --> ELG\n ELG --> ACT\n ELG --> EXT\n ACT --> EXT\nend\nsubgraph EL2[\"Execution Layer\"]\n WD[\"Withdrawn\"]\nend\nDC -.-> DEP\nEXT -.-> WD`})}),`\n`,_jsx(Heading,{level:`2`,id:`the-active-set-\u0026-stake-requirements`,children:`The Active Set \u0026 Stake Requirements`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Active Set`}),` is the limited group of validators currently participating in the consensus layer and proposing blocks. The current limit of validators in the active set is `,_jsx(_components.strong,{children:`69`}),`.`]}),`\n`,_jsx(_components.p,{children:`To enter the active set, you must meet the minimum stake requirements. This requirement depends on whether the active set is full:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If the active set is not full, the minimum stake requirement is `,_jsx(_components.strong,{children:`250,000`}),` `,_jsx(_components.code,{children:`$BERA`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If the active set is full, the minimum stake requirement is `,_jsx(_components.strong,{children:`10,000`}),` `,_jsx(_components.code,{children:`$BERA`}),` more than the amount staked by the last validator in the active set.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`It can take up to `,_jsx(_components.strong,{children:`3`}),` epochs (`,_jsx(_components.strong,{children:`192`}),` blocks per epoch) for deposits to be processed and for a validator to be included in the active set.`]}),`\n`,_jsxs(_components.p,{children:[`For step-by-step instructions on spinning up a validator, see the `,_jsx(_components.a,{href:`/nodes/guides/become-a-validator`,children:`Become a Validator`}),` guide.`]}),`\n`,_jsx(Heading,{level:`2`,id:`direct-staking-\u0026-withdrawal-addresses`,children:`Direct Staking \u0026 Withdrawal Addresses`}),`\n`,_jsxs(_components.p,{children:[`Berachain follows Proof-of-Stake (PoS) direct staking, which allows `,_jsx(_components.code,{children:`$BERA`}),` holders to directly stake their `,_jsx(_components.code,{children:`$BERA`}),` to a validator.`]}),`\n`,_jsxs(_components.p,{children:[`The validator’s journey begins with a deposit transaction on the `,_jsx(_components.strong,{children:`Execution Layer`}),` to the deposit contract at `,_jsx(_components.code,{children:`0x4242424242424242424242424242424242424242`}),`. The deposit emits a custom deposit event.`]}),`\n`,_jsxs(_components.p,{children:[`When a validator makes their first deposit, they define a `,_jsx(_components.strong,{children:`Withdrawal Credentials Address`}),`. If funds are withdrawn from a validator, or if the validator is evicted from the active set, `,_jsx(_components.em,{children:`all`}),` funds are returned to this single address.`]}),`\n`,_jsx(_components.p,{children:`This means that validators must communicate clearly with their delegators about how they will handle and manually return funds if the validator is removed from the active set.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Avoid staking to validators without knowing how they handle funds when a validator is removed from the active set.`})}),`\n`,_jsx(Heading,{level:`2`,id:`lifecycle-states`,children:`Lifecycle States`}),`\n`,_jsx(_components.p,{children:`The validator lifecycle flows through five main states:`}),`\n`,_jsx(Heading,{level:`3`,id:`1-deposited`,children:`1. Deposited`}),`\n`,_jsx(_components.p,{children:`The validator’s journey begins with a deposit transaction on the Execution Layer (via the Deposit Contract). Once this transaction is successful, beacon-kit nodes capture it and process it for signature verification.`}),`\n`,_jsx(_components.p,{children:`The initial deposit transaction establishes a connection between a validator’s Consensus Layer identity and its Execution Layer identity and decides the withdrawal address for the $BERA stake.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No Verification Delay`}),`: On the first deposit, the validator’s signature is fully verified (similar to ETH2), but deposits are not assessed until end of epoch. Subsequent deposits simply increase the validator’s balance (no additional signature verification is done).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minimum Requirement`}),`: A total of `,_jsx(_components.strong,{children:`250,000 BERA`}),` is required for a validator to reach the Deposited state. (Multiple deposits can accumulate to this amount.)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Signature Verification`}),`: On the first deposit, the validator’s signature is fully verified. Subsequent deposits simply increase the validator’s balance.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Per-block deposit cap`}),` Up to `,_jsx(_components.strong,{children:`8192`}),` deposits can land in a single block. With ~45,000 gas per deposit and a 30M gas block limit, the cap is unreachable in practice.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`After remaining in the `,_jsx(_components.strong,{children:`Deposited`}),` state for 1 epoch, the validator automatically moves to the `,_jsx(_components.strong,{children:`Eligible`}),` state and becomes eligible for activation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`2-eligible`,children:`2. Eligible`}),`\n`,_jsxs(_components.p,{children:[`Once the validator enters the `,_jsx(_components.strong,{children:`Deposited`}),` state at epoch `,_jsx(_components.code,{children:`N`}),`, the system marks it as eligible for the activation queue as soon as epoch `,_jsx(_components.code,{children:`N+1`}),` starts. This is guaranteed because there is no cap on the activation queue size.`]}),`\n`,_jsxs(_components.p,{children:[`The validator remains in this `,_jsx(_components.strong,{children:`Eligible`}),` state for 1 epoch. Afterward, it is added to the `,_jsx(_components.strong,{children:`Active`}),` set, provided the validator set cap (`,_jsx(_components.strong,{children:`69`}),`) is not exceeded, or if the validator is of higher priority (i.e., higher effective balance or lower-order pubKey among equals).`]}),`\n`,_jsx(Heading,{level:`3`,id:`3-active`,children:`3. Active`}),`\n`,_jsxs(_components.p,{children:[`After spending 1 epoch in the `,_jsx(_components.strong,{children:`Eligible`}),` state (say at `,_jsx(_components.code,{children:`N+1`}),`), the validator is marked `,_jsx(_components.strong,{children:`Active`}),` at the start of epoch `,_jsx(_components.code,{children:`N+2`}),` and joins the Active Set (provided the 69-validator limit is not exceeded, or if the validator has a higher priority than an existing validator).`]}),`\n`,_jsxs(_components.p,{children:[`A validator remains active indefinitely until it is forced out by a validator with a higher stake, or until it `,_jsx(_components.a,{href:`/nodes/guides/withdraw-stake`,children:`voluntarily withdraws its stake`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Once `,_jsx(_components.strong,{children:`Active`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CometBFT Consensus`}),` will use the validator for block proposals, validations, and voting.`]}),`\n`,_jsx(_components.li,{children:`The higher a validator’s effective balance, the higher its voting power—and thus, the more frequently it will be polled for block proposals.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`4-exited`,children:`4. Exited`}),`\n`,_jsxs(_components.p,{children:[`A Validator may choose to exit by `,_jsx(_components.a,{href:`/nodes/guides/withdraw-stake`,children:`withdrawing their complete stake`}),`. Otherwise, the `,_jsx(_components.strong,{children:`only`}),` reason for a validator to be evicted from the set (and have its funds returned) is if the validator set cap (`,_jsx(_components.strong,{children:`69`}),`) is reached and another validator with a higher priority enters. Higher priority is determined by:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Larger Effective Balance`}),`\n`,_jsx(_components.li,{children:`If Equal Effective Balance, a lower-order pubKey (alphabetically).`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`When the validator is evicted from the validator set, it is marked `,_jsx(_components.strong,{children:`Exited`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`5-withdrawn`,children:`5. Withdrawn`}),`\n`,_jsxs(_components.p,{children:[`Once the validator is marked `,_jsx(_components.strong,{children:`Exited`}),` (say at epoch `,_jsx(_components.code,{children:`M`}),`), its funds are fully withdrawn at epoch `,_jsx(_components.strong,{children:`M + 256`}),` on mainnet (`,_jsx(_components.strong,{children:`M + 32`}),` on Bepolia). Because BeaconKit does not currently enforce a cap on validator churn, this finalizes the validator’s lifecycle and returns all `,_jsx(_components.code,{children:`$BERA`}),` to the Withdrawal Credentials Address.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Staking with a previously-used CometBFT identity — a validator that was removed from the active set — will result in the funds being returned to that validator’s withdrawal address at the end of the current epoch. The old identity can never be re-activated.`})}),`\n`,_jsx(Heading,{level:`2`,id:`effective-balance-and-hysteresis`,children:`Effective balance and hysteresis`}),`\n`,_jsxs(_components.p,{children:[`A validator’s voting power is its `,_jsx(_components.strong,{children:`effective balance`}),`, the actual stake rounded down to a 10,000 BERA increment. Effective balance updates lazily: the consensus state only moves it at the turn of an epoch when actual balance crosses an asymmetric buffer around the next increment, which prevents minor balance fluctuations from churning voting power.`]}),`\n`,_jsx(_components.p,{children:`The buffer is asymmetric because protecting against unintentional drops matters more than keeping pace with top-ups:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Downward buffer: 100 BERA.`}),` Actual balance must fall more than 100 BERA below an increment boundary before effective balance steps down to the next-lower increment.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Upward buffer: 1,000 BERA (~110% of the 10,000 BERA increment).`}),` Actual balance must exceed an increment boundary by more than 1,000 BERA before effective balance steps up.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For example, a validator who wants to lift effective balance from 250,000 to 260,000 BERA needs an actual balance of `,_jsx(_components.strong,{children:`261,000 BERA`}),`: 260,000 BERA at the increment boundary plus 1,000 BERA over the upward buffer. The `,_jsx(_components.a,{href:`/nodes/guides/increase-validator-stake#worked-example`,children:`Increase validator stake guide`}),` walks through this.`]}),`\n`,_jsxs(_components.p,{children:[`These buffers are consensus chain spec parameters. See `,_jsx(_components.a,{href:`https://github.com/berachain/BRIPs/blob/main/meta/BRIP-0008.md`,children:`BRIP-0008`}),` for the derivation.`]}),`\n`,_jsx(Heading,{level:`2`,id:`extended-validator-lifecycle`,children:`Extended Validator Lifecycle`}),`\n`,_jsx(_components.p,{children:`Putting it all together, the following diagram shows the complete Berachain validator lifecycle:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Deposited`}),` → 1 epoch → `,_jsx(_components.strong,{children:`Eligible`}),` → 1 epoch → `,_jsx(_components.strong,{children:`Active`})]}),`\n`,_jsxs(_components.li,{children:[`Potential forced exit due to the validator set cap (`,_jsx(_components.strong,{children:`69`}),`) → `,_jsx(_components.strong,{children:`Exited`}),` → `,_jsx(_components.strong,{children:`256`}),` (mainnet) / `,_jsx(_components.strong,{children:`32`}),` (Bepolia) → `,_jsx(_components.strong,{children:`Withdrawn`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Deposited`}),` → 1 epoch → `,_jsx(_components.strong,{children:`Eligible`}),` → 1 epoch → `,_jsx(_components.strong,{children:`Exited`}),` due to the validator set cap (`,_jsx(_components.strong,{children:`69`}),`) + balance too low → `,_jsx(_components.strong,{children:`256`}),` (mainnet) / `,_jsx(_components.strong,{children:`32`}),` (Bepolia) → `,_jsx(_components.strong,{children:`Withdrawn`})]}),`\n`]}),`\n`,_jsx(Frame,{children:_jsx(Mermaid,{chart:`flowchart TB\n subgraph EL1[\"Execution Layer\"]\n DC[\"Deposit Contract\"]\n end\n subgraph CL[\"Consensus Layer\"]\n direction TB\n DEP[\"Deposited\"]\n ELG[\"Eligible\"]\n ACT[\"Active\"]\n EXT[\"Exited\"]\n DEP -- \"1 epoch delay\" --> ELG\n ELG -- \"1 epoch delay\" --> ACT\n ELG -- \"1 epoch delay\u003cbr/>if validatorSetCap full\u003cbr/>and low priority val\" --> EXT\n ACT -- \"if validatorSetCap full\u003cbr/>\u0026 low priority val\" --> EXT\n end\n subgraph EL2[\"Execution Layer\"]\n WD[\"Withdrawn\u003cbr/>\u003csmall>Funds withdrawn to withdraw credential\u003c/small>\"]\n end\n DC -. \"2 ETH1 block delay\" .-> DEP\n EXT -. \"256 epoch delay\u003cbr/>All funds fully withdrawn\" .-> WD`})}),`\n`,_jsx(_components.p,{children:`Note that the system processes state transitions via a queue, on a FIFO basis, with a cap on the number of transitions in each state to limit excessive churn in the validator set.`}),`\n`,_jsx(Heading,{level:`2`,id:`block-rewards-\u0026-distribution`,children:`Block Rewards \u0026 Distribution`}),`\n`,_jsxs(_components.p,{children:[`Once active, validators receive block rewards for proposing blocks. Block rewards are in the form of `,_jsx(_components.code,{children:`$WBERA`}),`, with a base reward of `,_jsx(_components.strong,{children:`0.4`}),` `,_jsx(_components.code,{children:`$WBERA`}),` per block proposed.`]}),`\n`,_jsx(_components.p,{children:`The network distributes block rewards automatically through the Distributor contract. Validators no longer need to manually trigger this distribution.`}),`\n`,_jsx(_components.p,{children:`For ongoing operational guides, see the Being a Validator section:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/nodes/guides/increase-validator-stake`,children:`Increase Stake`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/nodes/guides/withdraw-stake`,children:`Withdraw Stake`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/nodes/guides/change-operator-address`,children:`Change Operator Address`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Validator Lifecycle","description":"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.","href":"/nodes/architecture/validator-lifecycle"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"The Active Set \u0026 Stake Requirements","slug":"the-active-set-\u0026-stake-requirements","depth":2,"children":[]},{"title":"Direct Staking \u0026 Withdrawal Addresses","slug":"direct-staking-\u0026-withdrawal-addresses","depth":2,"children":[]},{"title":"Lifecycle States","slug":"lifecycle-states","depth":2,"children":[{"title":"1. Deposited","slug":"1-deposited","depth":3,"children":[]},{"title":"2. Eligible","slug":"2-eligible","depth":3,"children":[]},{"title":"3. Active","slug":"3-active","depth":3,"children":[]},{"title":"4. Exited","slug":"4-exited","depth":3,"children":[]},{"title":"5. Withdrawn","slug":"5-withdrawn","depth":3,"children":[]}]},{"title":"Effective balance and hysteresis","slug":"effective-balance-and-hysteresis","depth":2,"children":[]},{"title":"Extended Validator Lifecycle","slug":"extended-validator-lifecycle","depth":2,"children":[]},{"title":"Block Rewards \u0026 Distribution","slug":"block-rewards-\u0026-distribution","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"berachain-422fce37","siteName":"Berachain","title":"Validator Lifecycle - Berachain","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-31T09:11:29.635Z","originalFileLocation":"nodes/architecture/validator-lifecycle.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Berachain\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Validator Lifecycle - Berachain\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Berachain\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.berachain.com/nodes/architecture/validator-lifecycle\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://berachain-422fce37.mintlify.app/_mintlify/api/og/v2?division=Concepts+%26+Architecture\u0026amp;title=Validator+Lifecycle\u0026amp;description=Validator+states+and+transitions%3A+Deposited%2C+Eligible%2C+Active%2C+Exited%2C+and+Withdrawn%3B+activation+queue+and+stake+requirements.\u0026amp;theme=1e1bfcc71b52b8663f319473\u0026amp;signature=60a24c909706e4d7bb44f9be9b4b12130a5cabeb79afc6a68c21b5bca6308a24\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Validator Lifecycle - Berachain\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://berachain-422fce37.mintlify.app/_mintlify/api/og/v2?division=Concepts+%26+Architecture\u0026amp;title=Validator+Lifecycle\u0026amp;description=Validator+states+and+transitions%3A+Deposited%2C+Eligible%2C+Active%2C+Exited%2C+and+Withdrawn%3B+activation+queue+and+stake+requirements.\u0026amp;theme=1e1bfcc71b52b8663f319473\u0026amp;signature=60a24c909706e4d7bb44f9be9b4b12130a5cabeb79afc6a68c21b5bca6308a24\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/berachain-422fce37/GhFtmoYvIj_GkgM5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Berachain\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#92400E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.berachain.com/nodes/architecture/validator-lifecycle\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/nodes/architecture/validator-lifecycle.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.berachain.com/#organization\",\"name\":\"Berachain\",\"url\":\"https://docs.berachain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/berachain-422fce37/sVHHuWrozTnTMuyP/logo/light.svg?fit=max\u0026auto=format\u0026n=sVHHuWrozTnTMuyP\u0026q=85\u0026s=89a596c06b1db60f4506c32513e60cd3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.berachain.com#website\",\"name\":\"Berachain\",\"url\":\"https://docs.berachain.com\",\"publisher\":{\"@id\":\"https://docs.berachain.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle#webpage\",\"url\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle\",\"name\":\"Validator Lifecycle\",\"description\":\"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\",\"dateModified\":\"2026-08-31T09:11:29.635Z\",\"isPartOf\":{\"@id\":\"https://docs.berachain.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Concepts \u0026 Architecture\",\"item\":\"https://docs.berachain.com/nodes/overview/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Validator Lifecycle\",\"item\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle#article\",\"headline\":\"Validator Lifecycle\",\"name\":\"Validator Lifecycle\",\"description\":\"Validator states and transitions: Deposited, Eligible, Active, Exited, and Withdrawn; activation queue and stake requirements.\",\"url\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle\",\"mainEntityOfPage\":{\"@id\":\"https://docs.berachain.com/nodes/architecture/validator-lifecycle#webpage\"},\"dateModified\":\"2026-08-31T09:11:29.635Z\",\"publisher\":{\"@id\":\"https://docs.berachain.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.berachain.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Berachain\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Berachain","nav":{"global":null,"tabs":[{"tab":"General","pages":[{"title":"General","href":""}]},{"tab":"BEX","pages":[{"title":"BEX","href":"/bex/learn/overview"}]},{"tab":"Bend","pages":[{"title":"Bend","href":"/bend/learn/overview"}]},{"tab":"Build","pages":[{"title":"Build","href":"/build/getting-started/overview"}]},{"tab":"Nodes","groups":[{"group":"Concepts \u0026 Architecture","pages":[{"title":"Introduction","href":"/nodes/overview"},{"title":"Node Architecture","description":"Validator and RPC node architecture: consensus and execution separation, Engine API, and dual P2P networks.","href":"/nodes/overview/node-architecture"},{"title":"Validator Lifecycle","href":"/nodes/architecture/validator-lifecycle"},{"title":"BeaconKit Consensus","description":"Consensus client and framework for EVM chains: CometBFT, Engine API, Eth2 modularity, and execution client diversity.","href":"/nodes/architecture/beaconkit-consensus"},{"title":"EVM Execution","href":"/nodes/architecture/evm-execution"}]},{"group":"Setup \u0026 Deployment","pages":[{"title":"Quickstart: Run a Node","href":"/nodes/operations/quickstart"},{"title":"Self-Hosted RPC","href":"/nodes/operations/self-hosted-rpc"},{"title":"Local Devnet with Docker","href":"/nodes/guides/local-devnet-docker"},{"title":"Local Devnet with Kurtosis","href":"/nodes/guides/local-devnet-kurtosis"},{"group":"Staking Pools","root":{"title":"Staking Pools Overview","href":"/nodes/staking-pools/overview"},"pages":[{"title":"Staking Pool Installation","href":"/nodes/staking-pools/installation"},{"title":"Staking Pools Operator Guide","href":"/nodes/staking-pools/operators"},{"title":"Delegation Guide","href":"/nodes/staking-pools/delegators"},{"title":"Staking Pool Contracts","href":"/nodes/staking-pools/contracts"}]}]},{"group":"Day-2 Operations","pages":[{"title":"Production Checklist","href":"/nodes/operations/production-checklist"},{"title":"Monitoring","href":"/nodes/operations/monitoring"},{"title":"Becoming a Validator","href":"/nodes/guides/become-a-validator"},{"group":"Being a Validator","pages":[{"title":"Change Operator Address","href":"/nodes/guides/change-operator-address"},{"title":"Manage Reward Allocations","href":"/nodes/guides/manage-reward-allocations"},{"title":"Manage Incentives Commission","href":"/nodes/guides/manage-incentives-commission"},{"title":"Increase Stake","href":"/nodes/guides/increase-validator-stake"},{"title":"Withdraw Stake","href":"/nodes/guides/withdraw-stake"}]}]},{"group":"Reference","pages":[{"title":"What is BeaconKit?","href":"/nodes/beaconkit/overview"},{"title":"BeaconKit API","href":"/nodes/beaconkit/api"},{"title":"BeaconKit CLI","href":"/nodes/beaconkit/cli"},{"title":"BeaconKit Configuration","href":"/nodes/beaconkit/configuration"}]},{"group":"Help","pages":[{"title":"Validator FAQ","href":"/nodes/help/faq"}]}]}]},"title":"Validator Lifecycle - Berachain","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["07c022d89b"],"chunks":["Frame-DYplxqhs.js","DynamicMarkdown-Cc6AuSHS.js"]}