diff --git a/src/Routes.tsx b/src/Routes.tsx
index 12982b76..69f234bc 100644
--- a/src/Routes.tsx
+++ b/src/Routes.tsx
@@ -21,6 +21,7 @@ import {
Languages,
TopUpPage,
Withdrawals,
+ BtecGuide,
} from './pages';
import ScrollToTop from './utils/ScrollToTop';
import { Prysm } from './pages/Clients/Consensus/Prysm';
@@ -66,6 +67,7 @@ export enum routesEnum {
notFoundPage = '/*',
languagesPage = '/languages',
withdrawals = '/withdrawals',
+ btecGuide = '/btec',
}
const routes: RouteType[] = [
{
@@ -120,6 +122,7 @@ const routes: RouteType[] = [
{ path: routesEnum.languagesPage, exact: true, component: Languages },
{ path: routesEnum.topUpPage, exact: true, component: TopUpPage },
{ path: routesEnum.withdrawals, exact: true, component: Withdrawals },
+ { path: routesEnum.btecGuide, exact: true, component: BtecGuide },
{ path: routesEnum.landingPage, exact: true, component: LandingPage },
// NOTE: this wildcard route must be the last index of the routes array
{ path: routesEnum.notFoundPage, component: NotFoundPage },
diff --git a/src/intl/compiled/en.json b/src/intl/compiled/en.json
index ffbea0fb..f9e0c397 100644
--- a/src/intl/compiled/en.json
+++ b/src/intl/compiled/en.json
@@ -21,6 +21,12 @@
"value": " (handling proof-of-stake consensus tasks, formerly 'Eth2' or 'Ethereum 2.0')."
}
],
+ "+EZ9E/": [
+ {
+ "type": 0,
+ "value": "Interactive mode"
+ }
+ ],
"+L0IkF": [
{
"type": 0,
@@ -291,6 +297,12 @@
"value": "not"
}
],
+ "0GWhvr": [
+ {
+ "type": 0,
+ "value": "Expected outputs"
+ }
+ ],
"0MIRQ5": [
{
"type": 0,
@@ -471,6 +483,12 @@
"value": "Check that the password files don’t have trailing new-lines."
}
],
+ "1Yybuc": [
+ {
+ "type": 0,
+ "value": "docs of full arguments here"
+ }
+ ],
"1fDfw7": [
{
"type": 0,
@@ -719,6 +737,12 @@
"value": "No validators found for your connected wallet"
}
],
+ "3KP7+U": [
+ {
+ "type": 0,
+ "value": "Command line with flags"
+ }
+ ],
"3NHygY": [
{
"type": 0,
@@ -1483,6 +1507,12 @@
"value": "Overview"
}
],
+ "9vcjcW": [
+ {
+ "type": 0,
+ "value": "PR description"
+ }
+ ],
"9vwGlT": [
{
"type": 0,
@@ -1553,6 +1583,12 @@
"value": "If you need help, check out the Python documentation."
}
],
+ "AEbKyt": [
+ {
+ "type": 0,
+ "value": "For devnet, you can add a param:"
+ }
+ ],
"AJD+66": [
{
"type": 0,
@@ -1825,6 +1861,20 @@
"value": "Proof of stake"
}
],
+ "CT+gEC": [
+ {
+ "type": 0,
+ "value": "Upload to Beacon Node "
+ },
+ {
+ "type": 1,
+ "value": "btec"
+ },
+ {
+ "type": 0,
+ "value": " pool"
+ }
+ ],
"CVDzDs": [
{
"type": 0,
@@ -1873,6 +1923,12 @@
"value": "Current validators"
}
],
+ "Co67tK": [
+ {
+ "type": 0,
+ "value": "BLS To Execution Change"
+ }
+ ],
"D0Rigq": [
{
"type": 0,
@@ -1905,6 +1961,20 @@
"value": "How much ETH do I need to stake to become a validator?"
}
],
+ "D5NvkC": [
+ {
+ "type": 0,
+ "value": "Download "
+ },
+ {
+ "type": 1,
+ "value": "btec"
+ },
+ {
+ "type": 0,
+ "value": " branch:"
+ }
+ ],
"DCaq7N": [
{
"type": 0,
@@ -2127,6 +2197,20 @@
"value": "Withdrawal address:"
}
],
+ "F8yf1S": [
+ {
+ "type": 0,
+ "value": "You can find "
+ },
+ {
+ "type": 1,
+ "value": "docsHere"
+ },
+ {
+ "type": 0,
+ "value": "."
+ }
+ ],
"FEbVwB": [
{
"type": 0,
@@ -2921,6 +3005,12 @@
"value": "Why do I need to run an execution client now?"
}
],
+ "M35Dz/": [
+ {
+ "type": 0,
+ "value": "Upload to Beacon Node BLSToExecutionChange pool"
+ }
+ ],
"M3GwXS": [
{
"type": 0,
@@ -3149,6 +3239,12 @@
"value": " validator needs to be configured for withdrawals. Take note of your withdrawal credentials as you'll need this to update your keys."
}
],
+ "NUcFVA": [
+ {
+ "type": 0,
+ "value": "[Example]"
+ }
+ ],
"NVljH4": [
{
"type": 0,
@@ -3229,6 +3325,28 @@
"value": ")"
}
],
+ "NpIOoJ": [
+ {
+ "type": 0,
+ "value": "To make this message to be included in Mainnet, you will need to upload this message to a beacon node’s "
+ },
+ {
+ "type": 1,
+ "value": "signature"
+ },
+ {
+ "type": 0,
+ "value": " pool "
+ },
+ {
+ "type": 1,
+ "value": "after"
+ },
+ {
+ "type": 0,
+ "value": " Capella/Shanghai hard fork."
+ }
+ ],
"NwzcYT": [
{
"type": 0,
@@ -3689,6 +3807,12 @@
"value": "congratulations"
}
],
+ "RdHdwG": [
+ {
+ "type": 0,
+ "value": "Instructions on how to use the staking-deposit-cli tool to generate and broadcast a SignedBLSToExecutionChange message to update validator withdrawal credentials."
+ }
+ ],
"Rg5ySE": [
{
"type": 0,
@@ -4223,6 +4347,28 @@
"value": "That is not a valid deposit_data JSON file."
}
],
+ "X6/BRy": [
+ {
+ "type": 0,
+ "value": "You can find the "
+ },
+ {
+ "type": 1,
+ "value": "file"
+ },
+ {
+ "type": 0,
+ "value": " file in the "
+ },
+ {
+ "type": 1,
+ "value": "folder"
+ },
+ {
+ "type": 0,
+ "value": " folder by default."
+ }
+ ],
"X72hpo": [
{
"type": 0,
@@ -4461,6 +4607,12 @@
"value": "If you lose your withdrawal key, there is no way to access to the funds held by your validator."
}
],
+ "Yo9B64": [
+ {
+ "type": 0,
+ "value": "execution layer (Eth1) address"
+ }
+ ],
"YqsgWz": [
{
"type": 0,
@@ -4571,6 +4723,12 @@
"value": "Section 1 - Before you start"
}
],
+ "ZtpRuA": [
+ {
+ "type": 0,
+ "value": "Install and set virtualenv:"
+ }
+ ],
"ZzTcj5": [
{
"type": 0,
@@ -4725,6 +4883,12 @@
"value": "Be sure to account for enough space on your drive until you run maintenance on your node."
}
],
+ "bat2FM": [
+ {
+ "type": 0,
+ "value": "after"
+ }
+ ],
"bbr+aD": [
{
"type": 0,
@@ -4781,6 +4945,20 @@
"value": "What is a validator client?"
}
],
+ "cE71F9": [
+ {
+ "type": 0,
+ "value": "[Example: "
+ },
+ {
+ "type": 1,
+ "value": "fork"
+ },
+ {
+ "type": 0,
+ "value": "]"
+ }
+ ],
"cHUoV9": [
{
"type": 0,
@@ -5489,6 +5667,12 @@
"value": "You can think of the deposit contract as a transfer of funds from an Ethereum account to a proof-of-stake validator account."
}
],
+ "iJXdUH": [
+ {
+ "type": 0,
+ "value": "docs"
+ }
+ ],
"iK1COM": [
{
"type": 0,
@@ -5675,6 +5859,16 @@
"value": " client"
}
],
+ "jrK21r": [
+ {
+ "type": 0,
+ "value": "You can find the binary files in "
+ },
+ {
+ "type": 1,
+ "value": "pr"
+ }
+ ],
"jse8rl": [
{
"type": 0,
@@ -5711,6 +5905,12 @@
"value": "This marked the merging of the execution layer (existing Mainnet) with the new consensus layer (the Beacon Chain) to form the single Ethereum chain of today."
}
],
+ "k67L48": [
+ {
+ "type": 0,
+ "value": "Install dependencies:"
+ }
+ ],
"k8bkck": [
{
"type": 0,
@@ -6093,6 +6293,12 @@
"value": "We strongly recommend you go through the entire process on a testnet first to get comfortable before risking real ETH."
}
],
+ "mXSzq5": [
+ {
+ "type": 0,
+ "value": "Option 1: binary files"
+ }
+ ],
"mZOXtM": [
{
"type": 0,
@@ -6261,6 +6467,12 @@
"value": " testnet"
}
],
+ "nyOMKZ": [
+ {
+ "type": 0,
+ "value": "Execute with params"
+ }
+ ],
"nz27+c": [
{
"type": 0,
@@ -6481,6 +6693,20 @@
"value": "Launch the app from your desktop environment by double clicking on it."
}
],
+ "pQxML4": [
+ {
+ "type": 0,
+ "value": "Generate "
+ },
+ {
+ "type": 1,
+ "value": "json"
+ },
+ {
+ "type": 0,
+ "value": " file"
+ }
+ ],
"pWuGLy": [
{
"type": 0,
@@ -6583,6 +6809,36 @@
"value": " to withdraw my funds."
}
],
+ "qIDtPw": [
+ {
+ "type": 0,
+ "value": "To enable your Beacon Chain validator(s) to automatically withdraw balances to your "
+ },
+ {
+ "type": 1,
+ "value": "exeuctionAddress"
+ },
+ {
+ "type": 0,
+ "value": ", you can use the "
+ },
+ {
+ "type": 1,
+ "value": "cli"
+ },
+ {
+ "type": 0,
+ "value": " tool to generate the "
+ },
+ {
+ "type": 1,
+ "value": "signed"
+ },
+ {
+ "type": 0,
+ "value": " message JSON file. This message includes the request to change your old BLS withdrawal credentials to the new withdrawal credentials in execution address format."
+ }
+ ],
"qK4+NQ": [
{
"type": 0,
@@ -7285,6 +7541,12 @@
"value": "Are there spelling mistakes?"
}
],
+ "wtwIax": [
+ {
+ "type": 0,
+ "value": "Option 2: source code + virtualenv"
+ }
+ ],
"x+fF+M": [
{
"type": 0,
@@ -7445,6 +7707,28 @@
"value": "."
}
],
+ "xns5Uh": [
+ {
+ "type": 0,
+ "value": "Assume you have generated deposit in "
+ },
+ {
+ "type": 1,
+ "value": "eip2334"
+ },
+ {
+ "type": 0,
+ "value": " format and have BLS withdrawal credentials. If not, you can generate it by following "
+ },
+ {
+ "type": 1,
+ "value": "docs"
+ },
+ {
+ "type": 0,
+ "value": "."
+ }
+ ],
"xogY3N": [
{
"type": 0,
@@ -7539,6 +7823,12 @@
"value": "Nethermind is built on .NET Core. Extend it, customise it - the sky’s the limit.."
}
],
+ "ylZLi4": [
+ {
+ "type": 0,
+ "value": "EIP-2334"
+ }
+ ],
"ynB6C+": [
{
"type": 0,
diff --git a/src/intl/en.json b/src/intl/en.json
index 888a3023..d882708f 100644
--- a/src/intl/en.json
+++ b/src/intl/en.json
@@ -3,6 +3,9 @@
"description": "{executionLayer} is a link labeled 'execution layer'. {consensusLayer} is a link labeled 'consensus layer'",
"message": "Ethereum consists of the {executionLayer} (handling transactions and execution, formerly 'Eth1'), and the {consensusLayer} (handling proof-of-stake consensus tasks, formerly 'Eth2' or 'Ethereum 2.0')."
},
+ "+EZ9E/": {
+ "message": "Interactive mode"
+ },
"+L0IkF": {
"message": "Step 2: Generate deposit keys using the Ethereum Foundation deposit tool"
},
@@ -109,6 +112,9 @@
"0FTs1T": {
"message": "not"
},
+ "0GWhvr": {
+ "message": "Expected outputs"
+ },
"0MIRQ5": {
"message": "Is the effective balance maxed out at 32?"
},
@@ -187,6 +193,9 @@
"1Vkpd0": {
"message": "Check that the password files don’t have trailing new-lines."
},
+ "1Yybuc": {
+ "message": "docs of full arguments here"
+ },
"1fDfw7": {
"message": "How does this all happen?"
},
@@ -279,6 +288,9 @@
"3H3ygi": {
"message": "No validators found for your connected wallet"
},
+ "3KP7+U": {
+ "message": "Command line with flags"
+ },
"3NHygY": {
"message": "Testing on Goerli"
},
@@ -560,6 +572,9 @@
"9uOFF3": {
"message": "Overview"
},
+ "9vcjcW": {
+ "message": "PR description"
+ },
"9vwGlT": {
"message": "I've synced my beacon node on {consensusLayerName}."
},
@@ -582,6 +597,9 @@
"AC669U": {
"message": "If you need help, check out the Python documentation."
},
+ "AEbKyt": {
+ "message": "For devnet, you can add a param:"
+ },
"AJD+66": {
"message": "The Ethereum staking deposit contract requires a minimum of {minTopupValue} {TICKER_NAME} to be sent at one time to be accepted."
},
@@ -686,6 +704,9 @@
"CF9vMR": {
"message": "Proof of stake"
},
+ "CT+gEC": {
+ "message": "Upload to Beacon Node {btec} pool"
+ },
"CVDzDs": {
"message": "You should certainly top up if your balance is close to 16 ETH. This is to ensure you don’t get kicked out of the validator set (which automatically happens if your balance falls below 16 ETH)."
},
@@ -705,6 +726,9 @@
"Cgrsge": {
"message": "Current validators"
},
+ "Co67tK": {
+ "message": "BLS To Execution Change"
+ },
"D0Rigq": {
"message": "NO"
},
@@ -718,6 +742,9 @@
"D4cQV/": {
"message": "How much ETH do I need to stake to become a validator?"
},
+ "D5NvkC": {
+ "message": "Download {btec} branch:"
+ },
"DCaq7N": {
"message": "Your wallet is connected to the right network!"
},
@@ -808,6 +835,9 @@
"Ej2jo1": {
"message": "Withdrawal address:"
},
+ "F8yf1S": {
+ "message": "You can find {docsHere}."
+ },
"FEbVwB": {
"message": "The key concept is the following:"
},
@@ -1134,6 +1164,9 @@
"LwEHRm": {
"message": "Why do I need to run an execution client now?"
},
+ "M35Dz/": {
+ "message": "Upload to Beacon Node BLSToExecutionChange pool"
+ },
"M3GwXS": {
"message": "You'll only get your full rewards if your validator is online and up to date. This is your responsibility. If your validator goes offline you'll be penalized. The penalties for being offline are roughly equal to the rewards for actively participating."
},
@@ -1224,6 +1257,9 @@
"NUCB4G": {
"message": "This {network} validator needs to be configured for withdrawals. Take note of your withdrawal credentials as you'll need this to update your keys."
},
+ "NUcFVA": {
+ "message": "[Example]"
+ },
"NVljH4": {
"message": "More on Prysmatic Labs"
},
@@ -1248,6 +1284,9 @@
"NkFxlX": {
"message": "At least {time} (four epochs) from the current epoch before reaching the exit epoch (with no others in the queue, {highlyVariable})"
},
+ "NpIOoJ": {
+ "message": "To make this message to be included in Mainnet, you will need to upload this message to a beacon node’s {signature} pool {after} Capella/Shanghai hard fork."
+ },
"NwzcYT": {
"message": "Teku needs to be pointed at files containing keystores and their associated passwords at startup. There are 3 methods for doing so."
},
@@ -1406,6 +1445,9 @@
"RWqrlk": {
"message": "congratulations"
},
+ "RdHdwG": {
+ "message": "Instructions on how to use the staking-deposit-cli tool to generate and broadcast a SignedBLSToExecutionChange message to update validator withdrawal credentials."
+ },
"Rg5ySE": {
"message": "How many validators would you like to run?"
},
@@ -1622,6 +1664,9 @@
"X5KFEh": {
"message": "That is not a valid deposit_data JSON file."
},
+ "X6/BRy": {
+ "message": "You can find the {file} file in the {folder} folder by default."
+ },
"X72hpo": {
"message": "This validator is ready to start receiving rewards to the withdrawal address below. No further action is needed."
},
@@ -1707,6 +1752,9 @@
"YkznEp": {
"message": "If you lose your withdrawal key, there is no way to access to the funds held by your validator."
},
+ "Yo9B64": {
+ "message": "execution layer (Eth1) address"
+ },
"YqsgWz": {
"message": "Slovenian"
},
@@ -1748,6 +1796,9 @@
"Zspg8H": {
"message": "Section 1 - Before you start"
},
+ "ZtpRuA": {
+ "message": "Install and set virtualenv:"
+ },
"ZzTcj5": {
"message": "Download python3 and follow the installation instructions."
},
@@ -1817,6 +1868,9 @@
"bVtlF7": {
"message": "Be sure to account for enough space on your drive until you run maintenance on your node."
},
+ "bat2FM": {
+ "message": "after"
+ },
"bbr+aD": {
"message": "The YAML files can have different syntaxes."
},
@@ -1841,6 +1895,9 @@
"by+LIm": {
"message": "What is a validator client?"
},
+ "cE71F9": {
+ "message": "[Example: {fork}]"
+ },
"cHUoV9": {
"message": "The Geth documentation explains how to download and install the client."
},
@@ -2133,6 +2190,9 @@
"iFWLYC": {
"message": "You can think of the deposit contract as a transfer of funds from an Ethereum account to a proof-of-stake validator account."
},
+ "iJXdUH": {
+ "message": "docs"
+ },
"iK1COM": {
"message": "Accounts without updated withdrawal credentials will be skipped"
},
@@ -2211,6 +2271,9 @@
"description": "{ethClientType} injects \"execution\" or \"consensus\" depending on step",
"message": "Choose {ethClientType} client"
},
+ "jrK21r": {
+ "message": "You can find the binary files in {pr}"
+ },
"jse8rl": {
"message": "How great does my uptime need to be for my validator to be net profitable?"
},
@@ -2229,6 +2292,9 @@
"k4x6Ud": {
"message": "This marked the merging of the execution layer (existing Mainnet) with the new consensus layer (the Beacon Chain) to form the single Ethereum chain of today."
},
+ "k67L48": {
+ "message": "Install dependencies:"
+ },
"k8bkck": {
"message": "EIP-4895, titled {eip4895}, implements a design that simplified this whole process for stakers."
},
@@ -2367,6 +2433,9 @@
"mUZnem": {
"message": "We strongly recommend you go through the entire process on a testnet first to get comfortable before risking real ETH."
},
+ "mXSzq5": {
+ "message": "Option 1: binary files"
+ },
"mZOXtM": {
"message": "Validators"
},
@@ -2439,6 +2508,9 @@
"nwgrRp": {
"message": "Staking Launchpad for {TESTNET_LAUNCHPAD_NAME} testnet"
},
+ "nyOMKZ": {
+ "message": "Execute with params"
+ },
"nz27+c": {
"description": "{variables} social media platform links to Discord and Reddit (do not translate names)",
"message": "If you have questions, EthStaker community is a good place to get help! You can find support on {discord} or {reddit}."
@@ -2519,6 +2591,9 @@
"pHQwsN": {
"message": "Launch the app from your desktop environment by double clicking on it."
},
+ "pQxML4": {
+ "message": "Generate {json} file"
+ },
"pWuGLy": {
"message": "When a validator is scheduled to propose the next block, it performs a sweep of validator accounts looking for eligible withdrawals. During the sweep, the validator will check a max of 16,384 accounts, attempting to find 16 available withdrawals to be processed in the next block."
},
@@ -2565,6 +2640,9 @@
"qDvaNm": {
"message": "I understand that keys are my responsibility and that my mnemonic (seed) will be the {onlyWay} to withdraw my funds."
},
+ "qIDtPw": {
+ "message": "To enable your Beacon Chain validator(s) to automatically withdraw balances to your {exeuctionAddress}, you can use the {cli} tool to generate the {signed} message JSON file. This message includes the request to change your old BLS withdrawal credentials to the new withdrawal credentials in execution address format."
+ },
"qK4+NQ": {
"message": "The terminal"
},
@@ -2838,6 +2916,9 @@
"wtTeex": {
"message": "Are there spelling mistakes?"
},
+ "wtwIax": {
+ "message": "Option 2: source code + virtualenv"
+ },
"x+fF+M": {
"message": "Testnet simulations"
},
@@ -2894,6 +2975,9 @@
"xm3Ivd": {
"message": "This JSON file isn't for the right network. Upload a file generated for your current network: {consensusLayerName}."
},
+ "xns5Uh": {
+ "message": "Assume you have generated deposit in {eip2334} format and have BLS withdrawal credentials. If not, you can generate it by following {docs}."
+ },
"xogY3N": {
"message": "Besu is written in Java and released under the Apache 2.0 Licence."
},
@@ -2939,6 +3023,9 @@
"yjBvUO": {
"message": "Nethermind is built on .NET Core. Extend it, customise it - the sky’s the limit.."
},
+ "ylZLi4": {
+ "message": "EIP-2334"
+ },
"ynB6C+": {
"message": "I'm able to connect my consensus client to my execution client via HTTP API(s)."
},
diff --git a/src/pages/BtecGuide/index.tsx b/src/pages/BtecGuide/index.tsx
new file mode 100644
index 00000000..932c24b3
--- /dev/null
+++ b/src/pages/BtecGuide/index.tsx
@@ -0,0 +1,530 @@
+// Import libraries
+import React from 'react';
+import { FormattedMessage, useIntl } from 'react-intl';
+import { HashLink as Anchor } from 'react-router-hash-link';
+import styled from 'styled-components';
+// Components
+import { Alert } from '../../components/Alert';
+import { Heading } from '../../components/Heading';
+import { Link } from '../../components/Link';
+import { PageTemplate } from '../../components/PageTemplate';
+import { Text } from '../../components/Text';
+import { Code } from '../../components/Code';
+
+const ComponentStyles = styled.div`
+ * {
+ scroll-behavior: smooth;
+ scroll-margin-top: 6rem;
+ }
+ section {
+ margin-top: 30px;
+ }
+ a {
+ text-decoration: none;
+ }
+ p,
+ ol,
+ ul {
+ color: ${(p: any) => p.theme.blue.dark};
+ }
+ ul {
+ margin-bottom: 10px;
+ &.key-types {
+ padding-inline-start: 1em;
+ li span {
+ margin-inline-start: 0.5em;
+ }
+ li:nth-of-type(1) {
+ list-style: '⚠️';
+ }
+ li:nth-of-type(2) {
+ list-style: '✅';
+ }
+ }
+ }
+ li {
+ font-weight: 300;
+ }
+ strong {
+ font-weight: 500;
+ }
+ .inline {
+ display: inline;
+ }
+`;
+
+const CodeBlock = styled.code`
+ padding: 20px;
+ font-family: Courier, sans-serif;
+ font-size: 1em;
+ line-height: 1.3;
+ color: ${(p: any) => p.theme.blue.dark};
+ background-color: #d0ddee;
+ border-radius: 6px;
+ margin-block: 20px;
+
+ display: block;
+ overflow: scroll;
+ span {
+ white-space: nowrap;
+ }
+ span.flag {
+ color: rgb(0 0 0 / 0.5);
+ }
+ &.indent > *:not(:first-child) {
+ margin-inline-start: 2ex;
+ }
+`;
+const SectionTitle = styled(Heading)`
+ margin-top: 30px;
+ border-bottom: 1px solid lightgray;
+ padding-bottom: 10px;
+`;
+
+const SubSectionTitle = styled(SectionTitle)`
+ border-bottom: 0;
+`;
+
+export const BtecGuide = () => {
+ const { formatMessage } = useIntl();
+
+ return (
+
+
+
+
+
+
+ staking-deposit-cli
,
+ signed: SignedBLSToExecutionChange
,
+ }}
+ />
+
+ virtualenv venv
+
+ source venv/bin/activate
+
+ pip3 install -r requirements.txt
+
+ {`--chain=mainnet \\`}
+
+ {`--mnemonic="
+ {`--bls_withdrawal_credentials_list="
+ {`--validator_start_index=
+ {`--validator_indices="
+ {`--execution_address="
+
+ {`--chain=mainnet \\`}
+
+ {`--mnemonic="sister protect peanut hill ready work profit fit wish want small inflict flip member tail between sick setup bright duck morning sell paper worry" \\`}
+
+ {`--bls_withdrawal_credentials_list="0x003bd3b4c03835e3dca951120970813f6ad421986760f8362c6cadb4e99ad5e3,0x00a88d6648fc70789979baf6276c8afeeb23cae6010a6152a9a94cd5ad72b28f" \\`}
+
+ {`--validator_start_index=0 \\`}
+
+ {`--validator_indices="50000, 50001" \\`}
+
+ {`--execution_address="0x3434343434343434343434343434343434343434"`}
+
+
+ {`--chain=mainnet \\`}
+
+ {`--mnemonic="
+ {`--bls_withdrawal_credentials_list="
+ {`--validator_start_index=
+ {`--validator_indices="
+ {`--execution_address="
+
+ {`--chain=mainnet \\`}
+
+ {`--mnemonic="sister protect peanut hill ready work profit fit wish want small inflict flip member tail between sick setup bright duck morning sell paper worry" \\`}
+
+ {`--bls_withdrawal_credentials_list="0x003bd3b4c03835e3dca951120970813f6ad421986760f8362c6cadb4e99ad5e3,0x00a88d6648fc70789979baf6276c8afeeb23cae6010a6152a9a94cd5ad72b28f" \\`}
+
+ {`--validator_start_index=0 \\`}
+
+ {`--validator_indices="50000, 50001" \\`}
+
+ {`--execution_address="0x3434343434343434343434343434343434343434"`}
+
+
+
+
+
+ **[Warning] Using devnet chain setting to generate the
+ SignedBLSToExecutionChange.**
+
+
+
+
+ Verifying your BLSToExecutionChange file:
+ [####################################] N/N
+
+
+
+ Success!
+
+
+ Your SignedBLSToExecutionChange JSON file can be found at:
+ /.../staking-deposit-cli/bls_to_execution_changes
+
+
+
+
+ Press any key.
+ ./bls_to_execution_changes
,
+ }}
+ />
+
+ {`http://