There are many useful scripts under install-helpers/ which wrap multi-step operations into safe, review-first commands:
register.sh: Deploys (registers) staking pool contracts and generates the deployment transaction
activate.sh: Activates a deployed pool using validator proofs from the beacon chain
status.sh: Verifies deployment, registration, and activation status
stake.sh: Generates a staking transaction to add BERA to your pool
All scripts write ready-to-run cast commands to files for you to review and execute. They do not
send transactions without your confirmation. By default, scripts use Ledger for signing; set
PRIVATE_KEY in env.sh if you prefer a local key.
Requirements
beacond (validator client) running and synced with your validator keys backed up somewhere safe
Ledger hardware wallet (default) or a private key set via PRIVATE_KEY
Funds: at least 10,000 BERA for the initial deposit; additional stake as desired
1. Configure environment
In install-helpers/:
cp env.sh.template env.sh# Edit env.sh and set at minimum:# BEACOND_HOME="/path/to/your/beacond/home"# NODE_API_ADDRESS="127.0.0.1:3500" # If not auto-detected from app.toml# Optionally set:# PRIVATE_KEY="0x..." # Defaults to Ledger if unset
Ensure the beacon node API is enabled in your app.toml ([beacon-kit.node-api]) or provide NODE_API_ADDRESS in env.sh. The scripts will auto-detect when possible and verify connectivity before proceeding.
2. Register (deploy contracts)
Run register.sh with your addresses to deploy the staking pool contracts:
The chain (mainnet or Bepolia) is auto-detected from your beacond configuration.
The initial stake is 10,000 BERA (fixed by the consensus layer). The script writes deployment-command.sh with this deposit. Review it. Simulate it if you want. Then run it. This should dump a successful transaction receipt.
The script also predicts and shows your staking pool contract addresses ahead of time.
3. Wait for validator registration
After deploying the contracts, wait for your validator to be registered on the beacon chain. You can check registration status with:
./status.sh
The validator must appear on the beacon chain before you can activate the pool.
4. Activate the pool
Once your validator is registered, run activate.sh to activate the pool:
./activate.sh
Activation is a permissionless on-chain call keyed by your validator pubkey, so activate.sh no longer takes --sr or --op; the pool’s shares recipient and operator are already baked in from register.sh. The script:
Verifies the pool contract is deployed and not already active (isActive()).
Confirms BeaconDeposit.getOperator(pubkey) matches the pool’s SmartOperator and that the validator’s withdrawal credentials point at the pool’s WithdrawalVault.
Pins the beacon-chain head slot, fetches validator pubkey, withdrawal-credentials, and balance proofs at that single slot, and preflights activateStakingPool() locally so a bad proof or stale timestamp surfaces before you broadcast.
Writes generated/activation-command.sh for you to review and execute.
Proofs include a timestamp enforced by the contract (MAX_TIMESTAMP_AGE = 10 minutes). The generated script also hard-expires after that window; if you hit it, re-run activate.sh to regenerate.
5. Verify installation
Use status.sh to check deployment, registration, and activation:
./status.sh
You should see the SmartOperator, StakingPool, StakingRewardsVault, and IncentiveCollector addresses, confirmation that the beacon deposit operator matches your SmartOperator, the pool’s active status, and various telemetry.
6. Set minimum effective balance
The minEffectiveBalance parameter determines when your staking pool activates its validator on
the consensus layer. If you don’t set this value correctly, your pool may accumulate deposits
without ever activating.
Replace $SMART_OPERATOR_ADDRESS with your SmartOperator address and $CALCULATED_MIN_STAKE with the calculated minimum stake amount in wei (multiply BERA amount by 10^18).For details on why this matters, how to determine the correct value, and how the consensus layer minimum works, see the Setting Minimum Effective Balance section in the operator guide.
7. (Optional) Stake additional BERA
Add stake to your pool and send stBERA to a receiver address:
# With BEACOND_HOME configured (pool auto-detected):./stake.sh --amount 100 --receiver 0xRECEIVER# Or specify an explicit pool address:./stake.sh --amount 100 --receiver 0xRECEIVER --staking-pool 0xPOOL
The script writes stake-command.sh. Review and execute the command to submit your stake.
Troubleshooting (quick)
Node API not reachable: Enable [beacon-kit.node-api] and confirm the address/port; or set NODE_API_ADDRESS in env.sh. The script will examine your files and tell you how to activate the API if it isn’t enabled yet.
Missing tools: Install Foundry (cast), jq, bc, and curl and ensure they are on your PATH.
Delegation guide explains how to receive a Foundation delegation, which is very similar to this flow
{"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":""},"feedback":{"thumbs":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a984bf3afddb22030d04896","clientVersion":"0.0.4143","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":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar,[data-sidebar]{display:flex;flex-direction:column}.nav-anchors,#sidebar .nav-anchors,[data-sidebar] .nav-anchors{order:999;margin-top:auto;padding-top:1rem;border-top:1px solid rgba(128, 128, 128, 0.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/staking-pools/installation","slug":"/nodes/staking-pools/installation","pageMetadata":{"title":"Staking Pool Installation","description":"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.","href":"/nodes/staking-pools/installation"},"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: \"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This guide walks validator operators through installing and activating a staking pool using the helper scripts.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-you’ll-use`,children:`What you’ll use`}),`\n`,_jsx(_components.p,{children:`The helper scripts are available through GitHub:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`git`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://github.com/berachain/guides/`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` guides/apps/staking-pools`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ls`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# frontend/ install-helpers/`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`There are many useful scripts under `,_jsx(_components.code,{children:`install-helpers/`}),` which wrap multi-step operations into safe, review-first commands:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`register.sh`}),`: Deploys (registers) staking pool contracts and generates the deployment transaction`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`activate.sh`}),`: Activates a deployed pool using validator proofs from the beacon chain`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`status.sh`}),`: Verifies deployment, registration, and activation status`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`stake.sh`}),`: Generates a staking transaction to add BERA to your pool`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`All scripts write ready-to-run `,_jsx(_components.code,{children:`cast`}),` commands to files for you to review and execute. They do not\nsend transactions without your confirmation. By default, scripts use Ledger for signing; set\n`,_jsx(_components.code,{children:`PRIVATE_KEY`}),` in `,_jsx(_components.code,{children:`env.sh`}),` if you prefer a local key.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`requirements`,children:`Requirements`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`beacond (validator client) running and synced with your validator keys `,_jsx(_components.strong,{children:`backed up somewhere safe`})]}),`\n`,_jsxs(_components.li,{children:[`Foundry `,_jsx(_components.code,{children:`cast`}),` (`,_jsx(_components.a,{href:`https://getfoundry.sh/`,children:`getfoundry.sh`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`jq`}),`, `,_jsx(_components.code,{children:`bc`}),`, `,_jsx(_components.code,{children:`curl`})]}),`\n`,_jsxs(_components.li,{children:[`Ledger hardware wallet (default) or a private key set via `,_jsx(_components.code,{children:`PRIVATE_KEY`})]}),`\n`,_jsx(_components.li,{children:`Funds: at least 10,000 BERA for the initial deposit; additional stake as desired`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-configure-environment`,children:`1. Configure environment`}),`\n`,_jsxs(_components.p,{children:[`In `,_jsx(_components.code,{children:`install-helpers/`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` env.sh.template`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` env.sh`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Edit env.sh and set at minimum:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# BEACOND_HOME=\"/path/to/your/beacond/home\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# NODE_API_ADDRESS=\"127.0.0.1:3500\" # If not auto-detected from app.toml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Optionally set:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# PRIVATE_KEY=\"0x...\" # Defaults to Ledger if unset`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Ensure the beacon node API is enabled in your `,_jsx(_components.code,{children:`app.toml`}),` (`,_jsx(_components.code,{children:`[beacon-kit.node-api]`}),`) or provide `,_jsx(_components.code,{children:`NODE_API_ADDRESS`}),` in `,_jsx(_components.code,{children:`env.sh`}),`. The scripts will auto-detect when possible and verify connectivity before proceeding.`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-register-deploy-contracts`,children:`2. Register (deploy contracts)`}),`\n`,_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`register.sh`}),` with your addresses to deploy the staking pool contracts:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./register.sh`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --sr`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0xSHARES_RECIPIENT`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --op`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0xOPERATOR`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`The chain (mainnet or Bepolia) is auto-detected from your beacond configuration.`}),`\n`,_jsxs(_components.li,{children:[`The initial stake is 10,000 BERA (fixed by the consensus layer). The script writes `,_jsx(_components.code,{children:`deployment-command.sh`}),` with this deposit. Review it. Simulate it if you want. Then run it. This should dump a successful transaction receipt.`]}),`\n`,_jsx(_components.li,{children:`The script also predicts and shows your staking pool contract addresses ahead of time.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`3-wait-for-validator-registration`,children:`3. Wait for validator registration`}),`\n`,_jsx(_components.p,{children:`After deploying the contracts, wait for your validator to be registered on the beacon chain. You can check registration status with:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./status.sh`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The validator must appear on the beacon chain before you can activate the pool.`}),`\n`,_jsx(Heading,{level:`2`,id:`4-activate-the-pool`,children:`4. Activate the pool`}),`\n`,_jsxs(_components.p,{children:[`Once your validator is registered, run `,_jsx(_components.code,{children:`activate.sh`}),` to activate the pool:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./activate.sh`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Activation is a permissionless on-chain call keyed by your validator pubkey, so `,_jsx(_components.code,{children:`activate.sh`}),` no longer takes `,_jsx(_components.code,{children:`--sr`}),` or `,_jsx(_components.code,{children:`--op`}),`; the pool’s shares recipient and operator are already baked in from `,_jsx(_components.code,{children:`register.sh`}),`. The script:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Verifies the pool contract is deployed and not already active (`,_jsx(_components.code,{children:`isActive()`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Confirms `,_jsx(_components.code,{children:`BeaconDeposit.getOperator(pubkey)`}),` matches the pool’s SmartOperator and that the validator’s withdrawal credentials point at the pool’s WithdrawalVault.`]}),`\n`,_jsxs(_components.li,{children:[`Pins the beacon-chain head slot, fetches validator pubkey, withdrawal-credentials, and balance proofs at that single slot, and preflights `,_jsx(_components.code,{children:`activateStakingPool()`}),` locally so a bad proof or stale timestamp surfaces before you broadcast.`]}),`\n`,_jsxs(_components.li,{children:[`Writes `,_jsx(_components.code,{children:`generated/activation-command.sh`}),` for you to review and execute.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Proofs include a timestamp enforced by the contract (`,_jsx(_components.code,{children:`MAX_TIMESTAMP_AGE`}),` = 10 minutes). The generated script also hard-expires after that window; if you hit it, re-run `,_jsx(_components.code,{children:`activate.sh`}),` to regenerate.`]}),`\n`,_jsx(Heading,{level:`2`,id:`5-verify-installation`,children:`5. Verify installation`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`status.sh`}),` to check deployment, registration, and activation:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./status.sh`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You should see the SmartOperator, StakingPool, StakingRewardsVault, and IncentiveCollector addresses, confirmation that the beacon deposit operator matches your SmartOperator, the pool’s active status, and various telemetry.`}),`\n`,_jsx(Heading,{level:`2`,id:`6-set-minimum-effective-balance`,children:`6. Set minimum effective balance`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`minEffectiveBalance`}),` parameter determines when your staking pool activates its validator on\nthe consensus layer. If you don’t set this value correctly, your pool may accumulate deposits\nwithout ever activating.`]})}),`\n`,_jsx(_components.p,{children:`Set the value using your SmartOperator contract:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cast`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` send`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $SMART_OPERATOR_ADDRESS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"setMinEffectiveBalance(uint256)\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $CALCULATED_MIN_STAKE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --ledger`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # or --private-key $PRIVATE_KEY`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`$SMART_OPERATOR_ADDRESS`}),` with your SmartOperator address and `,_jsx(_components.code,{children:`$CALCULATED_MIN_STAKE`}),` with the calculated minimum stake amount in wei (multiply BERA amount by 10^18).`]}),`\n`,_jsxs(_components.p,{children:[`For details on why this matters, how to determine the correct value, and how the consensus layer minimum works, see the `,_jsx(_components.a,{href:`/nodes/staking-pools/operators#setting-minimum-effective-balance`,children:`Setting Minimum Effective Balance`}),` section in the operator guide.`]}),`\n`,_jsx(Heading,{level:`2`,id:`7-optional-stake-additional-bera`,children:`7. (Optional) Stake additional BERA`}),`\n`,_jsx(_components.p,{children:`Add stake to your pool and send stBERA to a receiver address:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# With BEACOND_HOME configured (pool auto-detected):`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./stake.sh`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --amount`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 100`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --receiver`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0xRECEIVER`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Or specify an explicit pool address:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`./stake.sh`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --amount`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 100`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --receiver`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0xRECEIVER`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --staking-pool`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 0xPOOL`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The script writes `,_jsx(_components.code,{children:`stake-command.sh`}),`. Review and execute the command to submit your stake.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting-quick`,children:`Troubleshooting (quick)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Node API not reachable`}),`: Enable `,_jsx(_components.code,{children:`[beacon-kit.node-api]`}),` and confirm the address/port; or set `,_jsx(_components.code,{children:`NODE_API_ADDRESS`}),` in `,_jsx(_components.code,{children:`env.sh`}),`. The script will examine your files and tell you how to activate the API if it isn’t enabled yet.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Missing tools`}),`: Install Foundry (`,_jsx(_components.code,{children:`cast`}),`), `,_jsx(_components.code,{children:`jq`}),`, `,_jsx(_components.code,{children:`bc`}),`, and `,_jsx(_components.code,{children:`curl`}),` and ensure they are on your PATH.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/nodes/staking-pools/contracts`,children:`Contract reference`}),` explains what you’ve deployed`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/nodes/staking-pools/delegators`,children:`Delegation guide`}),` explains how to receive a Foundation delegation, which is very similar to this flow`]}),`\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":"Staking Pool Installation","description":"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.","href":"/nodes/staking-pools/installation"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What you’ll use","slug":"what-you’ll-use","depth":2,"children":[]},{"title":"Requirements","slug":"requirements","depth":2,"children":[]},{"title":"1. Configure environment","slug":"1-configure-environment","depth":2,"children":[]},{"title":"2. Register (deploy contracts)","slug":"2-register-deploy-contracts","depth":2,"children":[]},{"title":"3. Wait for validator registration","slug":"3-wait-for-validator-registration","depth":2,"children":[]},{"title":"4. Activate the pool","slug":"4-activate-the-pool","depth":2,"children":[]},{"title":"5. Verify installation","slug":"5-verify-installation","depth":2,"children":[]},{"title":"6. Set minimum effective balance","slug":"6-set-minimum-effective-balance","depth":2,"children":[]},{"title":"7. (Optional) Stake additional BERA","slug":"7-optional-stake-additional-bera","depth":2,"children":[]},{"title":"Troubleshooting (quick)","slug":"troubleshooting-quick","depth":2,"children":[]},{"title":"What’s next","slug":"what’s-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"berachain-422fce37","siteName":"Berachain","title":"Staking Pool Installation - Berachain","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-22T00:56:20.353Z","originalFileLocation":"nodes/staking-pools/installation.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=\"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\">\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=\"Staking Pool Installation - Berachain\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Berachain\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.berachain.com/nodes/staking-pools/installation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://berachain-422fce37.mintlify.site/_mintlify/api/og/v2?division=Staking+Pools\u0026amp;title=Staking+Pool+Installation\u0026amp;description=Install+and+activate+a+staking+pool+with+helper+scripts%3A+register%2C+activate%2C+set+min+effective+balance%2C+and+optional+stake.\u0026amp;theme=9fa8766c94e1a3315bd80b7b\u0026amp;signature=cfafafe7ed3c380dbce9e26defc297fabf48062f0440234b7bb0dc78b006fa60\">\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=\"Staking Pool Installation - Berachain\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://berachain-422fce37.mintlify.site/_mintlify/api/og/v2?division=Staking+Pools\u0026amp;title=Staking+Pool+Installation\u0026amp;description=Install+and+activate+a+staking+pool+with+helper+scripts%3A+register%2C+activate%2C+set+min+effective+balance%2C+and+optional+stake.\u0026amp;theme=9fa8766c94e1a3315bd80b7b\u0026amp;signature=cfafafe7ed3c380dbce9e26defc297fabf48062f0440234b7bb0dc78b006fa60\">\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/staking-pools/installation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/nodes/staking-pools/installation.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/staking-pools/installation#webpage\",\"url\":\"https://docs.berachain.com/nodes/staking-pools/installation\",\"name\":\"Staking Pool Installation\",\"description\":\"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\",\"dateModified\":\"2026-04-22T00:56:20.353Z\",\"isPartOf\":{\"@id\":\"https://docs.berachain.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.berachain.com/nodes/staking-pools/installation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.berachain.com/nodes/staking-pools/installation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Setup \u0026 Deployment\",\"item\":\"https://docs.berachain.com/nodes/operations/quickstart\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Staking Pools\",\"item\":\"https://docs.berachain.com/nodes/staking-pools/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Staking Pool Installation\",\"item\":\"https://docs.berachain.com/nodes/staking-pools/installation\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.berachain.com/nodes/staking-pools/installation#article\",\"headline\":\"Staking Pool Installation\",\"name\":\"Staking Pool Installation\",\"description\":\"Install and activate a staking pool with helper scripts: register, activate, set min effective balance, and optional stake.\",\"url\":\"https://docs.berachain.com/nodes/staking-pools/installation\",\"mainEntityOfPage\":{\"@id\":\"https://docs.berachain.com/nodes/staking-pools/installation#webpage\"},\"dateModified\":\"2026-04-22T00:56:20.353Z\",\"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\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Berachain\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/nodes/staking-pools/installation.md","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","href":"/nodes/overview/node-architecture"},{"title":"Validator Lifecycle","href":"/nodes/architecture/validator-lifecycle"},{"title":"BeaconKit Consensus","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","description":"Validator-operated liquid staking: stBERA, contract architecture, security, staker experience, and PoL integration.","href":"/nodes/staking-pools/overview"},"pages":[{"title":"Staking Pool Installation","href":"/nodes/staking-pools/installation"},{"title":"Staking Pools Operator Guide","description":"Configure and operate a staking pool: roles, commission, reward allocation, min effective balance, and front-end.","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"}]}]}]},"basePath":"","title":"Staking Pool Installation - Berachain","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}