diff --git a/src/Routes.tsx b/src/Routes.tsx index e7fa02aa..c421bf74 100644 --- a/src/Routes.tsx +++ b/src/Routes.tsx @@ -20,12 +20,17 @@ import { TermsOfService, Languages, TopUpPage, + MergeReadiness, } from './pages'; import ScrollToTop from './utils/ScrollToTop'; import { Prysm } from './pages/Clients/Consensus/Prysm'; import { Teku } from './pages/Clients/Consensus/Teku'; import { Nimbus } from './pages/Clients/Consensus/Nimbus'; import { Lighthouse } from './pages/Clients/Consensus/Lighthouse'; +import { Besu } from './pages/Clients/Execution/Besu'; +import { Nethermind } from './pages/Clients/Execution/Nethermind'; +import { Erigon } from './pages/Clients/Execution/Erigon'; +import { Geth } from './pages/Clients/Execution/Geth'; type RouteType = { path: string; @@ -44,9 +49,13 @@ export enum routesEnum { uploadValidatorPage = '/upload-deposit-data', transactionsPage = '/transactions', FaqPage = '/faq', - prysm = '/prysm', - nimbus = '/nimbus', + besu = '/besu', + erigon = '/erigon', + geth = '/geth', lighthouse = '/lighthouse', + nethermind = '/nethermind', + nimbus = '/nimbus', + prysm = '/prysm', teku = '/teku', phishingPage = '/phishing', checklistPage = '/checklist', @@ -54,6 +63,7 @@ export enum routesEnum { landingPage = '/', notFoundPage = '/*', languagesPage = '/languages', + mergeReadiness = '/merge-readiness', } const routes: RouteType[] = [ { @@ -103,25 +113,45 @@ const routes: RouteType[] = [ component: FAQ, }, { - path: routesEnum.teku, + path: routesEnum.besu, exact: true, - component: Teku, + component: Besu, }, { - path: routesEnum.prysm, + path: routesEnum.erigon, exact: true, - component: Prysm, + component: Erigon, }, { - path: routesEnum.nimbus, + path: routesEnum.geth, exact: true, - component: Nimbus, + component: Geth, }, { path: routesEnum.lighthouse, exact: true, component: Lighthouse, }, + { + path: routesEnum.nethermind, + exact: true, + component: Nethermind, + }, + { + path: routesEnum.nimbus, + exact: true, + component: Nimbus, + }, + { + path: routesEnum.prysm, + exact: true, + component: Prysm, + }, + { + path: routesEnum.teku, + exact: true, + component: Teku, + }, { path: routesEnum.phishingPage, exact: true, @@ -142,6 +172,11 @@ const routes: RouteType[] = [ exact: true, component: TopUpPage, }, + { + path: routesEnum.mergeReadiness, + exact: true, + component: MergeReadiness, + }, { 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/components/AppBar.tsx b/src/components/AppBar.tsx index f1bd72d2..790b5895 100644 --- a/src/components/AppBar.tsx +++ b/src/components/AppBar.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; +import { FormattedMessage } from 'react-intl'; import styled from 'styled-components'; import { Box, DropButton } from 'grommet'; import { Menu, Language, FormDown } from 'grommet-icons'; @@ -26,7 +27,6 @@ import { EL_TESTNET_NAME, } from '../utils/envVars'; import useMobileCheck from '../hooks/useMobileCheck'; -import { FormattedMessage } from 'react-intl'; const RainbowBackground = styled(Box)` background-image: ${p => `linear-gradient(to right, ${p.theme.rainbow})`}; @@ -212,11 +212,29 @@ const _AppBar = ({ location }: RouteComponentProps) => { } dropAlign={{ top: 'bottom', right: 'right' }} dropContent={ - - Lighthouse - Nimbus - Prysm - Teku + + + Execution clients + + + Besu + Erigon + Geth + + Nethermind + + + + Consensus clients + + + + Lighthouse + + Nimbus + Prysm + Teku + } /> @@ -250,6 +268,16 @@ const _AppBar = ({ location }: RouteComponentProps) => { + + + + + {!mobile && ( @@ -321,6 +349,17 @@ const _AppBar = ({ location }: RouteComponentProps) => { + + + + + + Besu + Erigon + Geth + + Nethermind + diff --git a/src/components/ClientMergeNotification.tsx b/src/components/ClientMergeNotification.tsx new file mode 100644 index 00000000..177ba168 --- /dev/null +++ b/src/components/ClientMergeNotification.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import { Link } from './Link'; +import { Alert } from './Alert'; +import { Text } from './Text'; + +export const ClientMergeNotification = (props: { + client: string; + isConsensus?: boolean; +}): JSX.Element => { + const { client, isConsensus = false } = props; + return ( + + + + {isConsensus ? ( + + ) : ( + + )} + + ), + }} + /> + + + {isConsensus ? ( + + + + ), + }} + /> + ) : ( + + + + ), + }} + /> + )} + + + + + + ); +}; diff --git a/src/components/MergeNotification.tsx b/src/components/MergeNotification.tsx new file mode 100644 index 00000000..b51fc045 --- /dev/null +++ b/src/components/MergeNotification.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import styled from 'styled-components'; +import { Link } from './Link'; +import { Alert } from './Alert'; + +const StyledAlert = styled(Alert)` + text-align: center; +`; + +export const MergeNotification = (): JSX.Element => { + return ( + + + + + ), + }} + /> + + ); +}; diff --git a/src/components/PageTemplate.tsx b/src/components/PageTemplate.tsx index 12d09eab..df8d7d9b 100644 --- a/src/components/PageTemplate.tsx +++ b/src/components/PageTemplate.tsx @@ -1,9 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; +import { Helmet } from 'react-helmet'; import { RouteComponentProps, withRouter } from 'react-router-dom'; +import styled from 'styled-components'; import { AppBar } from './AppBar'; import { Heading } from './Heading'; -import { Helmet } from 'react-helmet'; +import { MergeNotification } from './MergeNotification'; +import { routesEnum } from '../Routes'; const Content = styled.div` width: 100%; @@ -39,6 +41,9 @@ const _PageTemplate = ({ title, header = title, }: Props): JSX.Element => { + const isMergeReadinessPage = window.location.pathname + .substring(3) + .includes(routesEnum.mergeReadiness); return ( @@ -50,6 +55,7 @@ const _PageTemplate = ({ + {!isMergeReadinessPage && } diff --git a/src/intl/compiled/en.json b/src/intl/compiled/en.json index 70ef8647..9ee50a26 100644 --- a/src/intl/compiled/en.json +++ b/src/intl/compiled/en.json @@ -83,6 +83,12 @@ "value": "Indonesian" } ], + "/E/Zm8": [ + { + "type": 0, + "value": "Configure the Java Web" + } + ], "/QPc9s": [ { "type": 0, @@ -139,6 +145,38 @@ "value": " to them, instead of the official deposit contract. Make sure that the address you are sending the transaction to is the correct address." } ], + "/h0DGY": [ + { + "type": 0, + "value": "Why the " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH maximum?" + } + ], + "/iuoP7": [ + { + "type": 1, + "value": "networkBold" + }, + { + "type": 0, + "value": " will be the first longstanding public testnet to undergo The Merge. Historically a proof-of-work testnet, " + }, + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " now has its own proof-of-stake beacon chain which will be merged with the execution layer in the near future (if it hasn't happened already)." + } + ], "/jJLYy": [ { "type": 0, @@ -151,6 +189,12 @@ "value": "If at all possible, consider running another client at this time to help protect yourself and the network." } ], + "/tHxib": [ + { + "type": 0, + "value": "Geth is one of the three original implementations of the Ethereum protocol, written in Go." + } + ], "/ub26/": [ { "type": 0, @@ -287,6 +331,12 @@ "value": "withdrawal key" } ], + "14vTrX": [ + { + "type": 0, + "value": "While validating on the testnet, perform these simulations to learn more about your node, and better prepare yourself for Mainnet:" + } + ], "192AR6": [ { "type": 0, @@ -305,6 +355,12 @@ "value": "JSON RPC endpoint" } ], + "1G0loj": [ + { + "type": 0, + "value": "If you do not provide an address to your client, you will not receive transaction fees when your validator proposes blocks." + } + ], "1P6GMj": [ { "type": 0, @@ -359,6 +415,18 @@ "value": "More on Ethereum staking economics" } ], + "1p+pb5": [ + { + "type": 0, + "value": "fee recipient" + } + ], + "1pUw7Y": [ + { + "type": 0, + "value": "Documentation on running Nethermind" + } + ], "22EpKq": [ { "type": 0, @@ -441,6 +509,12 @@ "value": "Nimbus key management documentation" } ], + "2s0gAx": [ + { + "type": 0, + "value": "Configuring a Fee Recipient Address" + } + ], "2t/3ab": [ { "type": 0, @@ -517,6 +591,52 @@ "value": "Testing on Goerli" } ], + "3ODqP9": [ + { + "type": 0, + "value": "Depositing more than " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH to a single set of keys does not increase rewards potential, nor does accumulating rewards above " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH, as each validator is limited to an " + }, + { + "type": 1, + "value": "effectiveBalance" + }, + { + "type": 0, + "value": " of " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": ". This means that staking is done in " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH increments, each with its own set of keys and balance." + } + ], "3PZq07": [ { "type": 0, @@ -553,16 +673,16 @@ "value": "Geth on Goerli documentation" } ], - "3XK21U": [ + "3tR/V9": [ { "type": 0, - "value": "We'll help you create a signing key for every validator you want to run. Because there are no withdrawals until The Merge, you will not create your withdrawal keys now. When it is possible to withdraw your funds, you can derive your withdrawal keys from your mnemonic." + "value": "Section 2 - During setup" } ], - "3tR/V9": [ + "3wfaSi": [ { "type": 0, - "value": "Section 2 - During setup" + "value": "The Merge, EL - CL communication" } ], "3zCA2i": [ @@ -611,6 +731,12 @@ "value": "Installation" } ], + "4AVfh5": [ + { + "type": 0, + "value": "I've joined my consensus client's Discord server." + } + ], "4NvAhl": [ { "type": 0, @@ -623,6 +749,20 @@ "value": "Why a sliding scale? While we won’t get into the gory details here, the basic intution is that there needs to be a minimum number of validators (and hence a minimum amount of ETH staked) for the network to function properly. So, to incentivize more validators to join, it’s important that the interest rate remains high until this minimum number is reached." } ], + "4VQUkR": [ + { + "type": 0, + "value": "For more information, see the " + }, + { + "type": 1, + "value": "shanghaiPlanning" + }, + { + "type": 0, + "value": "." + } + ], "4hnEBA": [ { "type": 0, @@ -647,6 +787,28 @@ "value": "Why two keys instead of one?" } ], + "59y+Ik": [ + { + "type": 0, + "value": "Don't forget to head over to the " + }, + { + "type": 1, + "value": "discord" + }, + { + "type": 0, + "value": " where you'll find a " + }, + { + "type": 1, + "value": "testingTheMerge" + }, + { + "type": 0, + "value": " channel loaded with discussion on how you can get more involved and make sure you're prepared." + } + ], "5A6amM": [ { "type": 0, @@ -681,6 +843,34 @@ "value": "Romanian" } ], + "5Vrs8S": [ + { + "type": 0, + "value": "You need enough upload bandwidth too. As of " + }, + { + "type": 1, + "value": "date" + }, + { + "type": 0, + "value": " this is ~1.2-1.3 GB download and ~0.9-1 GB upload per hour, and is likely to increase." + } + ], + "5dG331": [ + { + "type": 0, + "value": "Although a validator's vote is weighted by the amount it has at stake, each validators voting weight starts at, and is capped at " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": ". It is possible to drop below this with poor node performance, but it is not possible to raise above it." + } + ], "5t8oYl": [ { "type": 0, @@ -703,6 +893,12 @@ "value": " at any time during your setup for some friendly help!" } ], + "62zRxB": [ + { + "type": 0, + "value": "I am running my own consensus layer client." + } + ], "6CK2Nu": [ { "type": 0, @@ -713,6 +909,12 @@ "value": "network" } ], + "6CN01C": [ + { + "type": 0, + "value": "After the Shanghai upgrade, your 16 ETH can then be withdrawn – with your withdrawal key – after a delay of around a day." + } + ], "6HBTTN": [ { "type": 0, @@ -737,12 +939,38 @@ "value": "You can improve the effective balance of this validator by topping up" } ], + "6VswA4": [ + { + "type": 0, + "value": "Running Nethermind Post Merge " + }, + { + "type": 1, + "value": "jwtSecretFile" + } + ], + "6iVtAr": [ + { + "type": 0, + "value": "#TestingTheMerge" + } + ], "6nh4de": [ { "type": 0, "value": "You're joining a network in its early stages. As with any new piece of software, there is the potential for software bugs. While unlikely, potential bugs may result in slashing." } ], + "6uPbCH": [ + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " version of this page" + } + ], "7+Domh": [ { "type": 0, @@ -771,6 +999,24 @@ "value": " is not supported in offline mode." } ], + "7BhfPl": [ + { + "type": 0, + "value": "Lighthouse Book" + } + ], + "7C4ikM": [ + { + "type": 0, + "value": "Merge panda emoji" + } + ], + "7Iz3JI": [ + { + "type": 0, + "value": "Consensus Client" + } + ], "7UOvbT": [ { "type": 0, @@ -853,6 +1099,20 @@ "value": "Does the contract address listed on the website match?" } ], + "8L6ufI": [ + { + "type": 0, + "value": "Step-by-step guide for how to spin up a " + }, + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " node and validator" + } + ], "8Rj/6A": [ { "type": 0, @@ -915,12 +1175,6 @@ "value": "For security, we recommend you disconnect from the internet to complete this step." } ], - "96pen8": [ - { - "type": 0, - "value": "Sharding will make more data available to the network by introducing 64 parallel chains. Each new chain will be able to handle at least as much data as mainnet today, probably more." - } - ], "9DZdsc": [ { "type": 0, @@ -941,6 +1195,12 @@ "value": "There is no easy answer to this question as there are many factors that go into this calculation." } ], + "9RBO+X": [ + { + "type": 0, + "value": "Review validator roles and responsibilities" + } + ], "9VZ9oy": [ { "type": 0, @@ -977,6 +1237,12 @@ "value": "Read options and subcommands documentation" } ], + "9qpi9h": [ + { + "type": 0, + "value": "Configure Nethermind" + } + ], "9uOFF3": [ { "type": 0, @@ -1025,32 +1291,18 @@ "value": "If you need help, check out the Python documentation." } ], - "ACstv9": [ - { - "type": 0, - "value": "I've installed and synced my execution client on " - }, - { - "type": 1, - "value": "network" - }, - { - "type": 0, - "value": " (do not wait on this as it can take several days)." - } - ], - "AEp7+F": [ + "AJD+66": [ { "type": 0, - "value": "Importantly, as a validator you'll need to post " + "value": "The Ethereum staking deposit contract requires a minimum of " }, { "type": 1, - "value": "TICKER_NAME" + "value": "minTopupValue" }, { "type": 0, - "value": " as collateral - in other words, have some funds at stake. The only way to become a validator is to make a one-way " + "value": " " }, { "type": 1, @@ -1058,17 +1310,13 @@ }, { "type": 0, - "value": " transaction to the deposit contract on the current Ethereum chain." + "value": " to be sent at one time to be accepted." } ], - "AJD+66": [ - { - "type": 0, - "value": "The Ethereum staking deposit contract requires a minimum of " - }, + "ALEY4e": [ { "type": 1, - "value": "minTopupValue" + "value": "community" }, { "type": 0, @@ -1076,11 +1324,17 @@ }, { "type": 1, - "value": "TICKER_NAME" + "value": "network" }, { "type": 0, - "value": " to be sent at one time to be accepted." + "value": " guide" + } + ], + "ARyG2Z": [ + { + "type": 0, + "value": "When withdrawals?" } ], "ATwOPg": [ @@ -1107,6 +1361,20 @@ "value": "understanding validator effective balance" } ], + "AbR1dr": [ + { + "type": 0, + "value": "This upgrade is rapidly approaching and brings a few changes that stakers should be aware of before hand. Check out the " + }, + { + "type": 1, + "value": "mergeReadinessChecklist" + }, + { + "type": 0, + "value": " to make sure you're prepared." + } + ], "Ad61gz": [ { "type": 0, @@ -1117,6 +1385,12 @@ "value": "url" } ], + "Ad8+R5": [ + { + "type": 0, + "value": "Sharding will change the requirement that full nodes carry the entire history of the chain, and instead will distribute this load amongst the network while still ensuring data availability. This will significantly expand the capacity of layer 1 Ethereum while maintaining the ability to operate a full node on consumer hardware, keeping the network decentralized." + } + ], "Affixg": [ { "type": 0, @@ -1229,6 +1503,18 @@ "value": "EthStaker community" } ], + "BXoiVG": [ + { + "type": 0, + "value": "Additional reminders" + } + ], + "BcUgLk": [ + { + "type": 0, + "value": "Suggested Fee Recipient" + } + ], "Bf2QKg": [ { "type": 0, @@ -1253,6 +1539,18 @@ "value": "Configure Lighthouse" } ], + "C3jBPI": [ + { + "type": 0, + "value": "Execution Client" + } + ], + "C82lUV": [ + { + "type": 0, + "value": "All stakers must operate an execution layer client with their consensus layer client starting at the Merge. Make sure you're prepared." + } + ], "C9fTX1": [ { "type": 0, @@ -1265,6 +1563,12 @@ "value": "Czech" } ], + "CDx/FY": [ + { + "type": 0, + "value": "By running a validator, you'll be responsible for securing the network and receive continuous payouts for actions that help the network reach consensus." + } + ], "CF9vMR": [ { "type": 0, @@ -1361,12 +1665,24 @@ "value": "Ideally your internet connection should be reliable and as close to 24/7 as possible without interruption." } ], + "Dayq/y": [ + { + "type": 0, + "value": "Configure Erigon" + } + ], "DbnQg+": [ { "type": 0, "value": "Verify the contract address" } ], + "DjhC7F": [ + { + "type": 0, + "value": "I've forwarded the necessary ports to the correct machine(s) from my router for both my EL and CL client (only open the ports that apply to your installations)." + } + ], "DoCZT1": [ { "type": 0, @@ -1483,10 +1799,16 @@ "value": "Staking Launchpad" } ], - "FEbVwB": [ + "FEbVwB": [ + { + "type": 0, + "value": "The key concept is the following:" + } + ], + "FFUr3c": [ { "type": 0, - "value": "The key concept is the following:" + "value": "Ethereum had its genesis on July 30, 2015. It is growing in size over time, and the introduction of sharding will also increase storage, memory, and bandwidth requirements." } ], "FM92S0": [ @@ -1495,6 +1817,12 @@ "value": "Note: the Beacon Chain may take several minutes to verify your deposit" } ], + "FM9lHC": [ + { + "type": 0, + "value": "all of the merge testnet configurations" + } + ], "FSRfSJ": [ { "type": 0, @@ -1519,6 +1847,20 @@ "value": "Try again" } ], + "Felr8P": [ + { + "type": 0, + "value": "A " + }, + { + "type": 1, + "value": "validatorClient" + }, + { + "type": 0, + "value": " is the software that acts on behalf of the validator by holding and using its private key to make attestations about the state of the chain. A single validator client can hold many key pairs, controlling many validators." + } + ], "FfLWt5": [ { "type": 0, @@ -1573,16 +1915,16 @@ "value": "Make sure you aren't being phished" } ], - "GN2Cu5": [ + "GKDM0r": [ { "type": 0, - "value": "consensus client" + "value": "If you have not yet done so, be sure your node is running both an EL client, as well as a CL client, to prevent downtime at time of the Merge." } ], - "GOHkCO": [ + "GN2Cu5": [ { "type": 0, - "value": "Today, you'll secure the Beacon Chain, the first main scaling upgrade. It's a separate chain that uses a proof-of-stake consensus mechanism. Eventually you'll help secure all of Ethereum, once mainnet (the Ethereum we use today) merges with the Beacon Chain." + "value": "consensus client" } ], "GOc7cL": [ @@ -1645,6 +1987,18 @@ "value": "Total amount required" } ], + "H0lQfu": [ + { + "type": 0, + "value": "Merge Readiness Checklist" + } + ], + "H4W8nj": [ + { + "type": 0, + "value": "Authenticate Engine API" + } + ], "H5+NAX": [ { "type": 0, @@ -1689,6 +2043,12 @@ "value": "Support" } ], + "I0BXSi": [ + { + "type": 0, + "value": "Configure Geth" + } + ], "I212vY": [ { "type": 0, @@ -1705,6 +2065,12 @@ "value": "Network" } ], + "I5ZPR9": [ + { + "type": 0, + "value": "When Merge?" + } + ], "I5lWZA": [ { "type": 0, @@ -1717,6 +2083,12 @@ "value": "Formerly TurboGeth, Erigon is an Ethereum client built to enable performance optimizations." } ], + "IJiJjD": [ + { + "type": 0, + "value": "All stakers must operate an execution layer client as well as a consensus layer client starting at the Merge. Make sure you're prepared." + } + ], "IJw06E": [ { "type": 0, @@ -1741,6 +2113,20 @@ "value": "Install virtualenv" } ], + "If09Ko": [ + { + "type": 0, + "value": "As such, stakers must provide a " + }, + { + "type": 1, + "value": "feeRecipient" + }, + { + "type": 0, + "value": " address to their consensus client in order to receive these rewards. This is a normal Ethereum address that you're used to." + } + ], "IhDJWs": [ { "type": 0, @@ -1821,6 +2207,12 @@ "value": "In other words, to keep you honest, your actions need to have financial consequences." } ], + "JApiO1": [ + { + "type": 0, + "value": "This is a new change and becomes a requirement at time of the Merge, so be sure you're running both before the upgrade." + } + ], "JMcBLZ": [ { "type": 0, @@ -1841,6 +2233,12 @@ "value": "4. Avoid phishing" } ], + "Ja5vXW": [ + { + "type": 0, + "value": "Further reading" + } + ], "JbVlOE": [ { "type": 0, @@ -1877,6 +2275,12 @@ "value": "What is your current operating system?" } ], + "K2pv1v": [ + { + "type": 0, + "value": "Why do I need to run an execution layer client now?" + } + ], "K6+jQ3": [ { "type": 0, @@ -1947,22 +2351,32 @@ "value": "url" } ], - "KjcAm2": [ + "KbUOQp": [ { "type": 0, - "value": "Rewards and penalties are issued roughly every six and a half minutes – a period of time known as an epoch." + "value": "Nethermind is a robust client built on .NET core designed for performance, versatility and customizability." } ], - "KqGKRA": [ + "KcdQCZ": [ { "type": 0, - "value": "Once the process is complete, you should see the following:" + "value": "CLI Syntax " + }, + { + "type": 1, + "value": "engineJwtSecret" + } + ], + "KjcAm2": [ + { + "type": 0, + "value": "Rewards and penalties are issued roughly every six and a half minutes – a period of time known as an epoch." } ], - "KrVaDy": [ + "KqGKRA": [ { "type": 0, - "value": "I've joined my client's Discord server." + "value": "Once the process is complete, you should see the following:" } ], "KvRSg5": [ @@ -1977,6 +2391,12 @@ "value": "The python3 install process may differ depending on your linux build." } ], + "KwfNme": [ + { + "type": 0, + "value": "Configure Besu" + } + ], "KxUgHu": [ { "type": 0, @@ -1991,6 +2411,12 @@ "value": "." } ], + "L1PK14": [ + { + "type": 0, + "value": "Ethereum.org - The Merge" + } + ], "L7fPF+": [ { "type": 0, @@ -2085,12 +2511,6 @@ "value": "Your initial deposit has already been made for this validator public key. Please wait and check the status of your deposit on the Beaconchain data provider." } ], - "LyJqWj": [ - { - "type": 0, - "value": "More on validator roles and responsibilities" - } - ], "M3GwXS": [ { "type": 0, @@ -2103,6 +2523,20 @@ "value": "Connect new wallet" } ], + "MKMIUm": [ + { + "type": 0, + "value": "Public testnet progress is underway. When everything is safe and ready, the core developer teams will make this known, so stay tuned to the " + }, + { + "type": 1, + "value": "blogLink" + }, + { + "type": 0, + "value": " or other client team communication channels for the latest information." + } + ], "MQTBvH": [ { "type": 0, @@ -2121,6 +2555,12 @@ "value": "What happens if my withdrawal key is stolen?" } ], + "MXVVcY": [ + { + "type": 0, + "value": "Authenticating Execution Node Connections" + } + ], "MZEcKL": [ { "type": 0, @@ -2175,6 +2615,12 @@ "value": "Top-up details" } ], + "MoIew2": [ + { + "type": 0, + "value": "Step-by-step guide for how to spin up a node and validator on merge testnets" + } + ], "N0rwnt": [ { "type": 1, @@ -2215,6 +2661,28 @@ "value": "I've secured the root account." } ], + "NTHTCh": [ + { + "type": 0, + "value": "Do not deposit more than " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH for a single validator. It will not add to your rewards and will be locked until the planned " + }, + { + "type": 1, + "value": "shanghai" + }, + { + "type": 0, + "value": " update." + } + ], "NTWnJC": [ { "type": 0, @@ -2247,12 +2715,6 @@ "value": " deposits" } ], - "NZUWs7": [ - { - "type": 0, - "value": "Remember that a validator’s vote is weighted by the amount it has at stake." - } - ], "NatYUJ": [ { "type": 0, @@ -2307,12 +2769,24 @@ "value": "." } ], + "O/dhpS": [ + { + "type": 0, + "value": "EthStaker Discord" + } + ], "O3qkOm": [ { "type": 0, "value": "Sharding" } ], + "OBmVqN": [ + { + "type": 0, + "value": "Hyperledger Besu is an open-source Ethereum client developed under the Apache 2.0 license and written in Java." + } + ], "OIvXIO": [ { "type": 0, @@ -2327,6 +2801,12 @@ "value": " deposits" } ], + "OJOu1W": [ + { + "type": 0, + "value": "Documentation on running Erigon" + } + ], "ON2tXT": [ { "type": 0, @@ -2339,6 +2819,30 @@ "value": "More on ConsenSys" } ], + "OmAmmi": [ + { + "type": 0, + "value": "More on the Merge" + } + ], + "Oop93W": [ + { + "type": 1, + "value": "site" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " announcement" + } + ], "OsO8ik": [ { "type": 0, @@ -2407,10 +2911,10 @@ "value": "Your network has changed" } ], - "PIQDar": [ + "Pd0hC/": [ { "type": 0, - "value": "We recommend you go through the entire process on a testnet first to get comfortable." + "value": "Ethereum Foundation Blog" } ], "PfoT0C": [ @@ -2461,6 +2965,12 @@ "value": "clipboard" } ], + "Q2CQuF": [ + { + "type": 0, + "value": "Now that transactions must be processed by validators, the validators that propose blocks including these transactions are eligible to receive the transaction fee tips. These are also known as priority fees, and are the unburnt portion of gas fees." + } + ], "Q8P0rZ": [ { "type": 0, @@ -2511,12 +3021,56 @@ "value": "Note: by default, VMs may disable NTP so you may need to find a work-around for your environment." } ], + "QRUdO6": [ + { + "type": 0, + "value": "Set fee recipient" + } + ], + "QRwpD3": [ + { + "type": 0, + "value": "Learn about ports in networking" + } + ], "QWDxrk": [ { "type": 0, "value": "Key management" } ], + "QapNAM": [ + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " homepage" + } + ], + "QgOvR0": [ + { + "type": 0, + "value": "Importantly, as a validator you'll need to post " + }, + { + "type": 1, + "value": "TICKER_NAME" + }, + { + "type": 0, + "value": " as collateral—in other words, have some funds at stake. The only way to become a validator is to make a one-way " + }, + { + "type": 1, + "value": "TICKER_NAME" + }, + { + "type": 0, + "value": " transaction to the deposit contract on the current Ethereum chain." + } + ], "QlsDcr": [ { "type": 0, @@ -2557,12 +3111,24 @@ "value": " deposit that was accepted but is being validated on chain. It will be available here when beaconcha.in has confirmed 2048 blocks." } ], + "QtNVQP": [ + { + "type": 0, + "value": "There’s no way for you to re-activate your validator, and you won’t be able to transfer or withdraw your funds until the Shanghai upgrade planned to follow the Merge (which means your funds will remain inaccessible until then)." + } + ], "R8eePn": [ { "type": 0, "value": "If you're slashed you're prevented from participating in the protocol further and are forcibly exited." } ], + "R9umf+": [ + { + "type": 0, + "value": "Fees rewards are coming to validators, don't miss out!" + } + ], "RCGrka": [ { "type": 0, @@ -2605,16 +3171,24 @@ "value": "How many validators would you like to run?" } ], - "Rj0OAx": [ + "RkSC5Q": [ + { + "type": 0, + "value": "Reminder, the Merge upgrade will " + }, + { + "type": 1, + "value": "not" + }, { "type": 0, - "value": "Or in other words, a human running a computer process. This process proposes and vouches for new blocks to be added to the blockchain." + "value": " implement withdrawing or transferring of staked ETH. This feature will be included in the Shanghai upgrade planned to follow the Merge." } ], - "RkbwNZ": [ + "RqTB/U": [ { "type": 0, - "value": "Withdrawing your deposit won't be possible until mainnet merges with the Beacon Chain." + "value": "Ethereum Roadmap FAQ" } ], "Rr2lI/": [ @@ -2647,6 +3221,12 @@ "value": "The Teku config file environment variable" } ], + "SEt7ZX": [ + { + "type": 0, + "value": "Ongoing thread of Ethereum Merge info" + } + ], "SGzXoY": [ { "type": 0, @@ -2665,12 +3245,32 @@ "value": "Avoid overly-complicated setups and be aware of trade offs. Being offline for brief periods of time will result in small inactivity penalities, but will be recouped easily after being online again for about the same amount of time. Complicated power backups can add to the expense of your setup, and redundant backup validators can lead to slashing." } ], + "SVLpih": [ + { + "type": 0, + "value": "The long awaited transition to proof-of-stake via the Merge is rapidly approaching, bringing Ethereum one step closer to a more sustainable ecosystem." + } + ], "SaR1pU": [ { "type": 0, "value": "Deposit already exists" } ], + "Sb67Wo": [ + { + "type": 0, + "value": "Attention stakers: The Merge is approaching! Review the " + }, + { + "type": 1, + "value": "mergeReadinessChecklist" + }, + { + "type": 0, + "value": " to make sure you're ready." + } + ], "Sd+Pq6": [ { "type": 0, @@ -2713,6 +3313,12 @@ "value": "Required" } ], + "SpI4Xu": [ + { + "type": 0, + "value": "The Merge upgrade prepared the chain for future scaling upgrades by bringing proof-of-stake consensus together with Mainnet. This unlocks the ability to implement data sharding to further scale network capacity and throughput." + } + ], "SqKNq2": [ { "type": 0, @@ -2735,30 +3341,56 @@ "value": "Validators and Ethereum" } ], - "TLEziZ": [ + "TMw9oz": [ { "type": 0, - "value": "The Beacon Chain had its genesis on " - }, + "value": "Visit this site on desktop to become a validator." + } + ], + "TNTj2N": [ { "type": 1, - "value": "date" + "value": "community" }, { "type": 0, - "value": ". It is growing in size over time, and the introduction of sharding will also increase storage, memory, and bandwidth requirements." + "value": " merge testnet guide" } ], - "TMw9oz": [ + "TbV4N8": [ + { + "type": 1, + "value": "community" + }, { "type": 0, - "value": "Visit this site on desktop to become a validator." + "value": " Discord (faucet)" } ], "TfNuWP": [ { "type": 0, - "value": "virtualenv would help you to create an isolated Python environment for deposit-cli tool." + "value": "virtualenv would help you to create an isolated Python environment for deposit-cli tool." + } + ], + "TfVy1O": [ + { + "type": 0, + "value": "View the Merge Readiness Checklist" + } + ], + "ToUcj8": [ + { + "type": 0, + "value": "Merge Readiness: In addition to an execution client, after the Merge node operators must also run an " + }, + { + "type": 1, + "value": "alternateClient" + }, + { + "type": 0, + "value": " to remain active." } ], "Tpe6yK": [ @@ -2851,6 +3483,12 @@ "value": "If you do not have a testnet folder it is likely you have not built and run Nimbus correctly. Run the make commands again." } ], + "V0mmZE": [ + { + "type": 0, + "value": "After the Merge, your validator will also be responsible for processing transactions, and thus be entitled to unburnt gas fees associated with those transactions in blocks your validator proposes. These fees are accounted for on the execution layer, not the consensus layer, and thus require a traditional Ethereum address to be provided to your client." + } + ], "V19Udt": [ { "type": 0, @@ -2993,6 +3631,12 @@ "value": "I am certain that the validator I am topping up is my validator." } ], + "Vp4z/b": [ + { + "type": 0, + "value": "Stakers running their own execution layer is necessary for the decentralization of the network." + } + ], "VzGJkB": [ { "type": 0, @@ -3011,6 +3655,12 @@ "value": "Japanese" } ], + "W6w5Wb": [ + { + "type": 0, + "value": "Transfers between validators and withdrawals aren't possible yet. Withdrawal functionality is currently a top priority, and is planned to be rolled out in the next network upgrade, known as the Shanghai upgrade." + } + ], "W8nHSd": [ { "type": 0, @@ -3035,6 +3685,18 @@ "value": " will NOT be counted in your effective balance on the Beacon Chain. You also won't be able to withdraw it until the Beacon Chain merges with mainnet." } ], + "WGPxqY": [ + { + "type": 0, + "value": "Since the genesis of the Beacon Chain, many validators running their own consensus layer (CL) client have opted to use third-party services for their execution layer (EL) connection. This has been acceptable since the only thing being listened to has been the staking deposit contract." + } + ], + "WJA1/H": [ + { + "type": 0, + "value": "Remember" + } + ], "WMLn/w": [ { "type": 1, @@ -3051,12 +3713,24 @@ "value": "These steps are optional but are recommended to optimize your node." } ], + "WTfeiS": [ + { + "type": 0, + "value": "Post-merge, an Ethereum node will be comprised of both an execution layer (EL) client, and a consensus layer (CL) client. EL + CL = Ethereum." + } + ], "WdDGn6": [ { "type": 0, "value": "An implementation of the consensus protocol with a focus on usability, security, and reliability. Prysm is developed by Prysmatic Labs, a company with the sole focus on the development of their client." } ], + "Wj99ga": [ + { + "type": 0, + "value": "Go Ethereum - The Merge" + } + ], "WkrNSk": [ { "type": 0, @@ -3069,6 +3743,18 @@ "value": "Please accept the conditions above." } ], + "WptkFF": [ + { + "type": 0, + "value": "Both layers required" + } + ], + "Wxmhku": [ + { + "type": 0, + "value": "These fees are paid by whoever submitted the transaction and come in the form of ETH on the execution layer (Mainnet). These rewards are not accounted for in your validator balance which is maintained on the consensus layer." + } + ], "WxqnJn": [ { "type": 0, @@ -3087,6 +3773,12 @@ "value": "Has the block explorer named the contract?" } ], + "X3rOq5": [ + { + "type": 0, + "value": "At time of the Merge, Infura and Alchemy will no longer be viable options to outsource execution layer responsibilities." + } + ], "X5KFEh": [ { "type": 0, @@ -3099,6 +3791,12 @@ "value": "More on installing pip" } ], + "XBYgM2": [ + { + "type": 0, + "value": "As a staker you are required to maintain and operate a node, running BOTH a consensus layer client AND an execution layer client." + } + ], "XRxD8r": [ { "type": 0, @@ -3237,6 +3935,18 @@ "value": "Keys" } ], + "YHk9Pe": [ + { + "type": 0, + "value": "With the Merge, the burden of processing transactions will fall on validators, as proof-of-work is deprecated. To sign off on the validity of these transactions, a validator must have trusted access to the events of the execution layer. Trust only your own node." + } + ], + "YIjr32": [ + { + "type": 0, + "value": "For those who want more control and less hand-holding" + } + ], "YP03/j": [ { "type": 0, @@ -3271,6 +3981,36 @@ "value": " validators. Please make sure you keep these safe, preferably offline. Your validator keystores should be available in the selected directory." } ], + "YTNPFn": [ + { + "type": 0, + "value": "Instructions for how to set this JWT secret vary depending on the client—node operators should refer to their clients' documentation for instructions about how to generate and configure these." + } + ], + "YX6pc0": [ + { + "type": 1, + "value": "client" + }, + { + "type": 0, + "value": " is a " + }, + { + "type": 1, + "value": "layerType" + }, + { + "type": 0, + "value": "." + } + ], + "Yd6MEN": [ + { + "type": 0, + "value": "Execution clients" + } + ], "Yganfl": [ { "type": 0, @@ -3373,6 +4113,20 @@ "value": "Why is there a wait?" } ], + "ZdT9Bs": [ + { + "type": 0, + "value": "Your validator will also receive unburnt gas fees when proposing blocks. Validators are chosen randomly by the protocol to propose blocks, and only one validator can propose a block for each 12-second slot. There are 7200 slots each day, so each validator has 7200 chances-per-day to propose a block. If there are 360,000 validators, each validator will " + }, + { + "type": 1, + "value": "average" + }, + { + "type": 0, + "value": " a block proposal every 50 days." + } + ], "ZlLjuq": [ { "type": 0, @@ -3399,12 +4153,6 @@ "value": "Section 1 - Before you start" } ], - "Zxm0fh": [ - { - "type": 0, - "value": "The merge will see the Ethereum Mainnet we use today merge with the Beacon Chain. This is when Ethereum will fully transition to proof-of-stake." - } - ], "ZzTcj5": [ { "type": 0, @@ -3505,6 +4253,12 @@ "value": "Use this as a reference during client setup to check off important steps." } ], + "bRGoZZ": [ + { + "type": 0, + "value": "See your consensus layer client documentation for client-specific instructions on how to set this." + } + ], "bUk/lm": [ { "type": 0, @@ -3523,12 +4277,38 @@ "value": "Be sure to account for enough space on your drive until you run maintenance on your node." } ], + "bX1fts": [ + { + "type": 0, + "value": "Merge readiness checklist" + } + ], "bbr+aD": [ { "type": 0, "value": "The YAML files can have different syntaxes." } ], + "be6WvD": [ + { + "type": 0, + "value": "A " + }, + { + "type": 1, + "value": "nodeOperator" + }, + { + "type": 0, + "value": " is the human being who makes sure the client software is running appropriately, maintaining hardware as needed." + } + ], + "bgyJfz": [ + { + "type": 0, + "value": "What clients do I need to run?" + } + ], "bnuvhg": [ { "type": 0, @@ -3541,10 +4321,10 @@ "value": "Python installation instructions" } ], - "c9DSZ1": [ + "by+LIm": [ { "type": 0, - "value": "We strongly recommended you complete these steps on the current testnet before mainnet." + "value": "What is a validator client?" } ], "cHUoV9": [ @@ -3571,6 +4351,12 @@ "value": "Current APR" } ], + "cUvpWk": [ + { + "type": 0, + "value": "More on data sharding" + } + ], "cav520": [ { "type": 0, @@ -3589,12 +4375,6 @@ "value": "More on PegaSys Teku" } ], - "ckaUkz": [ - { - "type": 0, - "value": "A validator is an entity that participates in the consensus of the Ethereum protocol." - } - ], "clUb0+": [ { "type": 0, @@ -3613,6 +4393,18 @@ "value": "What are withdrawal credentials?" } ], + "cwYSyN": [ + { + "type": 0, + "value": "Task 3" + } + ], + "cyNFM3": [ + { + "type": 0, + "value": "Withdrawing your deposit will not be possible until the Shanghai upgrade planned for after the Merge." + } + ], "cyR7Kh": [ { "type": 0, @@ -3665,24 +4457,16 @@ "value": "What exactly is a validator?" } ], - "dNh0YZ": [ - { - "type": 0, - "value": "As of " - }, - { - "type": 1, - "value": "date" - }, + "dTOtPO": [ { "type": 0, - "value": ", you'll need ~400GB for the mainnet execution chain data alone (growing at ~1GB/day)." + "value": "Top Up" } ], - "dTOtPO": [ + "da/gCQ": [ { "type": 0, - "value": "Top Up" + "value": "Task 2" } ], "deLJOg": [ @@ -3697,6 +4481,12 @@ "value": "Where can I find troubleshooting support?" } ], + "dsQVUw": [ + { + "type": 0, + "value": "The Nimbus book" + } + ], "dvr19k": [ { "type": 0, @@ -3715,6 +4505,12 @@ "value": "Upload deposit data" } ], + "e1dCqL": [ + { + "type": 0, + "value": "Shanghai Planning issue on GitHub" + } + ], "e4f94H": [ { "type": 0, @@ -3741,6 +4537,16 @@ "value": "code3" } ], + "e4wHN4": [ + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " Staking Launchpad" + } + ], "eF9RbC": [ { "type": 0, @@ -3765,16 +4571,16 @@ "value": "It specifies who is staking, who is validating, how much is being staked, and who can withdraw the funds." } ], - "eaU/aL": [ + "eX072N": [ { "type": 0, - "value": "To maximize security and efficiency of your node, use dedicated hardware to run your clients. This reduces risk of malware exposure and minimizes competition for computing resources, ensuring your node handles the network load and its validator responsibilities at all times." + "value": "Erigon is an execution client on the efficiency frontier, written in Go." } ], - "egVO5r": [ + "eaU/aL": [ { "type": 0, - "value": "More on shard chains" + "value": "To maximize security and efficiency of your node, use dedicated hardware to run your clients. This reduces risk of malware exposure and minimizes competition for computing resources, ensuring your node handles the network load and its validator responsibilities at all times." } ], "elCkOU": [ @@ -3845,6 +4651,26 @@ "value": "What happens if I lose my signing key?" } ], + "fBCdim": [ + { + "type": 0, + "value": "Previously a Beacon Node (consensus layer) only had to watch the staking deposit contract on the execution layer in order to know which validator accounts had deposited " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH. This information was easily served by and obtained from third-party providers such as Infura or Alchemy." + } + ], + "fDY/uQ": [ + { + "type": 0, + "value": "Teku - The Merge" + } + ], "fHLKXR": [ { "type": 0, @@ -3977,6 +4803,28 @@ "value": "YES" } ], + "grF2gm": [ + { + "type": 0, + "value": "Each key-pair associated with a validator requires locking " + }, + { + "type": 1, + "value": "ethPerValidator" + }, + { + "type": 0, + "value": " to be activated, which represents your initial balance as well as your " + }, + { + "type": 1, + "value": "initialAndMaximum" + }, + { + "type": 0, + "value": " voting power for any validator." + } + ], "gsuLMm": [ { "type": 0, @@ -4031,20 +4879,6 @@ "value": "Your stake" } ], - "h8ZHus": [ - { - "type": 0, - "value": "Transfers between validators aren't possible yet. You will have to wait until mainnet merges with the Beacon Chain (around two years) before you can withdraw or transfer your " - }, - { - "type": 1, - "value": "TICKER_NAME" - }, - { - "type": 0, - "value": "." - } - ], "hFzE1M": [ { "type": 0, @@ -4057,6 +4891,12 @@ "value": "Desktop only" } ], + "hICY9k": [ + { + "type": 0, + "value": "I have provided an Ethereum address to my validator where I would like my fee rewards to be deposited." + } + ], "hPCn9f": [ { "type": 0, @@ -4097,6 +4937,20 @@ "value": "More on effective balance" } ], + "hlxt3T": [ + { + "type": 0, + "value": "Limiting the maximum stake to " + }, + { + "type": 1, + "value": "pricePerValidator" + }, + { + "type": 0, + "value": " ETH per validator encourages decentralization of power as it prevents any single validator from having an excessively large vote on the state of the chain. It also limits the amount of ETH that can be exited from staking at any given time, as the number of validator that can exit in a given time period is limited. This helps protect the network against certain attacks." + } + ], "huEFUF": [ { "type": 0, @@ -4117,6 +4971,12 @@ "value": "I understand that it is important to keep my validator online and updated." } ], + "hzX7K4": [ + { + "type": 0, + "value": "Task 1" + } + ], "iCpuph": [ { "type": 0, @@ -4157,6 +5017,12 @@ "value": ", otherwise the deposit will be invalid." } ], + "iX90gu": [ + { + "type": 0, + "value": "I've joined my execution client's Discord server." + } + ], "iZuIgB": [ { "type": 0, @@ -4223,16 +5089,30 @@ "value": " deposits" } ], + "j0Ee5w": [ + { + "type": 0, + "value": "I am running my own execution layer client." + } + ], "j8GPOH": [ { "type": 0, "value": "Formerly known as Artemis, Teku is a consensus client built to meet institutional needs and security requirements. PegaSys is an arm of ConsenSys, dedicated to building enterprise-ready clients and tools for interacting with the core Ethereum platform." } ], - "jDv/zO": [ + "jQTc9t": [ + { + "type": 0, + "value": "Visit here to get the latest information on how to get involved with " + }, + { + "type": 1, + "value": "testingTheMerge" + }, { "type": 0, - "value": "While validating on the testnet, perform these simulations to learn more about your node, and better prepare yourself for mainnet:" + "value": " on other public testnets as details unfold." } ], "jXer8/": [ @@ -4271,6 +5151,12 @@ "value": "Prysm installation documentation" } ], + "jlx7pU": [ + { + "type": 0, + "value": "Documentation on running Geth" + } + ], "jm79h1": [ { "type": 0, @@ -4295,6 +5181,20 @@ "value": "Nimbus documentation" } ], + "jzGCBy": [ + { + "type": 0, + "value": "The " + }, + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " faucets have been abused, and are limited, but the folks at EthStaker will do their best to help you out" + } + ], "k43c+l": [ { "type": 0, @@ -4379,6 +5279,20 @@ "value": "You're on the testnet" } ], + "l3ztMu": [ + { + "type": 0, + "value": "As of " + }, + { + "type": 1, + "value": "date" + }, + { + "type": 0, + "value": ", you'll need ~1TB for the Mainnet execution chain data alone (growing at >1GB/day)." + } + ], "l4nLft": [ { "type": 0, @@ -4459,6 +5373,20 @@ "value": " deposit have a URL you expect?" } ], + "lNzqua": [ + { + "type": 0, + "value": "I have set up a shared JWT secret and made it available to " + }, + { + "type": 1, + "value": "both" + }, + { + "type": 0, + "value": " my execution layer client, and my consensus layer client (beacon node)" + } + ], "lQzdpT": [ { "type": 0, @@ -4547,6 +5475,20 @@ "value": "This is a non-reversible transaction." } ], + "lmr40S": [ + { + "type": 0, + "value": "This communication is secured using a " + }, + { + "type": 1, + "value": "jwt" + }, + { + "type": 0, + "value": " secret, which is a secret key that is shared only between the two clients to authenticate one another. This shared JWT secret must be made available to each client (both EL and CL) to properly authenticate the Engine API, allowing them to properly communicate between one another." + } + ], "lo+Qqn": [ { "type": 0, @@ -4565,12 +5507,38 @@ "value": "Hard drive" } ], + "mUZnem": [ + { + "type": 0, + "value": "We strongly recommend you go through the entire process on a testnet first to get comfortable before risking real ETH." + } + ], "mZOXtM": [ { "type": 0, "value": "Validators" } ], + "mc27Pv": [ + { + "type": 0, + "value": "A " + }, + { + "type": 1, + "value": "validator" + }, + { + "type": 0, + "value": " is a virtual entity that lives on the Beacon Chain, represented by a balance, public key, and other properties, and participates in consensus of the Ethereum network." + } + ], + "mcQpea": [ + { + "type": 0, + "value": "Everything you need to get started with the network, including a faucet" + } + ], "mhyltV": [ { "type": 0, @@ -4589,12 +5557,6 @@ "value": "Risks and acknowledgements:" } ], - "n7yYXG": [ - { - "type": 0, - "value": "Service" - } - ], "nBhisA": [ { "type": 0, @@ -4677,6 +5639,16 @@ "value": "Advanced system architecture" } ], + "nyx/4g": [ + { + "type": 0, + "value": "How to run a node on " + }, + { + "type": 1, + "value": "network" + } + ], "nz27+c": [ { "type": 0, @@ -4717,24 +5689,16 @@ "value": "Configure your consensus client" } ], - "oPdwwC": [ - { - "type": 0, - "value": "Limiting the maximum stake to " - }, - { - "type": 1, - "value": "pricePerValidator" - }, + "oWhj8Q": [ { "type": 0, - "value": " ETH encourages decentralization of power as it prevents any single validator from having an excessively large vote on the state of the chain." + "value": "How often are rewards/penalties issued?" } ], - "oWhj8Q": [ + "obp8vV": [ { "type": 0, - "value": "How often are rewards/penalties issued?" + "value": "Documentation on running Besu" } ], "ogbG7r": [ @@ -4765,6 +5729,20 @@ "value": "Responsibilities" } ], + "olByWa": [ + { + "type": 0, + "value": "While waiting for the Mainnet transition to proof-of-stake, stakers are encouraged to participate in " + }, + { + "type": 1, + "value": "testingTheMerge" + }, + { + "type": 0, + "value": ". This is a great way to learn more about the Merge, practice going through it before Mainnet, and gain confidence in your setup." + } + ], "omJNJw": [ { "type": 0, @@ -4887,28 +5865,42 @@ "value": "I've simulated how to manually stop and restart my Beacon Node (BN) and Validator Client (VC) gracefully." } ], + "pxfiWL": [ + { + "type": 1, + "value": "networkBold" + }, + { + "type": 0, + "value": " is a younger public testnet that has already undergone its transition to proof-of-stake after undergoing a successful merge upgrade in March 2022. Kiln is open for anyone to interact with. Try sending some ETH, interacting with some contracts, or deploying your own." + } + ], "pyWt01": [ { "type": 0, "value": "Deposit summary" } ], - "q2XW/k": [ + "q+ux+M": [ + { + "type": 1, + "value": "network" + }, { "type": 0, - "value": "If your withdrawal key is stolen, the thief can transfer your validator’s balance, but only once the validator has exited." + "value": " is open for anyone to interact with. Try sending some transactions, running a validator on its new beacon chain, or see if you can get slashed!" } ], - "qB6aU6": [ + "q2XW/k": [ { "type": 0, - "value": "What happened to 'Eth2?'" + "value": "If your withdrawal key is stolen, the thief can transfer your validator’s balance, but only once the validator has exited." } ], - "qDcbPp": [ + "qB6aU6": [ { "type": 0, - "value": "Your 16 ETH can then be withdrawn – with your withdrawal key – after a delay of around a day." + "value": "What happened to 'Eth2?'" } ], "qDvaNm": [ @@ -4925,6 +5917,20 @@ "value": " to withdraw my funds." } ], + "qEsYC0": [ + { + "type": 0, + "value": "You can also check out GitHub for " + }, + { + "type": 1, + "value": "allConfigs" + }, + { + "type": 0, + "value": "." + } + ], "qK4+NQ": [ { "type": 0, @@ -4973,6 +5979,12 @@ "value": "I understand the early adopter and slashing risks." } ], + "qx+3RQ": [ + { + "type": 0, + "value": "JWT" + } + ], "r2BH1M": [ { "type": 0, @@ -4991,12 +6003,6 @@ "value": "Phishing guide" } ], - "rFe61n": [ - { - "type": 0, - "value": "As a validator, you'll be responsible for securing the network and receive continuous payouts for actions that help the network reach consensus." - } - ], "rMjMmc": [ { "type": 0, @@ -5011,12 +6017,6 @@ "value": " to connect your consensus node to the JSON RPC endpoint. This will enable the JSON RPC services on the default 8545 port." } ], - "rNEdex": [ - { - "type": 0, - "value": "you can think of a validator as a voter for new blocks" - } - ], "rTSJI9": [ { "type": 0, @@ -5047,6 +6047,20 @@ "value": "Given a fixed total number of validators, the rewards/penalties predominantly scale with the balance of the validator – attesting with a higher balance results in larger rewards/penalties whereas attesting with a lower balance results in lower rewards/penalties." } ], + "rgjQYI": [ + { + "type": 0, + "value": "Merge Readiness: In addition to a consensus client, after the Merge node operators must also run an " + }, + { + "type": 1, + "value": "alternateClient" + }, + { + "type": 0, + "value": " to remain active." + } + ], "rnDgcN": [ { "type": 0, @@ -5129,6 +6143,26 @@ "value": "CPU and RAM" } ], + "saDFoR": [ + { + "type": 0, + "value": "Bonus" + } + ], + "scfDDt": [ + { + "type": 0, + "value": "Communication between the execution layer and consensus layer will occur using the " + }, + { + "type": 1, + "value": "engineApi" + }, + { + "type": 0, + "value": ". This is a new set of JSON RPC methods that can be used to communicate between the two client layers." + } + ], "sdQRah": [ { "type": 0, @@ -5237,6 +6271,12 @@ "value": " client and set up a node" } ], + "tp1IPS": [ + { + "type": 0, + "value": "Configure the fee recipient" + } + ], "tsfX5f": [ { "type": 0, @@ -5291,20 +6331,6 @@ "value": "Uptime" } ], - "uCikFk": [ - { - "type": 0, - "value": "You need enough upload bandwidth too. As of " - }, - { - "type": 1, - "value": "date" - }, - { - "type": 0, - "value": " this is ~700-800 MB/hour, and is likely to increase." - } - ], "uJzGSb": [ { "type": 0, @@ -5327,6 +6353,12 @@ "value": "Validator checklist" } ], + "uUy3NQ": [ + { + "type": 0, + "value": "I understand that I will earn the unburnt transaction fees (tips/priority fees) when I propose a block, and this is accounted for on the execution layer, not my validator balance." + } + ], "ubKWX8": [ { "type": 0, @@ -5367,18 +6399,10 @@ "value": "Become a validator with Nimbus" } ], - "unzIoE": [ - { - "type": 0, - "value": "Before you can run a validator and start to secure the network, you need to stake " - }, - { - "type": 1, - "value": "pricePerValidator" - }, + "uoKhQB": [ { "type": 0, - "value": " ETH. This forms your initial balance." + "value": "Authentication API" } ], "up+5YH": [ @@ -5395,6 +6419,12 @@ "value": " deposits?" } ], + "vBJ79e": [ + { + "type": 0, + "value": "I've simulated how to safely migrate from one execution client to another." + } + ], "vBOf5K": [ { "type": 0, @@ -5453,12 +6483,6 @@ "value": "Chinese (simplified)" } ], - "va96SS": [ - { - "type": 0, - "value": "I've forwarded the necessary ports to the correct machine(s) from my router (only open the ports that apply to your installation)." - } - ], "vbVsqW": [ { "type": 0, @@ -5473,16 +6497,16 @@ "value": " as soon as possible. And join the EthStaker community for support and discussion with fellow validators." } ], - "vg1dVR": [ + "vej0DE": [ { "type": 0, - "value": "With your signing key, you could attempt to quickly exit the validator and then transfer the funds – with the withdrawal key – before the thief." + "value": "Today, you'll secure the Beacon Chain, the first main scaling upgrade. It's a separate chain that uses a proof-of-stake consensus mechanism. Very soon you'll help secure all of Ethereum, after Mainnet (the Ethereum we use today) merges with the Beacon Chain." } ], - "vkozFq": [ + "vg1dVR": [ { "type": 0, - "value": "There’s no way for you to re-activate your validator, and you won’t be able to transfer or withdraw your funds until after the post-merge cleanup upgrade, currently planned to follow the merge (which means your funds will remain inaccessible until then)." + "value": "With your signing key, you could attempt to quickly exit the validator and then transfer the funds – with the withdrawal key – before the thief." } ], "vyvUB5": [ @@ -5521,6 +6545,12 @@ "value": "Initial setup" } ], + "wPR6Js": [ + { + "type": 0, + "value": "Before the switch, there are a couple things solo stakers and validator services need to be aware of, and a few tasks you may need to attend to." + } + ], "wawegX": [ { "type": 0, @@ -5539,6 +6569,12 @@ "value": "More on proof of stake" } ], + "wea8Ie": [ + { + "type": 0, + "value": "The execution and consensus layers work together tightly, and require authentication to stay safe." + } + ], "wm04oC": [ { "type": 0, @@ -5569,6 +6605,12 @@ "value": "Validating in Ethereum is not the same as mining. The outcomes are similar: the work you do will extend and secure the chain. But the process is completely different because they use different consensus mechanisms." } ], + "x4/9vY": [ + { + "type": 0, + "value": "We strongly recommended you complete these steps on the current testnet before Mainnet." + } + ], "x8+8fi": [ { "type": 0, @@ -5609,6 +6651,20 @@ "value": "Block rewards are calculated using a sliding scale based on the total amount of ETH staked on the network." } ], + "xXKkhR": [ + { + "type": 0, + "value": "I've installed and synced my " + }, + { + "type": 1, + "value": "network" + }, + { + "type": 0, + "value": " execution client (do not wait on this as it can take several days)." + } + ], "xXWzDf": [ { "type": 0, @@ -5627,6 +6683,22 @@ "value": "Besu is written in Java and released under the Apache 2.0 Licence." } ], + "xxbUJa": [ + { + "type": 0, + "value": "Execution Clients: " + }, + { + "type": 1, + "value": "clientName" + } + ], + "xyMh/n": [ + { + "type": 0, + "value": "Mega Merge Resource List" + } + ], "y44jV2": [ { "type": 0, @@ -5639,10 +6711,10 @@ "value": "Configure time sync" } ], - "y7dWNc": [ + "y86+cK": [ { "type": 0, - "value": "Importantly, a validator’s vote is weighted by the amount it has at stake." + "value": "What is a node operator?" } ], "yFtJza": [ @@ -5663,18 +6735,10 @@ "value": "I am keeping my key(s) safe and have written down my mnemonic phrase." } ], - "yT2EZO": [ - { - "type": 0, - "value": "In other words, " - }, - { - "type": 1, - "value": "boldSummary" - }, + "yaf+Vw": [ { "type": 0, - "value": ". The more votes a block gets, the more likely it is to be added to the chain." + "value": "Two-way communication between the EL client and CL client requires a JWT secret for authentication, and is essential for your node to be functional." } ], "ydh1KU": [ @@ -5713,6 +6777,28 @@ "value": "Make sure that your node has more than 20 peers." } ], + "z/ToMo": [ + { + "type": 0, + "value": "Once the transition to proof-of-stake is complete via the Merge, validators will be responsible for processing transactions and signing off on their validity. This data will " + }, + { + "type": 1, + "value": "not" + }, + { + "type": 0, + "value": " be available from popular third-party sources after the Merge and will result in your validator being offline. When data sharding is implemented, validators will also be at risk of slashing under the " + }, + { + "type": 1, + "value": "pocGame" + }, + { + "type": 0, + "value": "." + } + ], "z/ZhML": [ { "type": 0, @@ -5793,6 +6879,12 @@ "value": "Node security" } ], + "zkT9Jx": [ + { + "type": 0, + "value": "We'll help you create a signing key for every validator you want to run. Because there are no withdrawals until the Shanghai upgrade planned to follow the Merge, you will not create your withdrawal keys now. When it is possible to withdraw your funds, you can derive your withdrawal keys from your mnemonic." + } + ], "zmMF+G": [ { "type": 0, @@ -5806,5 +6898,11 @@ "type": 0, "value": " testnet" } + ], + "zqOrZZ": [ + { + "type": 0, + "value": "Look over the Merge Readiness Checklist" + } ] } \ No newline at end of file diff --git a/src/intl/en.json b/src/intl/en.json index 6b1b4ed2..f925a24c 100644 --- a/src/intl/en.json +++ b/src/intl/en.json @@ -35,6 +35,9 @@ "/5Hyyf": { "message": "Indonesian" }, + "/E/Zm8": { + "message": "Configure the Java Web" + }, "/QPc9s": { "message": "You can signal your intent to stop validating by signing a voluntary exit message with your validator." }, @@ -53,12 +56,21 @@ "/WenEu": { "message": "You are responsible for the transaction. Fraudulent websites might try and lure you into sending the {pricePerValidator} to them, instead of the official deposit contract. Make sure that the address you are sending the transaction to is the correct address." }, + "/h0DGY": { + "message": "Why the {pricePerValidator} ETH maximum?" + }, + "/iuoP7": { + "message": "{networkBold} will be the first longstanding public testnet to undergo The Merge. Historically a proof-of-work testnet, {network} now has its own proof-of-stake beacon chain which will be merged with the execution layer in the near future (if it hasn't happened already)." + }, "/jJLYy": { "message": "Transactions" }, "/rmnC0": { "message": "If at all possible, consider running another client at this time to help protect yourself and the network." }, + "/tHxib": { + "message": "Geth is one of the three original implementations of the Ethereum protocol, written in Go." + }, "/ub26/": { "message": "Understand the risks" }, @@ -108,6 +120,9 @@ "122+yR": { "message": "withdrawal key" }, + "14vTrX": { + "message": "While validating on the testnet, perform these simulations to learn more about your node, and better prepare yourself for Mainnet:" + }, "192AR6": { "message": "More on staking" }, @@ -117,6 +132,9 @@ "1FdDAV": { "message": "JSON RPC endpoint" }, + "1G0loj": { + "message": "If you do not provide an address to your client, you will not receive transaction fees when your validator proposes blocks." + }, "1P6GMj": { "message": "Monitoring" }, @@ -144,6 +162,12 @@ "1ingnQ": { "message": "More on Ethereum staking economics" }, + "1p+pb5": { + "message": "fee recipient" + }, + "1pUw7Y": { + "message": "Documentation on running Nethermind" + }, "22EpKq": { "description": "{JSON} is filetype extension", "message": "This isn't a valid {JSON} file" @@ -173,6 +197,9 @@ "2iH8Zc": { "message": "Nimbus key management documentation" }, + "2s0gAx": { + "message": "Configuring a Fee Recipient Address" + }, "2t/3ab": { "message": "The other file you just generated is {depositDataJson}. This file contains the public key(s) associated with your validator(s); You will need to upload this in the next step." }, @@ -197,6 +224,9 @@ "3NHygY": { "message": "Testing on Goerli" }, + "3ODqP9": { + "message": "Depositing more than {pricePerValidator} ETH to a single set of keys does not increase rewards potential, nor does accumulating rewards above {pricePerValidator} ETH, as each validator is limited to an {effectiveBalance} of {pricePerValidator}. This means that staking is done in {pricePerValidator} ETH increments, each with its own set of keys and balance." + }, "3PZq07": { "message": "As such, it’s a good idea to create your keys from mnemonics which act as another backup. This will be the default for validators who join via this site’s onboarding process." }, @@ -215,12 +245,12 @@ "3URRZK": { "message": "Geth on Goerli documentation" }, - "3XK21U": { - "message": "We'll help you create a signing key for every validator you want to run. Because there are no withdrawals until The Merge, you will not create your withdrawal keys now. When it is possible to withdraw your funds, you can derive your withdrawal keys from your mnemonic." - }, "3tR/V9": { "message": "Section 2 - During setup" }, + "3wfaSi": { + "message": "The Merge, EL - CL communication" + }, "3zCA2i": { "description": "{code} values are terminal outputs and commands.", "message": "If you see error message {code1}, you may need to install {code2} or {code3} package." @@ -231,12 +261,18 @@ "47svuN": { "message": "Installation" }, + "4AVfh5": { + "message": "I've joined my consensus client's Discord server." + }, "4NvAhl": { "message": "Start by setting up your chosen hardware and operating system." }, "4QNsja": { "message": "Why a sliding scale? While we won’t get into the gory details here, the basic intution is that there needs to be a minimum number of validators (and hence a minimum amount of ETH staked) for the network to function properly. So, to incentivize more validators to join, it’s important that the interest rate remains high until this minimum number is reached." }, + "4VQUkR": { + "message": "For more information, see the {shanghaiPlanning}." + }, "4hnEBA": { "message": "Has the smart contract code been verified?" }, @@ -249,6 +285,9 @@ "58PXVy": { "message": "Why two keys instead of one?" }, + "59y+Ik": { + "message": "Don't forget to head over to the {discord} where you'll find a {testingTheMerge} channel loaded with discussion on how you can get more involved and make sure you're prepared." + }, "5A6amM": { "message": "It is high risk to run your validator in multiple places. It will lead to a slashable event and ejection from the network. {learnMore}" }, @@ -264,13 +303,25 @@ "5UH1sh": { "message": "Romanian" }, + "5Vrs8S": { + "message": "You need enough upload bandwidth too. As of {date} this is ~1.2-1.3 GB download and ~0.9-1 GB upload per hour, and is likely to increase." + }, + "5dG331": { + "message": "Although a validator's vote is weighted by the amount it has at stake, each validators voting weight starts at, and is capped at {pricePerValidator}. It is possible to drop below this with poor node performance, but it is not possible to raise above it." + }, "5t8oYl": { "description": "{variables} are social media platform links to Discord and Reddit (do not translate names)", "message": "Visit EthStaker on {discord} or {reddit} at any time during your setup for some friendly help!" }, + "62zRxB": { + "message": "I am running my own consensus layer client." + }, "6CK2Nu": { "message": "Your wallet is on the wrong network. Switch to {network}" }, + "6CN01C": { + "message": "After the Shanghai upgrade, your 16 ETH can then be withdrawn – with your withdrawal key – after a delay of around a day." + }, "6HBTTN": { "message": "Proof-of-stake (PoS) and the Beacon Chain" }, @@ -283,9 +334,18 @@ "6VIBSR": { "message": "You can improve the effective balance of this validator by topping up" }, + "6VswA4": { + "message": "Running Nethermind Post Merge {jwtSecretFile}" + }, + "6iVtAr": { + "message": "#TestingTheMerge" + }, "6nh4de": { "message": "You're joining a network in its early stages. As with any new piece of software, there is the potential for software bugs. While unlikely, potential bugs may result in slashing." }, + "6uPbCH": { + "message": "{network} version of this page" + }, "7+Domh": { "message": "Notes" }, @@ -298,6 +358,15 @@ "793QlI": { "message": "{title} is not supported in offline mode." }, + "7BhfPl": { + "message": "Lighthouse Book" + }, + "7C4ikM": { + "message": "Merge panda emoji" + }, + "7Iz3JI": { + "message": "Consensus Client" + }, "7UOvbT": { "message": "Offline" }, @@ -332,6 +401,9 @@ "8JtiQS": { "message": "Does the contract address listed on the website match?" }, + "8L6ufI": { + "message": "Step-by-step guide for how to spin up a {network} node and validator" + }, "8Rj/6A": { "message": "Choose the OS of the computer you're currently using. This will be the computer you use to generate your keys. It doesn't need to be the OS you want to use for your node." }, @@ -360,15 +432,15 @@ "94dQms": { "message": "For security, we recommend you disconnect from the internet to complete this step." }, - "96pen8": { - "message": "Sharding will make more data available to the network by introducing 64 parallel chains. Each new chain will be able to handle at least as much data as mainnet today, probably more." - }, "9DZdsc": { "message": "Is there any advantage to having more than {pricePerValidator} ETH at stake?" }, "9JktQX": { "message": "There is no easy answer to this question as there are many factors that go into this calculation." }, + "9RBO+X": { + "message": "Review validator roles and responsibilities" + }, "9VZ9oy": { "message": "How are validators incentivized to stay active and honest?" }, @@ -381,6 +453,9 @@ "9qMyhY": { "message": "Read options and subcommands documentation" }, + "9qpi9h": { + "message": "Configure Nethermind" + }, "9uOFF3": { "message": "Overview" }, @@ -399,15 +474,15 @@ "AC669U": { "message": "If you need help, check out the Python documentation." }, - "ACstv9": { - "message": "I've installed and synced my execution client on {network} (do not wait on this as it can take several days)." - }, - "AEp7+F": { - "message": "Importantly, as a validator you'll need to post {TICKER_NAME} as collateral - in other words, have some funds at stake. The only way to become a validator is to make a one-way {TICKER_NAME} transaction to the deposit contract on the current Ethereum chain." - }, "AJD+66": { "message": "The Ethereum staking deposit contract requires a minimum of {minTopupValue} {TICKER_NAME} to be sent at one time to be accepted." }, + "ALEY4e": { + "message": "{community} {network} guide" + }, + "ARyG2Z": { + "message": "When withdrawals?" + }, "ATwOPg": { "message": "execution client" }, @@ -420,10 +495,16 @@ "AbBgEs": { "message": "understanding validator effective balance" }, + "AbR1dr": { + "message": "This upgrade is rapidly approaching and brings a few changes that stakers should be aware of before hand. Check out the {mergeReadinessChecklist} to make sure you're prepared." + }, "Ad61gz": { "description": "{url} is link to GitHub CLI release, made bold for emphasis", "message": "Please make sure that you are downloading from the official Ethereum Foundation GitHub account by verifying the url: {url}" }, + "Ad8+R5": { + "message": "Sharding will change the requirement that full nodes carry the entire history of the chain, and instead will distribute this load amongst the network while still ensuring data availability. This will significantly expand the capacity of layer 1 Ethereum while maintaining the ability to operate a full node on consumer hardware, keeping the network decentralized." + }, "Affixg": { "message": "The deposit" }, @@ -461,6 +542,12 @@ "BUFaRV": { "message": "EthStaker community" }, + "BXoiVG": { + "message": "Additional reminders" + }, + "BcUgLk": { + "message": "Suggested Fee Recipient" + }, "Bf2QKg": { "message": "Validating is a long-term commitment" }, @@ -473,12 +560,21 @@ "C/gb74": { "message": "Configure Lighthouse" }, + "C3jBPI": { + "message": "Execution Client" + }, + "C82lUV": { + "message": "All stakers must operate an execution layer client with their consensus layer client starting at the Merge. Make sure you're prepared." + }, "C9fTX1": { "message": "Answers to common questions on becoming a validator." }, "CACPC+": { "message": "Czech" }, + "CDx/FY": { + "message": "By running a validator, you'll be responsible for securing the network and receive continuous payouts for actions that help the network reach consensus." + }, "CF9vMR": { "message": "Proof of stake" }, @@ -524,9 +620,15 @@ "DUnyVI": { "message": "Ideally your internet connection should be reliable and as close to 24/7 as possible without interruption." }, + "Dayq/y": { + "message": "Configure Erigon" + }, "DbnQg+": { "message": "Verify the contract address" }, + "DjhC7F": { + "message": "I've forwarded the necessary ports to the correct machine(s) from my router for both my EL and CL client (only open the ports that apply to your installations)." + }, "DoCZT1": { "description": "{minTopupValue} is a number, and {TICKER_NAME} is either ETH or GöETH depending on network", "message": "Validator effective balance is currently maxed out. If desired, you may add {minTopupValue} {TICKER_NAME} (the minimum allowed by the deposit contract)" @@ -575,9 +677,15 @@ "FEbVwB": { "message": "The key concept is the following:" }, + "FFUr3c": { + "message": "Ethereum had its genesis on July 30, 2015. It is growing in size over time, and the introduction of sharding will also increase storage, memory, and bandwidth requirements." + }, "FM92S0": { "message": "Note: the Beacon Chain may take several minutes to verify your deposit" }, + "FM9lHC": { + "message": "all of the merge testnet configurations" + }, "FSRfSJ": { "message": "I understand that this transaction is not reversible." }, @@ -590,6 +698,9 @@ "FazwRl": { "message": "Try again" }, + "Felr8P": { + "message": "A {validatorClient} is the software that acts on behalf of the validator by holding and using its private key to make attestations about the state of the chain. A single validator client can hold many key pairs, controlling many validators." + }, "FfLWt5": { "message": "An Ethereum client with a huge pool of developers. It's perfect for enterprise-grade systems." }, @@ -617,12 +728,12 @@ "GDaRAW": { "message": "Make sure you aren't being phished" }, + "GKDM0r": { + "message": "If you have not yet done so, be sure your node is running both an EL client, as well as a CL client, to prevent downtime at time of the Merge." + }, "GN2Cu5": { "message": "consensus client" }, - "GOHkCO": { - "message": "Today, you'll secure the Beacon Chain, the first main scaling upgrade. It's a separate chain that uses a proof-of-stake consensus mechanism. Eventually you'll help secure all of Ethereum, once mainnet (the Ethereum we use today) merges with the Beacon Chain." - }, "GOc7cL": { "message": "How badly will I be penalized for being offline?" }, @@ -653,6 +764,12 @@ "H+kIpp": { "message": "Total amount required" }, + "H0lQfu": { + "message": "Merge Readiness Checklist" + }, + "H4W8nj": { + "message": "Authenticate Engine API" + }, "H5+NAX": { "message": "Balance" }, @@ -672,18 +789,27 @@ "HqRNN8": { "message": "Support" }, + "I0BXSi": { + "message": "Configure Geth" + }, "I212vY": { "message": "There is a short wait before your validator becomes active on the Beacon Chain. Use this time to complete the checklist and spend some time validating the {testnet}" }, "I3JhPS": { "message": "Network" }, + "I5ZPR9": { + "message": "When Merge?" + }, "I5lWZA": { "message": "Can I change the withdrawal credentials of my validator after the first deposit?" }, "I7MjRD": { "message": "Formerly TurboGeth, Erigon is an Ethereum client built to enable performance optimizations." }, + "IJiJjD": { + "message": "All stakers must operate an execution layer client as well as a consensus layer client starting at the Merge. Make sure you're prepared." + }, "IJw06E": { "message": "Sign transaction with your wallet" }, @@ -696,6 +822,9 @@ "IdUtHu": { "message": "Install virtualenv" }, + "If09Ko": { + "message": "As such, stakers must provide a {feeRecipient} address to their consensus client in order to receive these rewards. This is a normal Ethereum address that you're used to." + }, "IhDJWs": { "description": "Plural form, for multiple remaining deposits", "message": "You have {remainingTxCount} outstanding deposits" @@ -722,12 +851,18 @@ "JAiV0o": { "message": "In other words, to keep you honest, your actions need to have financial consequences." }, + "JApiO1": { + "message": "This is a new change and becomes a requirement at time of the Merge, so be sure you're running both before the upgrade." + }, "JMcBLZ": { "message": "Outstanding deposits ({remainingTxCount})" }, "JPT/TK": { "message": "4. Avoid phishing" }, + "Ja5vXW": { + "message": "Further reading" + }, "JbVlOE": { "message": "Dig deeper into Ethereum upgrades." }, @@ -746,6 +881,9 @@ "JtAiN/": { "message": "What is your current operating system?" }, + "K2pv1v": { + "message": "Why do I need to run an execution layer client now?" + }, "K6+jQ3": { "message": "Geth installation documentation" }, @@ -770,25 +908,34 @@ "description": "{url} is link to GitHub CLI release, made bold for emphasis", "message": "Please make sure that you are downloading from the official StakeHouse GitHub account by verifying the url: {url}" }, + "KbUOQp": { + "message": "Nethermind is a robust client built on .NET core designed for performance, versatility and customizability." + }, + "KcdQCZ": { + "message": "CLI Syntax {engineJwtSecret}" + }, "KjcAm2": { "message": "Rewards and penalties are issued roughly every six and a half minutes – a period of time known as an epoch." }, "KqGKRA": { "message": "Once the process is complete, you should see the following:" }, - "KrVaDy": { - "message": "I've joined my client's Discord server." - }, "KvRSg5": { "message": "What exactly is slashing?" }, "Kw+pTr": { "message": "The python3 install process may differ depending on your linux build." }, + "KwfNme": { + "message": "Configure Besu" + }, "KxUgHu": { "description": "{boldCaution} is states 'only stored on one validator machine', a bolded caution statement to users", "message": "I've ensured my keystore(s) is/are {boldCaution}." }, + "L1PK14": { + "message": "Ethereum.org - The Merge" + }, "L7fPF+": { "message": "Complete your last deposit" }, @@ -824,15 +971,15 @@ "Lv3Pmp": { "message": "Your initial deposit has already been made for this validator public key. Please wait and check the status of your deposit on the Beaconchain data provider." }, - "LyJqWj": { - "message": "More on validator roles and responsibilities" - }, "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." }, "MIsmjW": { "message": "Connect new wallet" }, + "MKMIUm": { + "message": "Public testnet progress is underway. When everything is safe and ready, the core developer teams will make this known, so stay tuned to the {blogLink} or other client team communication channels for the latest information." + }, "MQTBvH": { "message": "Protect yourself against double deposits" }, @@ -842,6 +989,9 @@ "MX00UO": { "message": "What happens if my withdrawal key is stolen?" }, + "MXVVcY": { + "message": "Authenticating Execution Node Connections" + }, "MZEcKL": { "message": "Bad validator behaviour" }, @@ -869,6 +1019,9 @@ "MmZjeu": { "message": "Top-up details" }, + "MoIew2": { + "message": "Step-by-step guide for how to spin up a node and validator on merge testnets" + }, "N0rwnt": { "message": "{depositFileName} isn't a valid deposit_data JSON file. Try again." }, @@ -887,6 +1040,9 @@ "NSK+Li": { "message": "I've secured the root account." }, + "NTHTCh": { + "message": "Do not deposit more than {pricePerValidator} ETH for a single validator. It will not add to your rewards and will be locked until the planned {shanghai} update." + }, "NTWnJC": { "message": "Download command line app" }, @@ -899,9 +1055,6 @@ "NZIM+F": { "message": "Send remaining {remainingTxCount} deposits" }, - "NZUWs7": { - "message": "Remember that a validator’s vote is weighted by the amount it has at stake." - }, "NatYUJ": { "message": "Learn more about the roles and responsibilities of Ethereum validators." }, @@ -918,18 +1071,33 @@ "O+3LJ1": { "message": "This validator's balance is at the effective maximum: {PRICE_PER_VALIDATOR} {TICKER_NAME}." }, + "O/dhpS": { + "message": "EthStaker Discord" + }, "O3qkOm": { "message": "Sharding" }, + "OBmVqN": { + "message": "Hyperledger Besu is an open-source Ethereum client developed under the Apache 2.0 license and written in Java." + }, "OIvXIO": { "message": "Complete remaining {remainingTxCount} deposits" }, + "OJOu1W": { + "message": "Documentation on running Erigon" + }, "ON2tXT": { "message": "The Nethermind documentation explains how to download and install the client." }, "OdYQYh": { "message": "More on ConsenSys" }, + "OmAmmi": { + "message": "More on the Merge" + }, + "Oop93W": { + "message": "{site} {network} announcement" + }, "OsO8ik": { "message": "I am technically capable of setting up and running a validator." }, @@ -955,8 +1123,8 @@ "P9mVZK": { "message": "Your network has changed" }, - "PIQDar": { - "message": "We recommend you go through the entire process on a testnet first to get comfortable." + "Pd0hC/": { + "message": "Ethereum Foundation Blog" }, "PfoT0C": { "message": "This checklist will help you understand the role of a validator and prepare you for the role." @@ -983,6 +1151,9 @@ "Q1ZwPT": { "message": "clipboard" }, + "Q2CQuF": { + "message": "Now that transactions must be processed by validators, the validators that propose blocks including these transactions are eligible to receive the transaction fee tips. These are also known as priority fees, and are the unburnt portion of gas fees." + }, "Q8P0rZ": { "message": "Validators have a maximum effective balance of {PRICE_PER_VALIDATOR} {TICKER_NAME}. You only need to top up {maxTopupValue} {TICKER_NAME} to max out your effective balance." }, @@ -992,9 +1163,21 @@ "QOAgQF": { "message": "Note: by default, VMs may disable NTP so you may need to find a work-around for your environment." }, + "QRUdO6": { + "message": "Set fee recipient" + }, + "QRwpD3": { + "message": "Learn about ports in networking" + }, "QWDxrk": { "message": "Key management" }, + "QapNAM": { + "message": "{network} homepage" + }, + "QgOvR0": { + "message": "Importantly, as a validator you'll need to post {TICKER_NAME} as collateral—in other words, have some funds at stake. The only way to become a validator is to make a one-way {TICKER_NAME} transaction to the deposit contract on the current Ethereum chain." + }, "QlsDcr": { "message": "Action" }, @@ -1007,9 +1190,15 @@ "Qs/oj3": { "message": "You may have an {TICKER_NAME} deposit that was accepted but is being validated on chain. It will be available here when beaconcha.in has confirmed 2048 blocks." }, + "QtNVQP": { + "message": "There’s no way for you to re-activate your validator, and you won’t be able to transfer or withdraw your funds until the Shanghai upgrade planned to follow the Merge (which means your funds will remain inaccessible until then)." + }, "R8eePn": { "message": "If you're slashed you're prevented from participating in the protocol further and are forcibly exited." }, + "R9umf+": { + "message": "Fees rewards are coming to validators, don't miss out!" + }, "RCGrka": { "message": "only way" }, @@ -1031,11 +1220,11 @@ "Rg5ySE": { "message": "How many validators would you like to run?" }, - "Rj0OAx": { - "message": "Or in other words, a human running a computer process. This process proposes and vouches for new blocks to be added to the blockchain." + "RkSC5Q": { + "message": "Reminder, the Merge upgrade will {not} implement withdrawing or transferring of staked ETH. This feature will be included in the Shanghai upgrade planned to follow the Merge." }, - "RkbwNZ": { - "message": "Withdrawing your deposit won't be possible until mainnet merges with the Beacon Chain." + "RqTB/U": { + "message": "Ethereum Roadmap FAQ" }, "Rr2lI/": { "message": "You are responsible for this transaction!" @@ -1052,6 +1241,9 @@ "SB6yx7": { "message": "The Teku config file environment variable" }, + "SEt7ZX": { + "message": "Ongoing thread of Ethereum Merge info" + }, "SGzXoY": { "message": "Your stake has reached the deposit contract!" }, @@ -1061,9 +1253,15 @@ "SR0qHv": { "message": "Avoid overly-complicated setups and be aware of trade offs. Being offline for brief periods of time will result in small inactivity penalities, but will be recouped easily after being online again for about the same amount of time. Complicated power backups can add to the expense of your setup, and redundant backup validators can lead to slashing." }, + "SVLpih": { + "message": "The long awaited transition to proof-of-stake via the Merge is rapidly approaching, bringing Ethereum one step closer to a more sustainable ecosystem." + }, "SaR1pU": { "message": "Deposit already exists" }, + "Sb67Wo": { + "message": "Attention stakers: The Merge is approaching! Review the {mergeReadinessChecklist} to make sure you're ready." + }, "Sd+Pq6": { "message": "Total validators" }, @@ -1085,6 +1283,9 @@ "Seanpx": { "message": "Required" }, + "SpI4Xu": { + "message": "The Merge upgrade prepared the chain for future scaling upgrades by bringing proof-of-stake consensus together with Mainnet. This unlocks the ability to implement data sharding to further scale network capacity and throughput." + }, "SqKNq2": { "description": "{homebrew} = 'homebrew' and links to the homebrew package manager website documentation", "message": "You can install python3 on your macOS device using {homebrew}" @@ -1095,15 +1296,24 @@ "THIzw6": { "message": "Validators and Ethereum" }, - "TLEziZ": { - "message": "The Beacon Chain had its genesis on {date}. It is growing in size over time, and the introduction of sharding will also increase storage, memory, and bandwidth requirements." - }, "TMw9oz": { "message": "Visit this site on desktop to become a validator." }, + "TNTj2N": { + "message": "{community} merge testnet guide" + }, + "TbV4N8": { + "message": "{community} Discord (faucet)" + }, "TfNuWP": { "message": "virtualenv would help you to create an isolated Python environment for deposit-cli tool." }, + "TfVy1O": { + "message": "View the Merge Readiness Checklist" + }, + "ToUcj8": { + "message": "Merge Readiness: In addition to an execution client, after the Merge node operators must also run an {alternateClient} to remain active." + }, "Tpe6yK": { "message": "rpc-http-enabled documentation" }, @@ -1145,6 +1355,9 @@ "V0cb8p": { "message": "If you do not have a testnet folder it is likely you have not built and run Nimbus correctly. Run the make commands again." }, + "V0mmZE": { + "message": "After the Merge, your validator will also be responsible for processing transactions, and thus be entitled to unburnt gas fees associated with those transactions in blocks your validator proposes. These fees are accounted for on the execution layer, not the consensus layer, and thus require a traditional Ethereum address to be provided to your client." + }, "V19Udt": { "description": "{executionLayer} is a link labeled 'execution layer'. {consensusLayer} is a link labeled 'consensus layer'", "message": "Ethereum will consist of the {executionLayer} (handles transactions and execution, formerly 'Eth1'), and the {consensusLayer} (handles proof-of-stake Beacon Chain, formerly 'Eth2' or 'Ethereum 2.0')." @@ -1179,6 +1392,9 @@ "VctWDX": { "message": "I am certain that the validator I am topping up is my validator." }, + "Vp4z/b": { + "message": "Stakers running their own execution layer is necessary for the decentralization of the network." + }, "VzGJkB": { "message": "Staker checklist" }, @@ -1188,27 +1404,48 @@ "W3t7Ob": { "message": "Japanese" }, + "W6w5Wb": { + "message": "Transfers between validators and withdrawals aren't possible yet. Withdrawal functionality is currently a top priority, and is planned to be rolled out in the next network upgrade, known as the Shanghai upgrade." + }, "W8nHSd": { "message": "FAQ" }, "WFVzvu": { "message": "{warning} Duplicate deposits with the same keyfile public key will be considered as a double deposit. Any extra balance more than {eth} will NOT be counted in your effective balance on the Beacon Chain. You also won't be able to withdraw it until the Beacon Chain merges with mainnet." }, + "WGPxqY": { + "message": "Since the genesis of the Beacon Chain, many validators running their own consensus layer (CL) client have opted to use third-party services for their execution layer (EL) connection. This has been acceptable since the only thing being listened to has been the staking deposit contract." + }, + "WJA1/H": { + "message": "Remember" + }, "WMLn/w": { "message": "{totalTxCount} validators" }, "WTPUDZ": { "message": "These steps are optional but are recommended to optimize your node." }, + "WTfeiS": { + "message": "Post-merge, an Ethereum node will be comprised of both an execution layer (EL) client, and a consensus layer (CL) client. EL + CL = Ethereum." + }, "WdDGn6": { "message": "An implementation of the consensus protocol with a focus on usability, security, and reliability. Prysm is developed by Prysmatic Labs, a company with the sole focus on the development of their client." }, + "Wj99ga": { + "message": "Go Ethereum - The Merge" + }, "WkrNSk": { "message": "English" }, "Wl6cI3": { "message": "Please accept the conditions above." }, + "WptkFF": { + "message": "Both layers required" + }, + "Wxmhku": { + "message": "These fees are paid by whoever submitted the transaction and come in the form of ETH on the execution layer (Mainnet). These rewards are not accounted for in your validator balance which is maintained on the consensus layer." + }, "WxqnJn": { "message": "On the other hand, you can be penalized for being offline and behaving maliciously – for example attesting to invalid or contradicting blocks." }, @@ -1218,12 +1455,18 @@ "X/fKmY": { "message": "Has the block explorer named the contract?" }, + "X3rOq5": { + "message": "At time of the Merge, Infura and Alchemy will no longer be viable options to outsource execution layer responsibilities." + }, "X5KFEh": { "message": "That is not a valid deposit_data JSON file." }, "XBEBYR": { "message": "More on installing pip" }, + "XBYgM2": { + "message": "As a staker you are required to maintain and operate a node, running BOTH a consensus layer client AND an execution layer client." + }, "XRxD8r": { "description": "Link to documentation about execution client Besu, specifically for Goerli testnet", "message": "Besu on Goerli documentation" @@ -1261,6 +1504,12 @@ "YFT4rG": { "message": "Keys" }, + "YHk9Pe": { + "message": "With the Merge, the burden of processing transactions will fall on validators, as proof-of-work is deprecated. To sign off on the validity of these transactions, a validator must have trusted access to the events of the execution layer. Trust only your own node." + }, + "YIjr32": { + "message": "For those who want more control and less hand-holding" + }, "YP03/j": { "message": "Afterwards, validators are still encouraged to join (the more validators the more decentralized the network), but it’s not absolutely essential that they do so (so the interest rate can fall)." }, @@ -1271,6 +1520,15 @@ "YQJy4H": { "message": "You should now have your mnemonic written down in a safe place and a keystore saved for each of your {validatorCount} validators. Please make sure you keep these safe, preferably offline. Your validator keystores should be available in the selected directory." }, + "YTNPFn": { + "message": "Instructions for how to set this JWT secret vary depending on the client—node operators should refer to their clients' documentation for instructions about how to generate and configure these." + }, + "YX6pc0": { + "message": "{client} is a {layerType}." + }, + "Yd6MEN": { + "message": "Execution clients" + }, "Yganfl": { "message": "Type the following lines into the terminal window:" }, @@ -1312,6 +1570,9 @@ "ZTo0Fl": { "message": "Why is there a wait?" }, + "ZdT9Bs": { + "message": "Your validator will also receive unburnt gas fees when proposing blocks. Validators are chosen randomly by the protocol to propose blocks, and only one validator can propose a block for each 12-second slot. There are 7200 slots each day, so each validator has 7200 chances-per-day to propose a block. If there are 360,000 validators, each validator will {average} a block proposal every 50 days." + }, "ZlLjuq": { "description": "{flag} and {network} are terminal commands styled as code.", "message": "Please make sure you select {network} when prompted for a network, otherwise the deposit will be invalid." @@ -1322,9 +1583,6 @@ "Zspg8H": { "message": "Section 1 - Before you start" }, - "Zxm0fh": { - "message": "The merge will see the Ethereum Mainnet we use today merge with the Beacon Chain. This is when Ethereum will fully transition to proof-of-stake." - }, "ZzTcj5": { "message": "Download python3 and follow the installation instructions." }, @@ -1367,6 +1625,9 @@ "bR1R2M": { "message": "Use this as a reference during client setup to check off important steps." }, + "bRGoZZ": { + "message": "See your consensus layer client documentation for client-specific instructions on how to set this." + }, "bUk/lm": { "message": "Besu installation documentation" }, @@ -1376,17 +1637,26 @@ "bVtlF7": { "message": "Be sure to account for enough space on your drive until you run maintenance on your node." }, + "bX1fts": { + "message": "Merge readiness checklist" + }, "bbr+aD": { "message": "The YAML files can have different syntaxes." }, + "be6WvD": { + "message": "A {nodeOperator} is the human being who makes sure the client software is running appropriately, maintaining hardware as needed." + }, + "bgyJfz": { + "message": "What clients do I need to run?" + }, "bnuvhg": { "message": "Lighthouse is built in Rust and offered under an Apache 2.0 License." }, "bxU6sX": { "message": "Python installation instructions" }, - "c9DSZ1": { - "message": "We strongly recommended you complete these steps on the current testnet before mainnet." + "by+LIm": { + "message": "What is a validator client?" }, "cHUoV9": { "message": "The Geth documentation explains how to download and install the client." @@ -1400,6 +1670,9 @@ "cRzxes": { "message": "Current APR" }, + "cUvpWk": { + "message": "More on data sharding" + }, "cav520": { "message": "Download from GitHub" }, @@ -1409,9 +1682,6 @@ "chw27s": { "message": "More on PegaSys Teku" }, - "ckaUkz": { - "message": "A validator is an entity that participates in the consensus of the Ethereum protocol." - }, "clUb0+": { "message": "Command Line" }, @@ -1421,6 +1691,12 @@ "cpxfOR": { "message": "What are withdrawal credentials?" }, + "cwYSyN": { + "message": "Task 3" + }, + "cyNFM3": { + "message": "Withdrawing your deposit will not be possible until the Shanghai upgrade planned for after the Merge." + }, "cyR7Kh": { "message": "Back" }, @@ -1445,18 +1721,21 @@ "dM/KIM": { "message": "What exactly is a validator?" }, - "dNh0YZ": { - "message": "As of {date}, you'll need ~400GB for the mainnet execution chain data alone (growing at ~1GB/day)." - }, "dTOtPO": { "message": "Top Up" }, + "da/gCQ": { + "message": "Task 2" + }, "deLJOg": { "message": "Upload a valid json file." }, "dprf8W": { "message": "Where can I find troubleshooting support?" }, + "dsQVUw": { + "message": "The Nimbus book" + }, "dvr19k": { "message": "Setup" }, @@ -1466,10 +1745,16 @@ "e/PSgJ": { "message": "Upload deposit data" }, + "e1dCqL": { + "message": "Shanghai Planning issue on GitHub" + }, "e4f94H": { "description": "{code} values are terminal outputs and commands.", "message": "If {code1} is not {code2}, run: {code3}" }, + "e4wHN4": { + "message": "{network} Staking Launchpad" + }, "eF9RbC": { "message": "You can think of the deposit contract as a transfer of funds between Ethereum accounts and Beacon Chain validators." }, @@ -1482,12 +1767,12 @@ "eOpZjd": { "message": "It specifies who is staking, who is validating, how much is being staked, and who can withdraw the funds." }, + "eX072N": { + "message": "Erigon is an execution client on the efficiency frontier, written in Go." + }, "eaU/aL": { "message": "To maximize security and efficiency of your node, use dedicated hardware to run your clients. This reduces risk of malware exposure and minimizes competition for computing resources, ensuring your node handles the network load and its validator responsibilities at all times." }, - "egVO5r": { - "message": "More on shard chains" - }, "elCkOU": { "message": "More on the merge" }, @@ -1506,6 +1791,12 @@ "f/N7FO": { "message": "What happens if I lose my signing key?" }, + "fBCdim": { + "message": "Previously a Beacon Node (consensus layer) only had to watch the staking deposit contract on the execution layer in order to know which validator accounts had deposited {pricePerValidator} ETH. This information was easily served by and obtained from third-party providers such as Infura or Alchemy." + }, + "fDY/uQ": { + "message": "Teku - The Merge" + }, "fHLKXR": { "message": "The answer to this question very much depends on how much ETH you have at your disposal." }, @@ -1561,6 +1852,9 @@ "gjmx29": { "message": "YES" }, + "grF2gm": { + "message": "Each key-pair associated with a validator requires locking {ethPerValidator} to be activated, which represents your initial balance as well as your {initialAndMaximum} voting power for any validator." + }, "gsuLMm": { "message": "Greek" }, @@ -1577,15 +1871,15 @@ "h8MTUo": { "message": "Your stake" }, - "h8ZHus": { - "message": "Transfers between validators aren't possible yet. You will have to wait until mainnet merges with the Beacon Chain (around two years) before you can withdraw or transfer your {TICKER_NAME}." - }, "hFzE1M": { "message": "Rewards are given for actions that help the network reach consensus." }, "hG0uP4": { "message": "Desktop only" }, + "hICY9k": { + "message": "I have provided an Ethereum address to my validator where I would like my fee rewards to be deposited." + }, "hPCn9f": { "message": "--JsonRpc.Enabled documentation" }, @@ -1605,6 +1899,9 @@ "hkg3fb": { "message": "More on effective balance" }, + "hlxt3T": { + "message": "Limiting the maximum stake to {pricePerValidator} ETH per validator encourages decentralization of power as it prevents any single validator from having an excessively large vote on the state of the chain. It also limits the amount of ETH that can be exited from staking at any given time, as the number of validator that can exit in a given time period is limited. This helps protect the network against certain attacks." + }, "huEFUF": { "description": "Singular form, for only one deposit", "message": "You have {remainingTxCount} outstanding deposit" @@ -1612,6 +1909,9 @@ "hzLd+/": { "message": "I understand that it is important to keep my validator online and updated." }, + "hzX7K4": { + "message": "Task 1" + }, "iCpuph": { "message": "Clients" }, @@ -1625,6 +1925,9 @@ "description": "{flag} and {network} are terminal commands styled as code.", "message": "Please make sure you have set {flag} for {network}, otherwise the deposit will be invalid." }, + "iX90gu": { + "message": "I've joined my execution client's Discord server." + }, "iZuIgB": { "message": "Decompress the file you just downloaded" }, @@ -1653,11 +1956,14 @@ "iv88b5": { "message": "Send all {totalTxCount} deposits" }, + "j0Ee5w": { + "message": "I am running my own execution layer client." + }, "j8GPOH": { "message": "Formerly known as Artemis, Teku is a consensus client built to meet institutional needs and security requirements. PegaSys is an arm of ConsenSys, dedicated to building enterprise-ready clients and tools for interacting with the core Ethereum platform." }, - "jDv/zO": { - "message": "While validating on the testnet, perform these simulations to learn more about your node, and better prepare yourself for mainnet:" + "jQTc9t": { + "message": "Visit here to get the latest information on how to get involved with {testingTheMerge} on other public testnets as details unfold." }, "jXer8/": { "message": "Prysm documentation" @@ -1677,6 +1983,9 @@ "jjLubH": { "message": "Prysm installation documentation" }, + "jlx7pU": { + "message": "Documentation on running Geth" + }, "jm79h1": { "description": "Warns users to not run backup validators that have a live copy of their signing keys. Keys should only be on one validator machine at once.", "message": "Warning: Do not store keys on multiple (backup) validators at once" @@ -1690,6 +1999,9 @@ "jytPQU": { "message": "Nimbus documentation" }, + "jzGCBy": { + "message": "The {network} faucets have been abused, and are limited, but the folks at EthStaker will do their best to help you out" + }, "k43c+l": { "message": "View Wagyu Key Gen audit by HashCloak" }, @@ -1732,6 +2044,9 @@ "l/uCcX": { "message": "You're on the testnet" }, + "l3ztMu": { + "message": "As of {date}, you'll need ~1TB for the Mainnet execution chain data alone (growing at >1GB/day)." + }, "l4nLft": { "message": "I know how to check that I am sending my {TICKER_NAME} into the correct deposit contract and will do so." }, @@ -1758,6 +2073,9 @@ "description": "{ethAmount} will generally refer to 32 ETH", "message": "Does the site asking you for your {ethAmount} deposit have a URL you expect?" }, + "lNzqua": { + "message": "I have set up a shared JWT secret and made it available to {both} my execution layer client, and my consensus layer client (beacon node)" + }, "lQzdpT": { "description": "this is used as a command line flag, short for \"number of validators\"", "message": "num_validators" @@ -1783,6 +2101,9 @@ "ll/zMW": { "message": "This is a non-reversible transaction." }, + "lmr40S": { + "message": "This communication is secured using a {jwt} secret, which is a secret key that is shared only between the two clients to authenticate one another. This shared JWT secret must be made available to each client (both EL and CL) to properly authenticate the Engine API, allowing them to properly communicate between one another." + }, "lo+Qqn": { "message": "change your wallet" }, @@ -1792,9 +2113,18 @@ "mArJcj": { "message": "Hard drive" }, + "mUZnem": { + "message": "We strongly recommend you go through the entire process on a testnet first to get comfortable before risking real ETH." + }, "mZOXtM": { "message": "Validators" }, + "mc27Pv": { + "message": "A {validator} is a virtual entity that lives on the Beacon Chain, represented by a balance, public key, and other properties, and participates in consensus of the Ethereum network." + }, + "mcQpea": { + "message": "Everything you need to get started with the network, including a faucet" + }, "mhyltV": { "message": "I've set my graffiti flag." }, @@ -1804,9 +2134,6 @@ "mr1BWl": { "message": "Risks and acknowledgements:" }, - "n7yYXG": { - "message": "Service" - }, "nBhisA": { "message": "You'll need to run an execution client (formerly 'Eth1') as well as a consensus client (formerly 'Eth2') to become a validator. Take a look at the checklist to prepare yourself and your equipment." }, @@ -1841,6 +2168,9 @@ "ntG2by": { "message": "Advanced system architecture" }, + "nyx/4g": { + "message": "How to run a node on {network}" + }, "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}." @@ -1854,18 +2184,21 @@ "oNohob": { "message": "Configure your consensus client" }, - "oPdwwC": { - "message": "Limiting the maximum stake to {pricePerValidator} ETH encourages decentralization of power as it prevents any single validator from having an excessively large vote on the state of the chain." - }, "oWhj8Q": { "message": "How often are rewards/penalties issued?" }, + "obp8vV": { + "message": "Documentation on running Besu" + }, "ogbG7r": { "message": "To become a validator on the Beacon Chain, you need to deposit {PRICE_PER_VALIDATOR} {TICKER_NAME} per validator that you wish to run." }, "ohspQX": { "message": "Responsibilities" }, + "olByWa": { + "message": "While waiting for the Mainnet transition to proof-of-stake, stakers are encouraged to participate in {testingTheMerge}. This is a great way to learn more about the Merge, practice going through it before Mainnet, and gain confidence in your setup." + }, "omJNJw": { "message": "Warning!" }, @@ -1919,21 +2252,27 @@ "ptWiT7": { "message": "I've simulated how to manually stop and restart my Beacon Node (BN) and Validator Client (VC) gracefully." }, + "pxfiWL": { + "message": "{networkBold} is a younger public testnet that has already undergone its transition to proof-of-stake after undergoing a successful merge upgrade in March 2022. Kiln is open for anyone to interact with. Try sending some ETH, interacting with some contracts, or deploying your own." + }, "pyWt01": { "message": "Deposit summary" }, + "q+ux+M": { + "message": "{network} is open for anyone to interact with. Try sending some transactions, running a validator on its new beacon chain, or see if you can get slashed!" + }, "q2XW/k": { "message": "If your withdrawal key is stolen, the thief can transfer your validator’s balance, but only once the validator has exited." }, "qB6aU6": { "message": "What happened to 'Eth2?'" }, - "qDcbPp": { - "message": "Your 16 ETH can then be withdrawn – with your withdrawal key – after a delay of around a day." - }, "qDvaNm": { "message": "I understand that keys are my responsibility and that my mnemonic (seed) will be the {onlyWay} to withdraw my funds." }, + "qEsYC0": { + "message": "You can also check out GitHub for {allConfigs}." + }, "qK4+NQ": { "message": "The terminal" }, @@ -1958,6 +2297,9 @@ "qwh6gM": { "message": "I understand the early adopter and slashing risks." }, + "qx+3RQ": { + "message": "JWT" + }, "r2BH1M": { "message": "Configure Prysm" }, @@ -1967,16 +2309,10 @@ "rD3ot9": { "message": "Phishing guide" }, - "rFe61n": { - "message": "As a validator, you'll be responsible for securing the network and receive continuous payouts for actions that help the network reach consensus." - }, "rMjMmc": { "description": "{http} shows '--JsonRpc.Enabled true' terminal command", "message": "Use {http} to connect your consensus node to the JSON RPC endpoint. This will enable the JSON RPC services on the default 8545 port." }, - "rNEdex": { - "message": "you can think of a validator as a voter for new blocks" - }, "rTSJI9": { "message": "Try the testnet" }, @@ -1992,6 +2328,9 @@ "rcdxTW": { "message": "Given a fixed total number of validators, the rewards/penalties predominantly scale with the balance of the validator – attesting with a higher balance results in larger rewards/penalties whereas attesting with a lower balance results in lower rewards/penalties." }, + "rgjQYI": { + "message": "Merge Readiness: In addition to a consensus client, after the Merge node operators must also run an {alternateClient} to remain active." + }, "rnDgcN": { "message": "No, you cannot change your withdrawal credentials in top-ups." }, @@ -2013,6 +2352,12 @@ "sXV95+": { "message": "CPU and RAM" }, + "saDFoR": { + "message": "Bonus" + }, + "scfDDt": { + "message": "Communication between the execution layer and consensus layer will occur using the {engineApi}. This is a new set of JSON RPC methods that can be used to communicate between the two client layers." + }, "sdQRah": { "description": "{NETWORK_NAME} is name of network, do not translate", "message": "I've synced my beacon node on {NETWORK_NAME}." @@ -2057,6 +2402,9 @@ "description": "{ethClientType} is either execution or consensus, depending on which step user is on", "message": "Choose your {ethClientType} client and set up a node" }, + "tp1IPS": { + "message": "Configure the fee recipient" + }, "tsfX5f": { "message": "Confirm deposit" }, @@ -2079,9 +2427,6 @@ "u81G9+": { "message": "Uptime" }, - "uCikFk": { - "message": "You need enough upload bandwidth too. As of {date} this is ~700-800 MB/hour, and is likely to increase." - }, "uJzGSb": { "message": "Make sure you're aware of how to avoid phishing attacks. We've prepared a list of things to look out for." }, @@ -2091,6 +2436,9 @@ "uPECbE": { "message": "Validator checklist" }, + "uUy3NQ": { + "message": "I understand that I will earn the unburnt transaction fees (tips/priority fees) when I propose a block, and this is accounted for on the execution layer, not my validator balance." + }, "ubKWX8": { "message": "Generate key pairs" }, @@ -2103,14 +2451,16 @@ "ukfwum": { "message": "Become a validator with Nimbus" }, - "unzIoE": { - "description": "{pricePerValidator} represents deposit amount styled in bold", - "message": "Before you can run a validator and start to secure the network, you need to stake {pricePerValidator} ETH. This forms your initial balance." + "uoKhQB": { + "message": "Authentication API" }, "up+5YH": { "description": "Asks users to check deposit contract address against a block explorer and confirm 32 ETH deposits are present", "message": "Are there recent {ethAmount} deposits?" }, + "vBJ79e": { + "message": "I've simulated how to safely migrate from one execution client to another." + }, "vBOf5K": { "message": "Your balance is updated periodically by the Ethereum network rules as you carry (or fail to carry) out your responsibilities." }, @@ -2138,19 +2488,16 @@ "vYOWYI": { "message": "Chinese (simplified)" }, - "va96SS": { - "message": "I've forwarded the necessary ports to the correct machine(s) from my router (only open the ports that apply to your installation)." - }, "vbVsqW": { "description": "{stakerChecklist} = 'Staker Checklist' bolded to draw attention", "message": "Be sure to complete the {stakerChecklist} as soon as possible. And join the EthStaker community for support and discussion with fellow validators." }, + "vej0DE": { + "message": "Today, you'll secure the Beacon Chain, the first main scaling upgrade. It's a separate chain that uses a proof-of-stake consensus mechanism. Very soon you'll help secure all of Ethereum, after Mainnet (the Ethereum we use today) merges with the Beacon Chain." + }, "vg1dVR": { "message": "With your signing key, you could attempt to quickly exit the validator and then transfer the funds – with the withdrawal key – before the thief." }, - "vkozFq": { - "message": "There’s no way for you to re-activate your validator, and you won’t be able to transfer or withdraw your funds until after the post-merge cleanup upgrade, currently planned to follow the merge (which means your funds will remain inaccessible until then)." - }, "vyvUB5": { "message": "This JSON file isn't for the right network. Upload a file generated for your current network: {network}." }, @@ -2164,6 +2511,9 @@ "wJy3tO": { "message": "Initial setup" }, + "wPR6Js": { + "message": "Before the switch, there are a couple things solo stakers and validator services need to be aware of, and a few tasks you may need to attend to." + }, "wawegX": { "message": "fishing rod" }, @@ -2173,6 +2523,9 @@ "wdb1NC": { "message": "More on proof of stake" }, + "wea8Ie": { + "message": "The execution and consensus layers work together tightly, and require authentication to stay safe." + }, "wm04oC": { "message": "Run the following command:" }, @@ -2188,6 +2541,9 @@ "x0tVK4": { "message": "Validating in Ethereum is not the same as mining. The outcomes are similar: the work you do will extend and secure the chain. But the process is completely different because they use different consensus mechanisms." }, + "x4/9vY": { + "message": "We strongly recommended you complete these steps on the current testnet before Mainnet." + }, "x8+8fi": { "message": "Currently the majority of validators run Prysm as their consensus client. Client diversity is extremely important for the network health of Ethereum: A bug in a client with a share of over 33% can cause Ethereum to go offline. If the client has a supermajority (>66%), a bug could cause the chain to incorrectly split, potentially leading to slashing." }, @@ -2207,6 +2563,9 @@ "xSvJIi": { "message": "Block rewards are calculated using a sliding scale based on the total amount of ETH staked on the network." }, + "xXKkhR": { + "message": "I've installed and synced my {network} execution client (do not wait on this as it can take several days)." + }, "xXWzDf": { "message": "The Beacon Chain" }, @@ -2216,14 +2575,20 @@ "xogY3N": { "message": "Besu is written in Java and released under the Apache 2.0 Licence." }, + "xxbUJa": { + "message": "Execution Clients: {clientName}" + }, + "xyMh/n": { + "message": "Mega Merge Resource List" + }, "y44jV2": { "message": "Several upgrades are underway that will make Ethereum more scalable, secure, and sustainable. These upgrades will improve Ethereum while seamlessly continuing on the chain of today. Here's more on the different upgrades:" }, "y4dBsA": { "message": "Configure time sync" }, - "y7dWNc": { - "message": "Importantly, a validator’s vote is weighted by the amount it has at stake." + "y86+cK": { + "message": "What is a node operator?" }, "yFtJza": { "message": "Please ensure that you have control over the keys to this address." @@ -2234,9 +2599,8 @@ "ySYWBD": { "message": "I am keeping my key(s) safe and have written down my mnemonic phrase." }, - "yT2EZO": { - "description": "{boldSummary} is styled with bold for emphasis", - "message": "In other words, {boldSummary}. The more votes a block gets, the more likely it is to be added to the chain." + "yaf+Vw": { + "message": "Two-way communication between the EL client and CL client requires a JWT secret for authentication, and is essential for your node to be functional." }, "ydh1KU": { "message": "Language information" @@ -2256,6 +2620,9 @@ "yoGtkz": { "message": "Make sure that your node has more than 20 peers." }, + "z/ToMo": { + "message": "Once the transition to proof-of-stake is complete via the Merge, validators will be responsible for processing transactions and signing off on their validity. This data will {not} be available from popular third-party sources after the Merge and will result in your validator being offline. When data sharding is implemented, validators will also be at risk of slashing under the {pocGame}." + }, "z/ZhML": { "message": "Make sure you have set {flag} for {network}, otherwise the deposit will be invalid." }, @@ -2282,8 +2649,14 @@ "zicXn7": { "message": "Node security" }, + "zkT9Jx": { + "message": "We'll help you create a signing key for every validator you want to run. Because there are no withdrawals until the Shanghai upgrade planned to follow the Merge, you will not create your withdrawal keys now. When it is possible to withdraw your funds, you can derive your withdrawal keys from your mnemonic." + }, "zmMF+G": { "description": "This phrase is a sentence ", "message": "Staking Launchpad for {TESTNET_LAUNCHPAD_NAME} testnet" + }, + "zqOrZZ": { + "message": "Look over the Merge Readiness Checklist" } } \ No newline at end of file diff --git a/src/pages/Acknowledgements/pageContent.tsx b/src/pages/Acknowledgements/pageContent.tsx index bb2526d3..d875617b 100644 --- a/src/pages/Acknowledgements/pageContent.tsx +++ b/src/pages/Acknowledgements/pageContent.tsx @@ -34,7 +34,7 @@ export const pageContent = { - + - + @@ -199,12 +194,7 @@ export const pageContent = { content: ( <> - + { const { formatMessage } = useIntl(); + const defaultExecutionPorts: { + defaultTcp: number; + defaultUdp: number; + } = { + defaultTcp: 30303, + defaultUdp: 30303, + }; + + const defaultConsensusPorts: { + defaultTcp: number; + defaultUdp: number; + } = { + defaultTcp: 9000, + defaultUdp: 9000, + }; + const clientInfo: Client[] = _shuffle([ + { + header: 'Besu', + text: formatMessage({ + defaultMessage: + 'Hyperledger Besu is an open-source Ethereum client developed under the Apache 2.0 license and written in Java.', + }), + imgUrl: BesuBg, + url: routesEnum.besu, + linkText: formatMessage({ + defaultMessage: 'Configure Besu', + }), + layer: layerEnum.execution, + discord: 'https://discord.gg/hyperledger', + ...defaultExecutionPorts, + }, + { + header: 'Nethermind', + text: formatMessage({ + defaultMessage: + 'Nethermind is a robust client built on .NET core designed for performance, versatility and customizability.', + }), + imgUrl: NethermindBg, + url: routesEnum.nethermind, + linkText: formatMessage({ + defaultMessage: 'Configure Nethermind', + }), + layer: layerEnum.execution, + discord: 'https://discord.gg/PaCMRFdvWT', + ...defaultExecutionPorts, + }, + { + header: 'Erigon', + text: formatMessage({ + defaultMessage: + 'Erigon is an execution client on the efficiency frontier, written in Go.', + }), + imgUrl: ErigonBg, + url: routesEnum.erigon, + linkText: formatMessage({ + defaultMessage: 'Configure Erigon', + }), + layer: layerEnum.execution, + discord: 'https://github.com/ledgerwatch/erigon#erigon-discord-server', + ...defaultExecutionPorts, + }, + { + header: 'Geth', + text: formatMessage({ + defaultMessage: + 'Geth is one of the three original implementations of the Ethereum protocol, written in Go.', + }), + imgUrl: GethBg, + url: routesEnum.geth, + linkText: formatMessage({ + defaultMessage: 'Configure Geth', + }), + layer: layerEnum.execution, + discord: 'https://discord.gg/nthXNEv', + ...defaultExecutionPorts, + }, { header: 'Lighthouse', text: formatMessage({ @@ -193,6 +286,9 @@ export const Checklist = () => { linkText: formatMessage({ defaultMessage: 'Configure Lighthouse', }), + layer: layerEnum.consensus, + discord: 'https://discord.gg/uC7TuaH', + ...defaultConsensusPorts, }, { header: 'Nimbus', @@ -205,6 +301,9 @@ export const Checklist = () => { linkText: formatMessage({ defaultMessage: 'Configure Nimbus', }), + layer: layerEnum.consensus, + discord: 'https://discord.gg/YbTCNat', + ...defaultConsensusPorts, }, { header: 'Prysm', @@ -217,6 +316,10 @@ export const Checklist = () => { linkText: formatMessage({ defaultMessage: 'Configure Prysm', }), + layer: layerEnum.consensus, + discord: 'https://discord.gg/z9efH7e', + defaultTcp: 13000, + defaultUdp: 12000, }, { header: 'Teku', @@ -229,6 +332,9 @@ export const Checklist = () => { linkText: formatMessage({ defaultMessage: 'Configure Teku', }), + layer: layerEnum.consensus, + discord: 'https://discord.gg/7hPv2T6', + ...defaultConsensusPorts, }, ]); @@ -355,11 +461,11 @@ export const Checklist = () => {
  • @@ -371,12 +477,11 @@ export const Checklist = () => {
  • {
  • @@ -454,7 +559,7 @@ export const Checklist = () => {
  • {' '} - + @@ -518,47 +623,74 @@ export const Checklist = () => { - + } /> - - - - - - - - - - - - - - Geth - 30303 TCP/UDP - - - Lighthouse - 9000 TCP/UDP - - - Nimbus - 9000 UDP/TCP - - - Prysm - 12000 UDP, 13000 TCP - - - Teku - 9000 TCP/UDP - - - + + + + + + + + + + + + + + {clientInfo + .filter(({ layer }) => layer === layerEnum.execution) + .sort((a, b) => b.defaultTcp - a.defaultTcp) + .map(({ header, defaultTcp, defaultUdp }) => ( + + {header} + + {defaultTcp === defaultUdp + ? `${defaultUdp} TCP/UDP` + : `${defaultTcp} TCP, ${defaultUdp} UDP`} + + + ))} + + + + + + + + + + + + + + + {clientInfo + .filter(({ layer }) => layer === layerEnum.consensus) + .map(({ header, defaultTcp, defaultUdp }) => ( + + {header} + + {defaultTcp === defaultUdp + ? `${defaultUdp} TCP/UDP` + : `${defaultTcp} TCP, ${defaultUdp} UDP`} + + + ))} + + + + + + + +
    @@ -666,10 +798,7 @@ export const Checklist = () => { - + {' '} {TESTNET_LAUNCHPAD_NAME} @@ -677,41 +806,96 @@ export const Checklist = () => {
    - + + + + + + {clientInfo + .filter(({ layer }) => layer === layerEnum.execution) + .map(client => ( + + ))} + + + + + + + + + {formatMessage({ + defaultMessage: 'Merge Readiness Checklist', + })} + + + } /> + + + + + + + } + /> + + {clientInfo + .filter( + ({ discord, layer }) => + !!discord && layer === layerEnum.execution + ) + .map(({ header, discord }, idx) => ( + + {idx !== 0 && ' | '} + + {header} + + + ))} +
    - + - - - - {clientInfo.map(client => ( - - ))} + {clientInfo + .filter(({ layer }) => layer === layerEnum.consensus) + .map(client => ( + + ))} @@ -751,6 +935,31 @@ export const Checklist = () => { } /> + + + + + + + } + /> + + {clientInfo + .filter( + ({ discord, layer }) => + !!discord && layer === layerEnum.consensus + ) + .map(({ header, discord }, idx) => ( + + {idx !== 0 && ' | '} + + {header} + + + ))} +
    @@ -796,33 +1005,6 @@ export const Checklist = () => {
  • - - - - - - - } - /> - - - Lighthouse - {' '} - |{' '} - - Nimbus - {' '} - |{' '} - - Prysm - {' '} - |{' '} - - Teku - -
    @@ -982,7 +1164,7 @@ export const Checklist = () => { { } /> + + + + } + />
    diff --git a/src/pages/Clients/Consensus/Lighthouse.tsx b/src/pages/Clients/Consensus/Lighthouse.tsx index 0f7e58d9..3901f19e 100644 --- a/src/pages/Clients/Consensus/Lighthouse.tsx +++ b/src/pages/Clients/Consensus/Lighthouse.tsx @@ -1,16 +1,17 @@ import React from 'react'; +import { FormattedMessage, useIntl } from 'react-intl'; import styled from 'styled-components'; -import { PageTemplate } from '../../../components/PageTemplate'; import lighthouseBg from '../../../static/lighthouse-bg.png'; import { Hero, SectionTitle, ValidatorClientPageStyles, } from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { LIGHTHOUSE_INSTALLATION_URL } from '../../../utils/envVars'; -import { FormattedMessage, useIntl } from 'react-intl'; const CodeSnippet = styled.div` padding: 10px; @@ -135,6 +136,7 @@ export const Lighthouse = () => { > +
    diff --git a/src/pages/Clients/Consensus/Nimbus.tsx b/src/pages/Clients/Consensus/Nimbus.tsx index cb7b51b6..a379d448 100644 --- a/src/pages/Clients/Consensus/Nimbus.tsx +++ b/src/pages/Clients/Consensus/Nimbus.tsx @@ -1,16 +1,17 @@ import React from 'react'; -import { PageTemplate } from '../../../components/PageTemplate'; +import { FormattedMessage, useIntl } from 'react-intl'; import nimbusBg from '../../../static/nimbus-bg.png'; import { Hero, SectionTitle, ValidatorClientPageStyles, } from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { NIMBUS_INSTALLATION_URL } from '../../../utils/envVars'; -import { FormattedMessage, useIntl } from 'react-intl'; export const NimbusDetails = ({ shortened }: { shortened?: boolean }) => ( <> @@ -98,6 +99,7 @@ export const Nimbus = () => { > +
    diff --git a/src/pages/Clients/Consensus/Prysm.tsx b/src/pages/Clients/Consensus/Prysm.tsx index 9f7ab0e4..94b8726b 100644 --- a/src/pages/Clients/Consensus/Prysm.tsx +++ b/src/pages/Clients/Consensus/Prysm.tsx @@ -1,16 +1,17 @@ import React from 'react'; +import { FormattedMessage, useIntl } from 'react-intl'; import styled from 'styled-components'; -import { PageTemplate } from '../../../components/PageTemplate'; import prysmBg from '../../../static/prysmatic-bg.png'; import { Hero, SectionTitle, ValidatorClientPageStyles, } from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { PRYSM_INSTALLATION_URL } from '../../../utils/envVars'; -import { FormattedMessage, useIntl } from 'react-intl'; const ClientDiversityWarning = styled(Text as any)` background: #ffdeb32e; @@ -91,6 +92,7 @@ export const Prysm = () => { > +
    diff --git a/src/pages/Clients/Consensus/Teku.tsx b/src/pages/Clients/Consensus/Teku.tsx index e720c6e6..0f5328b7 100644 --- a/src/pages/Clients/Consensus/Teku.tsx +++ b/src/pages/Clients/Consensus/Teku.tsx @@ -1,16 +1,17 @@ import React from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; -import { PageTemplate } from '../../../components/PageTemplate'; import tekuBg from '../../../static/teku-bg.png'; import { Hero, SectionTitle, ValidatorClientPageStyles, } from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; import { Heading } from '../../../components/Heading'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { TEKU_INSTALLATION_URL } from '../../../utils/envVars'; export const TekuDetails = ({ shortened }: { shortened?: boolean }) => ( @@ -235,6 +236,7 @@ export const Teku = () => { imgSrc={tekuBg} style={{ objectPosition: '0 -110px', height: 300 }} /> +
    diff --git a/src/pages/Clients/Execution/Besu.tsx b/src/pages/Clients/Execution/Besu.tsx index db4123cf..d2161363 100644 --- a/src/pages/Clients/Execution/Besu.tsx +++ b/src/pages/Clients/Execution/Besu.tsx @@ -1,12 +1,19 @@ import React from 'react'; -import { SectionTitle } from '../ValidatorClientComponents'; -import { IS_MAINNET } from '../../../utils/envVars'; +import { FormattedMessage, useIntl } from 'react-intl'; +import besuBg from '../../../static/besu-bg.png'; +import { + Hero, + SectionTitle, + ValidatorClientPageStyles, +} from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; import { Heading } from '../../../components/Heading'; -import { FormattedMessage } from 'react-intl'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { IS_GOERLI } from '../../ConnectWallet/web3Utils'; +import { IS_MAINNET } from '../../../utils/envVars'; // eslint-disable-next-line no-unused-vars export const BesuDetails = () => ( @@ -98,3 +105,29 @@ export const BesuDetails = () => (
    ); + +export const Besu = () => { + const { formatMessage } = useIntl(); + return ( + + + + + +
    + + + + + + +
    +
    +
    + ); +}; diff --git a/src/pages/Clients/Execution/Erigon.tsx b/src/pages/Clients/Execution/Erigon.tsx index 67b59b79..78e8065f 100644 --- a/src/pages/Clients/Execution/Erigon.tsx +++ b/src/pages/Clients/Execution/Erigon.tsx @@ -1,12 +1,19 @@ import React from 'react'; -import { SectionTitle } from '../ValidatorClientComponents'; -import { IS_MAINNET } from '../../../utils/envVars'; +import { FormattedMessage, useIntl } from 'react-intl'; +import erigonBg from '../../../static/geth-bg.png'; +import { + Hero, + SectionTitle, + ValidatorClientPageStyles, +} from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; -import { Heading } from '../../../components/Heading'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; -import { FormattedMessage } from 'react-intl'; +import { Heading } from '../../../components/Heading'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { IS_GOERLI } from '../../ConnectWallet/web3Utils'; +import { IS_MAINNET } from '../../../utils/envVars'; // eslint-disable-next-line no-unused-vars export const ErigonDetails = () => ( @@ -74,3 +81,29 @@ export const ErigonDetails = () => ( )} ); + +export const Erigon = () => { + const { formatMessage } = useIntl(); + return ( + + + + + +
    + + + + + + +
    +
    +
    + ); +}; diff --git a/src/pages/Clients/Execution/Geth.tsx b/src/pages/Clients/Execution/Geth.tsx index 7c4faedd..dd1f7584 100644 --- a/src/pages/Clients/Execution/Geth.tsx +++ b/src/pages/Clients/Execution/Geth.tsx @@ -1,12 +1,19 @@ import React from 'react'; -import { SectionTitle } from '../ValidatorClientComponents'; -import { IS_MAINNET } from '../../../utils/envVars'; +import { FormattedMessage, useIntl } from 'react-intl'; +import gethBg from '../../../static/geth-bg.png'; +import { + Hero, + SectionTitle, + ValidatorClientPageStyles, +} from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; import { Heading } from '../../../components/Heading'; -import { FormattedMessage } from 'react-intl'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { IS_GOERLI } from '../../ConnectWallet/web3Utils'; +import { IS_MAINNET } from '../../../utils/envVars'; // eslint-disable-next-line no-unused-vars export const GethDetails = () => ( @@ -89,3 +96,29 @@ export const GethDetails = () => (
    ); + +export const Geth = () => { + const { formatMessage } = useIntl(); + return ( + + + + + +
    + + + + + + +
    +
    +
    + ); +}; diff --git a/src/pages/Clients/Execution/Nethermind.tsx b/src/pages/Clients/Execution/Nethermind.tsx index 37bb2f80..0eef5edb 100644 --- a/src/pages/Clients/Execution/Nethermind.tsx +++ b/src/pages/Clients/Execution/Nethermind.tsx @@ -1,12 +1,19 @@ import React from 'react'; -import { SectionTitle } from '../ValidatorClientComponents'; -import { IS_MAINNET } from '../../../utils/envVars'; +import { FormattedMessage, useIntl } from 'react-intl'; +import nethermindBg from '../../../static/nethermind-bg.png'; +import { + Hero, + SectionTitle, + ValidatorClientPageStyles, +} from '../ValidatorClientComponents'; +import { PageTemplate } from '../../../components/PageTemplate'; import { Text } from '../../../components/Text'; import { Link } from '../../../components/Link'; import { Code } from '../../../components/Code'; import { Heading } from '../../../components/Heading'; -import { FormattedMessage } from 'react-intl'; +import { ClientMergeNotification } from '../../../components/ClientMergeNotification'; import { IS_GOERLI } from '../../ConnectWallet/web3Utils'; +import { IS_MAINNET } from '../../../utils/envVars'; // eslint-disable-next-line no-unused-vars export const NethermindDetails = () => ( @@ -111,3 +118,29 @@ export const NethermindDetails = () => (
    ); + +export const Nethermind = () => { + const { formatMessage } = useIntl(); + return ( + + + + + +
    + + + + + + +
    +
    +
    + ); +}; diff --git a/src/pages/FAQ/index.jsx b/src/pages/FAQ/index.jsx index 1ab11e08..f40a091e 100644 --- a/src/pages/FAQ/index.jsx +++ b/src/pages/FAQ/index.jsx @@ -52,90 +52,92 @@ export const FAQ = () => { - - - validator, + }} /> +
    +
    + + + - {formatMessage({ - defaultMessage: - 'you can think of a validator as a voter for new blocks', - })} - - ), + validatorClient: validator client, }} - description="{boldSummary} is styled with bold for emphasis" /> - - -
    - + node operator, + }} /> +
    +
    + + + {PRICE_PER_VALIDATOR} ETH, + initialAndMaximum: initial and maximum, + }} />
    - - - - + -
    -
    - - - {PRICE_PER_VALIDATOR}, + pricePerValidator: PRICE_PER_VALIDATOR, + effectiveBalance: ( + + effective balance + + ), }} - description="{pricePerValidator} represents deposit amount styled in bold" />
    { + + + { + Shanghai + + ), }} /> -
    - - - -
    +
    +
    + + + + + + + + + +
    +
    + + + + + + + + +
    @@ -222,18 +269,13 @@ export const FAQ = () => { /> - + - +
    @@ -295,6 +337,52 @@ export const FAQ = () => { +
    + + + + + + +
    + + + +
    + + + +
    +
    + + + + + + + + not, + pocGame: ( + + proof-of-custody game + + ), + }} + /> + +
    @@ -359,6 +447,16 @@ export const FAQ = () => { your validator's balance over time." /> +
    + + + +
    + + + + +
    @@ -376,6 +474,16 @@ export const FAQ = () => { and issues your rewards or penalties appropriately." /> +
    + + average, + }} + /> + +
    @@ -557,7 +665,7 @@ export const FAQ = () => { your uptime is {greaterThan50Percent}." values={{ greaterThan50Percent: ( - { diff --git a/src/pages/Landing/Introduction.tsx b/src/pages/Landing/Introduction.tsx index 491d6bfd..ab4b8b81 100644 --- a/src/pages/Landing/Introduction.tsx +++ b/src/pages/Landing/Introduction.tsx @@ -85,19 +85,10 @@ export const Introduction = (): JSX.Element => { - + - + { className="mt20 mb40" to="https://ethereum.org/en/upgrades/merge/" > - + { })} content={intl.formatMessage({ defaultMessage: - 'We recommend you go through the entire process on a testnet first to get comfortable.', + 'We strongly recommend you go through the entire process on a testnet first to get comfortable before risking real ETH.', })} > {IS_MAINNET ? ( diff --git a/src/pages/Landing/Upgrades/index.tsx b/src/pages/Landing/Upgrades/index.tsx index 93c67c30..d59c0b50 100644 --- a/src/pages/Landing/Upgrades/index.tsx +++ b/src/pages/Landing/Upgrades/index.tsx @@ -124,30 +124,38 @@ export const Upgrades = (): JSX.Element => { + + + + Merge Readiness Checklist + + ), + }} /> - + - + - + diff --git a/src/pages/Landing/index.tsx b/src/pages/Landing/index.tsx index 7f57b01e..373216d1 100644 --- a/src/pages/Landing/index.tsx +++ b/src/pages/Landing/index.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from 'react'; import { AppBar } from '../../components/AppBar'; +import { MergeNotification } from '../../components/MergeNotification'; import { Hero } from './Hero'; import { NetworkStatus } from './NetworkStatus'; import { Introduction } from './Introduction'; @@ -28,6 +29,7 @@ export const LandingPage = (): JSX.Element => { return ( <> + diff --git a/src/pages/MergeReadiness/index.tsx b/src/pages/MergeReadiness/index.tsx new file mode 100644 index 00000000..597718da --- /dev/null +++ b/src/pages/MergeReadiness/index.tsx @@ -0,0 +1,825 @@ +import React from 'react'; +import styled from 'styled-components'; +import { CheckBox } from 'grommet'; +import { FormNext } from 'grommet-icons'; +import { FormattedMessage, useIntl } from 'react-intl'; + +import { Link } from '../../components/Link'; +import { PageTemplate } from '../../components/PageTemplate'; +import { Heading } from '../../components/Heading'; +import { Text } from '../../components/Text'; +import { Code } from '../../components/Code'; +import { Alert } from '../../components/Alert'; + +const ChecklistPageStyles = styled.div` + section { + background-color: white; + padding: 1rem; + margin: 1rem; + border-radius: 4px; + > h3 { + border-bottom: 1px solid lightgray; + margin-bottom: 5px; + } + } + label { + padding: 1rem; + } + .sub-checklist-item { + margin-top: -0.5rem; + margin-left: 1.5rem; + } + .checkbox-label { + margin-left: 0.5rem; + } + ul { + padding-left: 0px; + padding-top: 16px; + } + @media screen and (max-width: 1080px) { + section { + background-color: white; + margin: 0px; + padding: 16px; + flex-wrap: wrap; + } + } +`; + +const Subtitle = styled.p` + font-size: 20px; + margin-bottom: 32px; +`; + +const CardContainer = styled.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 200px), 1fr)); + gap: 1rem; + @media only screen and (max-width: ${p => p.theme.screenSizes.medium}) { + flex-direction: column; + } +`; + +const Card = styled.div` + padding: 24px; + border: 1px solid ${p => p.theme.gray.dark}; + border-radius: 4px; + width: 100%; + background: white; + display: flex; + align-items: center; + width: 100%; + justify-content: space-between; + @media only screen and (max-width: ${p => p.theme.screenSizes.medium}) { + margin: 0px; + margin-top: 16px; + } + + &:hover { + cursor: pointer; + box-shadow: 0px 8px 17px rgba(0, 0, 0, 0.15); + transition: transform 0.1s; + transform: scale(1.02); + } +`; + +const BoldGreen = styled.span` + color: ${(p: { theme: any; fontSize: number }) => p.theme.green.dark}; + font-size: ${(p: { theme: any; fontSize: number }) => p.fontSize}px; + font-weight: bold; +`; + +const StyledLink = styled(Link as any)` + width: 100%; +`; + +const SectionHeader = styled.div` + margin: 3rem 0 1rem; + padding: 1rem; + box-sizing: border-box; + border-radius: 4px; + &:before { + content: ''; + display: block; + height: 3rem; + margin-top: -3rem; + visibility: hidden; + } +`; + +export const MergeReadiness = () => { + const { formatMessage } = useIntl(); + + const sections = [ + { + heading: , + title: , + id: 'el-plus-cl', + }, + { + heading: , + title: , + id: 'authenticate', + }, + { + heading: , + title: , + id: 'fee-recipient', + }, + { + heading: , + title: , + id: 'additional-reminders', + }, + ]; + + return ( + +
    + + + + + + + + + + + {sections.map(({ heading, title, id }) => ( + + +
    + + {heading} + + + {title} + +
    + +
    +
    + ))} +
    + + + + + {sections[0].heading} + {' - '} + {sections[0].title} + + + + + +
    + + + + + + + + + + + + + + + + + + + + + } + /> + + + + } + /> +
    + + + {sections[1].heading} + {' - '} + {sections[1].title} + + + + + +
    + {/* + + */} + + + Engine API + + ), + }} + /> + + {/* + + */} + + + + + ), + }} + /> + + + + + + + + + +
      +
    • + + Besu:{' '} + engine-jwt-secret }} + /> + +
    • +
    • + + Geth:{' '} + + +
    • +
    • + + Erigon: + +
    • +
    • + + Lighthouse:{' '} + + +
    • +
    • + + Nethermind:{' '} + JwtSecretFile }} + /> + +
    • +
    • + + Nimbus: + +
    • +
    • + + Prysm:{' '} + + +
    • +
    • + + Teku:{' '} + + +
    • +
    + + both }} + /> + + } + /> +
    + + + {sections[2].heading} + {' - '} + {sections[2].title} + + + + + +
    + + + + + + + + + + + + ), + }} + /> + + + + + + + + +
      +
    • + + Lighthouse:{' '} + + +
    • +
    • + + Nimbus: + +
    • +
    • + + Prysm:{' '} + + +
    • +
    • + + Teku:{' '} + + +
    • +
    + + + + } + /> + + + + } + /> +
    + + {sections[3].title} + +
    + + + + + + + + ), + }} + /> + +
    +
    + + + + + #TestingTheMerge }} + /> + + + Ropsten, + network: 'Ropsten', + }} + /> + + + + +
      +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + +
    • +
    + + Kiln }} + /> + +
      +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + {' - '} + + +
    • +
    • + + + + + +
    • +
    + + + + + ), + }} + /> + + + + + + + ), + testingTheMerge: ( + + #TestingTheMerge + + 🐼 + + + ), + }} + /> + + + + + + ), + testingTheMerge: #TestingTheMerge, + }} + /> + + +
    +
    + + + + + not }} + /> + + + + + + ), + }} + /> + +
    +
    + + + +
      +
    • + + {' '} + + 🐼 + + + {' - '} + Mario Havel +
    • +
    • + + + + {' - '} + trent.eth +
    • +
    • + + + + {' - '} + Tim Beiko +
    • +
    • + + + +
    • +
    • + + + +
    • +
    • + + + +
    • +
    +
    +
    + + ); +}; diff --git a/src/pages/SelectClient/SelectClientSection.tsx b/src/pages/SelectClient/SelectClientSection.tsx index 001c3858..9c525498 100644 --- a/src/pages/SelectClient/SelectClientSection.tsx +++ b/src/pages/SelectClient/SelectClientSection.tsx @@ -6,6 +6,7 @@ import { Link } from '../../components/Link'; import { Paper } from '../../components/Paper'; import { Heading } from '../../components/Heading'; import { ImageSelectionBox } from '../../components/ImageSelectionBox'; +import { Alert } from '../../components/Alert'; import { Client } from './index'; import { ClientId } from '../../store/actions/clientActions'; @@ -88,6 +89,15 @@ const SelectClientSection = ({ {clientDetails[currentClient]} + + + + + + + + + ); diff --git a/src/pages/index.ts b/src/pages/index.ts index 6d035d2a..a0e80e30 100644 --- a/src/pages/index.ts +++ b/src/pages/index.ts @@ -14,3 +14,4 @@ export * from './Checklist'; export * from './Languages'; export * from './TermsOfService'; export * from './TopUp'; +export * from './MergeReadiness'; diff --git a/src/static/besu-bg.png b/src/static/besu-bg.png new file mode 100644 index 00000000..c1a87eb1 Binary files /dev/null and b/src/static/besu-bg.png differ diff --git a/src/static/erigon-bg.png b/src/static/erigon-bg.png new file mode 100644 index 00000000..a6206e5a Binary files /dev/null and b/src/static/erigon-bg.png differ diff --git a/src/static/geth-bg.png b/src/static/geth-bg.png new file mode 100644 index 00000000..5f2e72b3 Binary files /dev/null and b/src/static/geth-bg.png differ diff --git a/src/static/nethermind-bg.png b/src/static/nethermind-bg.png new file mode 100644 index 00000000..aab2616d Binary files /dev/null and b/src/static/nethermind-bg.png differ