diff --git a/.all-contributorsrc b/.all-contributorsrc index 53e114dcf9c..ced176ff136 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -8499,6 +8499,72 @@ "contributions": [ "code" ] + }, + { + "login": "fleischi-svr", + "name": "Cronos", + "avatar_url": "https://avatars.githubusercontent.com/u/79516944?v=4", + "profile": "https://github.com/fleischi-svr", + "contributions": [ + "doc", + "translation" + ] + }, + { + "login": "MicahZoltu", + "name": "Micah Zoltu", + "avatar_url": "https://avatars.githubusercontent.com/u/886059?v=4", + "profile": "https://github.com/MicahZoltu", + "contributions": [ + "doc" + ] + }, + { + "login": "Aracki", + "name": "Ivan Aracki", + "avatar_url": "https://avatars.githubusercontent.com/u/6129986?v=4", + "profile": "https://www.aracki.me", + "contributions": [ + "ideas" + ] + }, + { + "login": "always0e0w", + "name": "屠虫少年", + "avatar_url": "https://avatars.githubusercontent.com/u/64178062?v=4", + "profile": "https://alphabeta.top/", + "contributions": [ + "doc", + "translation" + ] + }, + { + "login": "RamanSB", + "name": "Ramandeep", + "avatar_url": "https://avatars.githubusercontent.com/u/13969478?v=4", + "profile": "http://stackoverflow.com/users/5062825/ramansb", + "contributions": [ + "ideas" + ] + }, + { + "login": "vvladd", + "name": "Vlad Kokhan", + "avatar_url": "https://avatars.githubusercontent.com/u/13506999?v=4", + "profile": "https://github.com/vvladd", + "contributions": [ + "doc", + "translation" + ] + }, + { + "login": "SavPhill", + "name": "Phill", + "avatar_url": "https://avatars.githubusercontent.com/u/38789408?v=4", + "profile": "https://github.com/SavPhill", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index b5825fa1259..245299b5c00 100644 --- a/README.md +++ b/README.md @@ -1355,6 +1355,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
othaime-en

💻 +
Cronos

📖 🌍 +
Micah Zoltu

📖 +
Ivan Aracki

🤔 +
屠虫少年

📖 🌍 +
Ramandeep

🤔 +
Vlad Kokhan

📖 🌍 + + +
Phill

🖋 diff --git a/docs/chakra-migration-guide.md b/docs/chakra-migration-guide.md index dae5cc0a2e9..35fe5aadaea 100644 --- a/docs/chakra-migration-guide.md +++ b/docs/chakra-migration-guide.md @@ -8,6 +8,63 @@ This is part of our [UI library implementation epic](https://github.com/ethereum All `styled` components need to be removed and replaced with the corresponded Chakra component. [See the list of components](https://chakra-ui.com/docs/components). +Use as much native Chakra components as possible. + +### Wrappers or layout divs + +Use the [native layouts components](https://chakra-ui.com/docs/components/box) + +```tsx +// before +const Wrapper = styled.div` + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +` + +// now + +``` + +Center things using the `
` component + +```tsx +// before +const Center = styled.div` + height: 100px; + display: flex; + justify-content: center; + align-items: center; +` + +// now +
+``` + +Group buttons using `` or `` + +```tsx +// before +const ButtonRow = styled.div` + display: flex; + align-items: center; + flex-wrap: wrap; +` + +// now + + + + + +// or + + + + +``` + ## Override styles using style props - You can see how to use the different style props here: [https://chakra-ui.com/docs/styled-system/style-props](https://chakra-ui.com/docs/styled-system/style-props#margin-and-padding) @@ -53,7 +110,20 @@ import { BsQuestionSquareFill } from "react-icons/bs" ; ``` -- [Deprecated]`src/components/SharedStyledComponents` - we are not using this anymore, use Chakra components instead. +- [Deprecated]`src/components/SharedStyledComponents` - we are not using this anymore, replace everything with Chakra components. + +```tsx +// before +import { ButtonPrimary, ButtonSecondary } from "../SharedStyledComponents" + +// now +import Button from "../Button" // <-- use the new Button component built with Chakra + +// use our primary button (uses the default `solid` variant) + props.theme.colors.primary}; - color: ${(props) => props.theme.colors.buttonColor} !important; - border: 1px solid transparent; - - &:hover { - background-color: ${(props) => props.theme.colors.primaryHover}; - box-shadow: ${(props) => props.theme.colors.cardBoxShadow}; - } - &:active { - background-color: ${(props) => props.theme.colors.primaryActive}; - } -` - -const SecondaryLink = styled(StyledLinkButton)` - color: ${(props) => props.theme.colors.text}; - border: 1px solid ${(props) => props.theme.colors.text}; - background-color: transparent; - - &:hover { - color: ${(props) => props.theme.colors.primary}; - border: 1px solid ${(props) => props.theme.colors.primary}; - box-shadow: ${(props) => props.theme.colors.cardBoxShadow}; - } - &:active { - background-color: ${(props) => - props.theme.colors.secondaryButtonBackgroundActive}; - } -` - -const PrimaryScrollLink = styled(StyledScrollButton)` - color: ${(props) => props.theme.colors.buttonColor} !important; - background-color: ${(props) => props.theme.colors.primary}; - border: 1px solid transparent; - - &:hover { - background-color: ${(props) => props.theme.colors.primaryHover}; - box-shadow: ${(props) => props.theme.colors.cardBoxShadow}; - } - &:active { - background-color: ${(props) => props.theme.colors.primaryActive}; - } -` - -const SecondaryScrollLink = styled(StyledScrollButton)` - color: ${(props) => props.theme.colors.text}; - border: 1px solid ${(props) => props.theme.colors.text}; - background-color: transparent; - - &:hover { - color: ${(props) => props.theme.colors.primary}; - border: 1px solid ${(props) => props.theme.colors.primary}; - box-shadow: ${(props) => props.theme.colors.cardBoxShadow}; - } - &:active { - background-color: ${(props) => - props.theme.colors.secondaryButtonBackgroundActive}; - } -` - -export interface IProps extends ILinkProps, MarginProps { - toId?: string - isSecondary?: boolean -} - -const ButtonLink: React.FC = ({ - to, - toId, - isSecondary, - children, - className, - hideArrow = false, - ...props -}) => { - const handleOnClick = () => { - if (!toId) { - return - } - - scrollIntoView(toId) - } - - const Link = isSecondary ? SecondaryLink : PrimaryLink - const ScrollLink = isSecondary ? SecondaryScrollLink : PrimaryScrollLink - - return to ? ( - - {children} - - ) : ( - +const ButtonLink: React.FC = ({ children, ...props }) => { + return ( + ) } diff --git a/src/components/Callout.tsx b/src/components/Callout.tsx index c693df91968..a2635730a1a 100644 --- a/src/components/Callout.tsx +++ b/src/components/Callout.tsx @@ -47,6 +47,7 @@ const Content = styled.div` ` export interface IProps { + children?: React.ReactNode image?: string emoji?: string alt?: string diff --git a/src/components/CalloutBanner.tsx b/src/components/CalloutBanner.tsx index 25cac746bb5..5944e4d785b 100644 --- a/src/components/CalloutBanner.tsx +++ b/src/components/CalloutBanner.tsx @@ -50,10 +50,10 @@ const Description = styled.p` color: ${(props) => props.theme.colors.text200}; ` -const Image = styled(GatsbyImage)` +const Image = styled(GatsbyImage)<{ maximagewidth?: number }>` align-self: center; /* prevents crop */ width: 100%; - max-width: ${(props) => `${props.maxImageWidth}px`}; + max-width: ${(props) => `${props.maximagewidth}px`}; margin-top: -6rem; margin-bottom: -6rem; @media (max-width: ${(props) => props.theme.breakpoints.l}) { @@ -67,6 +67,7 @@ const H2 = styled.h2` ` export interface IProps { + children?: React.ReactNode image: string maxImageWidth?: number titleKey: TranslationKey @@ -90,7 +91,7 @@ const CalloutBanner: React.FC = ({ {alt} diff --git a/src/components/Card.tsx b/src/components/Card.tsx index bba088be74c..5878407121a 100644 --- a/src/components/Card.tsx +++ b/src/components/Card.tsx @@ -27,6 +27,7 @@ const StyledEmoji = styled(Emoji)` const TopContent = styled.div`` export interface IProps { + children?: React.ReactNode emoji?: string title?: ReactNode description?: ReactNode diff --git a/src/components/CardList.tsx b/src/components/CardList.tsx index e9b30893093..ab44363678e 100644 --- a/src/components/CardList.tsx +++ b/src/components/CardList.tsx @@ -38,6 +38,7 @@ const ItemLink = styled(Link)` width: 100%; color: #000000; &:hover { + text-decoration: none; border-radius: 4px; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; background: ${(props) => props.theme.colors.tableBackgroundHover}; diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx index 07a63007991..20889a5abd2 100644 --- a/src/components/Checkbox.tsx +++ b/src/components/Checkbox.tsx @@ -55,6 +55,7 @@ const Label = styled.span` ` export interface IProps { + children?: React.ReactNode callback?: () => void checked: boolean className?: string diff --git a/src/components/CodeModal.tsx b/src/components/CodeModal.tsx index 271b680c63c..709aea03d62 100644 --- a/src/components/CodeModal.tsx +++ b/src/components/CodeModal.tsx @@ -83,6 +83,7 @@ const Overlay = ({ isActive }) => ( ) export interface IProps { + children?: React.ReactNode className?: string isOpen: boolean setIsOpen: (isOpen: boolean) => void diff --git a/src/components/DataProductCard.tsx b/src/components/DataProductCard.tsx index c9c4ba9537b..6910f629bfc 100644 --- a/src/components/DataProductCard.tsx +++ b/src/components/DataProductCard.tsx @@ -36,6 +36,7 @@ const Card = styled(Link)` border: 1px solid ${(props) => props.theme.colors.lightBorder}; text-decoration: none; &:hover { + text-decoration: none; box-shadow: ${(props) => props.theme.colors.tableBoxShadow}; background: ${(props) => props.theme.colors.tableBackgroundHover}; transition: transform 0.1s; diff --git a/src/components/DismissibleCard.tsx b/src/components/DismissibleCard.tsx index ed582960435..013c0669a5c 100644 --- a/src/components/DismissibleCard.tsx +++ b/src/components/DismissibleCard.tsx @@ -29,6 +29,7 @@ const CloseIconContainer = styled.span` ` export interface IProps { + children?: React.ReactNode storageKey: string } diff --git a/src/components/DocLink.tsx b/src/components/DocLink.tsx index 81e094ea24a..5bdb9afc7b4 100644 --- a/src/components/DocLink.tsx +++ b/src/components/DocLink.tsx @@ -6,6 +6,7 @@ import Link from "./Link" import Emoji from "./Emoji" export interface IProps { + children?: React.ReactNode to: string className?: string isExternal?: boolean @@ -25,6 +26,7 @@ const Container = styled(Link)<{ isExternal: boolean }>` color: ${({ theme }) => theme.colors.text}; border: 1px solid ${({ theme }) => theme.colors.border}; &:hover { + text-decoration: none; box-shadow: 0 0 1px ${({ theme }) => theme.colors.primary}; background: ${({ theme }) => theme.colors.tableBackgroundHover}; border-radius: 4px; diff --git a/src/components/Emoji.tsx b/src/components/Emoji.tsx index 0ce387f8421..357f2b54a54 100644 --- a/src/components/Emoji.tsx +++ b/src/components/Emoji.tsx @@ -2,6 +2,7 @@ import React from "react" import { Twemoji } from "react-emoji-render" import styled from "@emotion/styled" import { margin, MarginProps } from "styled-system" +import { IS_DEV } from "../utils/env" export interface IProps extends MarginProps { size?: number @@ -19,7 +20,20 @@ const StyledEmoji = styled(Twemoji)<{ size: number }>` ` const Emoji: React.FC = ({ size = 1.5, text, ...props }) => { - return + return ( + + ) } Emoji.defaultProps = { diff --git a/src/components/ExpandableCard.tsx b/src/components/ExpandableCard.tsx index 42b77408b30..b1e580bf013 100644 --- a/src/components/ExpandableCard.tsx +++ b/src/components/ExpandableCard.tsx @@ -90,6 +90,7 @@ const ButtonLink = styled.button` ` export interface IProps { + children?: React.ReactNode contentPreview?: ReactNode title: ReactNode svg?: ComponentType> diff --git a/src/components/ExpandableInfo.tsx b/src/components/ExpandableInfo.tsx index efbc3370cf4..f34c1e88e22 100644 --- a/src/components/ExpandableInfo.tsx +++ b/src/components/ExpandableInfo.tsx @@ -98,6 +98,7 @@ const ButtonContainer = styled(motion.div)` ` export interface IProps { + children?: React.ReactNode image?: string title: ReactNode contentPreview: ReactNode diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.tsx index 7f857f2f50f..5829941f0e7 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.tsx @@ -2,7 +2,6 @@ import React, { ReactNode, useState } from "react" import styled from "@emotion/styled" // Component imports -import { ButtonPrimary, ButtonSecondary } from "./SharedStyledComponents" import Translation from "./Translation" // SVG imports import ThumbsUp from "../assets/feedback-thumbs-up.svg" @@ -10,6 +9,7 @@ import ThumbsUp from "../assets/feedback-thumbs-up.svg" import { trackCustomEvent } from "../utils/matomo" // import { getFeedbackSurveyUrl } from "../utils/getFeedbackSurveyUrl" import { useSurvey } from "../hooks/useSurvey" +import Button from "./Button" const Card = styled.div` border: 1px solid ${({ theme }) => theme.colors.border}; @@ -40,26 +40,6 @@ const ButtonContainer = styled.div` gap: 1rem; ` -const StyledButtonSecondary = styled(ButtonSecondary)` - display: flex; - gap: 0.5rem; - color: ${({ theme }) => theme.colors.primary}; - border-color: ${({ theme }) => theme.colors.primary}; - line-height: 140%; - vertical-align: middle; - svg { - height: 1.5rem; - &.flip { - transform: scaleY(-1); - } - } -` - -const StyledButtonPrimary = styled(ButtonPrimary)` - color: white; - font-weight: 700; -` - export interface IProps { prompt?: string isArticle?: boolean @@ -118,19 +98,25 @@ const FeedbackCard: React.FC = ({ {!feedbackSubmitted ? ( <> - handleSubmit(true)}> - + + ) : ( - + )} diff --git a/src/components/FeedbackWidget.tsx b/src/components/FeedbackWidget.tsx index 36ebc0fae66..e0185ac59c3 100644 --- a/src/components/FeedbackWidget.tsx +++ b/src/components/FeedbackWidget.tsx @@ -4,8 +4,8 @@ import { useIntl } from "react-intl" import styled from "@emotion/styled" import FocusTrap from "focus-trap-react" // Component imports -import { ButtonPrimary } from "./SharedStyledComponents" import Translation from "./Translation" +import Button from "./Button" import Icon from "./Icon" import NakedButton from "./NakedButton" // SVG imports @@ -154,18 +154,20 @@ const FeedbackWidget: React.FC = ({ className }) => { const intl = useIntl() const containerRef = useRef(null) useOnClickOutside(containerRef, () => handleClose(), [`mousedown`]) + const [location, setLocation] = useState("") const [isOpen, setIsOpen] = useState(false) const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) const [isHelpful, setIsHelpful] = useState(null) - const location = typeof window !== "undefined" ? window.location.href : "" - useEffect(() => { - // Reset component state when path (location) changes - setIsOpen(false) - setFeedbackSubmitted(false) - setIsHelpful(null) - }, [location]) + if (typeof window !== "undefined") { + setLocation(window.location.href) + // Reset component state when path (location) changes + setIsOpen(false) + setFeedbackSubmitted(false) + setIsHelpful(null) + } + }, []) const surveyUrl = useSurvey(feedbackSubmitted, isHelpful) @@ -257,7 +259,8 @@ const FeedbackWidget: React.FC = ({ className }) => { )} {feedbackSubmitted ? ( - = ({ className }) => { )} > - + ) : ( <> - handleSubmit(true)} aria-label={translateMessageId("yes", intl)} > - - + )} diff --git a/src/components/FileContributors.tsx b/src/components/FileContributors.tsx index f9e2a18bd8b..8ea5765552a 100644 --- a/src/components/FileContributors.tsx +++ b/src/components/FileContributors.tsx @@ -343,7 +343,7 @@ const FileContributors: React.FC = ({ {editPath && ( - + diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 44168633701..fd447bd87b2 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -2,11 +2,12 @@ import React from "react" import styled from "@emotion/styled" import { useIntl } from "react-intl" import { StaticQuery, graphql } from "gatsby" +import { Icon } from "@chakra-ui/react" +import { FaDiscord, FaGithub, FaTwitter, FaYoutube } from "react-icons/fa" import { getLocaleTimestamp } from "../utils/time" import Translation from "./Translation" import Link from "./Link" -import Icon from "./Icon" import { isLangRightToLeft, TranslationKey } from "../utils/translations" import { Lang } from "../utils/languages" @@ -76,6 +77,7 @@ const FooterLink = styled(Link)` color: ${(props) => props.theme.colors.text200}; } &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; &:after { color: ${(props) => props.theme.colors.primary}; @@ -101,22 +103,22 @@ const SocialIcon = styled(Icon)` const socialLinks = [ { - icon: "github", + icon: FaGithub, to: "https://github.com/ethereum/ethereum-org-website", ariaLabel: "GitHub", }, { - icon: "twitter", + icon: FaTwitter, to: "https://twitter.com/ethdotorg", ariaLabel: "Twitter", }, { - icon: "youtube", + icon: FaYoutube, to: "https://youtube.com/channel/UCNOfzGXD_C9YMYmnefmPH0g", ariaLabel: "Youtube", }, { - icon: "discord", + icon: FaDiscord, to: "https://discord.gg/CetY6Y4", ariaLabel: "Discord", }, @@ -383,12 +385,13 @@ const Footer: React.FC = () => { {socialLinks.map((link, idx) => { return ( - + ) })} diff --git a/src/components/GhostCard.tsx b/src/components/GhostCard.tsx index 21c0f1617ae..09d69c28489 100644 --- a/src/components/GhostCard.tsx +++ b/src/components/GhostCard.tsx @@ -31,6 +31,7 @@ const Ghost = styled(BaseCard)` ` export interface IProps { + children?: React.ReactNode className?: string } diff --git a/src/components/GitStars.tsx b/src/components/GitStars.tsx index 753317561c8..2c6886b0882 100644 --- a/src/components/GitStars.tsx +++ b/src/components/GitStars.tsx @@ -12,6 +12,7 @@ const Container = styled(Link)` border: 1px solid ${(props) => props.theme.colors.lightBorder}; color: ${(props) => props.theme.colors.text}; &:hover { + text-decoration: none; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; } &:hover path { diff --git a/src/components/GlobalStyle.tsx b/src/components/GlobalStyle.tsx index 7d3f9584ce2..ed6bd3e1862 100644 --- a/src/components/GlobalStyle.tsx +++ b/src/components/GlobalStyle.tsx @@ -755,14 +755,15 @@ const GlobalStyle: React.FC = () => { /* Anchor tag styles */ /* Selected specifically for mdx rendered side icon link */ .header-anchor { - position: relative; + position: relative !important; display: initial; margin-left: -1.5em; - padding-right: 0.5rem; + padding-right: 0.5rem !important; font-size: 1rem; vertical-align: middle; svg { + display: inline; fill: ${theme.colors.primary}; visibility: hidden; } diff --git a/src/components/HorizontalCard.tsx b/src/components/HorizontalCard.tsx index d9a3610486c..40e4d9eff0a 100644 --- a/src/components/HorizontalCard.tsx +++ b/src/components/HorizontalCard.tsx @@ -23,6 +23,7 @@ const Title = styled.p` ` export interface IProps { + children?: React.ReactNode emoji: string title?: ReactNode description: ReactNode diff --git a/src/components/ImageCard.tsx b/src/components/ImageCard.tsx index eb97defac11..a30b87336f2 100644 --- a/src/components/ImageCard.tsx +++ b/src/components/ImageCard.tsx @@ -22,6 +22,7 @@ const Description = styled.p` ` export interface IProps { + children?: React.ReactNode image: string alt: string title: string diff --git a/src/components/InfoBanner.tsx b/src/components/InfoBanner.tsx index d0d9fe1dddb..7563070cc0b 100644 --- a/src/components/InfoBanner.tsx +++ b/src/components/InfoBanner.tsx @@ -29,18 +29,6 @@ const Banner = styled.div<{ flex-direction: column; } - a { - color: ${(props) => - props.isWarning - ? props.theme.colors.warningLink - : props.theme.colors.infoLink}; - &:hover { - color: ${(props) => - props.isWarning - ? props.theme.colors.warningLinkHover - : props.theme.colors.infoLinkHover}; - } - } ${margin} ` @@ -69,6 +57,7 @@ const Content = styled.div<{ ` export interface IProps { + children?: React.ReactNode className?: string emoji?: string isWarning?: boolean diff --git a/src/components/Layer2ProductCard.tsx b/src/components/Layer2ProductCard.tsx index f21bbb0d918..5995083c91c 100644 --- a/src/components/Layer2ProductCard.tsx +++ b/src/components/Layer2ProductCard.tsx @@ -81,6 +81,7 @@ const Children = styled.div` ` export interface IProps { + children?: React.ReactNode url?: string background: string image: string @@ -140,9 +141,11 @@ const Layer2ProductCard: React.FC = ({ )} - - {translateMessageId("layer-2-explore", intl)} {name} - +
+ + {translateMessageId("layer-2-explore", intl)} {name} + +
) } diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 97633d43f18..e5bcf6d6040 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -66,6 +66,7 @@ const Main = styled.main` ` export interface IProps { + children?: React.ReactNode data?: { pageData?: { frontmatter?: { @@ -143,6 +144,9 @@ const Layout: React.FC = ({ return ( + {/* our current react-intl types does not support react 18 */} + {/* TODO: once we upgrade react-intl to v6, remove this ts-ignore */} + {/* @ts-ignore */} diff --git a/src/components/Leaderboard.tsx b/src/components/Leaderboard.tsx index 0583c565096..8955827e59d 100644 --- a/src/components/Leaderboard.tsx +++ b/src/components/Leaderboard.tsx @@ -24,6 +24,7 @@ const Item = styled(Link)` width: 100%; color: #000000; &:hover { + text-decoration: none; border-radius: 4px; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; background: ${(props) => props.theme.colors.tableBackgroundHover}; diff --git a/src/components/Link.tsx b/src/components/Link.tsx index d55b94caa72..56c468a0e10 100644 --- a/src/components/Link.tsx +++ b/src/components/Link.tsx @@ -1,101 +1,64 @@ import React from "react" -import { Link as GatsbyLink, navigate as gatsbyNavigate } from "gatsby" +import { Icon, Link, LinkProps, useTheme } from "@chakra-ui/react" +import { navigate as gatsbyNavigate } from "gatsby" import { LocalizedLink as IntlLink } from "gatsby-theme-i18n" import { NavigateOptions } from "@reach/router" import { IntlShape } from "react-intl" -import styled from "@emotion/styled" -import Icon from "./Icon" +import { BsQuestionSquareFill } from "react-icons/bs" -import { isLang, Lang } from "../utils/languages" +import { Lang } from "../utils/languages" import { trackCustomEvent, EventOptions } from "../utils/matomo" import { Direction } from "../types" const HASH_PATTERN = /^#.*/ -// const DOMAIN_PATTERN = /^(?:https?:)?[/]{2,}([^/]+)/ -// const INTERNAL_PATTERN = /^\/(?!\/)/ -// const FILE_PATTERN = /.*[/](.+\.[^/]+?)([/].*?)?([#?].*)?$/ const isHashLink = (to: string): boolean => HASH_PATTERN.test(to) -const ExternalLink = styled.a` - &:after { - margin-left: 0.125em; - margin-right: 0.3em; - display: inline; - content: "↗"; - transition: all 0.1s ease-in-out; - font-style: normal; - } - &:hover { - &:after { - transform: translate(0.15em, -0.2em); - } - } -` - -const InternalLink = styled(IntlLink)` - .is-glossary { - white-space: nowrap; - } - &.active { - color: ${(props) => props.theme.colors.primary}; - } - &:hover { - svg { - fill: ${(props) => props.theme.colors.primary}; - transition: transform 0.1s; - transform: scale(1.2); - } - } -` - -const ExplicitLangInternalLink = styled(GatsbyLink)` - &.active { - color: ${(props) => props.theme.colors.primary}; - } -` - -const GlossaryIcon = styled(Icon)` - margin: 0 0.25rem 0 0.35rem; - fill: ${(props) => props.theme.colors.primary400}; - text-decoration: underline; - &:hover { - transition: transform 0.1s; - transform: scale(1.2); - } -` - -export interface IProps { +export interface IBaseProps { to?: string href?: string - dir?: Direction + language?: Lang hideArrow?: boolean - className?: string isPartiallyActive?: boolean - ariaLabel?: string customEventOptions?: EventOptions - onClick?: () => void } -const Link: React.FC = ({ - to, - dir = "ltr", +export interface IProps extends IBaseProps, LinkProps { + dir?: Direction // TODO: remove this prop once we use the native Chakra RTL support +} + +/** + * Link wrapper which handles: + * + * - Hashed links + * e.g. + * + * - External links + * e.g. + * + * - PDFs & static files (which open in a new tab) + * e.g. + * + * - Intl links + * e.g. + */ +const LinkWrapper: React.FC = ({ + to: toProp, href, + language, + dir = "ltr", children, hideArrow = false, - className, isPartiallyActive = true, - ariaLabel, customEventOptions, - onClick = () => {}, + ...restProps }) => { - // markdown pages pass `href`, not `to` - to = to || href + const theme = useTheme() - if (!to) { - throw new Error("Either 'to' or 'href' props must be provided") - } + // TODO: in the next PR we are going to deprecate the `to` prop and just use `href` + // this is to support the ButtonLink component which uses the `to` prop + const to = (toProp || href)! const isExternal = to.includes("http") || to.includes("mailto:") const isHash = isHashLink(to) @@ -103,126 +66,83 @@ const Link: React.FC = ({ const isStatic = to.includes("static") const isPdf = to.includes(".pdf") - // Must use tags for anchor links - // Otherwise functionality will navigate to homepage + const eventOptions: EventOptions = { + eventCategory: `External link`, + eventAction: `Clicked`, + eventName: to, + } + + const commonProps = { + dir, + ...restProps, + } + + // Must use Chakra's native for anchor links + // Otherwise the Gatsby functionality will navigate to homepage // See https://github.com/gatsbyjs/gatsby/issues/21909 if (isHash) { return ( - + {children} - + ) } - // Links to static image assets must use to avoid - // redirection. Opens in separate window. - if (isStatic) { + // Download link for internally hosted PDF's & static files (ex: whitepaper) + // Opens in separate window. + if (isExternal || isPdf || isStatic) { return ( - - {children} - - ) - } - - const eventOptions: EventOptions = { - eventCategory: `External link`, - eventAction: `Clicked`, - eventName: to, - } - - if (isExternal) { - return hideArrow ? ( - { - e.stopPropagation() - trackCustomEvent( - customEventOptions ? customEventOptions : eventOptions - ) + isExternal + _after={{ + content: !hideArrow ? '"↗"' : undefined, + ml: 0.5, + mr: 1.5, }} - aria-label={ariaLabel} - > - {children} - - ) : ( - { + // only track events on external links + if (!isExternal) { + return + } + e.stopPropagation() trackCustomEvent( customEventOptions ? customEventOptions : eventOptions ) }} - aria-label={ariaLabel} - > - {children} - - ) - } - - // If lang path has been explicitly set, use `gatsby` Link - const langPath = to.split("/")[1] - if (isLang(langPath)) { - return ( - - {children} - - ) - } - - // Download link for internally hosted PDF's (ex: whitepaper) - if (isPdf && !isExternal) { - return ( - {children} - + ) } // Use `gatsby-theme-i18n` Link (which prepends lang path) return ( - // @ts-ignore: IntlLink is requiring a `language` prop but that prop should - // be optional. Opened issue: https://github.com/gatsbyjs/themes/issues/171 - {children} {isGlossary && ( - + )} - + ) } @@ -239,4 +159,4 @@ export function navigate( gatsbyNavigate(link, options) } -export default Link +export default LinkWrapper diff --git a/src/components/MarkdownTable.tsx b/src/components/MarkdownTable.tsx index 81524d68852..d00e7b21c41 100644 --- a/src/components/MarkdownTable.tsx +++ b/src/components/MarkdownTable.tsx @@ -11,7 +11,9 @@ const TableContainer = styled.div` } ` -export interface IProps {} +export interface IProps { + children?: React.ReactNode +} const MarkdownTable: React.FC = ({ children }) => ( diff --git a/src/components/MeetupList.tsx b/src/components/MeetupList.tsx index bfb627d663c..1ada12bb4d3 100644 --- a/src/components/MeetupList.tsx +++ b/src/components/MeetupList.tsx @@ -28,6 +28,7 @@ const Item = styled(Link)` color: #000000; &:hover { + text-decoration: none; border-radius: 4px; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; background: ${(props) => props.theme.colors.tableBackgroundHover}; diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx index 76e13585c1c..9fefd1f68ff 100644 --- a/src/components/Modal.tsx +++ b/src/components/Modal.tsx @@ -79,6 +79,7 @@ const Overlay: React.FC = ({ isActive }) => ( ) export interface IProps { + children?: React.ReactNode className?: string isOpen: boolean setIsOpen: (isOpen: boolean) => void diff --git a/src/components/Morpher.tsx b/src/components/Morpher.tsx index bd44a807d95..ba60fd9afe0 100644 --- a/src/components/Morpher.tsx +++ b/src/components/Morpher.tsx @@ -7,6 +7,7 @@ const NavLink = styled(Link)` font-size: 1rem; color: ${(props) => props.theme.colors.text}; &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; } &.active { diff --git a/src/components/Nav/Dropdown.tsx b/src/components/Nav/Dropdown.tsx index a7dbe0f50d8..4339987487a 100644 --- a/src/components/Nav/Dropdown.tsx +++ b/src/components/Nav/Dropdown.tsx @@ -93,6 +93,7 @@ const NavLink = styled(Link)` fill: ${(props) => props.theme.colors.text200}; } &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; svg { fill: ${(props) => props.theme.colors.primary}; @@ -128,6 +129,7 @@ interface IDropdownContext { const DropdownContext = React.createContext(null) export interface IProps { + children?: React.ReactNode section: ISection hasSubNav: boolean } @@ -199,6 +201,7 @@ const NavDropdown: React.FC & { } interface IItemProp { + children?: React.ReactNode isLast?: boolean } @@ -216,7 +219,9 @@ const Item: React.FC = ({ children, isLast = false, ...rest }) => { ) } -interface ITitleProps {} +interface ITitleProps { + children?: React.ReactNode +} const Title: React.FC = ({ children }) => { return

{children}

diff --git a/src/components/Nav/Mobile.tsx b/src/components/Nav/Mobile.tsx index b51ada41842..d64116b8d06 100644 --- a/src/components/Nav/Mobile.tsx +++ b/src/components/Nav/Mobile.tsx @@ -224,6 +224,7 @@ const BottomLink = styled(Link)` fill: ${(props) => props.theme.colors.text}; } &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; & > svg { fill: ${(props) => props.theme.colors.primary}; diff --git a/src/components/PageHero.tsx b/src/components/PageHero.tsx index 04ab48144d0..b7709e8857f 100644 --- a/src/components/PageHero.tsx +++ b/src/components/PageHero.tsx @@ -1,8 +1,11 @@ import React, { ReactNode } from "react" import styled from "@emotion/styled" import { GatsbyImage } from "gatsby-plugin-image" -import ButtonLink, { IProps as IButtonLinkProps } from "./ButtonLink" +import { Wrap, WrapItem } from "@chakra-ui/react" + import { Content } from "./SharedStyledComponents" +import ButtonLink, { IProps as IButtonLinkProps } from "./ButtonLink" +import Button, { IProps as IButtonProps } from "./Button" export interface IIsReverse { isReverse: boolean @@ -78,27 +81,16 @@ const Subtitle = styled.div` } ` -const ButtonRow = styled.div` - display: flex; - align-items: center; - margin-top: 1rem; - flex-wrap: wrap; -` - -const StyledButtonLink = styled(ButtonLink)` - margin-right: 1rem; - margin-bottom: 2rem; - @media (max-width: ${(props) => props.theme.breakpoints.l}) { - margin-bottom: 1rem; - } -` +export interface IButtonLink extends IButtonLinkProps { + content: ReactNode +} -export interface IButton extends Partial { +export interface IButton extends IButtonProps { content: ReactNode } export interface IContent { - buttons?: Array + buttons?: Array title: ReactNode header: ReactNode subtitle: ReactNode @@ -113,6 +105,10 @@ export interface IProps { className?: string } +function isButtonLink(button: IButton | IButtonLink): button is IButtonLink { + return (button as IButtonLink).to !== undefined +} + const PageHero: React.FC = ({ content, isReverse = false, @@ -128,18 +124,37 @@ const PageHero: React.FC = ({
{header}
{subtitle} {buttons && ( - - {buttons.map((button, idx) => ( - - {button.content} - - ))} - + + {buttons.map((button, idx) => { + if (isButtonLink(button)) { + return ( + + + {button.content} + + + ) + } + + if (button.toId) { + return ( + + + + ) + } + })} + )} {children} diff --git a/src/components/PageMetadata.tsx b/src/components/PageMetadata.tsx index 18a9f038de3..329f7f28682 100644 --- a/src/components/PageMetadata.tsx +++ b/src/components/PageMetadata.tsx @@ -3,7 +3,7 @@ import PropTypes from "prop-types" import { Helmet } from "react-helmet" import { useStaticQuery, graphql } from "gatsby" import { useIntl } from "react-intl" -import { Location } from "@reach/router" +import { useLocation } from "@reach/router" import { getSrc } from "gatsby-plugin-image" import { isLang } from "../utils/languages" @@ -98,114 +98,112 @@ const PageMetadata: React.FC = ({ ` ) + const location = useLocation() + const intl = useIntl() const desc = description || translateMessageId("site-description", intl) const siteTitle = translateMessageId("site-title", intl) + /* Set canonical URL w/ language path to avoid duplicate content */ + /* e.g. set ethereum.org/about/ to ethereum.org/en/about/ */ + const { pathname } = location + let canonicalPath = pathname + const firstDirectory = canonicalPath.split("/")[1] + if (!isLang(firstDirectory)) { + canonicalPath = `/en${pathname}` + } + const canonical = canonicalUrl || `${site.siteMetadata.url}${canonicalPath}` + + /* Set fallback ogImage based on path */ + const siteUrl = site.siteMetadata.url + let ogImage = getSrc(ogImageDefault) + if (pathname.includes("/developers/")) { + ogImage = getSrc(ogImageDevelopers) + } + if (pathname.includes("/dapps/")) { + ogImage = getSrc(ogImageDapps) + } + if (pathname.includes("/upgrades/")) { + ogImage = getSrc(ogImageUpgrades) + } + if (image) { + ogImage = image + } + const ogImageUrl = `${siteUrl}${ogImage}` + return ( - - {({ location }) => { - /* Set canonical URL w/ language path to avoid duplicate content */ - /* e.g. set ethereum.org/about/ to ethereum.org/en/about/ */ - const { pathname } = location - let canonicalPath = pathname - const firstDirectory = canonicalPath.split("/")[1] - if (!isLang(firstDirectory)) { - canonicalPath = `/en${pathname}` - } - const canonical = - canonicalUrl || `${site.siteMetadata.url}${canonicalPath}` - - /* Set fallback ogImage based on path */ - const siteUrl = site.siteMetadata.url - let ogImage = getSrc(ogImageDefault) - if (pathname.includes("/developers/")) { - ogImage = getSrc(ogImageDevelopers) - } - if (pathname.includes("/dapps/")) { - ogImage = getSrc(ogImageDapps) - } - if (pathname.includes("/upgrades/")) { - ogImage = getSrc(ogImageUpgrades) - } - if (image) { - ogImage = image - } - const ogImageUrl = `${siteUrl}${ogImage}` - - return ( - - - - ) - }} - + + ) } diff --git a/src/components/Pill.tsx b/src/components/Pill.tsx index d6524b40f62..eb58df45037 100644 --- a/src/components/Pill.tsx +++ b/src/components/Pill.tsx @@ -28,6 +28,7 @@ const Secondary = styled.div` border-radius: 0.25rem; ` export interface IProps { + children?: React.ReactNode className?: string isSecondary?: boolean color?: string diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx deleted file mode 100644 index bcbccaef107..00000000000 --- a/src/components/PreMergeBanner.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react" -import styled from "@emotion/styled" -import BannerNotification from "./BannerNotification" -import Link from "./Link" -import Translation from "./Translation" - -const StyledBannerNotification = styled(BannerNotification)` - display: flex; - z-index: 1; - justify-content: center; - p { - max-width: 100ch; - margin: 0; - padding: 0; - } - a { - text-decoration: underline; - } - text-align: center; -` - -export interface IProps { - announcementOnly?: boolean - className?: string -} - -const PreMergeBanner: React.FC = ({ - announcementOnly = false, - className, - children, -}) => ( - -

- {" "} - {!announcementOnly && ( - - )}{" "} - {children}{" "} - - - -

-
-) - -export default PreMergeBanner diff --git a/src/components/ProductCard.tsx b/src/components/ProductCard.tsx index 3da46626682..e0930af139d 100644 --- a/src/components/ProductCard.tsx +++ b/src/components/ProductCard.tsx @@ -140,6 +140,7 @@ const REPO_DATA = gql` ` export interface IProps { + children?: React.ReactNode url: string background: string image: string @@ -227,7 +228,9 @@ const ProductCard: React.FC = ({ ) )} - Open {name} + + Open {name} + ) } diff --git a/src/components/ProductList.tsx b/src/components/ProductList.tsx index a25696406d4..6f7802c1754 100644 --- a/src/components/ProductList.tsx +++ b/src/components/ProductList.tsx @@ -100,7 +100,7 @@ const ProductList: React.FC = ({ content, category }) => ( {description} {link && ( - + )} diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 8b849587425..a77b03ec74b 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -165,13 +165,17 @@ const isValidAddress = (address: string): boolean => { return /^(0x)?[0-9a-f]{40}$/i.test(address) } -const Results: React.FC = ({ +interface ResultsProp extends StateResultsProvided { + children?: React.ReactNode +} + +const Results = ({ searchState: state, searchResults: res, children, -}) => { +}: ResultsProp) => { if (res && res.nbHits > 0) { - return <>{children} + return children } if (state.query && isValidAddress(state.query)) { return ( diff --git a/src/components/SectionNav.tsx b/src/components/SectionNav.tsx index f1423343365..720efbf850e 100644 --- a/src/components/SectionNav.tsx +++ b/src/components/SectionNav.tsx @@ -31,7 +31,9 @@ const TopContent = styled.div` align-items: flex-start; ` -export interface IProps {} +export interface IProps { + children?: React.ReactNode +} const SectionNav: React.FC = ({ children }) => ( diff --git a/src/components/SelectableCard.tsx b/src/components/SelectableCard.tsx index 60587370ec3..163fc3c9cbf 100644 --- a/src/components/SelectableCard.tsx +++ b/src/components/SelectableCard.tsx @@ -28,6 +28,7 @@ const TopContent = styled.div` position: relative; ` export interface IProps { + children?: React.ReactNode emoji: string title: string description: string diff --git a/src/components/ShardChainsList.tsx b/src/components/ShardChainsList.tsx index 54d5df52cdf..7949d737fa2 100644 --- a/src/components/ShardChainsList.tsx +++ b/src/components/ShardChainsList.tsx @@ -15,28 +15,58 @@ const ShardChainsList: React.FC = () => { const intl = useIntl() const reads: Array = [ { - title: translateMessageId("page-upgrade-article-title-sharding-is-great", intl), - description: translateMessageId("page-upgrade-article-author-vitalik-buterin", intl), + title: translateMessageId( + "page-upgrade-article-title-sharding-is-great", + intl + ), + description: translateMessageId( + "page-upgrade-article-author-vitalik-buterin", + intl + ), link: "https://vitalik.ca/general/2021/04/07/sharding.html", }, { - title: translateMessageId("page-upgrade-article-title-rollup-roadmap", intl), - description: translateMessageId("page-upgrade-article-author-vitalik-buterin", intl), + title: translateMessageId( + "page-upgrade-article-title-rollup-roadmap", + intl + ), + description: translateMessageId( + "page-upgrade-article-author-vitalik-buterin", + intl + ), link: "https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698", }, { - title: translateMessageId("page-upgrade-article-title-two-point-oh", intl), - description: translateMessageId("page-upgrade-article-author-ethos-dev", intl), + title: translateMessageId( + "page-upgrade-article-title-two-point-oh", + intl + ), + description: translateMessageId( + "page-upgrade-article-author-ethos-dev", + intl + ), link: "https://ethos.dev/beacon-chain/", }, { - title: translateMessageId("page-upgrade-article-title-sharding-consensus", intl), - description: translateMessageId("page-upgrade-article-author-ethereum-foundation", intl), + title: translateMessageId( + "page-upgrade-article-title-sharding-consensus", + intl + ), + description: translateMessageId( + "page-upgrade-article-author-ethereum-foundation", + intl + ), link: "https://blog.ethereum.org/2020/03/27/sharding-consensus/", }, { - title: translateMessageId("page-upgrade-article-title-hitchhikers-guide-to-ethereum", intl), - description: translateMessageId("page-upgrade-article-author-delphi-digital", intl), + title: translateMessageId( + "page-upgrade-article-title-hitchhikers-guide-to-ethereum", + intl + ), + description: translateMessageId( + "page-upgrade-article-author-delphi-digital", + intl + ), link: "https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum", }, ] diff --git a/src/components/SharedStyledComponents.tsx b/src/components/SharedStyledComponents.tsx index 0bd0d746305..bbe5bdc7b3d 100644 --- a/src/components/SharedStyledComponents.tsx +++ b/src/components/SharedStyledComponents.tsx @@ -135,6 +135,7 @@ export const NavLink = styled(Link)` fill: ${(props) => props.theme.colors.text200}; } &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; svg { fill: ${(props) => props.theme.colors.primary}; @@ -377,6 +378,7 @@ export const CardItem = styled(Link)` color: ${(props) => props.theme.colors.text}; &:hover { + text-decoration: none; box-shadow: ${(props) => props.theme.colors.cardBoxShadow}; border: 1px solid ${(props) => props.theme.colors.black300}; } diff --git a/src/components/SideNav.tsx b/src/components/SideNav.tsx index 53d724156f7..836c6664d11 100644 --- a/src/components/SideNav.tsx +++ b/src/components/SideNav.tsx @@ -67,6 +67,7 @@ const SideNavLink = styled(Link)` text-decoration: none; color: ${(props) => props.theme.colors.text}; &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; } &.active { diff --git a/src/components/SideNavMobile.tsx b/src/components/SideNavMobile.tsx index 46e889c5cfc..3b2f0086731 100644 --- a/src/components/SideNavMobile.tsx +++ b/src/components/SideNavMobile.tsx @@ -100,6 +100,7 @@ const SideNavLink = styled(Link)` text-decoration: none; color: ${(props) => props.theme.colors.text}; &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; } &.active { diff --git a/src/components/SimpleTable.tsx b/src/components/SimpleTable.tsx index 83192d6d477..1d6eb940265 100644 --- a/src/components/SimpleTable.tsx +++ b/src/components/SimpleTable.tsx @@ -75,6 +75,7 @@ const LinkRow = styled(Link)` padding: 1rem; width: 100%; &:hover { + text-decoration: none; box-shadow: 0 0 1px ${(props) => props.theme.colors.text}; background: ${(props) => props.theme.colors.primary200}; color: ${(props) => props.theme.colors.black300}; diff --git a/src/components/Slider.tsx b/src/components/Slider.tsx index 93efac2aaca..f97c547ef7c 100644 --- a/src/components/Slider.tsx +++ b/src/components/Slider.tsx @@ -98,6 +98,7 @@ const DotButton = styled.button<{ selected: boolean }>` ` export interface IProps { + children?: React.ReactNode onSlideChange?: (slideIndex: number) => void } diff --git a/src/components/SocialListItem.tsx b/src/components/SocialListItem.tsx index 4e0bb4cfc33..daf33cbef55 100644 --- a/src/components/SocialListItem.tsx +++ b/src/components/SocialListItem.tsx @@ -26,6 +26,7 @@ const ChildrenContainer = styled.div` ` export interface IProps { + children?: React.ReactNode socialIcon: string } const SocialListItem: React.FC = ({ children, socialIcon }) => { diff --git a/src/components/StablecoinAccordion.tsx b/src/components/StablecoinAccordion.tsx index c8ba50e5601..fc8b5b2a4a9 100644 --- a/src/components/StablecoinAccordion.tsx +++ b/src/components/StablecoinAccordion.tsx @@ -162,6 +162,7 @@ const StepBox = styled(Link)` width: 100%; margin-top: -1px; &:hover { + text-decoration: none; background: ${(props) => props.theme.colors.ednBackground}; transition: transform 0.2s; transform: scale(1.05); @@ -261,16 +262,6 @@ const StablecoinAccordion: React.FC = () => { ) } } - dydx: file(relativePath: { eq: "exchanges/dydx.png" }) { - childImageSharp { - gatsbyImageData( - width: 24 - layout: FIXED - placeholder: BLURRED - quality: 100 - ) - } - } gitcoin: file(relativePath: { eq: "dapps/gitcoin.png" }) { childImageSharp { gatsbyImageData( @@ -401,12 +392,6 @@ const StablecoinAccordion: React.FC = () => { link: "https://uniswap.org", alt: translateMessageId("uniswap-logo", intl), }, - { - title: "DyDx", - image: getImage(data.dydx), - link: "https://dydx.exchange", - alt: translateMessageId("dydx-logo", intl), - }, { title: "Loopring", image: getImage(data.loopring), @@ -434,12 +419,6 @@ const StablecoinAccordion: React.FC = () => { link: "https://compound.finance", alt: translateMessageId("compound-logo", intl), }, - { - title: "DyDx", - image: getImage(data.dydx), - link: "https://dydx.exchange", - alt: translateMessageId("dydx-logo", intl), - }, { title: "Aave", image: getImage(data.aave), diff --git a/src/components/Staking/StakingLaunchpadWidget.tsx b/src/components/Staking/StakingLaunchpadWidget.tsx index c6db6412630..93c06402ac7 100644 --- a/src/components/Staking/StakingLaunchpadWidget.tsx +++ b/src/components/Staking/StakingLaunchpadWidget.tsx @@ -115,7 +115,7 @@ const StakingLaunchpadWidget: React.FC = () => {

- + diff --git a/src/components/TableOfContents.tsx b/src/components/TableOfContents.tsx index cf92b988c0d..0c473c47bbb 100644 --- a/src/components/TableOfContents.tsx +++ b/src/components/TableOfContents.tsx @@ -79,6 +79,7 @@ const StyledTableOfContentsLink = styled(Link)` margin-bottom: 0.5rem !important; /* Add left border bullet on hover */ &:hover { + text-decoration: none; color: ${(props) => props.theme.colors.primary}; &:after { content: ""; @@ -429,7 +430,7 @@ const TableOfContents: React.FC = ({ {shouldShowEditButtom && ( - + {" "} diff --git a/src/components/TitleCardList.tsx b/src/components/TitleCardList.tsx index 34f93919b4c..b393fb14337 100644 --- a/src/components/TitleCardList.tsx +++ b/src/components/TitleCardList.tsx @@ -60,6 +60,7 @@ const ItemLink = styled(Link)` width: 100%; color: #000000; &:hover { + text-decoration: none; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; background: ${(props) => props.theme.colors.primary100}; color: ${(props) => props.theme.colors.black} !important; diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index 3b72c61e0a4..daff4c8de2b 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -55,6 +55,7 @@ const ModalReturn = styled.div` export interface IProps { content: ReactNode + children?: React.ReactNode } // TODO add `position` prop diff --git a/src/components/TranslationBanner.tsx b/src/components/TranslationBanner.tsx index 84d21411266..0dc3a919be2 100644 --- a/src/components/TranslationBanner.tsx +++ b/src/components/TranslationBanner.tsx @@ -157,7 +157,10 @@ const TranslationBanner: React.FC = ({ {!isPageContentEnglish && (
- +
diff --git a/src/components/UpcomingEventsList.tsx b/src/components/UpcomingEventsList.tsx index 970453bda5b..10bf2736287 100644 --- a/src/components/UpcomingEventsList.tsx +++ b/src/components/UpcomingEventsList.tsx @@ -7,7 +7,7 @@ import EventCard from "./EventCard" import InfoBanner from "./InfoBanner" import Link from "./Link" import Translation from "./Translation" -import ButtonLink from "./ButtonLink" +import Button from "./Button" // Data import events from "../data/community-events.json" @@ -161,9 +161,9 @@ const UpcomingEventsList: React.FC = () => { {isVisible && ( - + )} diff --git a/src/components/UpgradeStatus.tsx b/src/components/UpgradeStatus.tsx index f13d9e8f621..c06b8af23ed 100644 --- a/src/components/UpgradeStatus.tsx +++ b/src/components/UpgradeStatus.tsx @@ -48,6 +48,7 @@ const Content = styled.p` ` export interface IProps { + children?: React.ReactNode dateKey: TranslationKey isShipped?: boolean } diff --git a/src/components/VisuallyHidden.tsx b/src/components/VisuallyHidden.tsx index dbfe2b42b11..b1307c85dba 100644 --- a/src/components/VisuallyHidden.tsx +++ b/src/components/VisuallyHidden.tsx @@ -33,6 +33,7 @@ const Container = styled.span` ` export interface IProps { + children?: React.ReactNode isHidden?: boolean } diff --git a/src/content/community/grants/index.md b/src/content/community/grants/index.md index 313307fddba..8e343ceebce 100644 --- a/src/content/community/grants/index.md +++ b/src/content/community/grants/index.md @@ -21,6 +21,7 @@ These programs support the broad Ethereum ecosystem by offering grants to a wide - [Moloch DAO](https://www.molochdao.com/) - _Privacy, layer 2 scaling, client security, and more_ - [Open Grants](https://opengrants.com/explore) - [DAO Grants](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Google spreadsheet of organizations offering grants_ +- [Merge Data Challenge](https://esp.ethereum.foundation/merge-data-challenge) - _Calling all Ethereans, data scientists, data engineers, data visualizers, developers, and anyone interested in digging into Ethereum data!_ ## Project specific {#project-specific} @@ -31,7 +32,6 @@ These projects have created their own grants for projects aimed at developing an - [Chainlink Grants Program](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) community grants_ - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blockchain funding & Ethereum grants_ -- [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) decentralized exchange_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finance ecosystem_ - [mStable Grants Program](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) community_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) ecosystem_ diff --git a/src/content/community/support/index.md b/src/content/community/support/index.md index 0b90a73463c..4711daa22e3 100644 --- a/src/content/community/support/index.md +++ b/src/content/community/support/index.md @@ -107,4 +107,8 @@ Transactions on Ethereum can sometimes get stuck if you have submitted a lower t #### How do I mine Ethereum? {#mining-ethereum} -We do not recommend buying mining equipment if you are not already mining Ethereum. In ~Q3/Q4 2022, [The Merge](/upgrades/merge/) will happen, switching Ethereum from proof-of-work to proof-of-stake. This change means mining Ethereum will no longer be possible. +Ethereum mining is no longer possible. Mining was switched off when Ethereum moved from proof-of-work to proof-of-stake. Now, instead of miners, Ethereum has validators. Validators stake ETH and receive staking rewards for securing the network. + +#### How do I become a staker/validator? {#become-validator} + +To become a validator, you must stake 32 ETH in the Ethereum deposit contract and set up a validator node. More information is available on our [staking pages](/staking) and at [the staking launchpad](https://launchpad.ethereum.org/). diff --git a/src/content/contributing/adding-desci-projects/index.md b/src/content/contributing/adding-desci-projects/index.md new file mode 100644 index 00000000000..4715ffc97dc --- /dev/null +++ b/src/content/contributing/adding-desci-projects/index.md @@ -0,0 +1,45 @@ +--- +title: Adding DeSci projects +description: The policy we use when adding a links to projects on the DeAci page on ethereum.org +lang: en +sidebar: true +--- + +# Adding projects {#adding-projects} + +We want to make sure we show a variety of projects and give a good snapshot of the DeSci landscape. + +Anyone is free to suggest a project to list on the DeSci page on ethereum.org. Equally, anyone who notices a project that is no longer relevant or no longer meets our eligibility criteria, they are free to suggest we remove it. + +## The decision framework {#the-decision-framework} + +### Criteria for inclusion: the must-haves {#the-must-haves} + +- **Open source code/data** - Openness of code and data is a core DeSci principle, so DeSci projects must not be closed source. The codebase should be accessible and ideally open to PRs. +- **DeSci projects should be demonstrably decentralized** - This could include being governed by a DAO, or by building with a decentralized tech stack including non-custodial wallets. It probably involves auditable smart contracts on Ethereum. +- **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. +- **Demonstrable commitment to widening access to science** - A DeSci project should be able to articulate how they widen participation in science to the general public, not just to token/NFT holders. +- **Globally accessible** - your project doesn’t have geographic limitations or KYC requirements that exclude certain people from accessing your service. +- **Informative website and documentation** - it is important that visitors to the project website can understand what the project actually does, how it contributes to decentralization of science infrastructure and how to participate. +- **Project should be part of the Ethereum ecosystem** - At ethereum.org we believe Ethereum (and its Layer 2's) to be the appropriate base layer for the DeSci movement. +- **The project is fairly well established** - The project has real users that have been able to access the project's services for several months. + +### Nice-to-haves + +- **Available in multiple languages** - your project is translated into multiple languages allowing users around the world to access it. +- **Educational resources** - your product should have a well-designed onboarding experience to help and educate users. Or evidence of how-to content like articles or videos. +- **Third party audits** - your product has been professionally audited for vulnerabilities by a trusted third party. +- **Point of contact** - A point of contact for the project (this might be by a representative from a DAO or community) will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. + +## Maintenance {#maintenance} + +As is the fluid nature of Ethereum, teams and products come and go and innovation happens daily, so we'll undertake routine checks of our content to: + +- ensure that all projects listed still fulfil our criteria +- verify there aren't products that have been suggested that meet more of our criteria than the ones currently listed + +Ethereum.org is maintained by the open source community & we rely on the community to help keep this up to date. If you notice any information about listed projects that needs to be updated, please open an issue or a pull request on our Github repository. + +## Terms of use {#terms-of-use} + +Please also refer to our [terms of use](/terms-of-use/). Information on ethereum.org is provided solely for general information purposes. diff --git a/src/content/contributing/translation-program/blog-translations/index.md b/src/content/contributing/translation-program/blog-translations/index.md index d07722a47f2..0ac0dbcbed0 100644 --- a/src/content/contributing/translation-program/blog-translations/index.md +++ b/src/content/contributing/translation-program/blog-translations/index.md @@ -22,7 +22,7 @@ Anyone can contribute to translating the EF blog. If you want to get involved, k -### Join the blog translations project in Crowdin {#join-crowdin} +### Join the blog translations project in Crowdin {#join-crowdin} You'll need to log in to your Crowdin account or sign up if you don’t already have one. All that is required to sign up is an e-mail account and password. @@ -33,7 +33,7 @@ You'll need to log in to your Crowdin account or sign up if you don’t already ### Open the language you want to translate and find a blog post to work on {#pick-language-and-post} Each post is uploaded to Crowdin as an individual file. The files are named after the blog post title, so it should be fairly straightforward if you're looking for a specific post to translate. - + Blog posts are prioritized based on their date of publication. Please follow the numerical order when translating to ensure that recently published posts get translated first (1 → 2 → 3 → ⋯). ![Screenshot showing how blog posts are numbered in the Crowdin user interface](./blog-posts.png) diff --git a/src/content/contributing/translation-program/how-to-translate/index.md b/src/content/contributing/translation-program/how-to-translate/index.md index abb0aa1ecfc..23f78b346e6 100644 --- a/src/content/contributing/translation-program/how-to-translate/index.md +++ b/src/content/contributing/translation-program/how-to-translate/index.md @@ -16,7 +16,7 @@ For more visual learners, watch Luka walk through getting set up with Crowdin. A ## Written guide {#written-guide} ### Join our project in Crowdin {#join-project} - + You will need to log in to your Crowdin account or sign up if you don’t already have one. All that is required to sign up is an e-mail account and password. @@ -31,7 +31,7 @@ Each language also contains information on the total amount of translatable word Open the language you want to translate into to see the list of files, available for translation. ![List of languages in Crowdin](./list-of-languages.png) - + ### Find a document to work on {#find-document} The website content is divided into a number of documents and content buckets. You can check the progress of each document on the right – if translation progress is below 100%, please contribute! @@ -47,7 +47,7 @@ We encourage you to translate in this numerical order (1 → 2 → 3 → ⋯) to [Learn more about ethereum.org content buckets](/contributing/translation-program/content-buckets/) ### Translate {#translate} - + After selecting the file you want to translate, it will open in the online editor. If you have never used Crowdin before, you can use this quick guide to go over the basics. ![Crowdin online editor](./online-editor.png) @@ -89,4 +89,4 @@ Do you have any questions? Or want to collaborate with our team and other transl You can also reach out to us at translations@ethereum.org -Thank you for your participation in the ethereum.org Translation Program! \ No newline at end of file +Thank you for your participation in the ethereum.org Translation Program! diff --git a/src/content/contributing/translation-program/launchpad-translations/index.md b/src/content/contributing/translation-program/launchpad-translations/index.md index 22a35ed03d9..e4b6fee8ffb 100644 --- a/src/content/contributing/translation-program/launchpad-translations/index.md +++ b/src/content/contributing/translation-program/launchpad-translations/index.md @@ -35,8 +35,9 @@ The Launchpad contains 7 source files, all of which should be translated. You ca ![Screenshot showing how files are shown in the Crowdin user interface](./launchpad-files.png) ### Translate {#translate} + After selecting the file you want to translate, it will open in the online editor. If you have never used Crowdin before, you can use this quick guide to go over the basics. For a more in-depth guide to using Crowdin, visit our [how to translate page](/contributing/translation-program/how-to-translate). -Thank you for your getting involved and helping us make the Launchpad accessible to everyone! \ No newline at end of file +Thank you for your getting involved and helping us make the Launchpad accessible to everyone! diff --git a/src/content/contributing/translation-program/mission-and-vision/index.md b/src/content/contributing/translation-program/mission-and-vision/index.md index 519a3a41dcc..d9cf4279be7 100644 --- a/src/content/contributing/translation-program/mission-and-vision/index.md +++ b/src/content/contributing/translation-program/mission-and-vision/index.md @@ -23,4 +23,4 @@ The ethereum.org Translation Program aims to make Ethereum accessible to everyon - Translate essential content for members of the Ethereum community from as many countries and parts of the world as possible - Support knowledge sharing across languages to create a better informed and educated Ethereum community -- Increase Ethereum's inclusivity and accessibility by removing the language barriers preventing non-English speakers from joining the ecosystem \ No newline at end of file +- Increase Ethereum's inclusivity and accessibility by removing the language barriers preventing non-English speakers from joining the ecosystem diff --git a/src/content/contributing/translation-program/translators-guide/index.md b/src/content/contributing/translation-program/translators-guide/index.md index 0d7d82fa15a..86d7dfae9b2 100644 --- a/src/content/contributing/translation-program/translators-guide/index.md +++ b/src/content/contributing/translation-program/translators-guide/index.md @@ -101,12 +101,12 @@ A lot of the source content contains tags and variables, which are highlighted i To make it easier to manage tags and copy them directly from the source, we recommend changing your settings in the Crowdin editor. 1. Open settings -![How to open settings in the editor](./editor-settings.png) + ![How to open settings in the editor](./editor-settings.png) 2. Scroll down to the 'HTML tags displaying' section 3. Select 'Hide' -![Please select 'Hide'](./hide-tags.png) + ![Please select 'Hide'](./hide-tags.png) 4. Click 'Save' diff --git a/src/content/deprecated-software/index.md b/src/content/deprecated-software/index.md index fc098d2c6f6..9a5a5072b65 100644 --- a/src/content/deprecated-software/index.md +++ b/src/content/deprecated-software/index.md @@ -12,6 +12,10 @@ This is a list of key Ethereum-related projects and resources which have been de This list is curated by our community. If there's something missing or incorrect, please edit this page! +## Proof-of-work {#pow} + +[Proof of work](/developers/docs/consensus-mechanisms/pow) is a consensus engine that was implemented in Ethereum until September 2022. It was deprecated when Ethereum swapped to a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) based consensus mechanism. This was achieved by deprecating the parts of the client software related to proof-of-work mining, including [Ethhash](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethhash) (the mining algorithm) and all the consensus logic and block gossiping functionality that was originally built in to execution clients. The clients themselves were not deprecated but several of their core components were. The concept of proof-of-work was deprecated as the total effect of removing the related components of the client software. + ## Software {#software} This section is for software for the desktop, command line, or server which has been deprecated. The main types are wallets, integrated development environments, languages, and Ethereum clients. Definitely be careful to not install deprecated software unless you are certain it is from the original source, e.g. a repo hosted under https://github.com/ethereum. diff --git a/src/content/desci/index.md b/src/content/desci/index.md index a9d6aae9b40..7ab3b86be57 100644 --- a/src/content/desci/index.md +++ b/src/content/desci/index.md @@ -100,7 +100,7 @@ Explore projects and join the DeSci community. - [OceanDAO: DAO governed funding for data-related science](https://oceanprotocol.com/dao) - [Opscientia: open decentralized science workflows](https://opsci.io/research/) - [LabDAO: fold a protein in-silico](https://alphafodl.vercel.app/) -- [Bio.xyz: get funded for your biotech DAO or desci project](https://www.molecule.to/) +- [Bio.xyz: get funded for your biotech DAO or desci project](https://biodao.xyz/) - [ResearchHub: post a scientific result and engage in a conversation with peers](https://www.researchhub.com/) - [VitaDAO: receive funding through sponsored research agreements for longevity research](https://www.vitadao.com/) - [Fleming Protocol: open-source data economy that fuels collaborative biomedical discovery](https://medium.com/@FlemingProtocol/a-data-economy-for-patient-driven-biomedical-innovation-9d56bf63d3dd) @@ -127,3 +127,4 @@ Explore projects and join the DeSci community. - [Conversation between Vitalik Buterin and the scientist Aubrey de Grey about the intersection of longevity research and crypto](https://www.youtube.com/watch?v=x9TSJK1widA) - [Scientific Publishing Is Broken. Can Web3 Fix It?](https://www.youtube.com/watch?v=WkvzYgCvWj8) - [Juan Benet - DeSci, Independent Labs, & Large Scale Data Science](https://www.youtube.com/watch?v=zkXM9H90g_E) +- [Sebastian Brunemeier - How DeSci Can Transform Biomedical Research & Venture Capital](https://www.youtube.com/watch?v=qB4Tc3FcVbM) diff --git a/src/content/developers/docs/accounts/index.md b/src/content/developers/docs/accounts/index.md index 11af93f62b5..7bd4495f0e0 100644 --- a/src/content/developers/docs/accounts/index.md +++ b/src/content/developers/docs/accounts/index.md @@ -97,6 +97,12 @@ Example: The contract address is usually given when a contract is deployed to the Ethereum Blockchain. The address comes from the creator's address and the number of transactions sent from that address (the “nonce”). +## Validator keys {#validators-keys} + +There is also another type of key in Ethereum, introduced when Ethereum switched from proof-of-work to proof-of-stake based consensus. These are 'BLS' keys and they are used to identify validators. These keys can be efficiently aggregated to reduce the bandwidth required for the network to come to consensus. Without this key aggregation the minimum stake for a validator would be much higher. + +[More on validator keys](/developers/docs/consensus-mechanisms/pos/keys/). + ## A note on wallets {#a-note-on-wallets} An account is not a wallet. An account is the keypair for a user-owned Ethereum account. A wallet is an interface or application that lets you interact with your Ethereum account. diff --git a/src/content/developers/docs/apis/javascript/index.md b/src/content/developers/docs/apis/javascript/index.md index d1a7023f8bf..fb17cef21f6 100644 --- a/src/content/developers/docs/apis/javascript/index.md +++ b/src/content/developers/docs/apis/javascript/index.md @@ -11,6 +11,8 @@ For this purpose, every Ethereum client implements the [JSON-RPC](/developers/do If you want to use JavaScript to connect with an Ethereum node, it's possible to use vanilla JavaScript but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON RPC requests (under the hood) that interact with Ethereum. +Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. Please ensure your node includes both an execution and consensus client. If your node is not on your local machine (e.g. your node is running on an AWS instance) update the IP addresses in the tutorial accordingly. For more information please see our page on [running a node](/developers/docs/nodes-and-clients/run-a-node/). + ## Prerequisites {#prerequisites} As well as understanding JavaScript, it might be helpful to understand the [Ethereum stack](/developers/docs/ethereum-stack/) and [Ethereum clients](/developers/docs/nodes-and-clients/). diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index c1aab360ed8..b503379cb43 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -19,7 +19,13 @@ Ethereum clients each may utilize different programming languages when implement While you may choose to interact directly with Ethereum clients via the JSON-RPC API, there are often easier options for dapp developers. Many [JavaScript](/developers/docs/apis/javascript/#available-libraries) and [backend API](/developers/docs/apis/backend/#available-libraries) libraries exist to provide wrappers on top of the JSON-RPC API. With these libraries, developers can write intuitive, one-line methods in the programming language of their choice to initialize JSON-RPC requests (under the hood) that interact with Ethereum. -## Spec {#spec} +## Consensus client APIs {#consensus-clients} + +This page deals mainly with the JSON-RPC API used by Ethereum execution clients. However, consensus clients also have an RPC API that allows users to query information about the node, request Beacon blocks, Beacon state, and other consensus-related information directly from a node. This API is documented on the [Beacon API webpage](https://ethereum.github.io/beacon-APIs/#/). + +An internal API is also used for inter-client communication within a node - that is, it enables the consensus client and execution client to swap data. This is called the 'Engine API' and the specs are available on [Github](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). + +## Execution client spec {#spec} [Read the full JSON-RPC API spec on GitHub](https://github.com/ethereum/execution-apis). diff --git a/src/content/developers/docs/blocks/index.md b/src/content/developers/docs/blocks/index.md index beddab24bac..736956f11bb 100644 --- a/src/content/developers/docs/blocks/index.md +++ b/src/content/developers/docs/blocks/index.md @@ -3,7 +3,6 @@ title: Blocks description: An overview of blocks in the Ethereum blockchain – their data structure, why they're needed, and how they're made. lang: en sidebar: true -preMergeBanner: true --- Blocks are batches of transactions with a hash of the previous block in the chain. This links blocks together (in a chain) because hashes are cryptographically derived from the block data. This prevents fraud, because one change in any block in history would invalidate all the following blocks as all subsequent hashes would change and everyone running the blockchain would notice. @@ -19,47 +18,117 @@ To ensure that all participants on the Ethereum network maintain a synchronized ![A diagram showing transaction in a block causing state changes](./tx-block.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ -By spacing out commits, we give all network participants enough time to come to consensus: even though transaction requests occur dozens of times per second, blocks on Ethereum are committed approximately once every fifteen seconds. +By spacing out commits, we give all network participants enough time to come to consensus: even though transaction requests occur dozens of times per second, blocks are only created and committed on Ethereum once every twelve seconds. ## How blocks work {#how-blocks-work} To preserve the transaction history, blocks are strictly ordered (every new block created contains a reference to its parent block), and transactions within blocks are strictly ordered as well. Except in rare cases, at any given time, all participants on the network are in agreement on the exact number and history of blocks, and are working to batch the current live transaction requests into the next block. -Once a block is put together (mined) by some miner on the network, it is propagated to the rest of the network; all nodes add this block to the end of their blockchain, and mining continues. The exact block-assembly (mining) process and commitment/consensus process is currently specified by Ethereum’s “proof-of-work” protocol. +Once a block is put together by some validator on the network, it is propagated to the rest of the network; all nodes add this block to the end of their blockchain, and a new validator is selected to create the next block. The exact block-assembly process and commitment/consensus process is currently specified by Ethereum’s “proof-of-stake” protocol. -### A visual demo {#a-visual-demo} +## Proof-of-stake protocol {#proof-of-work-protocol} - +Proof-of-stake means the following: -## Proof-of-work protocol {#proof-of-work-protocol} +- Validating nodes have to stake 32 ETH into a deposit contract as collateral against bad behavior. This helps protect the network because provably dishonest activity leads to some or all of that stake being destroyed. +- In every slot (spaced twelve seconds apart) a validator is randomly selected to be the block proposer. They bundle transactions together, execute them and determine a new 'state'. They wrap this information into a block and pass it around to other validators. +- Other validators who hear about a new block re-execute the transactions to ensure they agree with the proposed change to the global state. Assuming the block is valid they add it to their own database. +- If a validator hears about two conflicting blocks for the same slot they use their fork-choice algorithm to pick the one supported by the most staked ETH. -Proof-of-work means the following: - -- Mining nodes have to spend a variable but substantial amount of energy, time, and computational power to produce a “certificate of legitimacy” for a block they propose to the network. This helps protect the network from spam/denial-of-service attacks, among other things, since certificates are expensive to produce. -- Other miners who hear about a new block with a valid certificate of legitimacy must accept the new block as the canonical next block on the blockchain. -- The exact amount of time needed for any given miner to produce this certificate is a random variable with high variance. This ensures that it is unlikely that two miners produce validations for a proposed next block simultaneously; when a miner produces and propagates a certified new block, they can be almost certain that the block will be accepted by the network as the canonical next block on the blockchain, without conflict (though there is a protocol for dealing with conflicts as well in the case that two chains of certified blocks are produced almost simultaneously). - -[More on mining](/developers/docs/consensus-mechanisms/pow/mining/) +[More on proof-of-stake](/developers/docs/consensus-mechanisms/pos) ## What's in a block? {#block-anatomy} -- `timestamp` – the time when the block was mined. -- `blockNumber` – the length of the blockchain in blocks. -- `baseFeePerGas` - the minimum fee per gas required for a transaction to be included in the block. -- `difficulty` – the effort required to mine the block. -- `mixHash` – a unique identifier for that block. -- `parentHash` – the unique identifier for the block that came before (this is how blocks are linked in a chain). -- `transactions` – the transactions included in the block. -- `stateRoot` – the entire state of the system: account balances, contract storage, contract code and account nonces are inside. -- `nonce` – a hash that, when combined with the mixHash, proves that the block has gone through [proof-of-work](/developers/docs/consensus-mechanisms/pow/). +There is a lot of information contained within a block. At the highest level a block contains the following fields: + +``` +slot: the slot the block belongs to +proposer_index: the ID of the validator proposing the block +parent_root: the hash of the preceding block +state_root: the root hash of the state object +body: an object containing several fields, as defined below +``` + +The block `body` contains several fields of its own: + +``` +randao_reveal: a value used to select the next block proposer +eth1_data: information about the deposit contract +graffiti: arbitrary data used to tag blocks +proposer_slashings: list of validators to be slashed +attester_slashings: list of validators to be slashed +attestations: list of attestations in favor of the current block +deposits: list of new deposits to the deposit contract +voluntary_exits: list of validators exiting the network +sync_aggregate: subset of validators used to serve light clients +execution_payload: transactions passed from the execution client +``` + +The `attestations` field contains a list of all the attestations in the block. Attestations have their own data type that contains several pieces of data. Each attestation contains: + +``` +aggregation_bits: a list of which validators participated in this attestation +data: a container with multiple subfields +signature: aggregate signature of all attesting validators +``` + +The `data` field in the `attestation` contains the following: + +``` +slot: the slot the attestation relates to +index: indices for attesting validators +beacon_block_root: the root hash of the Beacon block containing this object +source: the last justified checkpoint +target: the latest epoch boundary block +``` + +Executing the transactions in the `execution_payload` updates the global state. All clients re-execute the transactions in the `execution_payload` to ensure the new state matches that in the new block `state_root` field. This is how clients can tell that a new block is valid and safe to add to their blockchain. The `execution payload` itself is an object with several fields. There is also an `execution_payload_header` that contains important summary information about the execution data. These data structures are organized as follows: + +The `execution_payload_header` contains the following fields: + +``` +parent_hash: hash of the parent block +fee_recipient: account address for paying transaction fees to +state_root: root hash for the global state after applying changes in this block +receipts_root: hash of the transaction receipts trie +logs_bloom: data structure containign event logs +prev_randao: value used in random validator selection +block_number: the number of the current block +gas_limit: maximum gas allowed in this block +gas_used: the actual amount of gas used in this block +timestamp: the block time +extra_data: arbitrary additional data as raw bytes +base_fee_per_gas: the base fee value +block_hash: Hash of execution block +transactions_root: root hash of the transactions in the payload +``` + +The `execution_payload` itself contains the following (notice this is idential to the header except that instead of the root hash of the transactions it includes the actual list of transactions: + +``` +parent_hash: hash of the parent block +fee_recipient: account address for paying transaction fees to +state_root: root hash for the global state after applying changes in this block +receipts_root: hash of the transaction receipts trie +logs_bloom: data structure containign event logs +prev_randao: value used in random validator selection +block_number: the number of the current block +gas_limit: maximum gas allowed in this block +gas_used: the actual amount of gas used in this block +timestamp: the block time +extra_data: arbitrary additional data as raw bytes +base_fee_per_gas: the base fee value +block_hash: Hash of execution block +transactions: list of transactions to be executed +``` ## Block time {#block-time} -Block time refers to the time it takes to mine a new block. In Ethereum, the average block time is between 12 to 14 seconds and is evaluated after each block. The expected block time is set as a constant at the protocol level and is used to protect the network's security when the miners add more computational power. The average block time gets compared with the expected block time, and if the average block time is higher, then the difficulty is decreased in the block header. If the average block time is smaller, then the difficulty in the block header will be increased. +Block time refers to the time separating blocks. In Ethereum, time is divided up into twelve second units called 'slots'. In each slot a single validator is selected to propose a block. Assuming all validators are online and fully functional there will be a block in every slot, meaning the block time is 12s. However, occasionally validators might be offline when called to propose a block, meaning slots can sometimes go empty. This is different to proof-of-work based systems where block times are probabilistic and tuned by the mining difficulty. ## Block size {#block-size} -A final important note is that blocks themselves are bounded in size. Each block has a target size of 15 million gas but the size of blocks will increase or decrease in accordance with network demands, up until the block limit of 30 million gas (2x target block size). The total amount of gas expended by all transactions in the block must be less than the block gas limit. This is important because it ensures that blocks can’t be arbitrarily large. If blocks could be arbitrarily large, then less performant full nodes would gradually stop being able to keep up with the network due to space and speed requirements. +A final important note is that blocks themselves are bounded in size. Each block has a target size of 15 million gas but the size of blocks will increase or decrease in accordance with network demands, up until the block limit of 30 million gas (2x target block size). The total amount of gas expended by all transactions in the block must be less than the block gas limit. This is important because it ensures that blocks can’t be arbitrarily large. If blocks could be arbitrarily large, then less performant full nodes would gradually stop being able to keep up with the network due to space and speed requirements. The larger the block, the greater the computing power required to process them in time for the next slot. This is a centralizing force, which is resisted by capping block sizes. ## Further reading {#further-reading} @@ -67,6 +136,6 @@ _Know of a community resource that helped you? Edit this page and add it!_ ## Related topics {#related-topics} -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) - [Transactions](/developers/docs/transactions/) - [Gas](/developers/docs/gas/) +- [Proof-of-stake](/developers/docs/consensus-mechanisms/pos) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index 7af78499c9e..1388f221c70 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -5,9 +5,7 @@ lang: en sidebar: true --- -When it comes to blockchains like Ethereum, which are, in essence, distributed databases, the network's nodes must reach an agreement on the network's current state. This agreement is achieved using consensus mechanisms. - -Although consensus mechanisms aren't directly related to building a dapp, understanding them will illuminate concepts relevant to you and your users' experience, like gas prices and transaction times. +The term 'consensus mechanism' is often used colloquially to refer to 'proof-of-stake', 'proof-of-work' or 'proof-of-authority' protocols. However, these are just components in consensus mechanisms that protect against Sybil attacks. Consensus mechanisms are the complete stack of ideas, protocols and incentives that enable a distributed set of nodes to agree on the state of a blockchain. ## Prerequisites {#prerequisites} @@ -15,31 +13,31 @@ To better understand this page, we recommend you first read our [introduction to ## What is consensus? {#what-is-consensus} -By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is not a disagreement on a proposed choice of film, then a consensus is achieved. In the extreme case the group will eventually split. +By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. If there is disagreement, the group must have the means to decide which film to see. In extreme cases, the group will eventually split. -In regards to blockchain, the process is formalized, and reaching consensus means that at least 51% of the nodes on the network agree on the next global state of the network. +In regards to the Ethereum blockchain, the process is formalized, and reaching consensus means that at least 66% of the nodes on the network agree on the global state of the network. ## What is a consensus mechanism? {#what-is-a-consensus-mechanism} -Consensus mechanisms (also known as consensus protocols or consensus algorithms) allow distributed systems (networks of computers) to work together and stay secure. +The term consensus mechanism refers to the entire stack of protocols, incentives and ideas that allow a network of nodes to agree on the state of a blockchain. -Consensus protocols and consensus algorithms are often used interchangeably. However, protocols and algorithms are different. A protocol is a set of rules defined in a standard that governs how a system and its many functioning parts operate and interact. Algorithms are like exact recipes on how to solve a problem or calculate a result. +Ethereum uses a proof-of-stake-based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital locked by stakers. This incentive structure encourages individual stakers to operate honest validators, punishes those who don't, and creates an extremely high cost to attack the network. -For decades, these mechanisms have been used to establish consensus among database nodes, application servers, and other enterprise infrastructure. In recent years, new consensus mechanisms have been invented to allow cryptoeconomic systems, such as Ethereum, to agree on the state of the network. +Then, there is a protocol that governs how honest validators are selected to propose or validate blocks, process transactions and vote for their view of the head of the chain. In the rare situations where multiple blocks are in the same position near the head of the chain, there is a fork-choice mechanism that selects blocks that make up the 'heaviest' chain, measured by the number of validators that voted for the blocks weighted by their staked ether balance. -A consensus mechanism in a cryptoeconomic system also helps prevent certain kinds of economic attacks. In theory, an attacker can compromise consensus by controlling 51% of the network. Consensus mechanisms are designed to make this "51% attack" unfeasible. Different mechanisms are engineered to solve this security problem in different ways. +Some concepts are important to consensus that are not explicitly defined in code, such as the additional security offered by potential out-of-band social coordination as a last line of defense against attacks on the network. - +These components together form the consensus mechanism. ## Types of consensus mechanisms {#types-of-consensus-mechanisms} -### Proof-of-work {#proof-of-work} +### Proof-of-work based {#proof-of-work} -Ethereum, like Bitcoin, currently uses a **proof-of-work (PoW)** consensus protocol. +Like Bitcoin, Ethereum once used a **proof-of-work (PoW)** based consensus protocol. #### Block creation {#pow-block-creation} -Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest – this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". +Validators create blocks. One validator is randomly selected in each slot to be the block proposer. Their consensus client requests a bundle of transactions as an 'execution payload' from their paired execution client. They wrap this in consensus data to form a block, which they send to other nodes on the Ethereum network. This block production is rewarded in ETH. In rare cases when multiple possible blocks exist for a single slot, or nodes hear about blocks at different times, the fork choice algorithm picks the block that forms the chain with the greatest weight of attestations (where weight is the number of validators attesting scaled by their ETH balance). #### Security {#pow-security} @@ -47,9 +45,9 @@ The network is kept secure by the fact that you'd need 51% of the network's comp More on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) -### Proof-of-stake {#proof-of-stake} +### Proof-of-stake based {#proof-of-stake} -Ethereum plans to upgrade to a **proof-of-stake (PoS)** consensus protocol. +Ethereum now uses a **proof-of-stake (PoS)** based consensus protocol. #### Block creation {#pos-block-creation} @@ -57,7 +55,7 @@ Proof-of-stake is done by validators who have staked ETH to participate in the s #### Security {#pos-security} -A proof-of-stake system is kept secure by the fact that you'd need 51% of the total staked ETH to defraud the chain. And that your stake is slashed for malicious behaviour. +A proof-of-stake system is secure crypto-economically because an attacker attempting to take control of the chain must destroy a massive amount of ETH. A system of rewards incentivizes individual stakers to behave honestly, and penalties disincentivize stakers from acting maliciously. More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) @@ -69,15 +67,13 @@ Watch more on the different types of consensus mechanisms used on Ethereum: ### Sybil resistance & chain selection {#sybil-chain} -Now technically, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. It's this Sybil resistance mechanism combined with a chain selection rule that makes up a true consensus mechanism. +Proof-of-work and proof-of-stake alone are not consensus protocols, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (aka fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. **Sybil resistance** measures how a protocol fares against a [Sybil attack](https://wikipedia.org/wiki/Sybil_attack). Sybil attacks are when one user or group pretends to be many users. Resistance to this type of attack is essential for a decentralized blockchain and enables miners and validators to be rewarded equally based on resources put in. Proof-of-work and proof-of-stake protect against this by making users expend a lot of energy or put up a lot of collateral. These protections are an economic deterrent to Sybil attacks. -A **chain selection rule** is used to decide which chain is the "correct" chain. Ethereum and Bitcoin currently use the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. - -The combination of proof-of-work and longest chain rule is known as "Nakamoto Consensus." +A **chain selection rule** is used to decide which chain is the "correct" chain. Bitcoin uses the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. Ethereum used to use the longest chain rule too; however, now that Etheruem runs on proof-of-stake it adopted an updated fork-choice algorithm that measures the 'weight' of the chain. The weight is the accumulated sum of validator votes, weighted by validator staked-ether balances. -The [Beacon Chain](/upgrades/beacon-chain/) uses a consensus mechanism called [Casper the Friendly Finality Gadget](https://arxiv.org/abs/1710.09437), which is proof-of-stake based. +Ethereum uses a consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) that combines [Casper FFG proof-of-stake](https://arxiv.org/abs/1710.09437) with the [GHOST fork-choice rule](https://arxiv.org/abs/2003.03052). ## Further reading {#further-reading} diff --git a/src/content/developers/docs/consensus-mechanisms/pos/index.md b/src/content/developers/docs/consensus-mechanisms/pos/index.md index a54dbc96483..4cc9b880e5b 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Proof-of-stake (PoS) is the [consensus mechanism](/developers/docs/consensus-mechanisms/) that Ethereum will use after [The Merge](/upgrades/merge). Ethereum is moving off of [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow/) to proof-of-stake because it is more secure, less energy-intensive, and better for implementing new scaling solutions. While it has always been the plan to transition to proof-of-stake, it is also more complex than proof-of-work, and refining the mechanism has taken years of research and development. The challenge now is to implement proof-of-stake on Ethereum Mainnet. This process is called ["The Merge"](/upgrades/merge/). +Proof-of-stake (PoS) underlies Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous [proof-of-work](/developers/docs/consensus-mechanisms/pow) architecture. ## Prerequisites {#prerequisites} @@ -13,9 +13,9 @@ To better understand this page, we recommend you first read up on [consensus mec ## What is proof-of-stake (PoS)? {#what-is-pos} -Proof-of-stake is a type of [consensus mechanism](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. In proof-of-stake, validators explicitly stake capital in the form of ether into a smart contract on Ethereum. This staked ether then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. +Proof-of-stake underlies certain [consensus mechanisms](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. Ethereum uses proof-of-stake, where validators explicitly stake capital in the form of ETH into a smart contract on Ethereum. This staked ETH then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. -Proof-of-stake comes with a number of improvements to the proof-of-work system: +Proof-of-stake comes with a number of improvements to the now-deprecated proof-of-work system: - better energy efficiency – there is no need to use lots of energy on proof-of-work computations - lower barriers to entry, reduced hardware requirements – there is no need for elite hardware to stand a chance of creating new blocks @@ -26,17 +26,17 @@ Proof-of-stake comes with a number of improvements to the proof-of-work system: ## Validators {#validators} -To participate as a validator, a user must deposit 32 ETH into the deposit contract and run three separate pieces of software: an execution client, a consensus client, and a validator. On depositing their ether, the user joins an activation queue that limits the rate of new validators joining the network. Once activated, validators receive new blocks from peers on the Ethereum network. The transactions delivered in the block are re-executed, and the block signature is checked to ensure the block is valid. The validator then sends a vote (called an attestation) in favor of that block across the network. +To participate as a validator, a user must deposit 32 ETH into the deposit contract and run three separate pieces of software: an execution client, a consensus client, and a validator. On depositing their ETH, the user joins an activation queue that limits the rate of new validators joining the network. Once activated, validators receive new blocks from peers on the Ethereum network. The transactions delivered in the block are re-executed, and the block signature is checked to ensure the block is valid. The validator then sends a vote (called an attestation) in favor of that block across the network. Whereas under proof-of-work, the timing of blocks is determined by the mining difficulty, in proof-of-stake, the tempo is fixed. Time in proof-of-stake Ethereum is divided into slots (12 seconds) and epochs (32 slots). One validator is randomly selected to be a block proposer in every slot. This validator is responsible for creating a new block and sending it out to other nodes on the network. Also in every slot, a committee of validators is randomly chosen, whose votes are used to determine the validity of the block being proposed. ## Finality {#finality} -A transaction has "finality" in distributed networks when it's part of a block that can't change without a significant amount of ether getting burned. On proof-of-stake Ethereum, this is managed using "checkpoint" blocks. The first block in each epoch is a checkpoint. Validators vote for pairs of checkpoints that it considers to be valid. If a pair of checkpoints attracts votes representing at least two-thirds of the total staked ether, the checkpoints are upgraded. The more recent of the two (target) becomes "justified". The earlier of the two is already justified because it was the "target" in the previous epoch. Now it is upgraded to "finalized". To revert a finalized block, an attacker would commit to losing at least one-third of the total supply of staked ether (currently around $10,000,000,000). The exact reason for this is explained [in this Ethereum Foundation blog post](https://blog.ethereum.org/2016/05/09/on-settlement-finality/). Since finality requires a two-thirds majority, an attacker could prevent the network from reaching finality by voting with one-third of the total stake. There is a mechanism to defend against this: the [inactivity leak](https://arxiv.org/pdf/2003.03052.pdf). This activates whenever the chain fails to finalize for more than four epochs. The inactivity leak bleeds away the staked ether from validators voting against the majority, allowing the majority to regain a two-thirds majority and finalize the chain. +A transaction has "finality" in distributed networks when it's part of a block that can't change without a significant amount of ETH getting burned. On proof-of-stake Ethereum, this is managed using "checkpoint" blocks. The first block in each epoch is a checkpoint. Validators vote for pairs of checkpoints that it considers to be valid. If a pair of checkpoints attracts votes representing at least two-thirds of the total staked ETH, the checkpoints are upgraded. The more recent of the two (target) becomes "justified". The earlier of the two is already justified because it was the "target" in the previous epoch. Now it is upgraded to "finalized". To revert a finalized block, an attacker would commit to losing at least one-third of the total supply of staked ETH. The exact reason for this is explained in this [Ethereum Foundation blog post](https://blog.ethereum.org/2016/05/09/on-settlement-finality/). Since finality requires a two-thirds majority, an attacker could prevent the network from reaching finality by voting with one-third of the total stake. There is a mechanism to defend against this: the [inactivity leak](https://arxiv.org/pdf/2003.03052.pdf). This activates whenever the chain fails to finalize for more than four epochs. The inactivity leak bleeds away the staked ETH from validators voting against the majority, allowing the majority to regain a two-thirds majority and finalize the chain. ## Crypto-economic security {#crypto-economic-security} -Running a validator is a commitment. The validator is expected to maintain sufficient hardware and connectivity to participate in block validation and proposal. In return, the validator is paid in ether (their staked balance increases). On the other hand, participating as a validator also opens new avenues for users to attack the network for personal gain or sabotage. To prevent this, validators miss out on ether rewards if they fail to participate when called upon, and their existing stake can be destroyed if they behave dishonestly. There are two primary behaviors that can be considered dishonest: proposing multiple blocks in a single slot (equivocating) and submitting contradictory attestations. The amount of ether slashed depends on how many validators are also being slashed at around the same time. This is known as the ["correlation penalty"](https://arxiv.org/pdf/2003.03052.pdf), and it can be minor (~1% stake for a single validator slashed on their own) or can result in 100% of the validator's stake getting destroyed (mass slashing event). It is imposed halfway through a forced exit period that begins with an immediate penalty (up to 0.5 ETH) on Day 1, the correlation penalty on Day 18, and finally, ejection from the network on Day 36. They receive minor attestation penalties every day because they are present on the network but not submitting votes. This all means a coordinated attack would be very costly for the attacker. +Running a validator is a commitment. The validator is expected to maintain sufficient hardware and connectivity to participate in block validation and proposal. In return, the validator is paid in ETH (their staked balance increases). On the other hand, participating as a validator also opens new avenues for users to attack the network for personal gain or sabotage. To prevent this, validators miss out on ETH rewards if they fail to participate when called upon, and their existing stake can be destroyed if they behave dishonestly. There are two primary behaviors that can be considered dishonest: proposing multiple blocks in a single slot (equivocating) and submitting contradictory attestations. The amount of ETH slashed depends on how many validators are also being slashed at around the same time. This is known as the ["correlation penalty"](https://arxiv.org/pdf/2003.03052.pdf), and it can be minor (~1% stake for a single validator slashed on their own) or can result in 100% of the validator's stake getting destroyed (mass slashing event). It is imposed halfway through a forced exit period that begins with an immediate penalty (up to 0.5 ETH) on Day 1, the correlation penalty on Day 18, and finally, ejection from the network on Day 36. They receive minor attestation penalties every day because they are present on the network but not submitting votes. This all means a coordinated attack would be very costly for the attacker. ## Fork choice {#fork-choice} @@ -44,7 +44,7 @@ When the network performs optimally and honestly, there is only ever one new blo ## Proof-of-stake and security {#pos-and-security} -The threat of a [51% attack](https://www.investopedia.com/terms/1/51-attack.asp) still exists on proof-of-stake as it does on proof-of-work, but it's even riskier for the attackers. A attacker would need 51% of the staked ETH (about $15,000,000,000 USD). They could then use their own attestations to ensure their preferred fork was the one with the most accumulated attestations. The 'weight' of accumulated attestations is what consensus clients use to determine the correct chain, so this attacker would be able to make their fork the canonical one. However, a strength of proof-of-stake over proof-of-work is that the community has flexibility in mounting a counter-attack. For example, the honest validators could decide to keep building on the minority chain and ignore the attacker's fork while encouraging apps, exchanges, and pools to do the same. They could also decide to forcibly remove the attacker from the network and destroy their staked ether. These are strong economic defenses against a 51% attack. +The threat of a [51% attack](https://www.investopedia.com/terms/1/51-attack.asp) still exists on proof-of-stake as it does on proof-of-work, but it's even riskier for the attackers. A attacker would need 51% of the staked ETH. They could then use their own attestations to ensure their preferred fork was the one with the most accumulated attestations. The 'weight' of accumulated attestations is what consensus clients use to determine the correct chain, so this attacker would be able to make their fork the canonical one. However, a strength of proof-of-stake over proof-of-work is that the community has flexibility in mounting a counter-attack. For example, the honest validators could decide to keep building on the minority chain and ignore the attacker's fork while encouraging apps, exchanges, and pools to do the same. They could also decide to forcibly remove the attacker from the network and destroy their staked ETH. These are strong economic defenses against a 51% attack. 51% attacks are just one flavor of malicious activity. Bad actors could attempt long-range attacks (although the finality gadget neutralizes this attack vector), short range 'reorgs' (although proposer boosting and attestation deadlines mitigate this), bouncing and balancing attacks (also mitigated by proposer boosting, and these attacks have anyway only been demonstrated under idealized network conditions) or avalanche attacks (neutralized by the fork choice algorithms rule of only considering the latest message). @@ -57,7 +57,7 @@ Overall, proof-of-stake, as it is implemented on Ethereum, has been demonstrated | Staking makes it easier for individuals to participate in securing the network, promoting decentralization. validator node can be run on a normal laptop. Staking pools allow users to stake without having 32 ETH. | Proof-of-stake is younger and less battle-tested compared to proof-of-work | | Staking is more decentralized. Economies of scale do not apply in the same way that they do for PoW mining. | Proof-of-stake is more complex to implement than proof-of-work | | Proof-of-stake offers greater crypto-economic security than proof-of-work | Users need to run three pieces of software to participate in Ethereum's proof-of-stake. | -| Less issuance of new ether is required to incentivize network participants | | +| Less issuance of new ETH is required to incentivize network participants | | ## Further reading {#further-reading} @@ -67,6 +67,7 @@ Overall, proof-of-stake, as it is implemented on Ethereum, has been demonstrated - [The Beacon Chain Ethereum 2.0 explainer you need to read first](https://ethos.dev/beacon-chain/) _Ethos.dev_ - [Why Proof of Stake (Nov 2020)](https://vitalik.ca/general/2020/11/06/pos2020.html) _Vitalik Buterin_ - [Proof of Stake: How I Learned to Love Weak Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ +- [Proof-of-stake Ethereum attack and defense](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) - [A Proof of Stake Design Philosophy](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ ## Related topics {#related-topics} diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md new file mode 100644 index 00000000000..54a0e76e22d --- /dev/null +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -0,0 +1,89 @@ +--- +title: Keys in proof-of-stake Ethereum +description: An explanation of keys used in Ethereum's proof-of-stake consensus mechanism +lang: en +sidebar: true +--- + +Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address—that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that cryptography can prove that the holder approves some action of a specific private key. + +Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). + +However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before—there were no changes to the elliptic-curve-based keys securing accounts. However, users needed a new type of key for participating in proof-of-stake by staking ETH and running validators. This need arose from scalability challenges associated with many messages passing between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. + +This new type of key uses the [Boneh-Lyn-Shacham (BLS) signature scheme](https://wikipedia.org/wiki/BLS_digital_signature). BLS enables a very efficient aggregation of signatures but also allows reverse engineering of aggregated individual validator keys and is ideal for managing actions between validators. + +## The two types of validator keys {#two-types-of-keys} + +Before the switch to proof-of-stake, Ethereum users only had a single elliptic-curve-based private key to access their funds. With the introduction of proof-of-stake, users that wished to be solo stakers also required a **validator key** and a **withdrawal key**. + +### The validator key {#validator-key} + +The validator signing key consists of two elements: + +- Validator **private** key +- Validator **public** key + +The purpose of the validator private key is to sign on-chain operations such as block proposals and attestations. Because of this, these keys must be held in a hot wallet. + +This flexibility has the advantage of moving validator signing keys very quickly from one device to another, however, if they have gotten lost or stolen, a thief may be able to **act maliciously** in a few ways: + +- Get the validator slashed by: + - Being a proposer and signing two different beacon blocks for the same slot + - Being an attester and signing an attestation that "surrounds" another one + - Being an attester and signing two different attestations having the same target +- Force a voluntary exit, which stops the validator from staking, and grants access to its ETH balance to the withdrawal key owner + +The **validator public key** is included in the transaction data when a user deposits ETH to the staking deposit contract. This is known as the _deposit data_ and it allows Ethereum to identify the validator. + +### The withdrawal key {#withdrawal-key} + +The withdrawal key will be required to move the validator balance after this is enabled in the upcoming Shanghai upgrade. Just like the validator keys, the withdrawal keys also consist of two components: + +- Withdrawal **private** key +- Withdrawal **public** key + +Losing this key means losing access to the validator balance. However, the validator can still sign attestations and blocks since these actions require the validator's private key, but there is little to no incentive if the withdrawal keys are lost. + +Separating the validator keys from the Ethereum account keys enables multiple validators to be run by a single user. + +![validator key schematic](validator-key-schematic.png) + +## Deriving keys from a seed phrase {#deriving-keys-from-seed} + +If every 32 ETH staked required a new set of 2 completely independent keys, key management would quickly become unwieldy, especially for users running multiple validators. Instead, multiple validator keys can be derived from a single common secret and storing that single secret allows access to multiple validator keys. + +[Mnemonics](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) and paths are prominent features that users often encounter when [they access](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) their wallets. The mnemonic is a sequence of words that act as an initial seed for a private key. When combined with additional data, the mnemonic generates a hash known as the 'master key'. This can be thought of as the root of a tree. Branches from this root can then be derived using a hierarchical path so that child nodes can exist as combinations of their parent node's hash and their index in the tree. Read about [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) and [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) standards for mnemonic-based key generation. + +These paths have the following structure, which will be familiar to users who have interacted with hardware wallets: + +``` +m/44'/60'/0'/0` +``` + +The slashes in this path separate components of the private key as follows: + +``` +master_key / purpose / coin_type / account / change / address_index +``` + +This logic enables users to attach as many validators as possible to a single **mnemonic phrase** because the tree root can be common, and differentiation can happen at the branches. The user can **derive any number of keys** from the mnemonic phrase. + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +Each branch is separated by a `/` so `m/2` means start with the master key and follow branch 2. In the schematic below a single mnemonic phrase is used to store three withdrawal keys, each with two associated validators. + +![validator key logic](multiple-keys.png) + +## Further reading {#further-reading} + +- [Ethereum Foundation blog post by Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) +- [EIP-2333 BLS12-381 key generation](https://eips.ethereum.org/EIPS/eip-2333) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png b/src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png new file mode 100644 index 00000000000..f75b39ab093 Binary files /dev/null and b/src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png differ diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png b/src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png new file mode 100644 index 00000000000..83dcbeaddee Binary files /dev/null and b/src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png differ diff --git a/src/content/developers/docs/consensus-mechanisms/pow/index.md b/src/content/developers/docs/consensus-mechanisms/pow/index.md index 49694e7776b..48a81da0d12 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/index.md @@ -3,12 +3,13 @@ title: Proof-of-work (PoW) description: An explanation of the proof-of-work consensus protocol and its role in Ethereum. lang: en sidebar: true -incomplete: true --- -Ethereum, like Bitcoin, currently uses a consensus protocol called **[Proof-of-work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. This allows the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. +The Ethereum network began by using a consensus mechanism that involved **[Proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevented certain kinds of economic attacks. However, Ethereum switched off proof-of-work in 2022 and started using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. -Over the next year, proof-of-work will be phased out in favour of **[Proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos)**. The transition to proof-of-stake will also phase out mining from Ethereum. [More on The Merge.](/upgrades/merge/) + + Proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as part of its consensus mechanism. Instead, it uses proof-of-stake. Read more on proof-of-stake and staking. + ## Prerequisites {#prerequisites} @@ -16,63 +17,59 @@ To better understand this page, we recommend you first read up on [transactions] ## What is Proof-of-work (PoW)? {#what-is-pow} -Proof-of-work is the mechanism that allows the decentralized Ethereum network to come to consensus, or agree on things like account balances and the order of transactions. This prevents users from "double spending" their coins and ensures that the Ethereum chain is tremendously difficult to attack or manipulate. +Nakamoto consensus, which utilizes proof-of-work, is the mechanism that once allowed the decentralized Ethereum network to come to consensus (i.e. all nodes agree) on things like account balances and the order of transactions. This prevented users from "double spending" their coins and ensured that the Ethereum chain was tremendously difficult to attack or manipulate. These security properties now come from proof-of-stake instead using the consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/). ## Proof-of-work and mining {#pow-and-mining} -Proof-of-work is the underlying algorithm that sets the difficulty and rules for the work miners do. Mining is the "work" itself. It's the act of adding valid blocks to the chain. This is important because the chain's length helps the network follow the correct Ethereum chain and understand Ethereum's current state. The more "work" done, the longer the chain, and the higher the block number, the more certain the network can be of the current state of things. +Proof-of-work is the underlying algorithm that sets the difficulty and rules for the work miners do on proof-of-work blockchains. Mining is the "work" itself. It's the act of adding valid blocks to the chain. This is important because the chain's length helps the network follow the correct fork of the blockchain. The more "work" done, the longer the chain, and the higher the block number, the more certain the network can be of the current state of things. [More on mining](/developers/docs/consensus-mechanisms/pow/mining/) -## How does Ethereum's proof-of-work work? {#how-it-works} +## How did Ethereum's proof-of-work work? {#how-it-works} -Ethereum transactions are processed into blocks. Each block has a: +Ethereum transactions are processed into blocks. In the now-deprecated proof-of-work Ethereum, each block contained: - block difficulty – for example: 3,324,092,183,262,715 - mixHash – for example: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` - nonce – for example: `0xd3ee432b4fb3d26b` -This block data is directly related to proof-of-work. +This block data was directly related to proof-of-work. ### The work in proof-of-work {#the-work} -The proof-of-work protocol, Ethash, requires miners to go through an intense race of trial and error to find the nonce for a block. Only blocks with a valid nonce can be added to the chain. +The proof-of-work protocol, Ethash, required miners to go through an intense race of trial and error to find the nonce for a block. Only blocks with a valid nonce could be added to the chain. -When racing to create a block, a miner will repeatedly put a dataset, that you can only get from downloading and running the full chain (as a miner does), through a mathematical function. The dataset gets used to generate a mixHash below a target nonce, as dictated by the block difficulty. The best way to do this is through trial and error. +When racing to create a block, a miner repeatedly put a dataset, that could only be obtained by downloading and running the full chain (as a miner does), through a mathematical function. The dataset was used to generate a mixHash below a target that is dictated by the block difficulty. The best way to do this is through trial and error. -The difficulty determines the target for the hash. The lower the target, the smaller the set of valid hashes. Once generated, this is incredibly easy for other miners and clients to verify. Even if one transaction were to change, the hash would be completely different, signalling fraud. +The difficulty determined the target for the hash. The lower the target, the smaller the set of valid hashes. Once generated, this was incredibly easy for other miners and clients to verify. Even if one transaction were to change, the hash would be completely different, signalling fraud. -Hashing makes fraud easy to spot. But proof-of-work as a process is also a big deterrent to attacking the chain. +Hashing makes fraud easy to spot. But proof-of-work as a process was also a big deterrent to attacking the chain. ### Proof-of-work and security {#security} -Miners are incentivised to do this work on the main Ethereum chain. There is little incentive for a subset of miners to start their own chain – it undermines the system. Blockchains rely on having a single state as a source of truth. And users will always choose the longest or "heaviest" chain. +Miners were incentivized to do this work on the main Ethereum chain. There was little incentive for a subset of miners to start their own chain—it undermines the system. Blockchains rely on having a single state as a source of truth. -The objective of proof-of-work is to extend the chain. The longest chain is most believable as the valid one because it's had the most computational work done. Within Ethereum's PoW system, it's nearly impossible to create new blocks that erase transactions, create fake ones, or maintain a second chain. That's because a malicious miner would need to always solve the block nonce faster than everyone else. +The objective of proof-of-work was to extend the chain. The longest chain was most believable as the valid one because it had the most computational work done to generate it. Within Ethereum's PoW system, it was nearly impossible to create new blocks that erase transactions, create fake ones, or maintain a second chain. That's because a malicious miner would have needed to always solve the block nonce faster than everyone else. -To consistently create malicious yet valid blocks, you'd need over 51% of the network mining power to beat everyone else. You'd need a lot of computing power to be able to do this amount of "work". And the energy spent might even outweigh the gains you'd make in an attack. +To consistently create malicious yet valid blocks, a malicious miner would have needed over 51% of the network mining power to beat everyone else. That amount of "work" requires a lot of expensive computing power and the energy spent might even have outweighed the gains made in an attack. ### Proof-of-work economics {#economics} -Proof-of-work is also responsible for issuing new currency into the system and incentivizing miners to do the work. +Proof-of-work was also responsible for issuing new currency into the system and incentivizing miners to do the work. -Miners who successfully create a block get rewarded with two freshly minted ETH but no longer receive all the transaction fees, as the base fee gets burned, while the tip and block reward goes to the miner. A miner may also get 1.75 ETH for an uncle block. Uncle blocks are valid blocks created by a miner practically at the same time as another miner mined the successful block. Uncle blocks usually happen due to network latency. +Since the [Constantinople upgrade](/history/#constantinople), miners who successfully create a block were rewarded with two freshly minted ETH and part of the transaction fees. Ommer blocks also compensated 1.75 ETH. Ommer blocks were valid blocks created by a miner practically at the same time as another miner created the canonical block, which was ultimately determined by which chain was built on top of first. Ommer blocks usually happened due to network latency. ## Finality {#finality} A transaction has "finality" on Ethereum when it's part of a block that can't change. -Because miners work in a decentralized way, two valid blocks can get mined at the same time. This creates a temporary fork. Eventually, one of these chains will become the accepted chain after a subsequent block has been mined and added, making it longer. +Because miners worked in a decentralized way, two valid blocks could be mined at the same time. This creates a temporary fork. Eventually, one of these chains became the accepted chain after subsequent blocks were mined and added to it, making it longer. -But to complicate things further, transactions rejected on the temporary fork may have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. For Ethereum, the recommended time is six blocks or just over 1 minute. After six blocks, you can say with relative confidence that the transaction was successful. You can wait longer for even greater assurances. - -Finality is something to bear in mind when designing dapps. It would be a poor user experience to misrepresent transaction information to your users, especially if the transaction is of high value. - -Remember, this timing doesn't include the wait times for having a transaction picked up by a miner. +To complicate things further, transactions rejected on the temporary fork may not have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. Under the previous proof-of-work Ethereum, the more blocks were mined on top of a specific block `N`, the higher confidence that the transactions in `N` were successful and would not be reverted. Now, with proof-of-stake, finalization is an explicit, rather than probabilistic, property of a block. ## Proof-of-work energy-usage {#energy} -A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumes 73.2 TWh annually, the energy equivalent of a medium-sized country like Austria. +A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumed large amounts of energy. Shortly before switching to proof-of-stake, Ethereum miners were collectively consuming about 70 TWh/yr (about the same as the Czech Republic - according to [digiconomist](digiconomist.net) on 18-July-2022). ## Pros and cons {#pros-and-cons} diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md index b9b56ecee0f..dccf5482e57 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md @@ -1,6 +1,6 @@ --- -title: Dagger-Hashamoto -description: A detailed look at the Dagger-Hashamoto algorithm. +title: Dagger-Hashimoto +description: A detailed look at the Dagger-Hashimoto algorithm. lang: en sidebar: true --- diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md index b937f7ea659..22a6ee8230f 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md @@ -5,9 +5,15 @@ lang: en sidebar: true --- -**Note that Ethash is Ethereum's proof-of-work mining algorithm. Proof-of-work mining will be switched off completely at [The Merge](/upgrades/merge) at which point Ethereum will be secured using a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) mechanism instead.** + + Ethash was Ethereum's proof-of-work mining algorithm. Proof-of-work has now been **switched off entirely** and Ethereum is now secured using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + -[Ethash](https://github.com/ethereum/wiki/wiki/Ethash) is a modified version of the [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto) algorithm. Ethash proof-of-work is [memory hard](https://wikipedia.org/wiki/Memory-hard_function), which was thought to make the algorithm ASIC resistant, but ASIC Ethash-mining has since been shown to be possible. Memory hardness is achieved with a proof of work algorithm that requires choosing subsets of a fixed resource dependent on the nonce and block header. This resource (a few gigabytes in size) is called a DAG. The DAG is changed every 30000 blocks, a 125-hour window called an epoch (roughly 5.2 days) and takes a while to generate. Since the DAG only depends on block height, it can be pre-generated but if it's not, the client needs to wait until the end of this process to produce a block. If clients do not pre-generate and cache DAGs ahead of time the network may experience massive block delay on each epoch transition. Note that the DAG does not need to be generated for verifying the proof-of-work essentially allowing for verification with both low CPU and small memory. +[Ethash](https://github.com/ethereum/wiki/wiki/Ethash) is a modified version of the [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto) algorithm. Ethash proof-of-work is [memory hard](https://wikipedia.org/wiki/Memory-hard_function), which was thought to make the algorithm ASIC resistant. Ethash ASICs were eventually developed but GPU mining was still a viable option until proof-of-work was switched off. Ethash is still used to mine other coins on other non-Ethereum proof-of-work networks. + +## How does Ethash work? {#how-does-ethash-work} + +Memory hardness is achieved with a proof of work algorithm that requires choosing subsets of a fixed resource dependent on the nonce and block header. This resource (a few gigabytes in size) is called a DAG. The DAG is changed every 30000 blocks, a ~125-hour window called an epoch (roughly 5.2 days) and takes a while to generate. Since the DAG only depends on block height, it can be pre-generated, but if it's not the client needs to wait until the end of this process to produce a block. If clients do not pre-generate and cache DAGs ahead of time the network may experience massive block delay on each epoch transition. Note that the DAG does not need to be generated for verifying the proof-of-work essentially allowing for verification with both low CPU and small memory. The general route that the algorithm takes is as follows: diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md index dae534116c8..a14096d619d 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md @@ -3,12 +3,16 @@ title: Mining algorithms description: A detailed look at the algorithms used for Ethereum mining. lang: en sidebar: true -preMergeBanner: true --- -Ethereum mining has used two mining algorithms, Dagger Hashimoto and Ethash. Dagger Hashimoto was never used to mine Ethereum, being superseded by Ethash before mainet launched. It was a R&D mining algorithm that paved the way for Ethash. However, it has historical significance as an important innovation in Ethereum's development. Proof-of-work mining itself will be deprecated in favor of proof-of-stake during [The Merge](/upgrades/merge/), which is forecast to happen in Q3-Q4 2022. + -The fundamental idea of both mining algorithms is that a miner tries to find a nonce input using brute force computation so that the result is below a certain difficulty threshold. This difficulty threshold can be dynamically adjusted, allowing block production to happen at a regular interval. +Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on [The Merge](/upgrades/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), and [staking](/staking/). This page is for historical interest only. + + + + +Ethereum mining used an algorithm known as Ethash. The fundamental idea of the algorithm is that a miner tries to find a nonce input using brute force computation so that the resulting hash is smaller than a threshold determined by the calculated difficulty. This difficulty level can be dynamically adjusted, allowing block production to happen at a regular interval. ## Prerequisites {#prerequisites} @@ -16,7 +20,7 @@ To better understand this page, we recommend you first read up on [proof-of-work ## Dagger Hashimoto {#dagger-hashimoto} -Dagger Hashimoto was a precursor research algorithm for Ethereum mining that Ethash superseded. It was an amalgamation of two different algorithms: Dagger and Hashimoto. +Dagger Hashimoto was a precursor research algorithm for Ethereum mining that Ethash superseded. It was an amalgamation of two different algorithms: Dagger and Hashimoto. It was only ever a research implementation and was superceded by Ethash by the time Ethereum Mainnet launched. [Dagger](http://www.hashcash.org/papers/dagger.html) involves the generation of a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph), random slices of which get hashed together. The core principle is that each nonce only requires a small portion of a large total data tree. Recomputing the subtree for each nonce is prohibitive for mining - hence the need to store the tree - but okay for a single nonce’s worth of verification. Dagger was designed to be an alternative to existing algorithms like Scrypt, which are memory-hard but difficult to verify when their memory-hardness increases to genuinely secure levels. However, Dagger was vulnerable to shared memory hardware acceleration and dropped in favor of other avenues of research. @@ -28,7 +32,7 @@ More on [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algo ## Ethash {#ethash} -Ethash is Ethereum's current mining algorithm. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum mainnet has only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. +Ethash was the mining algorithm that was actually used on the real Ethereum Mainnet under the now deprecated proof-of-work architecture. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum Mainnet only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. [More on Ethash](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash). diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md index 08c9078bc63..432c2b6770d 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -1,49 +1,48 @@ --- title: Mining -description: An explanation of how mining works in Ethereum and how it helps keep Ethereum secure and decentralized. +description: An explanation of how mining worked on Ethereum. lang: en sidebar: true -preMergeBanner: true --- - Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. - +Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on [The Merge](/upgrades/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), and [staking](/staking/). This page is for historical interest. + + + ## Prerequisites {#prerequisites} To better understand this page, we recommend you first read up on [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/) and [proof-of-work](/developers/docs/consensus-mechanisms/pow/). ## What is Ethereum mining? {#what-is-ethereum-mining} -Mining is the process of creating a block of transactions to be added to the Ethereum blockchain. +Mining is the process of creating a block of transactions to be added to the Ethereum blockchain in Ethereum's now-deprecated proof-of-work architecture. -The word mining originates in the context of the gold analogy for crypto currencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume is through mining. This is appropriate to the extent that in Ethereum too, the only mode of issuance post launch is via mining. Unlike these examples however, mining is also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. +The word mining originates in the context of the gold analogy for cryptocurrencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume in a proof-of-work system is through mining. In proof-of-work Ethereum, the only mode of issuance was via mining. Unlike gold or precious metals however, Ethereum mining was also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. Mining ether = Securing the Network -Ethereum, like Bitcoin, currently uses a [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow/) consensus mechanism. Mining is the lifeblood of proof-of-work. Ethereum miners - computers running software - using their time and computation power to process transactions and produce blocks. +Mining is the lifeblood of any proof-of-work blockchain. Ethereum miners - computers running software - used their time and computation power to process transactions and produce blocks prior to the transition to proof-of-stake. ## Why do miners exist? {#why-do-miners-exist} -In decentralized systems like Ethereum, we need to ensure that everyone agrees on the order of transactions. Miners help this happen by solving computationally difficult puzzles to produce blocks, securing the network from attacks. +In decentralized systems like Ethereum, we need to ensure that everyone agrees on the order of transactions. Miners helped this happen by solving computationally difficult puzzles to produce blocks, securing the network from attacks. [More on proof-of-work](/developers/docs/consensus-mechanisms/pow/) -## Who can become a miner on Ethereum? {#who-can-become-a-miner} - -Technically, anyone can mine on the Ethereum network using their computer. However, not everyone can mine ether (ETH) profitably. In most cases, miners must purchase dedicated computer hardware to mine profitably. While it is true anyone can run the mining software on their computer, it is unlikely that the average computer would earn enough block rewards to cover the associated costs of mining. +Anyone was previously able to mine on the Ethereum network using their computer. However, not everyone could mine ether (ETH) profitably. In most cases, miners had to purchase dedicated computer hardware, and have access to inexpensive energy sources. The average computer was unlikely to earn enough block rewards to cover the associated costs of mining. ### Cost of mining {#cost-of-mining} - Potential costs of the hardware necessary to build and maintain a mining rig - Electrical cost of powering the mining rig -- If you are mining in a pool, mining pools typically charge a flat % fee of each block generated by the pool +- If you were mining in a pool, these pools typically charged a flat % fee of each block generated by the pool - Potential cost of equipment to support mining rig (ventilation, energy monitoring, electrical wiring, etc.) To further explore mining profitability, use a mining calculator, such as the one [Etherscan](https://etherscan.io/ether-mining-calculator) provides. -## How Ethereum transactions are mined {#how-ethereum-transactions-are-mined} +## How Ethereum transactions were mined {#how-ethereum-transactions-were-mined} 1. A user writes and signs a [transaction](/developers/docs/transactions/) request with the private key of some [account](/developers/docs/accounts/). 2. The user broadcasts the transaction request to the entire Ethereum network from some [node](/developers/docs/nodes-and-clients/). @@ -66,9 +65,9 @@ Watch Austin walk you through mining and the proof-of-work blockchain. ## The mining algorithm {#mining-algorithm} -The Ethereum mining algorithm has undergone several upgrades since its inception. The original algorithm, "Dagger Hashimoto" was based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger-part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This algorithm was novel because it had high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). After substantial upgrades to the algorithm, it was renamed to "Ethash". This renaming happened before mining began on Ethereum mainnet. Dagger-Hashimoto was a precursor, research algorithm that was not used on Ethereum mainnet. +Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). Ethhash was the successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). -More information on these mining algorithms is available at our [mining algorithms page](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). +[More on mining algorithms](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). ## Further reading {#further-reading} diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index dbe336e3137..d33e5b29331 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -3,7 +3,6 @@ title: Introduction to dapps description: lang: en sidebar: true -preMergeBanner: true --- A decentralized application (dapp) is an application built on a decentralized network that combines a [smart contract](/developers/docs/smart-contracts/) and a frontend user interface. On Ethereum, smart contracts are accessible and transparent – like open APIs – so your dapp can even include a smart contract that someone else has written. @@ -40,7 +39,7 @@ A smart contract is code that lives on the Ethereum blockchain and runs exactly ## Drawbacks of dapp development {#drawbacks-of-dapp-development} - **Maintenance** – Dapps can be harder to maintain because the code and data published to the blockchain are harder to modify. It’s hard for developers to make updates to their dapps (or the underlying data stored by a dapp) once they are deployed, even if bugs or security risks are identified in an old version. -- **Performance overhead** – There is a huge performance overhead, and scaling is really hard. To achieve the level of security, integrity, transparency, and reliability that Ethereum aspires to, every node runs and stores every transaction. On top of this, proof-of-work takes time as well. A back-of-the-envelope calculation puts the overhead at something like 1,000,000x that of standard computation currently. +- **Performance overhead** – There is a huge performance overhead, and scaling is really hard. To achieve the level of security, integrity, transparency, and reliability that Ethereum aspires to, every node runs and stores every transaction. On top of this, proof-of-stake consensus takes time as well. - **Network congestion** – When one dapp uses too many computational resources, the entire network gets backed up. Currently, the network can only process about 10-15 transactions per second; if transactions are being sent in faster than this, the pool of unconfirmed transactions can quickly balloon. - **User experience** – It may be harder to engineer user-friendly experiences because the average end-user might find it too difficult to set up a tool stack necessary to interact with the blockchain in a truly secure fashion. - **Centralization** – User-friendly and developer-friendly solutions built on top of the base layer of Ethereum might end up looking like centralized services anyways. For example, such services may store keys or other sensitive information server-side, serve a frontend using a centralized server, or run important business logic on a centralized server before writing to the blockchain. Centralization eliminates many (if not all) of the advantages of blockchain over the traditional model. diff --git a/src/content/developers/docs/data-and-analytics/block-explorers/index.md b/src/content/developers/docs/data-and-analytics/block-explorers/index.md index 7286c9ef25e..70850a2d5d1 100644 --- a/src/content/developers/docs/data-and-analytics/block-explorers/index.md +++ b/src/content/developers/docs/data-and-analytics/block-explorers/index.md @@ -4,7 +4,6 @@ description: An introduction to block explorers, your portal into the world of b lang: en sidebar: true sidebarDepth: 3 -preMergeBanner: true --- Block explorers are your portal to Ethereum's data. You can use them to see real-time data on blocks, transactions, miners, accounts, and other on-chain activity. @@ -15,67 +14,54 @@ You should understand the basic concepts of Ethereum so you can make sense of th ## Services {#services} -- [Etherscan](https://etherscan.io/) –_Also available in Chinese, Korean, Russian, and Japanese_ +- [Etherscan](https://etherscan.io/) -_Also available in Chinese, Korean, Russian, and Japanese_ - [Etherchain](https://www.etherchain.org/) -- [Ethplorer](https://ethplorer.io/) –_Also available in Chinese, Spanish, French, Turkish, Russian, Korean and Vietnamese_ -- [Blockchair](https://blockchair.com/ethereum) –_Also available in Spanish, French, Italian, Dutch, Portuguese, Russian, Chinese, and Farsi_ +- [Ethplorer](https://ethplorer.io/) -_Also available in Chinese, Spanish, French, Turkish, Russian, Korean and Vietnamese_ +- [Blockchair](https://blockchair.com/ethereum) -_Also available in Spanish, French, Italian, Dutch, Portuguese, Russian, Chinese, and Farsi_ - [Blockscout](https://blockscout.com/) - [OKLink](https://www.oklink.com/eth) - [Otterscan](https://otterscan.io/) ## Data {#data} -Ethereum is transparent by design so everything is verifiable. Block explorers provide an interface for getting this information. And this is for both the main Ethereum network and the testnets, should you need that data. +Ethereum is transparent by design so everything is verifiable. Block explorers provide an interface for getting this information. And this is for both the main Ethereum network and the testnets, should you need that data. Data is divided into execution data and consensus data. The execution data refers to the transactions that have been executed in a specific block. The consensus data refers to the blocks themselves and the validators who proposed them. Here's a summary of the types of data you can get from a block explorer. -### Blocks {#blocks} +### Execution data {#execution-data} -New blocks are added to Ethereum every ~12 seconds (this can fluctuate) so there's a near-constant stream of data that gets added to block explorers. Blocks contain a lot of important data that you may find useful: +New blocks are added to Ethereum every 12 seconds (unless a block proposer misses its turn), so a near-constant stream of data gets added to block explorers. Blocks contain a lot of important data that you may find useful: **Standard data** -- Block height – The block number and length of the blockchain (in blocks) on creation of the current block. -- Timestamp – The time at which a miner mined the block. -- Transactions – The number of transactions included within the block. -- Miner – The address of the miner who mined the block. -- Reward – The amount of ETH awarded to the miner for adding the block (standard 2ETH reward + any transaction fees of transactions included in the block). -- Difficulty – The difficulty associated with mining the block. -- Size – The size of the data within the block (measured in bytes). -- Gas used – The total units of gas used by the transactions in the block. -- Gas limit – The total gas limits set by the transactions in the block. -- Extra data – Any extra data the miner has included in the block. +- Block height - The block number and length of the blockchain (in blocks) on creation of the current block +- Timestamp - The time at which a block was proposed +- Transactions - The number of transactions included within the block +- Fee recipient - The address that received gas fee tips from transactions +- Block Reward - The amount of ETH awarded to the validator who proposed the block +- Size - The size of the data within the block (measured in bytes) +- Gas used - The total units of gas used by the transactions in the block +- Gas limit - The total gas limits set by the transactions in the block +- Base fee per gas - The minimum multiplier required for a transaction to be included in a block +- Burnt fees - How much ETH is burned in the block +- Extra data - Any extra data the miner has included in the block **Advanced data** -- Hash – The cryptographic hash that represents the block header (the unique identifier of the block). -- Parent hash – The hash of the block that came before the current block. -- Sha3Uncles – The combined hash of all uncles for a given parent. -- StateRoot – The root hash of Merkle trie which stores the entire state of the system. -- Nonce – A value used to demonstrate proof-of-work for a block by the miner. - -**Uncle blocks** - -Uncle blocks are created when two miners create blocks at near-enough the same time – only one block can be validated across the nodes. They are not included but still receive a reward for the work. - -Block explorers provide information about uncle blocks like: - -- An uncle block number. -- A time they occurred. -- The block height at which they were created. -- Who mined it. -- The ETH reward. +- Hash - The cryptographic hash that represents the block header (the unique identifier of the block) +- Parent hash - The hash of the block that came before the current block +- StateRoot - The root hash of Merkle trie which stores the entire state of the system ### Gas {#gas} Not only will block explorers give you data about Gas usage in transactions and blocks, but some will give you information on the network's current gas prices. This will help you understand network usage, submit safe transactions and not overspend on gas. Look out for APIs that can help you get this information into your product's interface. Gas-specific data covers: -- Estimated units of gas needed for a safe but slow transaction (+ estimated price and duration). -- Estimated units of gas needed for an average transaction (+ estimated price and duration). -- Estimated units of gas needed for a fast transaction (+ estimated price and duration). -- Average confirmation time based on gas price. -- Contracts that are consuming gas – in other words, popular products that are seeing lots of usage on the network. -- Accounts that are spending gas – in other words, frequent network users. +- Estimated units of gas needed for a safe but slow transaction (+ estimated price and duration) +- Estimated units of gas needed for an average transaction (+ estimated price and duration) +- Estimated units of gas needed for a fast transaction (+ estimated price and duration) +- Average confirmation time based on gas price +- Contracts that are consuming gas - in other words, popular products that are seeing lots of usage on the network +- Accounts that are spending gas - in other words, frequent network users ### Transactions {#transactions} @@ -83,23 +69,23 @@ Block explorers have become a common place for people to track the progress of t **Standard data** -- Transaction hash – A hash generated when the transaction is submitted. -- Status – An indication of whether the transaction is pending, failed or a success. -- Block – The block in which the transaction has been included. -- Timestamp – The time at which a miner mined the transaction. -- From – The address of the account that submitted the transaction. -- To – The address of the recipient or smart contract that the transaction interacts with. -- Tokens transferred – A list of tokens that were transferred as part of the transaction. -- Value – The total ETH value being transferred. -- Transaction fee – The amount paid to the miner to process the transaction (calculated by gas price\*gas used). +- Transaction hash - A hash generated when the transaction is submitted +- Status - An indication of whether the transaction is pending, failed or a success +- Block - The block in which the transaction has been included +- Timestamp - The time at which a miner mined the transaction +- From - The address of the account that submitted the transaction +- To - The address of the recipient or smart contract that the transaction interacts with +- Tokens transferred - A list of tokens that were transferred as part of the transaction +- Value - The total ETH value being transferred +- Transaction fee - The amount paid to the miner to process the transaction (calculated by gas price\*gas used) **Advanced data** -- Gas limit – The maximum numbers of gas units this transaction can consume. -- Gas used – The actual amount of gas units the transaction consumed. -- Gas price – The price set per gas unit. -- Nonce – The transaction number for the `from` address (bear in mind this starts at 0 so a nonce of `100` would actually be the 101st transaction submitted by this account. -- Input data – Any extra information required by the transaction. +- Gas limit - The maximum numbers of gas units this transaction can consume +- Gas used - The actual amount of gas units the transaction consumed +- Gas price - The price set per gas unit +- Nonce - The transaction number for the `from` address (bear in mind this starts at 0 so a nonce of `100` would actually be the 101st transaction submitted by this account +- Input data - Any extra information required by the transaction ### Accounts {#accounts} @@ -107,163 +93,144 @@ There's a lot of data that you can access about an account. This is why it's oft **User accounts** -- Account address – The public address you can use to send funds to. -- ETH balance – The amount of ETH associated with that account. -- Total ETH value – The value of the ETH. -- Tokens – The tokens associated with the account and their value. -- Transaction history – A list of all the transactions where this account was either the sender or the recipient. +- Account address - The public address you can use to send funds to +- ETH balance - The amount of ETH associated with that account +- Total ETH value - The value of the ETH +- Tokens - The tokens associated with the account and their value +- Transaction history - A list of all the transactions where this account was either the sender or the recipient **Smart contracts** Smart contract accounts have all the data that a user account will have, but some block explorers will even display some code information too. Examples include: -- Contract creator – The address that deployed the contract to Mainnet. -- Creation transaction – The transaction that included the deployment to Mainnet. -- Source code – The solidity or vyper code of the smart contract. -- Contract ABI – The Application Binary Interface of the contract – the calls the contract makes and the data received. -- Contract creation code – The compiled bytecode of the smart contract – created when you compile a smart contract written in Solidity or Vyper, etc. -- Contract events – A history of the methods called in the smart contract. Basically a way to see how the contract is being used and how often. +- Contract creator - The address that deployed the contract to Mainnet +- Creation transaction - The transaction that included the deployment to Mainnet +- Source code - The solidity or vyper code of the smart contract +- Contract ABI - The Application Binary Interface of the contract—the calls the contract makes and the data received +- Contract creation code - The compiled bytecode of the smart contract—created when you compile a smart contract written in Solidity or Vyper, etc. +- Contract events - A history of the methods called in the smart contract—basically a way to see how the contract is being used and how often ### Tokens {#tokens} Tokens are a type of contract so they'll have similar data to a smart contract. But because they have value and can be traded they have additional data points: -- Type – Whether they're an ERC-20, ERC-721 or another token standard. -- Price – If they're an ERC-20 they'll have a current market value. -- Market cap – If they're an ERC-20 they'll have a market cap (calculated by price\*total supply). -- Total supply – The number of tokens in circulation. -- Holders – The number of addresses that hold the token. -- Transfers – The number of times the token has been transferred between accounts. -- Transaction history – A history of all the transactions including the token. -- Contract address – The address of the token that was deployed to Mainnet. -- Decimals – ERC-20 tokens are divisible and have decimal places. +- Type - Whether they're an ERC-20, ERC-721 or another token standard +- Price - If they're an ERC-20 they'll have a current market value +- Market cap - If they're an ERC-20 they'll have a market cap (calculated by price\*total supply) +- Total supply - The number of tokens in circulation +- Holders - The number of addresses that hold the token +- Transfers - The number of times the token has been transferred between accounts +- Transaction history - A history of all the transactions including the token +- Contract address - The address of the token that was deployed to Mainnet +- Decimals - ERC-20 tokens are divisible and have decimal places ### Network {#network} -Of course there's some data that speaks to the health of the network. These are quite specific to Ethereum's proof-of-work consensus mechanism. When Ethereum transitions to proof-of-stake some of this data will be redundant +Some block data is concerned about the health of Ethereum more holistically. -- Difficulty – The current mining difficulty. -- Hashrate – An estimate of how many hashes are being generated by Ethereum miners trying to solve the current Ethereum block or any given block. -- Total transactions – The number of transactions since Ethereum was created. -- Transactions per second – The number of transactions processable within a second. -- ETH price – The current valuations of 1 ETH. -- Total ETH supply – Number of ETH in circulation – remember new ETH is created with the creation of every block in the form of block rewards. -- Market cap – Calculation of price\*supply. +- Total transactions - The number of transactions since Ethereum was created +- Transactions per second - The number of transactions processable within a second +- ETH price - The current valuations of 1 ETH +- Total ETH supply - Number of ETH in circulation—remember new ETH is created with the creation of every block in the form of block rewards +- Market cap - Calculation of price\*supply ## Consensus layer data {#consensus-layer-data} -The scalability upgrades are still in development but it's worth talking about some of the data points that explorers will be able to provide you. In fact, all of this data is available right now for the testnets. - -If you're not familiar with the road map, check out [our overview of the Ethereum upgrades](/upgrades/). - ### Epoch {#epoch} -The Beacon Chain will create committees of validators which are randomized at the end of every epoch (every 6.4 minutes) for security reasons. Epoch data includes: +For security reasons, randomized committees of validators are created at the end of every epoch (every 6.4 minutes). Epoch data includes: -- Epoch number. -- Finalized status – Whether the epoch has been finalized (Yes/No). -- Time – The time the epoch ended. -- Attestations – The number of attestations in the epoch (votes for blocks within slots). -- Deposits – The number of ETH deposits included in the epoch (validators must stake ETH to become validators). -- Slashings – Number of penalties given to proposers of blocks or attestors. -- Voting participation – The amount of staked ETH used to attest blocks. -- Validators – Number of validators active for the epoch. -- Average Validator balance – Average balance for active validators. -- Slots – Number of slots included in the epoch (slots include one valid block). +- Epoch number +- Finalized status - Whether the epoch has been finalized (Yes/No) +- Time - The time the epoch ended +- Attestations - The number of attestations in the epoch (votes for blocks within slots) +- Deposits - The number of ETH deposits included in the epoch (validators must stake ETH to become validators) +- Slashings - Number of penalties given to proposers of blocks or attestors +- Voting participation - The amount of staked ETH used to attest blocks +- Validators - Number of validators active for the epoch +- Average Validator balance - Average balance for active validators +- Slots - Number of slots included in the epoch (slots include one valid block) ### Slot {#slot} Slots are opportunities for block creation, the data available for each slot includes: -- Epoch – The epoch in which the slot is valid. -- Slot number. -- Status – The status of the slot (Proposed/Missed). -- Time – The slot timestamp. -- Proposer – The validator that proposed the block for the slot. -- Block root – The hash-tree-root of the BeaconBlock. -- Parent root – The hash of the block that came before. -- State root – The hash-tree-root of the BeaconState. -- Signature. -- Randao reveal. -- Graffiti – A block proposer can include 32 byte long message to its block proposal. -- Execution Data. - - Block hash. - - Deposit count. - - Deposit root. -- Attestations – Number of attestations for the block in this slot. -- Deposits – The number of deposits during this slot. -- Voluntary exits – The number of validators that left during the slot. -- Slashings – Number of penalties given to proposers of blocks or attestors. -- Votes – The validators that voted for the block in this slot. +- Epoch - The epoch in which the slot is valid +- Slot number +- Status - The status of the slot (Proposed/Missed) +- Time - The slot timestamp +- Proposer - The validator that proposed the block for the slot +- Block root - The hash-tree-root of the BeaconBlock +- Parent root - The hash of the block that came before +- State root - The hash-tree-root of the BeaconState +- Signature +- Randao reveal +- Graffiti - A block proposer can include 32 byte long message to its block proposal +- Execution Data + - Block hash + - Deposit count + - Deposit root +- Attestations - Number of attestations for the block in this slot +- Deposits - The number of deposits during this slot +- Voluntary exits - The number of validators that left during the slot +- Slashings - Number of penalties given to proposers of blocks or attestors +- Votes - The validators that voted for the block in this slot ### Blocks {#blocks-1} -Consensus layer blocks work differently because miners are replaced by validators and the Beacon Chain introduces slots and epochs to Ethereum. So that means new data! +Proof-of-stake divides time into slots and epochs. So that means new data! -- Proposer – The validator that was algorithmically chosen to propose the new block. -- Epoch – The epoch in which the block was proposed. -- Slot – The slot in which the block was proposed. -- Attestations – The number of attestation included in the slot. Attestations are like votes that indicate the block is ready to go to the Beacon Chain. +- Proposer - The validator that was algorithmically chosen to propose the new block +- Epoch - The epoch in which the block was proposed +- Slot - The slot in which the block was proposed +- Attestations - The number of attestation included in the slot—attestations are like votes that indicate the block is ready to go to the Beacon Chain ### Validators {#validators} Validators are responsible for proposing blocks and attesting to them within slots. -- Validator number – Unique number that represents the validator. -- Current balance – The validator's balance including rewards. -- Effective balance – The validator's balance that is used for staking. -- Income – The rewards or penalties received by the validator. -- Status – Whether the validator is currently online and active or not. -- Attestation effectiveness – The average time it takes for the validator's attestations to be included in the chain. -- Eligibility for activation – Date (and epoch) when the validator became available to validate. -- Active since – Date (and epoch) when the validator became active. -- Proposed blocks – The block that the validator has proposed. -- Attestations – The attestations that the validator has provided. -- Deposits – The from address, transaction hash, block number, timestamp, amount and status of the staking deposit made by the validator. +- Validator number - Unique number that represents the validator +- Current balance - The validator's balance including rewards +- Effective balance - The validator's balance that is used for staking +- Income - The rewards or penalties received by the validator +- Status - Whether the validator is currently online and active or not +- Attestation effectiveness - The average time it takes for the validator's attestations to be included in the chain +- Eligibility for activation - Date (and epoch) when the validator became available to validate +- Active since - Date (and epoch) when the validator became active +- Proposed blocks - The block that the validator has proposed +- Attestations - The attestations that the validator has provided +- Deposits - The from address, transaction hash, block number, timestamp, amount and status of the staking deposit made by the validator ### Attestations {#attestations} Attestations are "yes" votes to include blocks in the chain. Their data relates to a record of the attestation and the validators who attested -- Slot – The slot in which the attestation took place. -- Committee index – The index of the committee at the given slot. -- Aggregation bits – Represents the aggregated attestation of all participating validators in the attestation. -- Validators – The validators that provided attestations. -- Beacon block root – Points to the block to which validators are attesting. -- Source – Points to the latest justified epoch. -- Target – Points to the latest epoch boundary. -- Signature. +- Slot - The slot in which the attestation took place +- Committee index - The index of the committee at the given slot +- Aggregation bits - Represents the aggregated attestation of all participating validators in the attestation +- Validators - The validators that provided attestations +- Beacon block root - Points to the block to which validators are attesting +- Source - Points to the latest justified epoch +- Target - Points to the latest epoch boundary +- Signature ### Network {#network-1} The consensus layer top-level data includes the following: -- Current epoch. -- Current slot. -- Active validators – Number of active validators. -- Pending validators – Number of validators waiting for to be made active. -- Staked ETH – Amount of ETH staked in the network. -- Average balance – Average ETH balance of validators. +- Current epoch +- Current slot +- Active validators - Number of active validators +- Pending validators - Number of validators waiting for to be made active +- Staked ETH - Amount of ETH staked in the network +- Average balance - Average ETH balance of validators ## Block explorers {#block-explorers} -- [Etherscan](https://etherscan.io/) – a block explorer you can use to fetch data for Ethereum Mainnet, Ropsten Testnet, Kovan Testnet, Rinkeby Testnet, and Goerli Testnet. -- [Blockscout](https://blockscout.com/) – focuses on the following networks: - - xDai – a clever combination of MakerDAO's DAI stablecoin and POA's sidechain and tokenbridge technology. - - POA – A sidechain and autonomous network secured by a group of trusted validators. All validators on the network are United States notaries, and their information is publicly available. - - POA Sokol Testnet. - - ARTIS – an Ethereum compliant blockchain. - - [LUKSO L14](https://blockscout.com/lukso/l14) – L14 functions as the first test-network, to allow the LUKSO community to build and test on a common infrastructure. - - qDai. -- [Etherchain](https://www.etherchain.org/) – a block explorer for the Ethereum Mainnet. -- [Ethplorer](https://ethplorer.io/) – a block explorer with a focus on tokens for the Ethereum Mainnet and the Kovan testnet. -- [Blockchair](https://blockchair.com/ethereum) - the most private Ethereum explorer. Also for sorting and filtering (mempool) data. - -## Beacon chain (consensus layer) block explorers {#beacon-chain-block-explorers} - -- [https://beaconcha.in/](https://beaconcha.in/) -- [https://beaconscan.com/](https://beaconscan.com/) -- [https://ethscan.org/](https://ethscan.org/) (fork of beaconcha.in) +- [Etherscan](https://etherscan.io/) - a block explorer you can use to fetch data for Ethereum Mainnet, Ropsten Testnet, Kovan Testnet, Rinkeby Testnet, and Goerli Testnet +- [Etherchain](https://www.etherchain.org/) - a block explorer for the Ethereum Mainnet +- [Ethplorer](https://ethplorer.io/) - a block explorer with a focus on tokens for the Ethereum Mainnet and the Kovan testnet +- [Blockchair](https://blockchair.com/ethereum) - the most private Ethereum explorer. Also for sorting and filtering (mempool) data ## Further reading {#further-reading} @@ -271,7 +238,6 @@ _Know of a community resource that helped you? Edit this page and add it!_ ## Related topics {#related-topics} -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) - [Transactions](/developers/docs/transactions/) - [Accounts](/developers/docs/accounts/) - [Networks](/developers/docs/networks/) diff --git a/src/content/developers/docs/data-and-analytics/index.md b/src/content/developers/docs/data-and-analytics/index.md index 18335fa0eed..83dd3089510 100644 --- a/src/content/developers/docs/data-and-analytics/index.md +++ b/src/content/developers/docs/data-and-analytics/index.md @@ -21,7 +21,7 @@ In terms of architectural fundamentals, understanding what an [API](https://www. Many [Block Explorers](/developers/docs/data-and-analytics/block-explorers/) offer [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) gateways that will provide developers visibility into real-time data on blocks, transactions, miners, accounts, and other on-chain activity. -Developers can then process and transform this data to give their users unique insights and interactions with the [blockchain](/glossary/#blockchain). +Developers can then process and transform this data to give their users unique insights and interactions with the [blockchain](/glossary/#blockchain). For example, [Etherscan](etherscan.io) provides execution and consensus data for every 12s slot. ## The Graph {#the-graph} @@ -29,13 +29,18 @@ The [Graph Network](https://thegraph.com/) is a decentralized indexing protocol Using [GraphQL](https://graphql.org/), developers can query any of the curated open APIs, known as sub-graphs, to acquire the necessary information they need to drive their dapp. By querying these indexed sub-graphs, Reports and dapps not only get performance and scalability benefits but also the built in accuracy provided by network consensus. As new improvements and/or sub-graphs are added to the network, your projects can rapidly iterate to take advantage of these enhancements. +## Client diversity + +[Client diversity](/developers/docs/nodes-and-clients/client-diversity/) is important for the overall health of the Ethereum network because it provides resilience to bugs and exploits. There are now several client diversity dashboards including [clientdiversity.org](https://clientdiversity.org/), [rated.network](rated.network), [pool.invis.cloud](pool.invis.cloud), [slashed.info](slahed.info) and [Ethernodes](https://ethernodes.org/). + ## Dune Analytics {#dune-analytics} -[Dune Analytics](https://dune.com/) pre-processes blockchain data into relational database (PostgreSQL and DatabricksSQL) tables, allows users to query blockchain data using SQL and build dashboards based on query results. On-chain data are organized into 4 raw tables: `blocks`, `transactions`, (event) `logs` and (call) `traces`. Popular contracts and protocols have been decoded, and each has its own set of event and call tables. Those event and call tables are processed further and organized into abstraction tables by the type of protocols, for example, dex, lending, stablecoins, etc. +[Dune Analytics](https://dune.com/) pre-processes blockchain data into relational database (PostgreSQL and DatabricksSQL) tables, allows users to query blockchain data using SQL and build dashboards based on query results. On-chain data are organized into 4 raw tables: `blocks`, `transactions`, (event) `logs` and (call) `traces`. Popular contracts and protocols have been decoded, and each has its own set of event and call tables. Those event and call tables are processed further and organized into abstraction tables by the type of protocols, for example, dex, lending, stablecoins, etc. ## Further Reading {#further-reading} - [Graph Network Overview](https://thegraph.com/docs/en/about/network/) - [Graph Query Playground](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) - [API code examples on EtherScan](https://etherscan.io/apis#contracts) -- [Dune Basics](https://docs.dune.com/#dune-basics) +- [Beaconcha.in Beacon Chain explorer](https://beaconcha.in) +- [Dune Basics](https://docs.dune.com/#dune-basics) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index e42ad79d0ce..8cac676a572 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -3,7 +3,6 @@ title: Development Networks description: An overview of development networks and the tools available to help build Ethereum applications. lang: en sidebar: true -preMergeBanner: true --- When building an Ethereum application with smart contracts, you'll want to run it on a local network to see how it works before deploying it. @@ -20,7 +19,7 @@ Development networks are essentially Ethereum clients (implementations of Ethere **Why not just run a standard Ethereum node locally?** -You _could_ [run a node](/developers/docs/nodes-and-clients/#running-your-own-node) (like Geth, Erigon, or Nethermind) but since development networks are purpose-built for development, they often come packed with convenient features like: +You _could_ [run a node](/developers/docs/nodes-and-clients/#running-your-own-node) but since development networks are purpose-built for development, they often come packed with convenient features like: - Deterministically seeding your local blockchain with data (e.g. accounts with ETH balances) - Instantly mining blocks with each transaction it receives, in order and with no delay @@ -57,9 +56,9 @@ Some consensus clients have built-in tools for spinning up local Beacon chains f - [Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) - [Local testnet using Nimbus](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) -### Public Beacon Test-chains {#public-beacon-testchains} +### Public Ethereum Test-chains {#public-beacon-testchains} -There are also public test implementations of the Beacon Chain. The recommended testnet with long-term support is Goerli (which will merge with the Prater chain in August 2022). The Ropsten Chain was recently merged with its own Beacon Chain and is currently still available for testing consensus client implementations and post-merge application development. +There are also three current public test implementations of Ethereum. The recommended testnet with long-term support is Goerli. Sepolia is also expected to be maintained for the foreseeable future, but the validator set is permissioned meaning there is no general access to new validators on this testnet. The Ropsten chain is expected to be deprecated. - [Goerli Staking Launchpad](https://goerli.launchpad.ethereum.org/) - [Ropsten Staking Launchpad](https://ropsten.launchpad.ethereum.org/) diff --git a/src/content/developers/docs/evm/index.md b/src/content/developers/docs/evm/index.md index e538985bbaf..c852b1f387b 100644 --- a/src/content/developers/docs/evm/index.md +++ b/src/content/developers/docs/evm/index.md @@ -11,7 +11,7 @@ The Ethereum protocol itself exists solely for the purpose of keeping the contin ## Prerequisites {#prerequisites} -Some basic familiarity with common terminology in computer science such as [bytes](https://wikipedia.org/wiki/Byte), [memory](https://wikipedia.org/wiki/Computer_memory), and a [stack]() are necessary to understand the EVM. It would also be helpful to be comfortable with cryptography/blockchain concepts like [hash functions](https://wikipedia.org/wiki/Cryptographic_hash_function), [proof-of-work](https://wikipedia.org/wiki/Proof_of_work) and the [Merkle tree](https://wikipedia.org/wiki/Merkle_tree). +Some basic familiarity with common terminology in computer science such as [bytes](https://wikipedia.org/wiki/Byte), [memory](https://wikipedia.org/wiki/Computer_memory), and a [stack]() are necessary to understand the EVM. It would also be helpful to be comfortable with cryptography/blockchain concepts like [hash functions](https://wikipedia.org/wiki/Cryptographic_hash_function) and the [Merkle tree](https://wikipedia.org/wiki/Merkle_tree). ## From ledger to state machine {#from-ledger-to-state-machine} diff --git a/src/content/developers/docs/evm/opcodes/index.md b/src/content/developers/docs/evm/opcodes/index.md index e3e85c8ff0d..7db031c630f 100644 --- a/src/content/developers/docs/evm/opcodes/index.md +++ b/src/content/developers/docs/evm/opcodes/index.md @@ -16,158 +16,156 @@ Looking for an interactive reference? Check out [evm.codes](https://www.evm.code For operations with dynamic gas costs, see [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md). -## Opcodes {#opcodes} - -| Stack | Name | Gas | Initial Stack | Resulting Stack | Mem / Storage | Notes | -| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------- | :----------------------------- | :---------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| 00 | STOP | 0 | | | | halt execution | -| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | -| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | -| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | -| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | -| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | -| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | -| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | -| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | -| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | -| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | -| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | +| Stack | Name | Gas | Initial Stack | Resulting Stack | Mem / Storage | Notes | +| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------- | :------------------------------------ | :---------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| 00 | STOP | 0 | | | | halt execution | +| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | +| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | +| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | +| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | +| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | +| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | +| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | | 0C-0F | _invalid_ | -| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | -| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | -| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | -| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | -| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | -| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | -| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | -| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | -| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | -| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | -| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | -| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | -| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | -| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | +| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | +| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | +| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | +| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | +| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | +| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | | 1E-1F | _invalid_ | -| 20 | SHA3 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len])` | | keccak256 | +| 20 | SHA3 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len])` | | keccak256 | | 21-2F | _invalid_ | -| 30 | ADDRESS | 2 | `.` | `address(this)` | | address of executing contract | -| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | -| 32 | ORIGIN | 2 | `.` | `tx.origin` | | address that originated the tx | -| 33 | CALLER | 2 | `.` | `msg.sender` | | address of msg sender | -| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg value, in wei | -| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | -| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | length of msg data, in bytes | -| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := msg.data[ost:ost+len | copy msg data | -| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | length of executing contract's code, in bytes | -| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len] := this.code[ost:ost+len] | copy executing contract's bytecode | -| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://github.com/ethereum/EIPs/blob/0341984ff14c8ce398f6d2b3e009c07cd99df8eb/EIPS/eip-1559.md#gasprice) | -| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | -| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := addr.code[ost:ost+len] | copy code from `addr` | -| 3D | RETURNDATASIZE | 2 | `.` | `size` | | size of returned data from last external call, in bytes | -| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := returndata[ost:ost+len] | copy returned data from last external call | -| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | -| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | -| 41 | COINBASE | 2 | `.` | `block.coinbase` | | address of miner of current block | -| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | timestamp of current block | -| 43 | NUMBER | 2 | `.` | `block.number` | | number of current block | -| 44 | DIFFICULTY | 2 | `.` | `block.difficulty` | | difficulty of current block | -| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | gas limit of current block | -| 46 | CHAINID | 2 | `.` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | -| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | balance of executing contract, in wei | -| 48 | BASEFEE | 2 | `.` | `block.basefee` | | base fee of current block | +| 30 | ADDRESS | 2 | `.` | `address(this)` | | address of executing contract | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | +| 32 | ORIGIN | 2 | `.` | `tx.origin` | | address that originated the tx | +| 33 | CALLER | 2 | `.` | `msg.sender` | | address of msg sender | +| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg value, in wei | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | +| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | length of msg data, in bytes | +| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := msg.data[ost:ost+len | copy msg data | +| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | length of executing contract's code, in bytes | +| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len] := this.code[ost:ost+len] | copy executing contract's bytecode | +| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://github.com/ethereum/EIPs/blob/0341984ff14c8ce398f6d2b3e009c07cd99df8eb/EIPS/eip-1559.md#gasprice) | +| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | +| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := addr.code[ost:ost+len] | copy code from `addr` | +| 3D | RETURNDATASIZE | 2 | `.` | `size` | | size of returned data from last external call, in bytes | +| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := returndata[ost:ost+len] | copy returned data from last external call | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | +| 41 | COINBASE | 2 | `.` | `block.coinbase` | | address of miner of current block | +| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | timestamp of current block | +| 43 | NUMBER | 2 | `.` | `block.number` | | number of current block | +| 44 | PREVRANDAO | 2 | `.` | `block.execution_payload.prev_randao` | | output of beacon chain randomness function | +| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | gas limit of current block | +| 46 | CHAINID | 2 | `.` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | +| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | balance of executing contract, in wei | +| 48 | BASEFEE | 2 | `.` | `block.basefee` | | base fee of current block | | 49-4F | _invalid_ | -| 50 | POP | 2 | `_anon` | `.` | | remove item from top of stack and discard it | -| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | -| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | write a word to memory | -| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | write a single byte to memory | -| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | -| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | write word to storage | -| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | -| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ? dst : $pc + 1` | -| 58 | PC | 2 | `.` | `$pc` | | program counter | -| 59 | MSIZE | 2 | `.` | `len(mem)` | | size of memory in current execution context, in bytes | -| 5A | GAS | 2 | `.` | `gasRemaining` | | -| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | +| 50 | POP | 2 | `_anon` | `.` | | remove item from top of stack and discard it | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | +| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | write a word to memory | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | write a single byte to memory | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | write word to storage | +| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | +| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ? dst : $pc + 1` | +| 58 | PC | 2 | `.` | `$pc` | | program counter | +| 59 | MSIZE | 2 | `.` | `len(mem)` | | size of memory in current execution context, in bytes | +| 5A | GAS | 2 | `.` | `gasRemaining` | | +| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | | 5C-5F | _invalid_ | -| 60 | PUSH1 | 3 | `.` | `uint8` | | push 1-byte value onto stack | -| 61 | PUSH2 | 3 | `.` | `uint16` | | push 2-byte value onto stack | -| 62 | PUSH3 | 3 | `.` | `uint24` | | push 3-byte value onto stack | -| 63 | PUSH4 | 3 | `.` | `uint32` | | push 4-byte value onto stack | -| 64 | PUSH5 | 3 | `.` | `uint40` | | push 5-byte value onto stack | -| 65 | PUSH6 | 3 | `.` | `uint48` | | push 6-byte value onto stack | -| 66 | PUSH7 | 3 | `.` | `uint56` | | push 7-byte value onto stack | -| 67 | PUSH8 | 3 | `.` | `uint64` | | push 8-byte value onto stack | -| 68 | PUSH9 | 3 | `.` | `uint72` | | push 9-byte value onto stack | -| 69 | PUSH10 | 3 | `.` | `uint80` | | push 10-byte value onto stack | -| 6A | PUSH11 | 3 | `.` | `uint88` | | push 11-byte value onto stack | -| 6B | PUSH12 | 3 | `.` | `uint96` | | push 12-byte value onto stack | -| 6C | PUSH13 | 3 | `.` | `uint104` | | push 13-byte value onto stack | -| 6D | PUSH14 | 3 | `.` | `uint112` | | push 14-byte value onto stack | -| 6E | PUSH15 | 3 | `.` | `uint120` | | push 15-byte value onto stack | -| 6F | PUSH16 | 3 | `.` | `uint128` | | push 16-byte value onto stack | -| 70 | PUSH17 | 3 | `.` | `uint136` | | push 17-byte value onto stack | -| 71 | PUSH18 | 3 | `.` | `uint144` | | push 18-byte value onto stack | -| 72 | PUSH19 | 3 | `.` | `uint152` | | push 19-byte value onto stack | -| 73 | PUSH20 | 3 | `.` | `uint160` | | push 20-byte value onto stack | -| 74 | PUSH21 | 3 | `.` | `uint168` | | push 21-byte value onto stack | -| 75 | PUSH22 | 3 | `.` | `uint176` | | push 22-byte value onto stack | -| 76 | PUSH23 | 3 | `.` | `uint184` | | push 23-byte value onto stack | -| 77 | PUSH24 | 3 | `.` | `uint192` | | push 24-byte value onto stack | -| 78 | PUSH25 | 3 | `.` | `uint200` | | push 25-byte value onto stack | -| 79 | PUSH26 | 3 | `.` | `uint208` | | push 26-byte value onto stack | -| 7A | PUSH27 | 3 | `.` | `uint216` | | push 27-byte value onto stack | -| 7B | PUSH28 | 3 | `.` | `uint224` | | push 28-byte value onto stack | -| 7C | PUSH29 | 3 | `.` | `uint232` | | push 29-byte value onto stack | -| 7D | PUSH30 | 3 | `.` | `uint240` | | push 30-byte value onto stack | -| 7E | PUSH31 | 3 | `.` | `uint248` | | push 31-byte value onto stack | -| 7F | PUSH32 | 3 | `.` | `uint256` | | push 32-byte value onto stack | -| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | -| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | -| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | -| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | -| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | -| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | -| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | -| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | -| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | -| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | -| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | -| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | -| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | -| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | -| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | -| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | -| 90 | SWAP1 | 3 | `a, b` | `b, a` | | -| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | -| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | -| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | -| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | -| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | -| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | -| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | -| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | -| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | -| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | -| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | -| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | -| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | -| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | -| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | -| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len]) | -| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len], topic0) | -| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1) | -| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2) | -| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2, topic3) | +| 60 | PUSH1 | 3 | `.` | `uint8` | | push 1-byte value onto stack | +| 61 | PUSH2 | 3 | `.` | `uint16` | | push 2-byte value onto stack | +| 62 | PUSH3 | 3 | `.` | `uint24` | | push 3-byte value onto stack | +| 63 | PUSH4 | 3 | `.` | `uint32` | | push 4-byte value onto stack | +| 64 | PUSH5 | 3 | `.` | `uint40` | | push 5-byte value onto stack | +| 65 | PUSH6 | 3 | `.` | `uint48` | | push 6-byte value onto stack | +| 66 | PUSH7 | 3 | `.` | `uint56` | | push 7-byte value onto stack | +| 67 | PUSH8 | 3 | `.` | `uint64` | | push 8-byte value onto stack | +| 68 | PUSH9 | 3 | `.` | `uint72` | | push 9-byte value onto stack | +| 69 | PUSH10 | 3 | `.` | `uint80` | | push 10-byte value onto stack | +| 6A | PUSH11 | 3 | `.` | `uint88` | | push 11-byte value onto stack | +| 6B | PUSH12 | 3 | `.` | `uint96` | | push 12-byte value onto stack | +| 6C | PUSH13 | 3 | `.` | `uint104` | | push 13-byte value onto stack | +| 6D | PUSH14 | 3 | `.` | `uint112` | | push 14-byte value onto stack | +| 6E | PUSH15 | 3 | `.` | `uint120` | | push 15-byte value onto stack | +| 6F | PUSH16 | 3 | `.` | `uint128` | | push 16-byte value onto stack | +| 70 | PUSH17 | 3 | `.` | `uint136` | | push 17-byte value onto stack | +| 71 | PUSH18 | 3 | `.` | `uint144` | | push 18-byte value onto stack | +| 72 | PUSH19 | 3 | `.` | `uint152` | | push 19-byte value onto stack | +| 73 | PUSH20 | 3 | `.` | `uint160` | | push 20-byte value onto stack | +| 74 | PUSH21 | 3 | `.` | `uint168` | | push 21-byte value onto stack | +| 75 | PUSH22 | 3 | `.` | `uint176` | | push 22-byte value onto stack | +| 76 | PUSH23 | 3 | `.` | `uint184` | | push 23-byte value onto stack | +| 77 | PUSH24 | 3 | `.` | `uint192` | | push 24-byte value onto stack | +| 78 | PUSH25 | 3 | `.` | `uint200` | | push 25-byte value onto stack | +| 79 | PUSH26 | 3 | `.` | `uint208` | | push 26-byte value onto stack | +| 7A | PUSH27 | 3 | `.` | `uint216` | | push 27-byte value onto stack | +| 7B | PUSH28 | 3 | `.` | `uint224` | | push 28-byte value onto stack | +| 7C | PUSH29 | 3 | `.` | `uint232` | | push 29-byte value onto stack | +| 7D | PUSH30 | 3 | `.` | `uint240` | | push 30-byte value onto stack | +| 7E | PUSH31 | 3 | `.` | `uint248` | | push 31-byte value onto stack | +| 7F | PUSH32 | 3 | `.` | `uint256` | | push 32-byte value onto stack | +| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | +| 90 | SWAP1 | 3 | `a, b` | `b, a` | | +| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | +| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | +| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | +| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | +| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | +| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | +| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | +| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | +| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | +| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | +| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | +| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | +| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | +| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | +| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | +| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len]) | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len], topic0) | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1) | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2) | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2, topic3) | | A5-EF | _invalid_ | -| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | -| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen] := returndata | -| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | -| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len] | -| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | -| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len]))[12:] | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen] := returndata | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len] | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | +| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len]))[12:] | | F6-F9 | _invalid_ | -| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | | FB-FC | _invalid_ | -| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len]) | -| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | -| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | | destroy contract and sends all funds to `addr` | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len]) | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | | destroy contract and sends all funds to `addr` | diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 94a73a1cdec..3a2cb8f4852 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -3,7 +3,6 @@ title: Gas and fees description: lang: en sidebar: true -preMergeBanner: true --- Gas is essential to the Ethereum network. It is the fuel that allows it to operate, in the same way that a car needs gasoline to run. @@ -33,30 +32,16 @@ In the transaction, the gas limit is 21,000 units, and the gas price is 200 gwei Total fee would have been: `Gas units (limit) * Gas price per unit` i.e `21,000 * 200 = 4,200,000 gwei` or 0.0042 ETH -When Alice sent the money, 1.0042 ETH would be deducted from Alice's account. -Bob would be credited 1.0000 ETH. -Miner would receive 0.0042 ETH. - -This video offers a concise overview of gas and why it exists: - - +Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 10 gwei. Jordan includes a tip of 2 gwei. ## After the London upgrade {#post-london} -[The London Upgrade](/history/#london) was implemented on August 5th, 2021, to make transacting on Ethereum more predictable for users by overhauling Ethereum's transaction-fee-mechanism. The high-level benefits introduced by this change include better transaction fee estimation, generally quicker transaction inclusion, and offsetting the ETH issuance by burning a percentage of transaction fees. - -Starting with the London network upgrade, every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates miners for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. - -Calculating the total transaction fee works as follows: `Gas units (limit) * (Base fee + Tip)` - -Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 100 gwei. Jordan includes a tip of 10 gwei. - -Using the formula above we can calculate this as `21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. +`21,000 * (10 + 2) = 252,000 gwei` or 0.000252 ETH. -When Jordan sends the money, 1.00231 ETH will be deducted from Jordan's account. +When Jordan sends the money, 1.000252 ETH will be deducted from Jordan's account. Taylor will be credited 1.0000 ETH. -Miner receives the tip of 0.00021 ETH. -Base fee of 0.0021 ETH is burned. +Validator receives the tip of 0.000042 ETH. +Base fee of 0.00021 ETH is burned. Additionally, Jordan can also set a max fee (`maxFeePerGas`) for the transaction. The difference between the max fee and the actual fee is refunded to Jordan, i.e. `refund = max fee - (base fee + priority fee)`. Jordan can set a maximum amount to pay for the transaction to execute and not worry about overpaying "beyond" the base fee when the transaction is executed. @@ -163,7 +148,6 @@ If you want to monitor gas prices, so you can send your ETH for less, you can us ## Related tools {#related-tools} -- [Bloxy Gas Analytics](https://stat.bloxy.info/superset/dashboard/gas/?standalone=true) _Ethereum network gas stats_ - [Blocknative's Gas Platform](https://www.blocknative.com/gas) _Gas estimation API powered by Blocknative's global mempool data platform_ ## Further reading {#further-reading} diff --git a/src/content/developers/docs/intro-to-ether/index.md b/src/content/developers/docs/intro-to-ether/index.md index e0d4a255bb2..61f61f91dd5 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -3,7 +3,6 @@ title: Intro to ether description: A developer's introduction to the ether cryptocurrency. lang: en sidebar: true -preMergeBanner: true --- ## Prerequisites {#prerequisites} @@ -34,7 +33,7 @@ It is [common](https://www.reuters.com/article/us-crypto-currencies-lending-insi Minting is the process in which new ether gets created on the Ethereum ledger. The underlying Ethereum protocol creates the new ether, and it is not possible for a user to create ether. -Ether is minted when a new block is created on the Ethereum blockchain. As an incentive to build blocks, the protocol grants a reward in each block, incrementing the balance of an address set by the block producer. The block reward has changed over time, and today it is 2 ETH per block. After the merge issuance to each validator depends upon the amount of ether they have staked and their performance. +Ether is minted as a reward for each block proposed and at every epoch checkpoint for other validator activity related to reaching consensus. The total amount issued depends on the number of validators and how much ether they have staked. This total issuance is divided equally among validators in the ideal case that all validators are honest and online, but in reality, it varies based on validator performance. About 1/8 of the total issuance goes to the block proposer; the remainder is distributed across the other validators. Block proposers also receive tips from transaction fees and MEV-related income, but these come from recycled ether, not new issuance. ## Burning ether {#burning-ether} diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index f067ec4e108..b2b78a530c9 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -3,7 +3,6 @@ title: Intro to Ethereum description: A dapp developer's introduction to the core concepts of Ethereum. lang: en sidebar: true -preMergeBanner: true --- ## What is a blockchain? {#what-is-a-blockchain} @@ -16,15 +15,7 @@ A blockchain is a public database that is updated and shared across many compute Every computer in the network must agree upon each new block and the chain as a whole. These computers are known as "nodes". Nodes ensure everyone interacting with the blockchain has the same data. To accomplish this distributed agreement, blockchains need a consensus mechanism. -Ethereum currently uses a [proof-of-work](/developers/docs/consensus-mechanisms/pow/) consensus mechanism. This means that anyone who wants to add new blocks to the chain must solve a difficult puzzle that requires a lot of computing power. Solving the puzzle "proves" that you have done the "work" by using computational resources. Doing this is known as [mining](/developers/docs/consensus-mechanisms/pow/mining/). Mining is typically brute force trial and error, but successfully adding a block is rewarded in ETH. - -New blocks are broadcast to the nodes in the network, checked and verified, thus updating the state of the blockchain for everyone. - -So to summarize, when you send ETH to someone, the transaction must be added to the block which will get mined. The updated state is then shared with the entire network. - -Watch Austin walk you through blockchains: - - +Ethereum uses a [proof-of-stake-based consensus mechanism](/developers/docs/consensus-mechanisms/pos/). Anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then can be randomly selected to propose blocks that other validators check and add to the blockchain. In this model, there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. If you want to see how blockchain hashes data and then the previous block references all the past blocks, be sure to check out [this demo](https://andersbrownworth.com/blockchain/blockchain) by Anders Brownworth and watch the accompanying video below. @@ -34,6 +25,8 @@ Watch Anders explain hashes in blockchains: ## What is Ethereum? {#what-is-ethereum} +Ethereum is a blockchain with a computer embedded in it. It is the foundation for building apps and organizations in a decentralized, permissionless, censorship-resistant way. + In the Ethereum universe, there is a single, canonical computer (called the Ethereum Virtual Machine, or EVM) whose state everyone on the Ethereum network agrees on. Everyone who participates in the Ethereum network (every Ethereum node) keeps a copy of the state of this computer. Additionally, any participant can broadcast a request for this computer to perform arbitrary computation. Whenever such a request is broadcast, other participants on the network verify, validate, and carry out ("execute") the computation. This execution causes a state change in the EVM, which is committed and propagated throughout the entire network. Requests for computation are called transaction requests; the record of all transactions and the EVM's present state gets stored on the blockchain, which in turn is stored and agreed upon by all nodes. @@ -42,11 +35,13 @@ Cryptographic mechanisms ensure that once transactions are verified as valid and ## What is ether? {#what-is-ether} -**Ether (ETH)** is the native cryptocurrency of Ethereum. The purpose of ether is to allow for a market for computation. Such a market provides an economic incentive for participants to verify and execute transaction requests and provide computational resources to the network. +**Ether (ETH)** is the native cryptocurrency of Ethereum. The purpose of ETH is to allow for a market for computation. Such a market provides an economic incentive for participants to verify and execute transaction requests and provide computational resources to the network. + +Any participant who broadcasts a transaction request must also offer some amount of ETH to the network as a bounty. The network will award this bounty to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. -Any participant who broadcasts a transaction request must also offer some amount of ether to the network as a bounty. This bounty will be awarded to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. +The amount of ETH paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. -The amount of ether paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. +ETH is also used to provide crypto-economic security to the network in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behavior by other validators; 2) It is staked by validators, acting as collateral against dishonest behavior—if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. ## What are smart contracts? {#what-are-smart-contracts} diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 75593704f4a..9357a53c0cc 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -3,26 +3,25 @@ title: Maximal extractable value (MEV) description: An introduction to maximal extractable value (MEV) lang: en sidebar: true -preMergeBanner: true --- Maximal extractable value (MEV) refers to the maximum value that can be extracted from block production in excess of the standard block reward and gas fees by including, excluding, and changing the order of transactions in a block. -### Miner extractable value +### Miner extractable value {#miner-extractable-value} -This concept was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and was initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, after the transition to proof-of-stake via [The Merge](/upgrades/merge) validators will be responsible for these roles, and mining will no longer be applicable. The value extraction methods here will still persist after this transition, and thus the term "miner extractable value" is no longer valid. "Maximal extractable value" is now used as a more inclusive replacement. +Maximal extractable value was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, since the transition to proof-of-stake via [The Merge](/upgrades/merge) validators have been responsible for these roles, and mining is no longer part of the Ethereum protocol. The value extraction methods still exist, though, so the term "Maximal extractable value" is now used instead. ## Prerequisites {#prerequisites} -Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), [gas](/developers/docs/gas/), and [mining](/developers/docs/consensus-mechanisms/pow/mining/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. +Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos) and [gas](/developers/docs/gas/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. ## MEV extraction {#mev-extraction} -In theory MEV accrues entirely to miners/validators because they are the only party that can guarantee the execution of a profitable MEV opportunity. In practice, however, a large portion of MEV is extracted by independent network participants referred to as "searchers." Searchers run complex algorithms on blockchain data to detect profitable MEV opportunities and have bots to automatically submit those profitable transactions to the network. +In theory MEV accrues entirely to validators because they are the only party that can guarantee the execution of a profitable MEV opportunity. In practice, however, a large portion of MEV is extracted by independent network participants referred to as "searchers." Searchers run complex algorithms on blockchain data to detect profitable MEV opportunities and have bots to automatically submit those profitable transactions to the network. -Miners/validators do get a portion of the full MEV amount anyway because searchers are willing to pay high gas fees (which go to the miner/validator) in exchange for higher likelihood of inclusion of their profitable transactions in a block. Assuming searchers are economically rational, the gas fee that a searcher is willing to pay will be an amount up to 100% of the searcher's MEV (because if the gas fee was higher, the searcher would lose money). +Validators do get a portion of the full MEV amount anyway because searchers are willing to pay high gas fees (which go to the validator) in exchange for higher likelihood of inclusion of their profitable transactions in a block. Assuming searchers are economically rational, the gas fee that a searcher is willing to pay will be an amount up to 100% of the searcher's MEV (because if the gas fee was higher, the searcher would lose money). -With that, for some highly competitive MEV opportunities, such as [DEX arbitrage](#mev-examples-dex-arbitrage), searchers may have to pay 90% or even more of their total MEV revenue in gas fees to the miner/validator because so many people want to run the same profitable arbitrage trade. This is because the only way to guarantee that their arbitrage transaction runs is if they submit the transaction with the highest gas price. +With that, for some highly competitive MEV opportunities, such as [DEX arbitrage](#mev-examples-dex-arbitrage), searchers may have to pay 90% or even more of their total MEV revenue in gas fees to the validator because so many people want to run the same profitable arbitrage trade. This is because the only way to guarantee that their arbitrage transaction runs is if they submit the transaction with the highest gas price. ### Gas golfing {#mev-extraction-gas-golfing} @@ -36,9 +35,7 @@ Rather than programming complex algorithms to detect profitable MEV opportunitie ### Flashbots {#mev-extraction-flashbots} -Flashbots is an independent project which extends the go-ethereum client with a service that allows searchers to submit MEV transactions to miners without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. - -As of this writing, a significant portion of MEV transactions is routed through Flashbots, meaning generalized frontrunners aren't as effective as they used to be. +Flashbots is an independent project which extends execution clients with a service that allows searchers to submit MEV transactions to validators without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. ## MEV examples {#mev-examples} @@ -106,7 +103,7 @@ At the application layer, some forms of MEV, like sandwich trading, result in an At the network layer, generalized frontrunners and the gas-price auctions they often engage in (when two or more frontrunners compete for their transaction to be included in the next block by progressively raising their own transactions' gas price) result in network congestion and high gas prices for everyone else trying to run regular transactions. -Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, miners may be incentivized to remine blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. +Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, validators may be incentivized to reorg blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for miners to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. @@ -114,12 +111,13 @@ This possibility of blockchain re-organization has been [previously explored on MEV extraction ballooned in early 2021, resulting in extremely high gas prices in the first few months of the year. The emergence of Flashbots's MEV relay has reduced the effectiveness of generalized frontrunners and has taken gas price auctions off-chain, lowering gas prices for ordinary users. -While many searchers are still making good money from MEV, as opportunities become more well-known and more and more searchers compete for the same opportunity, miners/validators will capture more and more total MEV revenue (because the same sort of gas auctions as originally described above also occur in Flashbots, albeit privately, and miners will capture the resulting gas revenue). MEV is also not unique to Ethereum, and as opportunities become more competitive on Ethereum, searchers are moving to alternate blockchains like Binance Smart Chain, where similar MEV opportunities as those on Ethereum exist with less competition. +While many searchers are still making good money from MEV, as opportunities become more well-known and more and more searchers compete for the same opportunity, validators will capture more and more total MEV revenue (because the same sort of gas auctions as originally described above also occur in Flashbots, albeit privately, and validators will capture the resulting gas revenue). MEV is also not unique to Ethereum, and as opportunities become more competitive on Ethereum, searchers are moving to alternate blockchains like Binance Smart Chain, where similar MEV opportunities as those on Ethereum exist with less competition. -As DeFi grows and increases in popularity, MEV may soon significantly outweigh the base Ethereum block reward. With that comes a growing possibility of selfish block remining and consensus instability. Some consider this to be an existential threat to Ethereum, and disincentivizing selfish mining is an active area of research in Ethereum protocol theory. One solution currently being explored is [MEV reward smoothing](https://ethresear.ch/t/committee-driven-mev-smoothing/10408). +On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing effort to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guaranteed block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user activity is ported away from Ethereum and onto its layer 2 rollups and shards. ## Related resources {#related-resources} +- [Flashbots docs](https://docs.flashbots.net/) - [Flashbots GitHub](https://github.com/flashbots/pm) - [MEV-Explore](https://explore.flashbots.net/) _Dashboard and live transaction explorer for MEV transactions_ diff --git a/src/content/developers/docs/networking-layer/index.md b/src/content/developers/docs/networking-layer/index.md index fac237dba98..04d8c6f5953 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -4,14 +4,13 @@ description: An introduction to Ethereum's networking layer. lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- Ethereum is a peer-to-peer network with thousands of nodes that must be able to communicate with one another using standardized protocols. The "networking layer" is the stack of protocols that allow those nodes to find each other and exchange information. This includes "gossiping" information (one-to-many communication) over the network as well as swapping requests and responses between specific nodes (one-to-one communication). Each node must adhere to specific networking rules to ensure they are sending and receiving the correct information. -After [The Merge](/upgrades/merge/), there will be two parts of client software (execution clients and consensus clients), each with its own distinct networking stack. As well as communicating with other Ethereum nodes, the execution and consensus clients have to communicate with each other. This page gives an introductory explanation of the protocols that enable this communication. +There are two parts to the client software (execution clients and consensus clients), each with its own distinct networking stack. As well as communicating with other Ethereum nodes, the execution and consensus clients have to communicate with each other. This page gives an introductory explanation of the protocols that enable this communication. -**Note that after [The Merge](/upgrades/merge) execution clients will no longer be responsible for gossiping blocks, but they will still gossip transactions over the execution-layer peer-to-peer network. Transactions will be passed to consensus clients via a local RPC connection, where they will be packaged into Beacon blocks. Consensus clients will then gossip Beacon blocks across their p2p network.** +Execution clients gossip transactions over the execution-layer peer-to-peer network. This requires encrypted communication between authenticated peers. When a validator is selected to propose a block, transactions from the node's local transaction pool will be passed to consensus clients via a local RPC connection, which will be packaged into Beacon blocks. Consensus clients will then gossip Beacon blocks across their p2p network. This requires two separate p2p networks: one connecting execution clients for transaction gossip and one connecting consensus clients for block gossip. ## Prerequisites {#prerequisites} @@ -73,7 +72,7 @@ Along with the hello messages, the wire protocol can also send a "disconnect" me #### Wire protocol {#wire-protocol} -Once peers are connected and an RLPx session has been started, the wire protocol defines how peers communicate. There are three main tasks defined by the wire protocol: chain synchronization, block propagation and transaction exchange. Chain synchronization is the process of validating blocks near the head of the chain, checking their proof-of-work data and re-executing their transactions to ensure their root hashes are correct, then cascading back in history via those blocks' parents, grandparents etc until the whole chain has been downloaded and validated. State sync is a faster alternative that only validates block headers. Block propagation is the process of sending and receiving newly mined blocks. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc). +Once peers are connected, and an RLPx session has been started, the wire protocol defines how peers communicate. Initially, the wire protocol defined three main tasks: chain synchronization, block propagation and transaction exchange. However, once Ethereum switched to proof-of-stake, block propagation and chain synchronization became part of the consensus layer. Transaction exchange is still in the remit of the execution clients. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc/). #### les (light ethereum subprotocol) {#les} @@ -91,10 +90,6 @@ The [witness protocol](https://github.com/ethereum/devp2p/blob/master/caps/wit.m Whisper was a protocol that aimed to deliver secure messaging between peers without writing any information to the blockchain. It was part of the DevP2P wire protocol but is now deprecated. Other [related projects](https://wakunetwork.com/) exist with similar aims. -## Execution layer networking after The Merge {#execution-after-merge} - -After the Merge, an Ethereum node will run an execution client and a consensus client. The execution clients will operate similarly to today, but with the proof-of-work consensus and block gossip functionality removed. The EVM, validator deposit contract and selecting/executing transactions from the mempool will still be the domain of the execution client. This means execution clients still need to participate in transaction gossip so that they can manage the transaction mempool. This requires encrypted communication between authenticated peers meaning the networking layer for consensus clients will still be a critical component, including both the discovery protocol and DevP2P layer. Encoding will continue to be predominantly RLP on the execution layer. - ## The consensus layer {#consensus-layer} The consensus clients participate in a separate peer-to-peer network with a different specification. Consensus clients need to participate in block gossip so that they can receive new blocks from peers and broadcast them when it is their turn to be block proposer. Similarly to the execution layer, this first requires a discovery protocol so that a node can find peers and establish secure sessions for exchanging blocks, attestations etc. @@ -125,7 +120,7 @@ SSZ stands for simple serialization. It uses fixed offsets that make it easy to ## Connecting the execution and consensus clients {#connecting-clients} -After the Merge, both consensus and execution clients will run in parallel. They need to be connected together so that the consensus client can provide instructions to the execution client and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. This communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share a ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). +Both consensus and execution clients run in parallel. They need to be connected so that the consensus client can provide instructions to the execution client, and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. The communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share an ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). A summary of the control flow is shown below, with the relevant networking stack in brackets. @@ -153,7 +148,7 @@ Once the block has been attested by sufficient validators it is added to the hea ![](cons_client_net_layer.png) ![](exe_client_net_layer.png) -Network layer schematic for post-merge consensus and execution clients, from [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) +Network layer schematic for consensus and execution clients, from [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) ## Further Reading {#further-reading} diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index a142b319df2..38048d4deb7 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -3,7 +3,6 @@ title: Networks description: An overview of Ethereum's networks and where to get testnet ether (ETH) for testing your application. lang: en sidebar: true -preMergeBanner: true --- Networks are different Ethereum environments you can access for development, testing, or production use cases. Since Ethereum is a protocol, there can be multiple independent "networks" that conform to the protocol without interacting with each other. @@ -30,29 +29,13 @@ In addition to Mainnet, there are public testnets. These are networks used by pr You should test any contract code you write on a testnet before deploying to Mainnet. Among dapps that integrate with existing smart contracts, most projects have copies deployed to testnets. -Most testnets use a proof-of-authority consensus mechanism. This means a small number of nodes are chosen to validate transactions and create new blocks – staking their identity in the process. Testnets do not incentivize proof-of-work mining, which can leave them vulnerable. - -As [The Merge](/upgrades/merge) get closer more of the public proof-of-work and proof-of-authority testnets are becoming proof-of-stake. Swapping their consensus mechanisms acts as rehearsals for the Ethereum Mainnet merge. Ropsten, Sepolia and Goerli are all expected to be proof-of-stake networks by the end of summer 2022, with Goerli being maintained long term. +Most testnets started by using a proof-of-authority consensus mechanism. This means a small number of nodes are chosen to validate transactions and create new blocks – staking their identity in the process. Alternatively, some testnets started off using a proof-of-work consensus mechanism with just a few permissioned miners. However, in preparation for [The Merge](/upgrades/merge), these testnets underwent their own transitions to proof-of-stake, offering the opportunity for multiple 'dress-rehearsals' before developers merged Ethereum Mainnet. The Ethereum testnets are now proof-of-stake, just like Ethereum Mainnet. ETH on testnets has no real value; therefore, there are no markets for testnet ETH. Since you need ETH to actually interact with Ethereum, most people get testnet ETH from faucets. Most faucets are webapps where you can input an address which you request ETH to be sent to. -#### Sepolia {#sepolia} - -A proof-of-work testnet; this means it's the best like-for-like representation of Ethereum. Sepolia is expected to undergo The Merge to proof-of-stake in summer 2022. It is not yet certain whether it will then be maintained long term. - -- [Website](https://sepolia.dev/) -- [GitHub](https://github.com/goerli/sepolia) -- [Otterscan](https://sepolia.otterscan.io/) -- [Etherscan](https://sepolia.etherscan.io) - -##### Sepolia faucets - -- [Sepolia faucet](https://faucet.sepolia.dev/) -- [FaucETH](https://fauceth.komputing.org) - #### Goerli {#goerli} -A proof-of-authority testnet that works across clients; an ideal testnet for application developers. Goerli will be the final testnet merged to proof-of-stake before Ethereum Mainnet is merged. This is expected to happen in summer 2022. Goerli is expected to be maintained long term as a proof-of-stake testnet. +Goerli is a proof-of-stake testnet. It is expected to be maintained long-term as a stable testnet for application developers. Before its testnet merge, Goerli was a proof-of-authority testnet. - [Website](https://goerli.net/) - [GitHub](https://github.com/goerli/testnet) @@ -64,11 +47,25 @@ A proof-of-authority testnet that works across clients; an ideal testnet for app - [Chainlink faucet](https://faucets.chain.link/) - [Alchemy Goerli Faucet](https://goerlifaucet.com/) +#### Sepolia {#sepolia} + +Sepolia is a proof-of-stake testnet. Although Sepolia is still running, it is not currently planned to be maintained long-term. Before undergoing The Merge in June 2022, Sepolia was a proof-of-work testnet. + +- [Website](https://sepolia.dev/) +- [GitHub](https://github.com/goerli/sepolia) +- [Otterscan](https://sepolia.otterscan.io/) +- [Etherscan](https://sepolia.etherscan.io) + +##### Sepolia faucets + +- [Sepolia faucet](https://faucet.sepolia.dev/) +- [FaucETH](https://fauceth.komputing.org) + #### Ropsten _(deprecated)_ {#ropsten} _Note, [the Ropsten testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Goerli._ -Ropsten was a proof-of-work testnet that went through The Merge to proof-of-stake in May 2022. It can be used to test applications on a merged network, but it is not expected to be maintained long term and is likely to deprecated before summer 2023. +Ropsten is a proof-of-stake testnet. Ropsten will be deprecated in late 2022. Before undergoing The Merge in May 2022, Ropsten was a proof-of-work testnet. ##### Ropsten faucets diff --git a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md index 1d067cba391..f26f4e55692 100644 --- a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -4,14 +4,13 @@ description: A high level explanation of the importance of Ethereum client diver lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- The behavior of an Ethereum node is controlled by the client software it runs. There are several production-level Ethereum clients, each one developed and maintained in different languages by separate teams. The clients are built to a common spec that ensures the clients seamlessly communicate with each other and have the same functionality and provide an equivalent user experience. However, at the moment the distribution of clients across nodes is not equal enough to realize this network fortification to its full potential. Ideally, users divide roughly equally across the various clients to bring as much client diversity as possible to the network. ## Prerequisites {#prerequisites} -If you don't already have an understanding of what nodes and clients are, check out [nodes and clients](/developers/docs/nodes-and-clients/). The Beacon Chain is explained [here](/upgrades/beacon-chain/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. +If you don't already understand what nodes and clients are, check out [nodes and clients](/developers/docs/nodes-and-clients/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. ## Why are there multiple clients? {#why-multiple-clients} @@ -31,11 +30,11 @@ Client diversity also offers resilience to attacks. For example, an attack that ### Proof-of-stake finality {#finality} -Ethereum has had 100% uptime since the network began. After The Merge, the risks caused by poor client diversity become more alarming. A critical bug in a consensus client with over 33% of the Ethereum nodes could prevent the Beacon Chain from finalizing, causing Ethereum to go offline. +A bug in a consensus client with over 33% of the Ethereum nodes could prevent the Beacon Chain from finalizing, meaning users could not trust that transactions would not be reverted or changed at some point. This would be very problematic for many of the apps built on top of Ethereum, particularly DeFi. Worse still, a critical bug in a client with a two-thirds majority could cause the chain to incorrectly split and finalize, leading to a large set of validators getting stuck on an invalid chain. If they want to rejoin the correct chain, these validators face slashing or a slow and expensive voluntary withdrawal and reactivation. The magnitude of a slashing scales with the number of culpable nodes with a two-thirds majority slashed maximally (32 ETH). -Although these are unlikely scenarios, the Ethereum eco-system can mitigate their risk by evening out the distribution of clients across the active nodes. Ideally, no consensus client would ever have more than a 33% share of the total nodes. +Although these are unlikely scenarios, the Ethereum eco-system can mitigate their risk by evening out the distribution of clients across the active nodes. Ideally, no consensus client would ever reach a 33% share of the total nodes. ### Shared responsibility {#responsibility} diff --git a/src/content/developers/docs/nodes-and-clients/index.md b/src/content/developers/docs/nodes-and-clients/index.md index b2eb497efce..160ba591f46 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -4,7 +4,6 @@ description: An overview of Ethereum nodes and client software, plus how to set lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- Ethereum is a distributed network of computers (known as nodes) running software that can verify blocks and transaction data. The software application, known as a client, must be run on your computer to turn it into an Ethereum node. diff --git a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index eadf1f69cca..6eaf764fb86 100644 --- a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -4,19 +4,24 @@ description: An entry-level overview of node services, the pros and cons, and po lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- ## Introduction {#Introduction} Running your own [Ethereum node](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) can be challenging, especially when getting started or while scaling fast. There are a [number of services](#popular-node-services) that run optimized node infrastructures for you, so you can focus on developing your application or product instead. We'll explain how node services work, the pros and cons for using them and list providers if you are interested in getting started. -**Note: it has been common for users to run consensus clients locally and use a node-as-a-service provider in place of a local execution client. This will not be possible at The Merge - users will be required to run BOTH clients locally. Users relying on node-as-a-service providers for their consensus clients will not merge correctly and will not be able to follow the Ethereum chain. Now is the time to install a local execution client!** - ## Prerequisites {#prerequisites} If you don't already have an understanding of what nodes and clients are, check out [Nodes and clients](/developers/docs/nodes-and-clients/). +## Stakers {#stakoooooooooooooors} + +Solo stakers must run their own infrastructure rather than relying on third-party providers. This means running an execution client coupled with a consensus client. Before [The Merge](/upgrades/merge), it was possible to run a consensus client only and use a centralized provider for execution data; this is no longer possible - a solo staker must run both clients. However, there are services available to ease this process. + +[Read more on running a node](/developers/docs/nodes-and-clients/run-a-node/). + +The services described on this page are for non-staking nodes. + ## How do node services work? {#how-do-node-services-work} Node service providers run distributed node clients behind the scenes for you, so you don't have to. diff --git a/src/content/developers/docs/nodes-and-clients/run-a-node/index.md b/src/content/developers/docs/nodes-and-clients/run-a-node/index.md index c79e334dd8e..018d863cb12 100644 --- a/src/content/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/src/content/developers/docs/nodes-and-clients/run-a-node/index.md @@ -4,7 +4,6 @@ description: General introduction to running your own instance of an Ethereum cl lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- Running your own node provides you various benefits, opens new possibilities, and helps to support the ecosystem. This page will guide you through spinning up your own node and taking part in validating Ethereum transactions. @@ -461,6 +460,7 @@ As part of your monitoring, make sure to keep an eye on your machine's performan - [Guide | How to setup a validator for Ethereum staking on mainnet](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew, updated regularly_ - [ETHStaker guides on running validators on testnets](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, updated regularly_ +- [Ethereum Staking Guides](https://github.com/SomerEsat/ethereum-staking-guides) _– Somer Esat, updated regularly_ - [The Merge FAQ for node operators](https://notes.ethereum.org/@launchpad/node-faq-merge) - _July 2022_ - [Analyzing the hardware requirements to be an Ethereum full validated node](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 September 2018_ - [Running Ethereum Full Nodes: A Guide for the Barely Motivated](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 November 2019_ diff --git a/src/content/developers/docs/smart-contracts/index.md b/src/content/developers/docs/smart-contracts/index.md index 786c5605758..0faf705ac79 100644 --- a/src/content/developers/docs/smart-contracts/index.md +++ b/src/content/developers/docs/smart-contracts/index.md @@ -9,7 +9,7 @@ sidebar: true A "smart contract" is simply a program that runs on the Ethereum blockchain. It's a collection of code (its functions) and data (its state) that resides at a specific address on the Ethereum blockchain. -Smart contracts are a type of [Ethereum account](/developers/docs/accounts/). This means they have a balance and they can send transactions over the network. However they're not controlled by a user, instead they are deployed to the network and run as programmed. User accounts can then interact with a smart contract by submitting transactions that execute a function defined on the smart contract. Smart contracts can define rules, like a regular contract, and automatically enforce them via the code. Smart contracts cannot be deleted by default, and interactions with them are irreversible. +Smart contracts are a type of [Ethereum account](/developers/docs/accounts/). This means they have a balance and can be the target of transactions. However they're not controlled by a user, instead they are deployed to the network and run as programmed. User accounts can then interact with a smart contract by submitting transactions that execute a function defined on the smart contract. Smart contracts can define rules, like a regular contract, and automatically enforce them via the code. Smart contracts cannot be deleted by default, and interactions with them are irreversible. ## Prerequisites {#prerequisites} diff --git a/src/content/developers/docs/storage/index.md b/src/content/developers/docs/storage/index.md index bd03af39154..5429b93dac9 100644 --- a/src/content/developers/docs/storage/index.md +++ b/src/content/developers/docs/storage/index.md @@ -28,7 +28,7 @@ This is known as **blockchain-based** persistence. The issue with blockchain-based persistence is that the chain could get far too big to upkeep and store all the data feasibly (e.g. [many sources](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/) estimate the Internet to require over 40 Zetabytes of storage capacity). -The blockchain must also have some type of incentive structure. For blockchain-based persistence, there is a payment made to the miner. When the data is added to the chain, the nodes are paid to add the data on. +The blockchain must also have some type of incentive structure. For blockchain-based persistence, there is a payment made to the validator. When the data is added to the chain, the validators are paid to add the data on. Platforms with blockchain-based persistence: @@ -89,15 +89,14 @@ Decentralized tools without KYC: Most of these tools have their own version of a [consensus mechanism](/developers/docs/consensus-mechanisms/) but generally they are based on either [**proof-of-work (PoW)**](/developers/docs/consensus-mechanisms/pow/) or [**proof-of-stake (PoS)**](/developers/docs/consensus-mechanisms/pos/). -PoW based: +Proof-of-work based: - Skynet - Arweave -- Ethereum -PoS based: +Proof-of-stake based: -- [The Beacon Chain](/upgrades/beacon-chain/) +- Ethereum - Filecoin - 0Chain diff --git a/src/content/developers/docs/transactions/index.md b/src/content/developers/docs/transactions/index.md index 27c7d73cfff..02c25504746 100644 --- a/src/content/developers/docs/transactions/index.md +++ b/src/content/developers/docs/transactions/index.md @@ -3,7 +3,6 @@ title: Transactions description: An overview of Ethereum transactions – how they work, their data structure, and how to send them via an application. lang: en sidebar: true -preMergeBanner: true --- Transactions are cryptographically signed instructions from accounts. An account will initiate a transaction to update the state of the Ethereum network. The simplest transaction is transferring ETH from one account to another. @@ -19,21 +18,22 @@ An Ethereum transaction refers to an action initiated by an externally-owned acc ![Diagram showing a transaction cause state change](./tx.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ -Transactions, which change the state of the EVM, need to be broadcast to the whole network. Any node can broadcast a request for a transaction to be executed on the EVM; after this happens, a miner will execute the transaction and propagate the resulting state change to the rest of the network. +Transactions, which change the state of the EVM, need to be broadcast to the whole network. Any node can broadcast a request for a transaction to be executed on the EVM; after this happens, a validator will execute the transaction and propagate the resulting state change to the rest of the network. -Transactions require a fee and must be mined to become valid. To make this overview simpler we'll cover gas fees and mining elsewhere. +Transactions require a fee and must be included in a validated block. To make this overview simpler we'll cover gas fees and validation elsewhere. A submitted transaction includes the following information: - `recipient` – the receiving address (if an externally-owned account, the transaction will transfer value. If a contract account, the transaction will execute the contract code) - `signature` – the identifier of the sender. This is generated when the sender's private key signs the transaction and confirms the sender has authorized this transaction +- `nonce` - a sequencially incrementing counter which indicate the transaction number from the account - `value` – amount of ETH to transfer from sender to recipient (in WEI, a denomination of ETH) - `data` – optional field to include arbitrary data - `gasLimit` – the maximum amount of gas units that can be consumed by the transaction. Units of gas represent computational steps -- `maxPriorityFeePerGas` - the maximum amount of gas to be included as a tip to the miner +- `maxPriorityFeePerGas` - the maximum amount of gas to be included as a tip to the validator - `maxFeePerGas` - the maximum amount of gas willing to be paid for the transaction (inclusive of `baseFeePerGas` and `maxPriorityFeePerGas`) -Gas is a reference to the computation required to process the transaction by a miner. Users have to pay a fee for this computation. The `gasLimit`, and `maxPriorityFeePerGas` determine the maximum transaction fee paid to the miner. [More on Gas](/developers/docs/gas/). +Gas is a reference to the computation required to process the transaction by a validator. Users have to pay a fee for this computation. The `gasLimit`, and `maxPriorityFeePerGas` determine the maximum transaction fee paid to the validator. [More on Gas](/developers/docs/gas/). The transaction object will look a little like this: @@ -158,7 +158,7 @@ Alice's account will be credited **+1.0 ETH** The base fee will be burned **-0.00399 ETH** -Miner keeps the tip **+0.000210 ETH** +Validator keeps the tip **+0.000210 ETH** Gas is required for any smart contract interaction too. @@ -174,11 +174,10 @@ Once the transaction has been submitted the following happens: 1. Once you send a transaction, cryptography generates a transaction hash: `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` 2. The transaction is then broadcast to the network and included in a pool with lots of other transactions. -3. A miner must pick your transaction and include it in a block in order to verify the transaction and consider it "successful". - - You may end up waiting at this stage if the network is busy and miners aren't able to keep up. -4. Your transaction will receive "confirmations". The number of confirmations is the number of blocks created since the block that included your transaction. The higher the number, the greater the certainty that the network processed and recognized the transaction. - - Recent blocks may get re-organized, giving the impression the transaction was unsuccessful; however, the transaction may still be valid but included in a different block. - - The probability of a re-organization diminishes with every subsequent block mined, i.e. the greater the number of confirmations, the more immutable the transaction is. +3. A validator must pick your transaction and include it in a block in order to verify the transaction and consider it "successful". +4. As time passes the block containing your transaction will be upgraded to "justified" then "finalized". These upgrades make it much + more certain that your transaction was successful and will never be altered. Once a block is "finalized" it could only ever be changed + by an attack that would cost many billions of dollars. ## A visual demo {#a-visual-demo} @@ -216,4 +215,3 @@ _Know of a community resource that helped you? Edit this page and add it!_ - [Accounts](/developers/docs/accounts/) - [Ethereum virtual machine (EVM)](/developers/docs/evm/) - [Gas](/developers/docs/gas/) -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) diff --git a/src/content/developers/docs/web2-vs-web3/index.md b/src/content/developers/docs/web2-vs-web3/index.md index 9e8fd683ad9..8bf58912ccb 100644 --- a/src/content/developers/docs/web2-vs-web3/index.md +++ b/src/content/developers/docs/web2-vs-web3/index.md @@ -32,7 +32,7 @@ This doesn't mean that all services need to be turned into a dapp. These example Web3 has some limitations right now: -- Scalability – transactions are slower on web3 because they're decentralized. Changes to state, like a payment, need to be processed by a miner and propagated throughout the network. +- Scalability – transactions are slower on web3 because they're decentralized. Changes to state, like a payment, need to be processed by a node and propagated throughout the network. - UX – interacting with web3 applications can require extra steps, software, and education. This can be a hurdle to adoption. - Accessibility – the lack of integration in modern web browsers makes web3 less accessible to most users. - Cost – most successful dapps put very small portions of their code on the blockchain as it's expensive. diff --git a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index 969e69dc971..6e70d0f12b7 100644 --- a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -34,7 +34,6 @@ There are many ways to describe Ethereum, but at its heart is a blockchain. Bloc "number": 1234567, "hash": "0xabc123...", "parentHash": "0xdef456...", - "miner": "0xa1b2c3...", ..., "transactions": [...] } @@ -58,7 +57,7 @@ This new decentralized tech stack has spawned new developer tools. Such tools ex Python developers that want to interact with Ethereum are likely to reach for [Web3.py](https://web3py.readthedocs.io/). Web3.py is a library that greatly simplifies the way you connect to an Ethereum node, then send and receive data from it. - + [Ethereum clients](/developers/docs/nodes-and-clients/) can be configured to be reachable by [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP, or Websockets, so Web3.py will need to mirror this configuration. Web3.py refers to these connection options as **providers**. You’ll want to choose one of the three providers to link the Web3.py instance with your node. @@ -236,13 +235,13 @@ Out[9]: AttributeDict({ A lot of information gets returned about a block, but just a couple things to point out here: -- The block number is zero — no matter how long ago you configured the tester provider. Unlike the real Ethereum network, which mines a new block roughly every 15 seconds, this simulation will wait until you give it some work to do. +- The block number is zero — no matter how long ago you configured the tester provider. Unlike the real Ethereum network, which adds a new block every 12 seconds, this simulation will wait until you give it some work to do. - `transactions` is an empty list, for the same reason: we haven’t done anything yet. This first block is an **empty block**, just to kick off the chain. - Notice that the `parentHash` is just a bunch of empty bytes. This signifies that it's the first block in the chain, also known as the **genesis block**. ## Tour stop #3: [transactions](/developers/docs/transactions/) {#tour-stop-3-transactions} -We’re stuck at block zero until there’s a transaction to mine, so let’s give it one. Send a few test ether from one account to another: +We’re stuck at block zero until there’s a pending transaction, so let’s give it one. Send a few test ether from one account to another: ```python In [10]: tx_hash = w3.eth.send_transaction({ @@ -253,11 +252,11 @@ In [10]: tx_hash = w3.eth.send_transaction({ }) ``` -This is typically the point where you’d wait for several seconds for your transaction to get mined into a new block. The full process goes something like this: +This is typically the point where you’d wait for several seconds for your transaction to get included in a new block. The full process goes something like this: -1. Submit a transaction and hold on to the transaction hash. Until it gets mined, the transaction is “pending.” +1. Submit a transaction and hold on to the transaction hash. Until the block containing the transaction is created and broadcast, the transaction is “pending.” `tx_hash = w3.eth.send_transaction({ … })` -2. Wait for the transaction to be mined: +2. Wait for the transaction to be included in a block: `w3.eth.wait_for_transaction_receipt(tx_hash)` 3. Continue application logic. To view the successful transaction: `w3.eth.get_transaction(tx_hash)` diff --git a/src/content/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md b/src/content/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md index 0e477e12fc2..f01a88ce4a1 100644 --- a/src/content/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md +++ b/src/content/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md @@ -19,7 +19,7 @@ On [November 22, 2016](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spuri This limit was introduced to prevent denial-of-service (DOS) attacks. Any call to a contract is relatively cheap gas-wise. However, the impact of a contract call for Ethereum nodes increases disproportionately depending on the called contract code's size (reading the code from disk, pre-processing the code, adding data to the Merkle proof). Whenever you have such a situation where the attacker requires few resources to cause a lot of work for others, you get the potential for DOS attacks. -Originally this was less of a problem, because one natural contract size limit is the block gas limit. Obviously a contract needs to be deployed within a transaction that holds all of the contract's bytecode. If you then include only that one transaction into a block, you can use up all of that gas, but it's not infinite. The issue in that case though is that the block gas limit changes over time and is in theory unbounded. At the time of the EIP-170 the block gas limit was only 4.7 million. Now the block gas limit just [increased again](https://etherscan.io/chart/gaslimit) last month to 11.9 million. +Originally this was less of a problem because one natural contract size limit is the block gas limit. Obviously, a contract must be deployed within a transaction that holds all of the contract's bytecode. If you include only that one transaction into a block, you can use up all that gas, but it's not infinite. Since the [London Upgrade](/history/#london), the block gas limit has been able to vary between 15M and 30M units depending on network demand. ## Taking on the fight {#taking-on-the-fight} @@ -146,9 +146,3 @@ function doSomething() { checkStuff(); } ``` Those tips should help you to significantly reduce the contract size. Once again, I cannot stress enough, always focus on splitting contracts if possible for the biggest impact. - -## The future for the contract size limits {#the-future-for-the-contract-size-limits} - -There is an [open proposal](https://github.com/ethereum/EIPs/issues/1662) to remove the contract size limit. The idea is basically to make contract calls more expensive for large contracts. It wouldn't be too difficult to implement, has a simple backwards compatibility (put all previously deployed contracts in the cheapest category), but [not everyone is convinced](https://ethereum-magicians.org/t/removing-or-increasing-the-contract-size-limit/3045/24). - -Only time will tell if those limits will change in the future, the reactions (see image on the right) definitely show a clear requirement for us developers. Unfortunately, it is not something you can expect any time soon. diff --git a/src/content/developers/tutorials/erc20-with-safety-rails/icon-clone.png b/src/content/developers/tutorials/erc20-with-safety-rails/icon-clone.png new file mode 100644 index 00000000000..7252bbbc573 Binary files /dev/null and b/src/content/developers/tutorials/erc20-with-safety-rails/icon-clone.png differ diff --git a/src/content/developers/tutorials/erc20-with-safety-rails/index.md b/src/content/developers/tutorials/erc20-with-safety-rails/index.md new file mode 100644 index 00000000000..3fbd413da11 --- /dev/null +++ b/src/content/developers/tutorials/erc20-with-safety-rails/index.md @@ -0,0 +1,213 @@ +--- +title: ERC-20 with Safety Rails +description: How to help people avoid silly mistakes +author: Ori Pomerantz +lang: en +sidebar: true +tags: ["erc-20"] +skill: beginner +published: 2022-08-15 +--- + +## Introduction {#introduction} + +One of the great things about Ethereum is that there is no central authority that can modify or undo your transactions. One of the great problems with Ethereum is that ther is no central authority with the power to undo user mistakes or illicit transactions. In this article you learn about some of the common mistakes that users commit with [ERC-20](/developers/docs/standards/tokens/erc-20/) tokens, as well as how to create ERC-20 contracts that help users to avoid those mistakes, or that give a central authority some power (for example to freeze accounts). + +Note that while we will use the [OpenZeppelin ERC-20 token contract](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20), this article does not explain it in great details. You can find this information [here](/developers/tutorials/erc20-annotated-code). + +If you want to see the complete source code: + +1. Open the [Remix IDE](https://remix.ethereum.org/). +2. Click the clone github icon (![clone github icon](icon-clone.png)). +3. Clone the github repository `https://github.com/qbzzt/20220815-erc20-safety-rails`. +4. Open **contracts > erc20-safety-rails.sol**. + +## Creating an ERC-20 contract {#creating-an-erc-20-contract} + +Before we can add the safety rail functionality we need an ERC-20 contract. In this article we'll use [the OpenZeppelin Contracts Wizard](https://docs.openzeppelin.com/contracts/4.x/wizard). Open it in another browser and follow these instructions: + +1. Select **ERC20**. +2. Enter these settings: + + | Parameter | Value | + | -------------- | ---------------- | + | Name | SafetyRailsToken | + | Symbol | SAFE | + | Premint | 1000 | + | Features | None | + | Access Control | Ownable | + | Upgradability | None | + +3. Scroll up and click **Open in Remix** (for Remix) or **Download** to use a different environment. I'm going to assume you're using Remix, if you use something else just make the appropriate changes. +4. We now have a fully functional ERC-20 contract. You can expand `.deps` > `npm` to see the imported code. +5. Compile, deploy, and play with the contract to see that it functions as an ERC-20 contract. If you need to learn how to use Remix, [use this tutorial](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth). + +## Common mistakes {#common-mistakes} + +### The mistakes {#the-mistakes} + +Users sometimes send tokens to the wrong address. While we cannot read their minds to know what they meant to do, there are two error types that happen a lot and are easy to detect: + +1. Sending the tokens to the contract's own address. For example, [Optimism's OP token](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c) managed to accumulate [over 120,000](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042#tokentxns) OP tokens in less than two months. This represents a significant amount of wealth that presumably people just lost. + +2. Sending the tokens to an empty address, one that doesn't correspond to an [externally owned account](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) or a [smart contract](/developers/docs/smart-contracts). While I don't have statistics on how often this happens, [one incident could have cost 20,000,000 tokens](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595). + +### Preventing transfers {#preventing-transfers} + +The OpenZeppelin ERC-20 contract includes [a hook, `_beforeTokenTransfer`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L364-L368), that is called before a token is transferred. By default this hook does not do anything, but we can hang our own functionality on it, such as checks that revert if there's a problem. + +To use the hook, add this function after the constructor: + +```solidity + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal virtual + override(ERC20) + { + super._beforeTokenTransfer(from, to, amount); + } +``` + +Some parts of this function may be new if you aren't very familiar with Solidity: + +```solidity + internal virtual +``` + +The `virtual` keyword means that just as we inherited functionality from `ERC20` and overrode this function, other contracts can inherit from us and override this function. + +```solidity + override(ERC20) +``` + +We have to specify explicitly that we're [overriding](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) the ERC20 token definition of `_beforeTokenTransfer`. In general, explicit definitions are a lot better, from the security standpoint, than implicit ones - you cannot forget that you've done something if it's right in front of you. That is also the reason we need to specify which superclass's `_beforeTokenTransfer` we are overriding. + +```solidity + super._beforeTokenTransfer(from, to, amount); +``` + +This line calls the `_beforeTokenTransfer` function of the contract or contracts from which we inherited which have it. In this case, that is only `ERC20`, `Ownable` does not have this hook. Even though currently `ERC20._beforeTokenTransfer` doesn't do anything, we call it in case functionality is added in the future (and we then decide to redeploy the contract, because contracts don't change after deployment). + +### Coding the requirements {#coding-the-requirements} + +We want to add these requirements to the function: + +- The `to` address cannot equal `address(this)`, the address of the ERC-20 contract itself. +- The `to` address cannot be empty, it has to be either: + - An externally owned accounts (EOA). We can't check if an address is an EOA directly, but we can check an address's ETH balance. EOAs almost always have a balance, even if they are no longer used - it's difficult to clear them to the last wei. + - A smart contract. Testing if an address is a smart contract is a bit harder. There is an opcode that checks the external code length, called [`EXTCODESIZE`](https://www.evm.codes/#3b), but it is not available directly in Solidity. We have to use [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html), which is EVM assembly, for it. There are other values we could use from Solidity ([`
.code` and `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)), but they cost more. + +Lets go over the new code line by line: + +```solidity + require(to != address(this), "Can't send tokens to the contract address"); +``` + +This is the first requirement, check that `to` and `this(address)` are not the same thing. + +```solidity + bool isToContract; + assembly { + isToContract := gt(extcodesize(to), 0) + } +``` + +This is how we check if an address is a contract. We cannot receive output directly from Yul, so instead we define a variable to hold the result (`isToContract` in this case). The way Yul works is that every opcode is considered a function. So first we call [`EXTCODESIZE`](https://www.evm.codes/#3b) to get the contract size, and then use [`GT`](https://www.evm.codes/#11) to check it is not zero (we are dealing with unsigned integers, so of course it can't be negative). We then write the result to `isToContract`. + +```solidity + require(to.balance != 0 || isToContract, "Can't send tokens to an empty address"); +``` + +And finally, we have the actual check for empty addresses. + +## Administrative access {#admin-access} + +Sometimes it is useful to have an administrator that can undo mistakes. To reduce the potential for abuse, this administrator can be a [multisig](https://blog.logrocket.com/security-choices-multi-signature-wallets/) so multiple people have to agree on an action. In this article we'll have two administrative features: + +1. Freezing and unfreezing accounts. This can be useful, for example, when an account might be compromised. +2. Asset cleanup. + + Sometimes frauds send fraudulant tokens to the real token's contract to gain legitimacy. For example, [see here](https://optimistic.etherscan.io/token/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe?a=0x4200000000000000000000000000000000000042). The legitimate ERC-20 contract is [0x4200....0042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042). The scam that pretends to be it is [0x234....bbe](https://optimistic.etherscan.io/address/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe). + + It is also possible that people send legitimate ERC-20 tokens to our contract by mistake, which is anotehr reason to want to have a way to get them out. + +OpenZeppelin provides two mechanisms to enable administrative access: + +- [`Ownable`](https://docs.openzeppelin.com/contracts/4.x/access-control#ownership-and-ownable) contracts have a single owner. Functions that have the `onlyOwner` [modifier](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) can only be called by that owner. Owners can transfer ownership to somebody else or renounce it completely. The rights of all other accounts are typically identical. +- [`AccessControl`](https://docs.openzeppelin.com/contracts/4.x/access-control#role-based-access-control) contracts have [role based access control (RBAC)](https://en.wikipedia.org/wiki/Role-based_access_control). + +For the sake of simplicity, in this article we use `Ownable`. + +### Freezing and thawing contracts {#freezing-and-thawing-contracts} + +Freezing and thawing contracts requires several changes: + +- A [mapping](https://www.tutorialspoint.com/solidity/solidity_mappings.htm) from addresses to [booleans](https://en.wikipedia.org/wiki/Boolean_data_type) to keep track of which addresses are frozen. All values are initially zero, which for boolean values is interpreted as false. This is what we want because by default accounts are not frozen. + + ```solidity + mapping(address => bool) public frozenAccounts; + ``` + +- [Events](https://www.tutorialspoint.com/solidity/solidity_events.htm) to inform anybody interested when an account is frozen or thawed. Technically speaking events are not required for these actions, but it helps off chain code to be able to listen to these events and know what is happening. It's considered good manners for a smart contract to emit them when something that miught be relevant to somebody else happens. + + The events are indexed so will be possible to search for all the times an account has been frozen or thawed. + + ```solidity + // When accounts are frozen or unfrozen + event AccountFrozen(address indexed _addr); + event AccountThawed(address indexed _addr); + ``` + +- Functions for freezing and thawing accounts. These two functions are nearly identical, so we'll only go over the freeze function. + + ```solidity + function freezeAccount(address addr) + public + onlyOwner + ``` + + Functions marked [`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) can be called from other smart contracts or directly by a transaction. + + ```solidity + { + require(!frozenAccounts[addr], "Account already frozen"); + frozenAccounts[addr] = true; + emit AccountFrozen(addr); + } // freezeAccount + ``` + + If the account is already frozen, revert. Otherwise, freeze it and `emit` an event. + +- Change `_beforeTokenTransfer` to prevent money being moved from a frozen account. Note that money can still be transferred into the frozen account. + + ```solidity + require(!frozenAccounts[from], "The account is frozen"); + ``` + +### Asset cleanup {#asset-cleanup} + +To release ERC-20 tokens held by this contract we need to call a function on the token contract to which they belong, either [`transfer`](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer) or [`approve`](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve). There's no point wasting gas in this case on allowances, we might as well transfer directly. + +```solidity + function cleanupERC20( + address erc20, + address dest + ) + public + onlyOwner + { + IERC20 token = IERC20(erc20); +``` + +This is the syntax to create an object for a contract when we receive the address. We can do this because we have the definition for ERC20 tokens as part of the source code (see line 4), and that file includes [the definition for IERC20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol), the interface for an OpenZeppelin ERC-20 contract. + +```solidity + uint balance = token.balanceOf(address(this)); + token.transfer(dest, balance); + } +``` + +This is a cleanup function, so presumably we don't want to leave any tokens. Instead of getting the balance from the user manually, we might as well automate the process. + +## Conclusion {#conclusion} + +This is not a perfect solution, there is no perfect solution to the "user made a mistake" problem. However, using this kind of check can at least prevent some mistakes. The ability to freeze accounts, while dangerous, can be used to limit the damage of certain hacks by denying the hacker the stolen funds. diff --git a/src/content/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/src/content/developers/tutorials/hello-world-smart-contract-fullstack/index.md index 9d6786ff9a7..d59d04e4feb 100644 --- a/src/content/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/src/content/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -20,6 +20,7 @@ skill: beginner lang: en sidebar: true published: 2021-10-25 +postMergeBannerTranslation: page-upgrades-post-merge-banner-tutorial-ood --- This guide is for you if you are new to blockchain development and don't know where to start or how to deploy and interact with smart contracts. We will walk through creating and deploying a simple, smart contract on the Ropsten test network using [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org), and [Alchemy](https://alchemyapi.io/eth). diff --git a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index 6bc24ff3ad0..690c73852e4 100644 --- a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -73,13 +73,13 @@ This will yield the same information as provided on Etherscan's transaction page #### Etherscan {#etherscan} -![etherscan_view](./etherscan_view.png) +![](./etherscan_view.png) [EF's contract page on Etherscan.](https://etherscan.io/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) #### Dune Analytics {#dune-analytics} -![dune_view](./dune_view.png) +![](./dune_view.png) You can find dashboard [here](https://duneanalytics.com/paulapivat/Learn-Ethereum). Click on the table to see the query (also see above). @@ -91,8 +91,9 @@ A submitted transaction includes several pieces of information including ([sourc - **Signature**: While a sender's private keys signs a transaction, what we can query with SQL is a sender's public address ("from"). - **Value**: This is the amount of ETH transferred (see `ether` column). - **Data**: This is arbitrary data that's been hashed (see `data` column) -- **gasLimit**: The maximum amount of gas, or the cost of computation, that can be consumed by a transaction (see `gas_limit`). -- **gasPrice**: The fee the sender pays to sign a transaction to the blockchain. Gas is denominated in Gwei which is 0.000000001 ETH (nine decimal places). +- **gasLimit** – the maximum amount of gas units that can be consumed by the transaction. Units of gas represent computational steps +- **maxPriorityFeePerGas** - the maximum amount of gas to be included as a tip to the miner +- **maxFeePerGas** - the maximum amount of gas willing to be paid for the transaction (inclusive of baseFeePerGas and maxPriorityFeePerGas) We can query these specific pieces of information for transactions to the Ethereum Foundation public address: @@ -127,7 +128,6 @@ Here is the [query](https://duneanalytics.com/queries/44856/88292) on Dune Analy SELECT time, number, - difficulty, hash, parent_hash, nonce @@ -157,7 +157,7 @@ ORDER BY block_time DESC` Here's the SQL output on Dune: -![list_of_txn](./list_of_txn.png) +![](./list_of_txn.png) This single block being added to the chain changes the state of the Ethereum virtual machine ([EVM](/developers/docs/evm/)). Dozens sometimes, hundreds of transactions are verified at once. In this specific case, 222 transactions were included. @@ -176,19 +176,19 @@ FROM temp_table For block 12396854, out of 222 total transactions, 204 were successfully verified: -![successful_txn](./successful_txn.png) +![](./successful_txn.png) Transactions requests occur dozens of times per second, but blocks are committed approximately once every 15 seconds ([source](/developers/docs/blocks/)). -To see that there is one block produced approximately every 15 seconds, we could take the number of seconds in a day (86400) divided by 15 to get an _estimate_ average number of blocks per day (~ 5760). +To see that there is one block produced approximately every 15 seconds, we could take the number of seconds in a day (86400) divided by 15 to get an estimated average number of blocks per day (~ 5760). The chart for Ethereum blocks produced per day (2016 - present) is: -![daily_blocks](./daily_blocks.png) +![](./daily_blocks.png) The average number of blocks produced daily over this time period is ~5,874: -![avg_daily_blocks](./avg_daily_blocks.png) +![](./avg_daily_blocks.png) The queries are: @@ -221,11 +221,11 @@ The average number of blocks produced per day since 2016 is slightly above that ### Gas {#gas} -Blocks are bounded in size. Each block has a gas limit which is collectively set by miners and the network to prevent arbitrarily large block size to be less of a strain on full node in terms of disk space and speed requirements ([source](/developers/docs/blocks/)). +Blocks are bounded in size. The maximum block size is dynamic and varies according to network demand between 12,500,000 and 25,000,000 units. Limits are required to prevent arbitrarily large block sizes putting strain on full nodes in terms of disk space and speed requirements ([source](/developers/docs/blocks/)). One way to conceptualize block gas limit is to think of it as the **supply** of available block space in which to batch transactions. The block gas limit can be queried and visualized from 2016 to present day: -![avg_gas_limit](./avg_gas_limit.png) +![](./avg_gas_limit.png) ```sql SELECT @@ -238,7 +238,7 @@ OFFSET 1 Then there is the actual gas used daily to pay for computing done on the Ethereum chain (i.e., sending transaction, calling a smart contract, minting an NFT). This is the **demand** for available Ethereum block space: -![daily_gas_used](./daily_gas_used.png) +![](./daily_gas_used.png) ```sql SELECT @@ -257,9 +257,9 @@ Therefore we can understand gas prices as a function of demand for Ethereum bloc Finally, we may want to query average daily gas prices for the Ethereum chain, however, doing so will result in an especially long query time, so we’ll filter our query to the average amount of gas paid per transaction by the Ethereum Foundation. -![ef_daily_gas](./ef_daily_gas.png) +![](./ef_daily_gas.png) -We can see gas prices paid in transaction to the Ethereum Foundation address over the years. Here is the query: +We can see gas prices paid for all transactions made to the Ethereum Foundation address over the years. Here is the query: ```sql SELECT diff --git a/src/content/developers/tutorials/run-light-node-geth/index.md b/src/content/developers/tutorials/run-light-node-geth/index.md index 6f398363d8e..10c71042675 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -7,7 +7,7 @@ skill: beginner lang: en sidebar: true published: 2022-03-04 -preMergeBanner: true +postMergeBannerTranslation: page-upgrades-post-merge-banner-tutorial-light-node-ood --- **Please note that Geth light clients can be very slow to find peers. This is because they rely on full-node operators volunteering themselves as light servers from which the light clients can request data. There are usually only a small number of light servers available.** diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index f66e06dc6b9..3cdd220323c 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -9,7 +9,7 @@ skill: intermediate published: 2022-06-10 source: Ethereum on ARM sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html -preMergeBanner: true +postMergeBannerTranslation: page-upgrades-post-merge-banner-tutorial-ood --- **Ethereum on Arm is a custom Linux image that can turn a Raspberry Pi into an Ethereum node.** diff --git a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md index b30ec19e106..8fab4a11c44 100644 --- a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -27,12 +27,11 @@ When liquidity providers want their assets back they can burn the pool tokens an ### Why v2? Why not v3? {#why-v2} -As I'm writing this, [Uniswap v3](https://uniswap.org/whitepaper-v3.pdf) is almost ready. However, it is an upgrade that is much more complicated than the original. It is easier to first learn v2 and then go to v3. +[Uniswap v3](https://uniswap.org/whitepaper-v3.pdf) is an upgrade that is much more complicated than the v2. It is easier to first learn v2 and then go to v3. ### Core Contracts vs Periphery Contracts {#contract-types} -Uniswap v2 is divided into two components, a core and a periphery. This division allows the core contracts, which hold the assets and therefore _have_ to be secure, to be simpler and easier to audit. -All the extra functionality required by traders can then be provided by periphery contracts. +Uniswap v2 is divided into two components, a core and a periphery. This division allows the core contracts, which hold the assets and therefore _have_ to be secure, to be simpler and easier to audit. All the extra functionality required by traders can then be provided by periphery contracts. ## Data and Control Flows {#flows} @@ -1011,7 +1010,7 @@ For example, imagine a case where the exchange rate is one to one and the liquid As long as the exchange rate stays between 0.9 and 1.25, the transaction takes place. If the exchange rate gets out of that range, the transaction gets cancelled. -The reason for this precaution is that transactions are not immediate, you submit them and eventually a miner is going to include them in a block (unless your gas price is very low, in which case you'll need to submit another transaction with the same nonce and a higher gas price to overwrite it). You cannot control what happens during the interval between submission and inclusion. +The reason for this precaution is that transactions are not immediate, you submit them and eventually a validator is going to include them in a block (unless your gas price is very low, in which case you'll need to submit another transaction with the same nonce and a higher gas price to overwrite it). You cannot control what happens during the interval between submission and inclusion. ```solidity ) internal virtual returns (uint amountA, uint amountB) { diff --git a/src/content/developers/tutorials/using-websockets/index.md b/src/content/developers/tutorials/using-websockets/index.md index d89597f69c2..0d046f47ed6 100644 --- a/src/content/developers/tutorials/using-websockets/index.md +++ b/src/content/developers/tutorials/using-websockets/index.md @@ -145,13 +145,11 @@ Example: "method": "eth_subscription", "params": { "result": { - "difficulty": "0x15d9223a23aa", "extraData": "0xd983010305844765746887676f312e342e328777696e646f7773", "gasLimit": "0x47e7c4", "gasUsed": "0x38658", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "miner": "0xf8b483dba2c3b7176a3da549ad41a48bb3121069", "nonce": "0x084149998194cc5f", "number": "0x1348c9", "parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701", diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index d2be82bb1a7..d877ba2ecd9 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,50 +7,50 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum's energy consumption will be reduced by ~99.95% following [The Merge](/upgrades/merge) from proof-of-work (PoW) to proof-of-stake (PoS). After The Merge, Ethereum will use dramatically less carbon to be more secure. +Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that can be run on low-powered devices and does not require heavy computation to participate. Ethereum's proof-of-stake mechanism secures the network by using staked ETH rather than expended energy, like in [proof-of-work](/developers/docs/consensus-mechanisms/pos). The switch to proof-of-stake means the energy expended by the Ethereum network is relatively small - on the order of 0.01 TWh/yr. -Since its inception, Ethereum has aimed to implement a proof-of-stake consensus mechanism, but doing this without compromising [Ethereum's vision of being a secure, scalable, and decentralized blockchain](/upgrades/vision/) has taken years of focused research and development. Therefore, the network started by using proof-of-work consensus. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle. The solution to the puzzle proves that energy has been expended by the miner, demonstrating that they invested real-world value for the right to add to the blockchain. Both proof-of-work and proof-of-stake are just mechanisms to decide who gets to add the next block. Swapping proof-of-work for proof-of-stake, where the real-world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. +## Proof-of-stake energy expenditure {#proof-of-stake-energy} -## The Merge {#the-merge} +The energy expenditure of Ethereum is roughly equal to the cost of running a modest laptop for each node on the network. -[The Beacon Chain](/upgrades/beacon-chain/) has been running the proof-of-stake since November 2020 alongside the proof-of-work Ethereum Mainnet. In 2022, Ethereum developers transitioned several **testing networks (testnets)** running proof-of-work to proof-of-stake by merging with their own Beacon Chains. These helped client teams test the software before moving to longer-lived networks. After these testnets, Ethereum developers launched new testnets for the community to use (Kiln & Kintsugi) and ran multiple shadow forks of existing testnets and Mainnet. Now that these have stabilized, teams are moving to the final stages of testing: transitioning long-lived testnets (Ropsten, Goerli, Sepolia) to proof-of-stake. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's proof-of-work mining will be switched off, proof-of-stake consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. +Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand. However, transaction-based estimates can be misleading because the energy required to propose and validate a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. -## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} +For example, on Ethereum, the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its "[layer 2](/layer-2/)" rollups, which are not generally included in calculations and would drastically reduce them. This is one reason why tools that compare energy consumption per transaction across platforms are misleading. -Proof-of-work is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. -The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing proof-of-work. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the proof-of-work race by investing in sufficient hardware and energy to outperform the majority of other miners. +More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values, we can examine what that network offers to its users and society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibits an honest cost-benefit analysis. -This mechanism of securing the network is problematic for several reasons. First, miners can increase their odds of success by investing in more powerful hardware, creating conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Second, Ethereum's proof-of-work protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and a carbon footprint similar to Switzerland[^1]. +[Digiconomist provides whole-network energy consumption and carbon footprints for Bitcoin and Ethereum](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article, Bitcoin expends about 200 TWh/yr of energy and emits about 100 MT (megatons) of carbon per year, while generating about 32,000 T of electrical waste from obsolete hardware annually. In comparison, the total energy expenditure for securing Ethereum is closer to **0.01 TWh/yr**. -Proof-of-stake uses validators instead of miners. Validators perform the same function as miners, except that instead of expending their assets up-front as energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ETH can be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the proof-of-work network comes from the mining algorithm, switching to proof-of-stake dramatically reduces energy expenditure. There is also no benefit to be had by investing in more powerful hardware under proof-of-stake, so there is no arms-race condition and less electronic waste. Ethereum validators can run on typical laptops or low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). +![Comparison of energy expenditure across industries](./energy.png) -Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. +The figure above shows the estimated annual energy consumption in TWh/yr for various industries (retrieved in June 2022). +_Note that the estimates presented in the plot are from publicly available sources that have been linked to in the text below. They are +illustrative and do not represent an official estimate, promise or forecast._ -## Proof-of-stake energy expenditure {#proof-of-stake-energy} +To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. Taking Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (estimated to consume about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. Estimates of YouTube's energy expenditure have been broken down by channel and individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that people consumed 45 times more energy watching Gangnam Style in 2019 than proof-of-stake Ethereum uses in a year. -Estimates based on the current Beacon Chain suggest that The Merge to proof-of-stake could result in a 99.95% reduction in total energy use, with proof-of-stake being ~2000x more energy-efficient than proof-of-work. The energy expenditure of Ethereum will be roughly equal to the cost of running a modest laptop for each node on the network. +## A green application layer {#green-applications} -Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand, but the energy required to mine a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. +While Ethereum's energy consumption is very low, there is also a substantial, growing, and highly active **regenerative finance (ReFi)** community building on Ethereum. ReFi applications use DeFi components to build financial applications that have positive externalities benefiting the environment. ReFi is part of a wider ["solarpunk"](https://en.wikipedia.org/wiki/Solarpunk) movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. Through the development of these (and others, e.g. [DeSci](/desci/)), Ethereum is becoming an environmentally and socially-positive technology. -For example, on Ethereum, the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its "[layer 2](/layer-2/)" rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. +## Ethereum's carbon debt {#carbon-debt} -More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values, we can examine what that network offers to its users and society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibits an honest cost-benefit analysis. +Ethereum's current energy expenditure is very low, but this has not always been the case. Ethereum switched on its proof-of-stake consensus mechanism in Q3 2022. However, Ethereum used a proof-of-work mechanism from 2014-2022, which had a much greater environmental cost. -[Digiconomist provides whole-network energy consumption and carbon footprints for Bitcoin and Ethereum](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article, Ethereum's total energy consumption is ~112 TWh/yr, comparable to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr of energy and emits about 100 MT/yr C, while generating about 32,000 T of electrical waste from obsolete hardware annually. Switching off Ethereum's proof-of-work in favor of proof-of-stake will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is closer to **0.01 TWh/yr**. +Since its inception, Ethereum aimed to implement a proof-of-stake consensus mechanism, but doing so without sacrificing security and decentralization took years of focused research and development. Therefore, a proof-of-work mechanism was used to get the network started. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle, expending energy in the process. The solution to the puzzle proves that energy has been expended by the miner, demonstrating that they invested real-world value for the right to add to the blockchain. Ethereum's total energy consumption peaked during the apex of the crypto bull market in February 2022 at just under 94 TWh/yr. In the summer before the switch to proof-of-stake, the energy consumption was closer to 60 TWh/yr, comparable to that of Uzbekistan, with a carbon emission equivalent to that of Azerbaijan (33 MT/yr). -![Comparison of energy expenditure across industries](./energy.png) +Both proof-of-work and proof-of-stake are just mechanisms to decide who gets to add the next block. Swapping proof-of-work for proof-of-stake, where the real-world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. -The figure above shows the estimated annual energy consumption in TWh/yr for various industries (retrieved in June 2022). -_Note that the estimates presented in the plot are from publicly available sources that have been linked to in the text below. They are -illustrative and do not represent an official estimate, promise or forecast._ +## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} -To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (estimated to consume about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. Estimates of Youtube's energy expenditure have been broken down by channel and individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that people consumed 45 times more energy watching Gangnam Style in 2019 than proof-of-stake Ethereum will use in a year. +Proof-of-work is a robust way to secure the network. Transactions on the Ethereum blockchain under the previous proof-of-work system were validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundled together transactions into ordered blocks and added them to the Ethereum blockchain. The new blocks got broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty showed up as an inconsistency between different nodes. Honest blocks were added to the blockchain and became an immutable part of history. +The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing proof-of-work. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the proof-of-work race by investing in sufficient hardware and energy to outperform the majority of other miners. -## A greener Ethereum {#green-ethereum} +This mechanism of securing the network is problematic for several reasons. First, miners would increase their odds of success by investing in more powerful hardware, creating conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increased the network's energy consumption and generated hardware waste. Second, Ethereum's proof-of-work protocol (prior to transitioning to proof-of-stake) had a total annualized power consumption approximately equal to that of Finland [^1] and a carbon footprint similar to Switzerland[^1]. -While Ethereum's energy consumption has historically been substantial, there has been a significant investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block production. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by proof-of-work is simply to "turn it off", which is the approach Ethereum has committed to taking. +Proof-of-stake uses validators instead of miners. Validators perform the same function as miners, except that instead of expending their assets up-front as energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ETH can be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the proof-of-work network came from the mining algorithm, the switch to proof-of-stake dramatically reduced energy expenditure. There is also no benefit to be had by investing in more powerful hardware under proof-of-stake, so there is no arms-race condition and less electronic waste. Ethereum validators can run on typical laptops or low-power devices such as a [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). -At the same time, there is a substantial, growing, and highly active **regenerative finance (ReFi)** community building on Ethereum. ReFi applications use DeFi components to build financial applications that have positive externalities benefiting the environment. ReFi is part of a wider "Solarpunk" movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. After The Merge, the technology and philosophy of Ethereum will finally reconcile, and Ethereum should become an environmentally-positive technology. +Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. If you think these stats are incorrect or can be made more accurate, please raise an issue or PR. These are estimates by the ethereum.org team made using publicly accessible information and the current Ethereum roadmap. These statements don't represent an official promise from the Ethereum Foundation. diff --git a/src/content/enterprise/index.md b/src/content/enterprise/index.md index eb906992776..51ecf1fb6a8 100644 --- a/src/content/enterprise/index.md +++ b/src/content/enterprise/index.md @@ -34,7 +34,7 @@ Many businesses and consortia have deployed private, permissioned blockchains fo Enterprises have been experimenting with blockchain technology since around 2016, when the Hyperledger, Quorum, and Corda projects were launched. The focus was largely on private permissioned enterprise blockchains, but starting in 2019 there has been a shift in thinking about public vs private blockchains for business applications. A [survey](https://assets.ey.com/content/dam/ey-sites/ey-com/en_gl/topics/blockchain/ey-public-blockchain-opportunity-snapshot.pdf) conducted by Forrester revealed that “Survey respondents ... see this potential, with 75% stating that they’re likely to leverage public blockchains in the future, and nearly one-third saying they’re very likely”. EY’s Paul Brody has [talked](https://www.youtube.com/watch?v=-ycu5vGDdZw&feature=youtu.be&t=3668) about the benefits of building on public blockchain, which (depending on the application) may include stronger security/immutability, transparency, lower total cost of ownership, and the ability to interoperate with all of the other applications that are also on the Mainnet (network effects). Sharing a common frame of reference among businesses avoids the unnecessary creation of numerous isolated silos which cannot communicate and share or synchronize information with each other. -Another development which is shifting the focus toward public blockchains is [Layer 2](/developers/docs/scaling/layer-2). Layer 2 is primarily a scalability technology category which makes high throughput applications possible on public chains. But Layer 2 solutions can also [address some of the other challenges that have driven enterprise developers to choose private chains in the past](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/). +Another development which is shifting the focus toward public blockchains is [Layer 2](/developers/docs/scaling/#layer-2-scaling). Layer 2 is primarily a scalability technology category which makes high throughput applications possible on public chains. But Layer 2 solutions can also [address some of the other challenges that have driven enterprise developers to choose private chains in the past](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/). The Baseline Protocol is one key project which is defining a protocol that enables confidential and complex collaboration between enterprises without leaving any sensitive data on-chain. It has gained significant [momentum](https://www.oasis-open.org/2020/08/26/baseline-protocol-achieves-key-milestone-with-release-of-v0-1-implementation-for-enterprise/) throughout 2020. diff --git a/src/content/glossary/index.md b/src/content/glossary/index.md index 82ecd3ef2c5..00be9f126ec 100644 --- a/src/content/glossary/index.md +++ b/src/content/glossary/index.md @@ -57,7 +57,7 @@ In [Solidity](#solidity), `assert(false)` compiles to `0xfe`, an invalid opcode, ### attestation {#attestation} -A validator vote for a [Beacon Chain](#beacon-chain) or [shard](#shard) [block](#block). Validators must attest to blocks, signaling that they agree with the state proposed by the block. +A claim made by an entity that something is true. In context of Ethereum, consensus validators must make a claim as to what they believe the state of the chain to be. At designated times, each validator is responsible for publishing different attestations that formally declare this validator's view of the chain, including the last finalized checkpoint and the current head of the chain. Attestations @@ -77,7 +77,7 @@ Every [block](#block) has a reserve price known as the 'base fee'. It is the min ### Beacon Chain {#beacon-chain} -A network upgrade that introduced a new consensus layer, which will become the coordinator for the entire Ethereum network. It introduces [proof-of-stake](#pos) and [validators](#validator) to Ethereum. It will eventually be merged with [Mainnet](#mainnet). +The Beacon Chain was the blockchain that introduced [proof-of-stake](#pos) and [validators](#validator) to Ethereum. It ran alongside the proof-of-work Ethereum Mainnet from December 2020 until the two chains were merged in September 2022 to form the Ethereum of today. Beacon Chain @@ -89,7 +89,7 @@ A positional number representation where the most significant digit is first in ### block {#block} -A collection of required information (a block header) about the comprised [transactions](#transaction), and a set of other block headers known as [ommers](#ommer). Blocks are added to the Ethereum network by [miners](#miner). +A block is a bundled unit of information that include an ordered list of transactions and consensus-related information. Blocks are proposed by proof-of-stake validators, at which point they are shared across the entire peer-to-peer network, where they can easily be independently verified by all other nodes. Consensus rules govern what contents of a block are considered valid, and any invalid blocks are disregarded by the network. The ordering of these blocks and the transactions therein create a deterministic chain of events with the end representing the current state of the network. Blocks @@ -101,30 +101,43 @@ An interface that allows a user to search for information from, and about, a blo ### block header {#block-header} -The data in a block which is unique to its content and the circumstances in which it was created. It includes the hash of the previous block’s header, the version of the software the block is mined with, the timestamp and the merkle root hash of the contents of the block. +The block header is a collection of metadata about a block and a summary of the transactions included in the execution payload. ### block propagation {#block-propagation} The process of transmitting a confirmed block to all other nodes in the network. +### block proposer {#block-proposer} + +The specific validator chosen to create a block in a particular [slot](#slot). + ### block reward {#block-reward} -The amount of ether rewarded to the producer of a new valid block. +The amount of ether rewarded to the proposer of a new valid block. + +### block status {#block-status} + +The states that a block can exist in. The possible states include: + +- proposed: the block was proposed by a validator +- scheduled: validators are currently submitting data +- missed/skipped: the proposer did not propose a block within the eligible time frame. +- orphaned: the block was reorg'd out by the [fork choice algorithm](#fork-choice-algorithm) ### block time {#block-time} -The average time interval between blocks being added to the blockchain. +The time interval between blocks being added to the blockchain. ### block validation {#block-validation} -Checking of the coherence of the cryptographic signature of the block with the history stored in the entire blockchain. +The process of checking that a new block contains valid transactions and signatures, builds on the heaviest historical chain, and follows all other consensus rules. Valid blocks are added to the end of the chain and propagated to others on the network. Invalid blocks are disregarded. ### blockchain {#blockchain} -In Ethereum, a sequence of [blocks](#block) validated by the [proof-of-work](#pow) system, each linking to its predecessor all the way to the [genesis block](#genesis-block). There is no block size limit; it instead uses varying [gas limits](#gas-limit). +A sequence of [blocks](#block), each linking to its predecessor all the way to the [genesis block](#genesis-block) by referencing the hash of the previous block. The integrity of the blockchain is crypto-economically secured using a proof-of-stake-based consensus mechanism. - What is a Blockchain? + What is a blockchain? ### bootnode {#bootnode} @@ -161,7 +174,7 @@ Converting code written in a high-level programming language (e.g., [Solidity](# ### committee {#committee} -A group of at least 128 [validators](#validator) assigned to beacon and shard blocks at random by [the Beacon Chain](#beacon-chain). +A group of at least 128 [validators](#validator) assigned to validate blocks in each slot. One of the validators in the committee is the aggregator, responsible for aggregating the signatures of all other validators in the committee that agree on an attestation. Not to be confused with [sync committee](#sync-committee). ### computational infeasibility {#computational-infeasibility} @@ -169,7 +182,7 @@ A process is computationally infeasible if it would take an impracticably long t ### consensus {#consensus} -When numerous nodes (usually most nodes on the network) all have the same blocks in their locally validated best blockchain. Not to be confused with [consensus rules](#consensus-rules). +When a supermajority of nodes on the network all have the same blocks in their locally validated best blockchain. Not to be confused with [consensus rules](#consensus-rules). ### consensus client {#consensus-client} @@ -195,16 +208,6 @@ An account containing code that executes whenever it receives a [transaction](#t A special [transaction](#transaction), with the [zero address](#zero-address) as the recipient, that is used to register a [contract](#contract-account) and record it on the Ethereum blockchain. -### crosslink {#crosslink} - -A crosslink provides a summary of a shard's state. It's how [shard](#shard) chains will communicate with one another via the [Beacon Chain](#beacon-chain) in the sharded [proof-of-stake system](#proof-of-stake). - - - Proof-of-stake - - - - ### cryptoeconomics {#cryptoeconomics} The economics of cryptocurrencies. @@ -217,7 +220,7 @@ The economics of cryptocurrencies. ### DAG {#DAG} -DAG stands for Directed Acyclic Graph. It is a data structure composed of nodes and links between them. Ethereum uses a DAG in its [proof of work](#proof-of-work) algorithm, [Ethash](#ethash). +DAG stands for Directed Acyclic Graph. It is a data structure composed of nodes and links between them. Ethereum uses a DAG in its [proof-of-work](#pow) algorithm, [Ethash](#ethash). ### Dapp {#dapp} @@ -255,6 +258,10 @@ A type of [dapp](#dapp) that lets you swap tokens with peers on the network. You See [non-fungible token (NFT)](#nft) +### deposit contract {#deposit-contract} + +The gateway to staking on Ethereum. The deposit contract is a smart contract on Ethereum that accepts deposits of ETH and manages validator balances. A validator cannot be activated without depositing ETH into this contract. The contract requires ETH and input data. This input data includes the validator public key and withdrawal public key, signed by the validator private key. This data is needed for a validator to be identified and approved by the [proof-of-stake](#pos) network. + ### DeFi {#defi} Short for "decentralized finance," a broad category of [dapps](#dapp) aiming to provide financial services backed by the blockchain, without any intermediaries, so anyone with an internet connection can participate. @@ -265,11 +272,11 @@ Short for "decentralized finance," a broad category of [dapps](#dapp) aiming to ### difficulty {#difficulty} -A network-wide setting that controls how much computation is required to produce a [proof-of-work](#pow). +A network-wide setting in [proof-of-work](#pow) networks that controls how much average computation is required to find a valid nonce. The difficulty is represented by the number of leading zeroes that are required in the resulting block hash for it to be considered valid. This concept is deprecated in Ethereum since the transition to proof-of-stake. ### difficulty bomb {#difficulty-bomb} -Planned exponential increase in [proof-of-work](#pow) [difficulty](#difficulty) setting designed to motivate the transition to [proof-of-stake](#pos), reducing the chances of a [fork](#hard-fork) +Planned exponential increase in [proof-of-work](#pow) [difficulty](#difficulty) setting that was designed to motivate the transition to [proof-of-stake](#pos), reducing the chances of a [fork](#hard-fork). The difficulty bomb was deprecated with the [transition to proof-of-stake](/upgrades/merge). ### digital signature {#digital-signatures} @@ -287,7 +294,7 @@ A data structure containing `(key, value)` pairs used by Ethereum nodes to ident ### double spend {#double-spend} -A deliberate blockchain fork, where a user with a sufficiently large amount of mining power/stake sends a transaction moving some currency off-chain (e.g. exiting into fiat money or making an off-chain purchase) then reorganising the blockchain to remove that transaction. A successful double spend leaves the attacker with both their on and off-chain assets. +A deliberate blockchain fork, where a user with a sufficiently large amount of mining power/stake sends a transaction moving some currency off-chain (e.g. exiting into fiat money or making an off-chain purchase) then reorganizing the blockchain to remove that transaction. A successful double spend leaves the attacker with both their on and off-chain assets. ## E {#section-e} @@ -305,7 +312,7 @@ In the context of cryptography, lack of predictability or level of randomness. W ### epoch {#epoch} -A period of 32 [slots](#slot) (6.4 minutes) in the [Beacon Chain](#beacon-chain)-coordinated system. [Validator](#validator) [committees](#committee) are shuffled every epoch for security reasons. There's an opportunity at each epoch for the chain to be [finalized](#finality). The term is also used on the [execution layer](#execution-layer) to mean the interval between each regeneration of the database used as a seed by the proof-of-work algorithm [Ethash](#Ethash). The epoch in specified as 30000 blocks. +A period of 32 [slots](#slot), each slot being 12 seconds, totalling 6.4 minutes. Validator [committees](#committee) are shuffled every epoch for security reasons. Each epoch has an opportunity for the chain to be [finalized](#finality). Each validator is assigned new responsibilities at the start of each epoch. Proof-of-stake @@ -331,10 +338,6 @@ A validator sending two messages that contradict each other. One simple example More on the Ethereum upgrades -### etherbase {#etherbase} - -The default name of the primary account on an Ethereum client. Mining rewards are credited to this account. This is an Ethereum-specific version of "coinbase" which is applicable to other cryptocurrencies. - ### Ethereum Improvement Proposal (EIP) {#eip} A design document providing information to the Ethereum community, describing a proposed new feature or its processes or environment (see [ERC](#erc)). @@ -351,7 +354,7 @@ The ENS registry is a single central [contract](#smart-contract) that provides a ### execution client {#execution-client} -Execution clients (f.k.a. "Eth1 clients"), such as Besu, Erigon, go-ethereum, Nethermind, are tasked with processing and broadcasting transactions, as well as with managing Ethereum's state. They run the computations for each transaction in the [Ethereum Virtual Machine](#evm) to ensure that the rules of the protocol are followed. Today, they also handle [proof-of-work](#pow) consensus. After the transition to [proof-of-stake](#pos), they will delegate this to consensus clients. +Execution clients (formerly known as "Eth1 clients"), such as Besu, Erigon, Go-Ethereum (Geth), Nethermind, are tasked with processing and broadcasting transactions and managing Ethereum's state. They run the computations for each transaction using the [Ethereum Virtual Machine](#evm) to ensure that the rules of the protocol are followed. ### execution layer {#execution-layer} @@ -359,7 +362,7 @@ Ethereum's execution layer is the network of [execution clients](#execution-clie ### externally owned account (EOA) {#eoa} -Externally owned accounts (EOAs) are [accounts](#account) that are controlled by users who control the [private keys](#private-key) for an account, typically generated using a [seed phrase](#hd-wallet-seed). Externally owned accounts are accounts without any code associated with them. Typically these accounts are used with a [wallet](#wallet). +Externally owned accounts (EOAs) are [accounts](#account) that are controlled by [private keys](#private-key), typically generated using a [seed phrase](#hd-wallet-seed). Unlike smart contracts, externally owned accounts are accounts without any code associated with them. Typically these accounts are managed with a [wallet](#wallet). ### Ethereum Request for Comments (ERC) {#erc} @@ -371,9 +374,9 @@ A label given to some [EIPs](#eip) that attempt to define a specific standard of ### Ethash {#ethash} -A [proof-of-work](#pow) algorithm for Ethereum 1.0. +A [proof-of-work](#pow) algorithm that was used on Ethereum before it transitioned to [proof-of-stake](#pos). -[Read more at eth.wiki](https://eth.wiki/en/concepts/ethash/ethash) +[Read more](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash) ### ether {#ether} @@ -416,16 +419,13 @@ A default function called in the absence of data or a declared function name. A service carried out via [smart contract](#smart-contract) that dispenses funds in the form of free test ether that can be used on a testnet. - Testnet Faucets + Testnet faucets ### finality {#finality} Finality is the guarantee that a set of transactions before a given time will not change and can't be reverted. - - Proof-of-work finality - Proof-of-stake finality @@ -436,7 +436,7 @@ A denomination of [ether](#ether). 1 finney = 1015 [wei](#wei). 10 -### lightweight client {#lightweight-client} +### light client {#light-client} An Ethereum client that does not store a local copy of the [blockchain](#blockchain), or validate blocks and [transactions](#transaction). It offers the functions of a [wallet](#wallet) and can create and broadcast transactions. @@ -644,15 +644,11 @@ The third development stage of Ethereum, launched in October 2017. ### mining {#mining} -The process of verifying transactions and contract execution on the Ethereum blockchain in exchange for a reward in ether with the mining of every block. - -### mining pool {#mining-pool} - -The pooling of resources by miners who share their processing power and split [block rewards](#block-reward). +The process of repeatedly hashing a block header while incrementing a [nonce](#nonce) until the result contains an arbitrary number of leading binary zeros. This is the process by which new [blocks](#block) are added to a proof-of-work [blockchain](#blockchain). This was how Ethereum was secured before it moved to [proof-of-stake](#pos). ### miner {#miner} -A network [node](#node) that finds valid [proof-of-work](#pow) for new blocks, by repeated pass hashing (see [Ethash](#ethash)). +A network [node](#node) that finds valid [proof-of-work](#pow) for new blocks, by repeated pass hashing (see [Ethash](#ethash)). Miners are no longer part of Ethereum - they were replaced by validators when Ethereum moved to [proof-of-stake](#pos). Mining @@ -676,7 +672,7 @@ Referring to the Ethereum network, a peer-to-peer network that propagates transa ### network hashrate {#network-hashrate} -The collective [hashrate](#hashrate) produced by the entire Ethereum mining network. +The collective [hashrate](#hashrate) produced by an entire mining network. Mining on Ethereum was switched off when Ethereum moved to [proof-of-stake](#pos). ### non-fungible token (NFT) {#nft} @@ -699,7 +695,7 @@ A software client that participates in the network. ### nonce {#nonce} -In cryptography, a value that can only be used once. There are two types of nonce used in Ethereum- an account nonce is a transaction counter in each account, which is used to prevent replay attacks; a [proof-of-work](#pow) nonce is the random value in a block that was used to satisfy the [proof-of-work](#pow). +In cryptography, a value that can only be used once. An account nonce is a transaction counter in each account, which is used to prevent replay attacks. @@ -707,7 +703,7 @@ In cryptography, a value that can only be used once. There are two types of nonc ### ommer (uncle) block {#ommer} -When a [miner](#miner) finds a valid [block](#block), another miner may have published a competing block which is added to the tip of the blockchain first. This valid, but stale, block can be included by newer blocks as _ommers_ and receive a partial block reward. The term "ommer" is the preferred gender-neutral term for the sibling of a parent block, but this is also sometimes referred to as an "uncle". +When a proof-of-work [miner](#miner) finds a valid [block](#block), another miner may have published a competing block which is added to the tip of the blockchain first. This valid, but stale, block can be included by newer blocks as _ommers_ and receive a partial block reward. The term "ommer" is the preferred gender-neutral term for the sibling of a parent block, but this is also sometimes referred to as an "uncle". This was relevant for Ethereum when it was a [proof-of-work](pow) network, but ommers are not a feature of [proof-of-stake](#pos) Ethereum because precisely one block proposer is selected in each slot. ### optimistic rollup {#optimistic-rollup} @@ -767,7 +763,7 @@ A method by which a cryptocurrency blockchain protocol aims to achieve distribut ### proof-of-work (PoW) {#pow} -A piece of data (the proof) that requires significant computation to find. In Ethereum, [miners](#miner) must find a numeric solution to the [Ethash](#ethash) algorithm that meets a network-wide [difficulty](#difficulty) target. +A piece of data (the proof) that requires significant computation to find. Proof-of-work @@ -835,7 +831,7 @@ The process of converting a data structure into a sequence of bytes. ### shard / shard chain {#shard} -A [proof-of-stake](#pos) chain that is coordinated by the [Beacon Chain](#beacon-chain) and secured by [validators](#validator). There will be 64 added to the network as part of the shard chain upgrade. Shard chains will offer increased transaction throughput for Ethereum by providing additional data to [layer 2](#layer-2) solutions like [optimistic rollups](#optimistic-rollups) and [ZK-rollups](#zk-rollups). +Shard chains are discrete sections of the total blockchain that can subsets of validators can be responsible for. This will offer increased transaction throughput for Ethereum and improve data availability for [layer 2](#layer-2) solutions like [optimistic rollups](#optimistic-rollups) and [ZK-rollups](#zk-rollups). Shard chains @@ -857,9 +853,13 @@ Demonstrating cryptographically that a transaction was approved by the holder of A computer programming term that describes an object of which only a single instance can exist. +### slasher {#slasher} + +A slasher is an entity that scans attestations searching for slashable offenses. Slashings are broadcast to the network, and the next block proposer adds the proof to the block. The block proposer then receives a reward for slashing the malicious validator. + ### slot {#slot} -A period of time (12 seconds) in which a new [Beacon Chain](#beacon-chain) and [shard](#shard) chain block can be proposed by a [validator](#validator) in the [proof-of-stake](#pos) system. A slot may be empty. 32 slots make up an [epoch](#epoch). +A period of time (12 seconds) in which a new blocks can be proposed by a [validator](#validator) in the [proof-of-stake](#pos) system. A slot may be empty. 32 slots make up an [epoch](#epoch). Proof-of-stake @@ -917,6 +917,14 @@ Depositing a quantity of [ether](#ether) (your stake) to become a validator and Stake your ETH to become an Ethereum validator +### staking pool {#staking-pool} + +The combined ETH of more than one Ethereum staker, used to reach the 32 ETH required to activate a set of validator keys. A node operator uses these keys to participate in consensus and the [block rewards](#block-reward) are split amongst contributing stakers. Staking pools or delegating staking are not native to the Ethereum protocol, but many solutions have been built by the community. + + + Pooled staking + + ### STARK {#stark} Short for "scalable transparent argument of knowledge", a STARK is a type of [zero-knowledge proof](#zk-proof). @@ -939,7 +947,7 @@ A [layer 2](#layer-2) solution where a channel is set up between participants, w ### supermajority {#supermajority} -Supermajority is the term given for an amount exceeding 2/3 (66%) of the total staked ether on the [Beacon Chain](#beacon-chain). A supermajority vote is required for blocks to be [finalized](#finality) on the Beacon Chain. +Supermajority is the term given for an amount exceeding 2/3 (66%) of the total staked ether securing Ethereum. A supermajority vote is required for blocks to be [finalized](#finality) on the Beacon Chain. ### syncing {#syncing} @@ -947,7 +955,7 @@ The process of downloading the entire latest version of a blockchain to a node. ### sync committee {#sync-committee} -A sync committee is a randomly selected group of [validators](#validator) on the [Beacon Chain](#beacon-chain) that refresh every ~27 hours. Their purpose is to add their signatures to valid block headers. Sync committees allow [light clients](#lightweight-client) to keep track of the head of the blockchain without having to access the entire validator set. +A sync committee is a randomly selected group of [validators](#validator) that refresh every ~27 hours. Their purpose is to add their signatures to valid block headers. Sync committees allow [light clients](#light-client) to keep track of the head of the blockchain without needing to access the entire validator set. ### szabo {#szabo} @@ -963,7 +971,7 @@ A [hard fork](#hard-fork) of the Ethereum blockchain, which occurred at block 2, ### terminal total difficulty (TTD) {#terminal-total-difficulty} -The total difficulty is the sum of the Ethash mining difficulty for all blocks up to some specific point in the blockchain. The terminal total difficulty is a specific value for the total difficulty that will be used as the trigger for execution clients to switch off their mining and block gossip functions so the network can transition to proof-of-stake. +The total difficulty is the sum of the Ethash mining difficulty for all blocks up to some specific point in the blockchain. The terminal total difficulty is a specific value for the total difficulty that was used as the trigger for execution clients to switch off their mining and block gossip functions enabling the network to transition to proof-of-stake. ### testnet {#testnet} @@ -995,7 +1003,7 @@ Data committed to the Ethereum Blockchain signed by an originating [account](#ac ### transaction fee {#transaction-fee} -A fee you need to pay whenever you use the Ethereum network. Examples include sending funds from your [wallet](#wallet) or a [dapp](#dapp) interaction, like swapping tokens or buying a collectible. You can think of this like a service charge. This fee will change based on how busy the network is. This is because [miners](#miner), the people responsible for processing your transaction, are likely to prioritise transactions with higher fees – so congestion forces the price up. +A fee you need to pay whenever you use the Ethereum network. Examples include sending funds from your [wallet](#wallet) or a [dapp](#dapp) interaction, like swapping tokens or buying a collectable. You can think of this like a service charge. This fee will change based on how busy the network is. This is because [validators](#validator), the people responsible for processing your transaction, are likely to prioritize transactions with higher fees – so congestion forces the price up. At a technical level, your transaction fee relates to how much [gas](#gas) your transaction requires. @@ -1024,6 +1032,16 @@ A [node](#node) in a [proof-of-stake](#pos) system responsible for storing data, Staking in Ethereum +### validator lifecycle {#validator-lifecycle} + +The sequence of states that a validator can exist in. These include: + +- deposited: At least 32 ETH has been deposited to the [deposit contract](#deposit-contract) by the validator +- pending: the validator is in the activation queue waiting to be voted into the network by existing validators +- active: currently attesting and proposing blocks +- slashing: the validator has misbehaved and is being slashed +- exiting: the validator has been flagged for exiting the network, either voluntarily or because they have been ejected. + ### validity proof {#validity-proof} A security model for certain [layer 2](#layer-2) solutions where, to increase speed, transactions are [rolled up](/#rollups) into batches and submitted to Ethereum in a single transaction. The transaction computation is done off-chain and then supplied to the main chain with a proof of their validity. This method increases the amount of transactions possible while maintaining security. Some [rollups](#rollups) use [fraud proofs](#fraud-proof). diff --git a/src/content/governance/index.md b/src/content/governance/index.md index 7bff3d0e388..92c1fa354e0 100644 --- a/src/content/governance/index.md +++ b/src/content/governance/index.md @@ -3,6 +3,7 @@ title: Ethereum Governance description: An introduction to how decisions about Ethereum are made. lang: en sidebar: true +postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introduction to Ethereum governance {#introduction} diff --git a/src/content/nft/index.md b/src/content/nft/index.md index f6e09540ab1..0ea49c711e8 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -11,7 +11,6 @@ alt: An Eth logo being displayed via hologram. summaryPoint1: A way to represent anything unique as an Ethereum-based asset. summaryPoint2: NFTs are giving more power to content creators than ever before. summaryPoint3: Powered by smart contracts on the Ethereum blockchain. -preMergeBanner: true --- NFTs are currently taking the digital art and collectibles world by storm. Digital artists are seeing their lives change thanks to huge sales to a new crypto-audience. And celebrities are joining in as they spot a new opportunity to connect with fans. But digital art is only one way to use NFTs. Really they can be used to represent ownership of any unique asset, like a deed for an item in the digital or physical realm. @@ -20,7 +19,7 @@ If Andy Warhol had been born in the late 90s, he probably would have minted Camp ## What's an NFT? {#what-are-nfts} -NFTs are tokens that we can use to represent ownership of unique items. They let us tokenise things like art, collectibles, even real estate. They can only have one official owner at a time and they're secured by the Ethereum blockchain – no one can modify the record of ownership or copy/paste a new NFT into existence. +NFTs are tokens that we can use to represent ownership of unique items. They let us tokenize things like art, collectibles, even real estate. Ownership of an asset is secured by the Ethereum blockchain – no one can modify the record of ownership or copy/paste a new NFT into existence. NFT stands for non-fungible token. Non-fungible is an economic term that you could use to describe things like your furniture, a song file, or your computer. These things are not interchangeable for other items because they have unique properties. @@ -96,7 +95,7 @@ NFTs are different from ERC-20 tokens, such as DAI or LINK, in that each individ - Signatures - Lots and lots more options to get creative with! -An NFT can only have one owner at a time. Ownership is managed through the uniqueID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as ERC-721. This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: +Ownership of NFTs is managed through the unique ID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as [ERC-721](/developers/docs/standards/tokens/erc-721/). This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: - Creating a new block - Validating information @@ -291,11 +290,10 @@ NFTs are growing in popularity which means they're also coming under increased s To clarify a few things: -- NFTs aren't directly increasing the carbon footprint of Ethereum. -- The way Ethereum keeps your funds and assets secure is currently energy-intensive but it's about to improve. -- Once improved, Ethereum's carbon footprint will be 99.95% better, making it more energy efficient than many existing industries. +- Creating and transferring NFTs are just Ethereum transactions - they have no direct impact on the energy expended by Ethereum, nor do they independently expend their own energy. +- Ethereum is a low-energy blockchain, meaning the environmental impact of creating, buying and transferring NFTs is very small. -To explain further we're going to have to get a little more technical so bear with us... +The next sections explain further with a little more technical detail... ### Don't blame it on the NFTs {#nft-qualities} @@ -305,67 +303,27 @@ Decentralized meaning you and everyone else can verify you own something. All wi Secure meaning no one can copy/paste your NFT or steal it. -These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. But it comes at a cost. Blockchains like Bitcoin and Ethereum are energy intensive right now because it takes a lot of energy to preserve these qualities. If it was easy to rewrite Ethereum's history to steal NFTs or cryptocurrency, the system collapses. +These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. Ethereum protects the assets using a decentralized consensus mechanism which involves ['proof-of-stake'](/developers/docs/consensus-mechanisms/pos). This is a low carbon method to determine who can add a block of transactions to the chain, and is considered more secure than the energy-intensive alternative, ['proof-of-work'](/developers/docs/consensus-mechanisms/pow). NFTs have been associated with high energy expenditure because Ethereum used to be secured using proof-of-work. This is no longer true. -#### The work in minting your NFT {#minting-nfts} +#### Minting NFTs {#minting-nfts} When you mint an NFT, a few things have to happen: - It needs to be confirmed as an asset on the blockchain. - The owner's account balance must be updated to include that asset. This makes it possible for it to then be traded or verifiably "owned". -- The transactions that confirm the above need to be added to a block and "immortalised" on the chain. -- The block needs to be confirmed by everyone in the network as "correct". This consensus removes the need for intermediaries because the network agrees that your NFT exists and belongs to you. And it's on chain so anyone can check it. This is one of the ways Ethereum helps NFT creators to maximise their earnings. +- The transactions that confirm the above need to be added to a block and "immortalized" on the chain. +- The block needs to be confirmed by everyone in the network as "correct". This consensus removes the need for intermediaries because the network agrees that your NFT exists and belongs to you. And it's on chain so anyone can check it. This is one of the ways Ethereum helps NFT creators to maximize their earnings. -All these tasks are done by miners. And they let the rest of the network know about your NFT and who owns it. This means mining needs to be sufficiently difficult, otherwise anyone could just claim that they own the NFT you just minted and fraudulently transfer ownership. There are lots of incentives in place to make sure miners are acting honestly. +All these tasks are done by block producers and validators. Block proposers add your NFT transaction to a block and broadcast it to the rest of the network. Validators check that the transaction is valid and then add it to their databases. There are lots of crypto-economic incentives in place to make sure validators are acting honestly. Otherwise, anyone could just claim that they own the NFT you just minted and fraudulently transfer ownership. -[More on mining](/developers/docs/consensus-mechanisms/pow/) +#### NFT security {#nft-security} -#### Securing your NFT with mining {#securing-nfts} +Ethereum's security comes from proof-of-stake. The system is designed to economically disincentivize malicious actions, making Ethereum tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ETH to change it. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT, and the bad actor would be economically penalized and ejected. -Mining difficulty comes from the fact that it takes a lot of computing power to create new blocks in the chain. Importantly, blocks are created consistently, not just when they're needed. They're created every 12 seconds or so. +Security issues relating to NFTs are most often related to phishing scams, smart contract vulnerabilities or user errors (such as inadvertently exposing private keys), making good wallet security critical for NFT owners. -This is important for making Ethereum tamper-proof, one of the qualities that makes NFTs possible. The more blocks the more secure the chain. If your NFT was created in block #600 and a hacker were to try and steal your NFT by modifying its data, the digital fingerprint of all subsequent blocks would change. That means anyone running Ethereum software would immediately be able to detect and prevent it from happening. - -However this means that computing power needs to be used constantly. It also means that a block that contains 0 NFT transactions will still have roughly the same carbon footprint, because computing power will still be consumed to create it. Other non-NFT transactions will fill the blocks. - -#### Blockchains are energy intensive, right now {#blockchains-intensive} - -So yes, there is a carbon footprint associated with creating blocks by mining – and this is a problem for chains like Bitcoin too – but it's not directly the fault of NFTs. - -A lot of mining uses renewable energy sources or untapped energy in remote locations. And there is the argument that the industries that NFTs and cryptocurrencies are disrupting have huge carbon footprints too. But just because existing industries are bad, doesn't mean we shouldn't strive to be better. - -And we are. Ethereum is evolving to make using Ethereum (and by virtue, NFTs) more energy efficient. And that's always been the plan. - -We're not here to defend the environmental footprint of mining, instead we want to explain how things are changing for the better. - -### A greener future... {#a-greener-future} - -For as long as Ethereum has been around, the energy-consumption of mining has been a huge focus area for developers and researchers. And the vision has always been to replace it as soon as possible. [More on Ethereum's vision](/upgrades/vision/) - -This vision is being delivered right now. - -#### A greener Ethereum {#greener-ethereum} - -Ethereum is currently going through a series of upgrades that will replace mining with [staking](/staking/). This will remove computing power as a security mechanism, and reduce Ethereum's carbon footprint by ~99.95%[^1]. In this world, stakers commit funds instead of computing power to secure the network. - -The energy-cost of Ethereum will become the cost of running a home computer multiplied by the number of nodes in the network. If there are 10,000 nodes in the network and the cost of running a home computer is roughly 525kWh per year. That's 5,250,000kWh[^1] per year for the entire network. - -We can use this to compare the future of Ethereum to a global service like Visa. 100,000 Visa transactions uses 149kWh of energy[^2]. In proof-of-stake Ethereum, that same number of transactions would cost 17.4kWh of energy or ~11% of the total energy[^3]. That's without considering the many optimizations being worked on in parallel to the consensus layer and shard chains, like [rollups](/glossary/#rollups). It could be as little as 0.1666666667kWh of energy for 100,000 transactions. - -Importantly this improves the energy efficiency while preserving Ethereum's decentralization and security. Many other blockchains out there might already use some form of staking, but they're secured by a select few stakers, not the thousands that Ethereum will have. The more decentralization, the more secure the system. - -[More on energy estimates](#footnotes-and-sources) - -_We’ve provided the basic comparison to Visa to baseline your understanding of proof-of-stake Ethereum energy consumption against a familiar name. However, in practice, it’s not really correct to compare based on number of transactions. Ethereum’s energy output is time-based. If Ethereum did more or less transactions from one minute to the next, the energy output would stay the same._ - -_It’s also important to remember that Ethereum does more than just financial transactions, it’s a platform for applications, so a fairer comparison might be to many companies/industries including Visa, AWS and more!_ - -#### Timelines {#timelines} - -The process has already started. [The Beacon Chain](/upgrades/beacon-chain/), the first upgrade, shipped in December 2020. This provides the foundation for staking by allowing stakers to join the system. The next step relevant to energy efficiency is to merge the current chain, the one secured by miners, into the Beacon Chain where mining isn't needed. Timelines can't be exact at this stage, but it's estimated that this will happen sometime in 2022. This process is known as The Merge (formerly referred to as the docking). [More on The Merge](/upgrades/merge/). - - - More on Ethereum upgrades + + More on security ## Build with NFTs {#build-with-nfts} @@ -379,71 +337,5 @@ Most NFTs are built using a consistent standard known as [ERC-721](/developers/d - [A beginner's guide to NFTs](https://linda.mirror.xyz/df649d61efb92c910464a4e74ae213c4cab150b9cbcc4b7fb6090fc77881a95d) – _Linda Xie, January 2020_ - [Everything you need to know about the metaverse](https://foundation.app/blog/enter-the-metaverse) – _Foundation team, foundation.app_ - [No, CryptoArtists Aren’t Harming the Planet](https://medium.com/superrare/no-cryptoartists-arent-harming-the-planet-43182f72fc61) +- [Ethereum's energy consumption](/energy-consumption/) - [A country's worth of power, no more](https://blog.ethereum.org/2021/05/18/country-power-no-more/) – _Carl Beekhuizen, May 18 2021_ - - - -### Footnotes and sources {#footnotes-and-sources} - -This explains how we arrived at our energy estimates above. These estimates apply to the network as a whole and are not just reserved for the process of creating, buying, or selling NFTs. - -#### 1. 99.95% energy reduction from mining {#fn-1} - -The 99.95% reduction in energy consumption from a system secured by mining to a system secured by staking is calculated using the following data sources: - -- 44.49 TWh of annualized electrical energy is consumed by mining Ethereum - [Digiconomist](https://digiconomist.net/ethereum-energy-consumption) - -- The average desktop computer, all that's needed to run proof-of-stake, uses 0.06kWh of energy per hour – [Silicon Valley power chart](https://www.siliconvalleypower.com/residents/save-energy/appliance-energy-use-chart) (Some estimates are a little higher at 0.15kWh) - -At the time of writing, there are 140 592 validators from 16 405 unique addresses. -Of those, 87 897 validators are assumed to be staking from home. - -It is assumed the average person staking from home uses a 100 watt desktop personal computer setup to run an average of 5.4 validator clients. - -The 87 897 validators running from home gives us 16 300 users consuming ~1.64 megawatt of energy. - -The rest of the validators are run by custodial stakers such as exchanges and staking services. -It can be assumed that they use 100w per 5.5 validators. This is a gross overestimation to be on the safe side. - -In total, Ethereum on proof-of-stake therefore consumes something on the order of 2.62 megawatt, which is about the same as a small American town. - -This is a reduction of at least 99.95% in total energy usage from the Digiconomist estimate of 44.94 TWh per year that the Ethereum miners currently consume. - -#### 2. Visa energy consumption {#fn-2} - -The cost of 100,000 Visa transactions is 149 kwH - [Bitcoin network average energy consumption per transaction compared to VISA network as of 2020, Statista](https://www.statista.com/statistics/881541/bitcoin-energy-consumption-transaction-comparison-visa/) - -Year-ending September 2020 they processed 140,839,000,000 transactions – [Visa financials report Q4 2020](https://s1.q4cdn.com/050606653/files/doc_financials/2020/q4/Visa-Inc.-Q4-2020-Operational-Performance-Data.pdf) - -#### 3. Energy usage for 100,000 transactions on a sharded proof-of-stake network {#fn-3} - -It's estimated that scalability upgrades will allow the network to process between 25,000 and 100,000 transactions per second, with [100,000 as the theoretical maximum right now](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698). - -[Vitalik Buterin on transactions per second potential with sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) - -At the bare minimum, sharding will allow 64 times the amount of transactions as today which sits at around 15 transactions. That's the amount of shard chains (extra data and capacity) being introduced. [More on shard chains](/upgrades/sharding/) - -That means we can estimate how long it will take to process 100,000 transactions so we can compare it to the Visa example above. - -- `15 * 64 = 960` transactions per second. -- `100,000 / 960 = 104.2` seconds to process 100,000 transactions. - -In 104.2 seconds, the Ethereum network will use the following amount of energy: - -`1.44kWh daily usage * 10,000 network nodes = 14,400kWh` per day. - -There are 86,400 seconds in a day, so `14,400 / 86,400 = 0.1666666667kWh` per second. - -If we multiply that by the amount of time it takes to process 100,000 transaction: `0.1666666667 * 104.2 = 17.3666666701 kWh`. - -That is **11.6554809866%** of the energy consumed by the same amount of transactions on Visa. - -And remember, this is based on the minimum amount of transactions that Ethereum will be able to handle per second. If Ethereum reaches its potential of 100,000 transactions per second, 100,000 transactions would consume 0.1666666667kWh. - -To put it another way, if Visa handled 140,839,000,000 transactions at a cost of 149 kWh per 100,000 transactions that's 209,850,110 kWh energy consumed for the year. - -Ethereum in a single year stands to consume 5,256,000 kWh. With a potential of 788,940,000,000 - 3,153,600,000,000 transactions processed in that time. - - - If you think these stats are incorrect or can be made more accurate, please raise an issue or PR. These are estimates by the ethereum.org team made using publicly accessible information and the planned Ethereum design. This doesn't represent an official promise from the Ethereum Foundation. - diff --git a/src/content/security/index.md b/src/content/security/index.md index a59d4829be2..5cbe8cc95ea 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -214,6 +214,14 @@ As a general rule, staff will never communicate with you through private, unoffi +### 'Eth2' token scam {#eth2-token-scam} + +In the run-up to [The Merge](/upgrades/merge/), scammers took advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2', and no other legitimate token was introduced with The Merge. The ETH that you owned before The Merge is the same ETH now. There is **no need to take any action related to your ETH to account for the switch from proof-of-work to proof-of-stake**. + +Scammers may appear as "support", telling you that if you deposit your ETH, you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. + +_Note: There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase), but these are not something you need to "migrate to."_ + ### Phishing scams {#phishing-scams} Phishing scams are another increasingly common angle that scammers will use to attempt to steal your wallet's funds. @@ -240,7 +248,7 @@ These fraudulent brokers find their targets by using fake accounts on YouTube to ### Crypto mining pool scams {#mining-pool-scams} -Mining pool scams involve people contacting you unsolicited, and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. +As of September 2022, mining on Ethereum is no longer possible. However, mining pool scams still exist. Mining pool scams involve people contacting you unsolicited and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address, and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. Bottom line, be wary of people who contact you on social media asking for you to be part of a mining pool. Once you lose your crypto, it is gone. @@ -252,14 +260,6 @@ Some things to remember: [Man loses $200k in mining pool scam](https://www.reddit.com/r/CoinBase/comments/r0qe0e/scam_or_possible_incredible_payout/) -### 'Eth2' token scam {#eth2-token-scam} - -With [The Merge](/upgrades/merge/) coming in 2022, scammers have taken advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2' or any other new token introduced with The Merge. The ETH that you own today will continue to be the same ETH after The Merge, and there is no need to do any swaps of your ETH for The Merge. - -Scammers may appear in the form of "support" telling you if you deposit your ETH you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. - -_Note: There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase), but these are not something you need to "migrate to."_ - ### Airdrop scams {#airdrop-scams} Airdrop scams involve a scam project airdropping an asset (NFT, token) into your wallet and sending you to a scam website to claim the airdropped asset. You will get prompted to sign in with your Ethereum wallet and "approve" a transaction when attempting to claim. This transaction compromises your account by sending your public and private keys to the scammer. An alternative form of this scam may have you confirm a transaction that sends funds to the scammer's account. diff --git a/src/content/social-networks/index.md b/src/content/social-networks/index.md index 76c752cd583..96b4cc78311 100644 --- a/src/content/social-networks/index.md +++ b/src/content/social-networks/index.md @@ -78,9 +78,9 @@ Users use the platform's native ERC-20 token $MIND to pay for items. Users can a Reddit has [touted Community Points](https://cointelegraph.com/news/reddit-to-reportedly-tokenize-karma-points-and-onboard-500m-new-users), which are [ERC-20 tokens](/developers/docs/standards/tokens/erc-20/) that users can earn by posting quality content and contributing to online communities (subreddits). You can redeem these tokens within a subreddit to [get exclusive privileges and perks](https://www.reddit.com/community-points/). For this project, Reddit is working with Arbitrum, a [layer 2](/layer-2/) rollup designed to scale Ethereum transactions. -The program is already live, with the r/CryptoCurrency subreddit [running its version of Community Points called "Moons"](https://www.reddit.com/r/CryptoCurrency/wiki/moons_wiki). Per the official description, Moons "reward posters, commenters, and moderators for their contributions to the subreddit." Because these tokens are on the blockchain (users receive them in wallets), they are independent of Reddit and cannot be taken away. +The program is already live, with the r/CryptoCurrency subreddit [running its version of Community Points called "Moons"](https://www.reddit.com/r/CryptoCurrency/wiki/moons_wiki). Per the official description, Moons "reward posters, commenters, and moderators for their contributions to the subreddit." Because these tokens are on the blockchain (users receive them in wallets), they are independent of Reddit and cannot be taken away. -After concluding a beta phase on the Rinkeby testnet, Reddit Community Points are now on [Arbitrum Nova](https://nova.arbitrum.io/), a blockchain that combines properties of a [validium](/developers/docs/scaling/validium/) and an [optimistic rollup](/developers/docs/scaling/optimistic-rollups/). Besides using Community Points to unlock special features, users can also trade them for fiat on exchanges. Also, the amount of Community Points a user owns determines their influence on the decision-making process within the community. +After concluding a beta phase on the Rinkeby testnet, Reddit Community Points are now on [Arbitrum Nova](https://nova.arbitrum.io/), a blockchain that combines properties of a [validium](/developers/docs/scaling/validium/) and an [optimistic rollup](/developers/docs/scaling/optimistic-rollups/). Besides using Community Points to unlock special features, users can also trade them for fiat on exchanges. Also, the amount of Community Points a user owns determines their influence on the decision-making process within the community. ### Twitter {#twitter} diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index b1e24cca95a..a030cf6de9b 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -67,17 +67,10 @@ Typically ERC-20 liquidity tokens are issued to stakers that represents the valu -Currently, withdrawing funds from a validator on the Beacon Chain is not possible, which currently limits the ability to actually redeem your liquidity token for the ETH rewards locked in the consensus layer. -Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, effectively allowing you to "withdraw" without actually removing ETH from the Beacon Chain. - - - -Pooled stakers do not need to do anything to prepare for The Merge. - -However, as The Merge approaches, be on high alert for scammers. **You do not need to upgrade your ETH or staked ETH tokens** for the transition to proof-of-stake. +Currently, withdrawing funds from an Ethereum validator is not possible, which limits the ability to actually _redeem_ your liquidity token for the ETH rewards locked in the consensus layer. -Learn more about [The Merge](/upgrades/merge/) +Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, allowing you to sell your staking position, effectively "withdrawing" without actually removing ETH from the staking contract. diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index a1cbfb54500..4fdccd37461 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -70,27 +70,13 @@ Have a suggestion for a staking-as-a-service provider we missed? Check out our [ -Yes. Each account is comprised of both signing keys, and withdrawal keys. In order for a validator to attest to the state of the chain, participate in sync committees and propose blocks, the signing keys much be readily accessible by a validator client. These must be connected to the internet in some form, and are thus inherently considered to be "hot" keys. This is a requirement for your validator to be able to attest, and thus the keys used to transfer or withdraw funds are separated for security reasons. +Yes. Each account is comprised of both signing keys, and withdrawal keys. In order for a validator to attest to the state of the chain, participate in sync committees and propose blocks, the signing keys must be readily accessible by a validator client. These must be connected to the internet in some form, and are thus inherently considered to be "hot" keys. This is a requirement for your validator to be able to attest, and thus the keys used to transfer or withdraw funds are separated for security reasons. All of these keys can always be regenerated in a reproducible manner using your 24-word mnemonic seed phrase. Make certain you back this seed phrase up safely or you will be unable to generate your withdraw keys when the time comes. - When you stake 32 ETH with a SaaS provider, that ETH is still deposited to the official staking deposit contract. As such, SaaS stakers are currently limited by the same withdrawal restrictions as solo stakers. This means that staking your ETH is currently a one-way deposit. This will be the case until the Shanghai upgrade planned to follow the Merge. - - - - After the Merge, SaaS stakers will begin to receive unburnt transaction fees/tips. Check with your provider to determine how to update your settings to include an Ethereum address you control where these funds will be sent when the time comes. - -The Merge will not enable the ability to withdraw your stake or protocol rewards; this feature is planned for the Shanghai upgrade, which will follow the Merge by an estimated six months to a year. - - - -SaaS stakers do not need to do anything to prepare for The Merge. - -There are a few things node operators must attend to for this upgrade. Check with your staking provider for assurance their systems are ready to go. - -Learn more about [The Merge](/upgrades/merge/) + When you stake 32 ETH with a SaaS provider, that ETH is still deposited to the official staking deposit contract. As such, SaaS stakers are currently limited by the same withdrawal restrictions as solo stakers. This means that staking your ETH is currently a one-way deposit. This will be the case until the Shanghai upgrade. diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 4f64ba0b2e0..19de7421f97 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -9,7 +9,7 @@ image: ../../../assets/staking/leslie-solo.png alt: Leslie the rhino on her own computer chip. sidebarDepth: 2 summaryPoints: - - Receive maximum rewards directly from the protocol (including unburnt fees after The Merge) for keeping your validator properly functioning and online + - Receive maximum rewards directly from the protocol for keeping your validator properly functioning and online - Run home hardware and personally add to the security and decentralization of the Ethereum network - Remove trust, and never give up control of the keys to your funds --- @@ -58,7 +58,7 @@ As much as we wish that solo staking was accessible and risk free to everyone, t

Ethereum security and scam prevention

- Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the Shanghai upgrade following The Merge. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. + Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the upcoming Shanghai upgrade. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. Hardware occasionally fails, network connections error out, and client software occasionally needs upgrading. Node maintenance is inevitable and will occasionally require your attention. You'll want to be sure you stay aware of any anticipated network upgrades, or other critical client upgrades. @@ -89,10 +89,6 @@ The Staking Launchpad is an open source application that will help you become a - -Note for existing stakers: The Merge is approaching, which brings a few changes since staking was launched. Make sure you're prepared with the Merge readiness checklist over on the Staking Launchpad. - - ## What to consider with node and client setup tools {#node-tool-considerations} There are a growing number of tools and services to help you solo stake your ETH, but each come with different risks and benefits. @@ -130,7 +126,9 @@ Have a suggestion for a staking tool we missed? Check out our [product listing p These are a few of the most common questions about staking that are worth knowing about. -A validator is a virtual entity that lives on the Beacon Chain and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. + +A _validator_ is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A _validator client_ is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. + @@ -180,18 +178,6 @@ Offline penalties are proportional to how many others are offline at the same ti More on rewards and penalties - -Stakers currently running a consensus layer client (Beacon Chain) will also be required to run an execution layer client after The Merge. The new Engine API will be used to interface between the two layers, requiring a JWT secret. If you currently run a Beacon Chain without an execution layer client, you will need to sync the execution layer before The Merge to stay in sync with the network. - -The Merge will also bring unburnt transaction fees to validators. These fees do not accumulate in the balance associated with the validator keys but instead can be directed to a regular Ethereum address of your choice. To receive your tips (priority fees) from proposed blocks, you should update your client settings with the address you want your tips sent to. - -Links to individual client documentation and additional information can be found on the Merge readiness checklist over on the Launchpad. - - -Merge readiness checklist - - - ## Further reading {#further-reading} - [Ethereum's Client Diversity Problem](https://hackernoon.com/ethereums-client-diversity-problem) - _@emmanuelawosika 2022_ diff --git a/src/content/translations/ca/community/grants/index.md b/src/content/translations/ca/community/grants/index.md index 14790a21ae8..29f41198bbf 100644 --- a/src/content/translations/ca/community/grants/index.md +++ b/src/content/translations/ca/community/grants/index.md @@ -32,7 +32,6 @@ Aquests projectes han creat les seves pròpies subvencions per projectes enfocad - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) ecosystem fund_ - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blockchain funding & Ethereum grants_ -- [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) decentralized exchange_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finance ecosystem_ - [mStable Grants Program](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) community_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _Ecosistema [The Graph](https://thegraph.com/)_ diff --git a/src/content/translations/de/community/grants/index.md b/src/content/translations/de/community/grants/index.md index b67dfcfc1ac..fafd28db306 100644 --- a/src/content/translations/de/community/grants/index.md +++ b/src/content/translations/de/community/grants/index.md @@ -32,7 +32,6 @@ Diese Projekte haben ihre eigenen Zuschüsse für Projektvorhaben zur Entwicklun - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/)-Ökosystemfonds_ - [Programm für Verbundzuschüsse](https://compoundgrants.org/) – _[Verbund](https://compound.finance/)-Finanzökosystem_ - [Consensys-Zuschussprogram](https://consensys.net/grants/) – _[Consensys](https://consensys.net/)-Blockchain-Finanzierung und Ethereum-Zuschüsse_ -- [dYdX-Zuschussprogram](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) dezentralisierte Börse_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/)-Finanzökosystem_ - [mStable-Zuschussprogram](https://docs.mstable.org/advanced/grants-program) – _[mStable](https://mstable.org/)-Community_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/)-Ökosystem_ diff --git a/src/content/translations/de/developers/docs/nodes-and-clients/index.md b/src/content/translations/de/developers/docs/nodes-and-clients/index.md index 086cfa86e34..9fc09a3436f 100644 --- a/src/content/translations/de/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/de/developers/docs/nodes-and-clients/index.md @@ -119,7 +119,7 @@ Diese Tabelle gibt einen Überblick über die verschiedenen Clients. Sie alle be | [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, MacOS | Mainnet, Görli, Rinkeby, Ropsten | Snap, Full | Archive, Pruned | | [Nethermind](http://nethermind.io/) | C#, .NET | Linux, Windows, MacOS | Mainnet, Görli, Ropsten, Rinkeby und weitere | Fast, Beam, Archive | Archive, Pruned | | [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, MacOS | Mainnet, Rinkeby, Ropsten, Görli und weitere | Fast, Full | Archive, Pruned | -| [Erigon](https://github.com/ledgerwatch/erigon) | Los | Linux, Windows, MacOS | Mainnet, Görli, Rinkeby, Ropsten | Full | Archive, Pruned | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, MacOS | Mainnet, Görli, Rinkeby, Ropsten | Full | Archive, Pruned | | [OpenEthereum (veraltet)](https://github.com/openethereum/openethereum) | Rust | Linux, Windows, MacOS | Mainnet, Kovan, Ropsten und weitere | Warp, Full | Archive, Pruned | **Beachte, dass OpenEthereum [veraltet](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ist und nicht mehr gewartet wird.** Verwende es mit Vorsicht und wechsle lieber zu einer anderen Client-Implementierung. diff --git a/src/content/translations/es/community/grants/index.md b/src/content/translations/es/community/grants/index.md index 52b289c829f..667dad7525b 100644 --- a/src/content/translations/es/community/grants/index.md +++ b/src/content/translations/es/community/grants/index.md @@ -30,7 +30,6 @@ Estos proyectos han creado sus propias subvenciones para proyectos con fines de - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6): _[fondo de ecosistemas](https://balancer.fi/) Balancer_ - [Programa de subvenciones Compound](https://compoundgrants.org/): _[ecosistema financiero](https://compound.finance/) Compound_ - [Programa de subvenciones Consensys](https://consensys.net/grants/): _[Consensys:](https://consensys.net/) financiación de cadena de bloques & subvenciones de Ethereum_ -- [dYdX Programa de subvenciones](https://dydxgrants.com/): _[dYdX](https://dydx.exchange/) intercambio descentralizado_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/): _[ecosistema financiero](https://lido.fi/) Lido_ - [Programa de subvenciones mStable](https://docs.mstable.org/advanced/grants-program) - _[comunidad](https://mstable.org/) mStable_ - [TheGraph](https://airtable.com/shrdfvnFvVch3IOVm) - _[ecosistema](https://thegraph.com/) The Graph_ diff --git a/src/content/translations/fa/community/grants/index.md b/src/content/translations/fa/community/grants/index.md index 54ae1a086be..9067aac28ab 100644 --- a/src/content/translations/fa/community/grants/index.md +++ b/src/content/translations/fa/community/grants/index.md @@ -32,7 +32,6 @@ lang: fa - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) صندوق اکوسیستم_ - [برنامه‌ی کمک‌های مالی ترکیبی](https://compoundgrants.org/) - _[Compound](https://compound.finance/) اکوسیستم مالی_ - [برنامه‌ی کمک هزینه Consensys](https://consensys.net/grants/) - _[Consensys](https://consensys.net/) تأمین مالی زنجیره‌ی بلوکی و کمک‌های مالی اتریوم_ -- [برنامه‌ی کمک‌های مالی dYdX](https://dydxgrants.com/) - _[dYdX](https://dydx.exchange/) تبادل غیرمتمرکز_ - [سازمان کمک‌های مالی اکوسیستم لیدو (LEGO)](https://lego.lido.fi/) - _[Lido](https://lido.fi/) اکوسیستم مالی_ - [برنامه‌ی کمک هزینه mStable](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) انجمن_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) اکوسیستم_ diff --git a/src/content/translations/fr/community/grants/index.md b/src/content/translations/fr/community/grants/index.md index b86424dbd07..fd9385e61ca 100644 --- a/src/content/translations/fr/community/grants/index.md +++ b/src/content/translations/fr/community/grants/index.md @@ -32,7 +32,6 @@ Ces projets ont crée leurs propres subventions pour encourager d'autres projets - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _Fonds pour l'écosystème [Balancer](https://balancer.fi/)_ - [Programme de subventions Compound](https://compoundgrants.org/) – _Écosystème financier [Compound](https://compound.finance/)_ - [Programme de subventions Consensys](https://consensys.net/grants/) – _Subventions Ethereum et financement de blockchain [Consensys](https://consensys.net/)_ -- [Programme de subventions dYdX](https://dydxgrants.com/) – _Échanges décentralisés [dYdX](https://dydx.exchange/)_ - [Organisme de subvention Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _Écosystème financier [Lido](https://lido.fi/)_ - [Programme de subventions mStable](https://docs.mstable.org/advanced/grants-program) - _Communauté [mStable](https://mstable.org/)_ - [TheGraph](https://airtable.com/shrdfvnFvVch3IOVm) – _Écosystème [TheGraph](https://thegraph.com/)_ diff --git a/src/content/translations/it/community/grants/index.md b/src/content/translations/it/community/grants/index.md index e7abe2fdb2c..36e5f106c13 100644 --- a/src/content/translations/it/community/grants/index.md +++ b/src/content/translations/it/community/grants/index.md @@ -30,7 +30,6 @@ Questi progetti hanno creato le proprie sovvenzioni per progetti volti a svilupp - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) ecosystem fund_ - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) finanziamento della blockchain e sovvenzioni di Ethereum_ -- [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) decentralized exchange_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finance ecosystem_ - [mStable Grants Program](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) community_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) ecosystem_ diff --git a/src/content/translations/ja/community/grants/index.md b/src/content/translations/ja/community/grants/index.md index 5e3304e48bc..87ba13ac7a3 100644 --- a/src/content/translations/ja/community/grants/index.md +++ b/src/content/translations/ja/community/grants/index.md @@ -30,7 +30,6 @@ lang: ja - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/)エコシステムファンド_ - [Compound 助成プログラム](https://compoundgrants.org/) – _[Compound](https://compound.finance/)金融エコシステム_ - [Consensys 助成プログラム](https://consensys.net/grants/) – _[Consensys](https://consensys.net/)ブロックチェーン資金調達およびイーサリアム助成プログラム_ -- [dYdX 助成プログラム](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/)分散型取引所_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/)金融エコシステム_ - [mStable](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/)コミュニティ_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/)エコシステム_ diff --git a/src/content/translations/nl/community/grants/index.md b/src/content/translations/nl/community/grants/index.md index 4067cb91c63..edab89a052d 100644 --- a/src/content/translations/nl/community/grants/index.md +++ b/src/content/translations/nl/community/grants/index.md @@ -32,7 +32,6 @@ Deze projecten hebben hun eigen beurzen gecreëerd voor projecten die gericht zi - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) ecosysteem fonds_ - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blockchain funding & Ethereum grants_ -- [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) gedecentraliseerde uitwisseling_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finance ecosystem_ - [mStable Grants Program](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) gemeenschap_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/)-ecosysteem_ diff --git a/src/content/translations/ro/community/grants/index.md b/src/content/translations/ro/community/grants/index.md index 3ffeb965993..46402efc24f 100644 --- a/src/content/translations/ro/community/grants/index.md +++ b/src/content/translations/ro/community/grants/index.md @@ -32,7 +32,6 @@ Aceste proiecte și-au creat propriile granturi pentru proiecte care vizează de - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) ecosystem fund_ - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blockchain funding & Ethereum grants_ -- [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) decentralized exchange_ - [Lido Ecosystem Grants Organisation (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finance ecosystem_ - [mStable Grants Program](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) community_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) ecosystem_ diff --git a/src/content/translations/ru/community/grants/index.md b/src/content/translations/ru/community/grants/index.md index d13c95b90d8..d7dd677b96e 100644 --- a/src/content/translations/ru/community/grants/index.md +++ b/src/content/translations/ru/community/grants/index.md @@ -30,7 +30,6 @@ lang: ru - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) — _фонд экосистемы [Balancer](https://balancer.fi/)_ - [Программа грантов Compound](https://compoundgrants.org/) — _финансовая экосистема [Compound](https://compound.finance/)_ - [Программа грантов Consensys](https://consensys.net/grants/) — _гранты Ethereum и финансирование блокчейна [Consensys](https://consensys.net/)_ -- [Программа грантов dYdX](https://dydxgrants.com/) — _децентрализованная биржа [dYdX](https://dydx.exchange/)_ - [Организация грантов Lido Ecosystem (LEGO)](https://lego.lido.fi/) — _финансовая экосистема [Lido](https://lido.fi/)_ - [Программа грантов mStable](https://docs.mstable.org/advanced/grants-program) — _сообщество [mStable](https://mstable.org/)_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) — _экосистема [The Graph](https://thegraph.com/)_ diff --git a/src/content/translations/sw/community/grants/index.md b/src/content/translations/sw/community/grants/index.md index 1633a038ba7..977a514deb9 100644 --- a/src/content/translations/sw/community/grants/index.md +++ b/src/content/translations/sw/community/grants/index.md @@ -30,7 +30,6 @@ Miradi hii imeunda misaada yao kwa miradi inayolenga kukuza na kujaribu teknoloj - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) - _fedha za ikolojia ya [Balancer](https://balancer.fi/)_ - [Mpango wa Ruzuku za Compound](https://compoundgrants.org/) - _[Compaound](https://compound.finance/) hugharamia ikolojia_ - [Mpango wa Ruzuku wa Consensys](https://consensys.net/grants/) - _[Consensys](https://consensys.net/) fedha za minyororo ya blocku & ruzuku za Ethereum_ -- [Programu ya Ruzuku ya dYdX](https://dydxgrants.com/) - _[dYdX](https://dydx.exchange/) masoko yaliogatuliwa_ - [Shirika la Ruzuku ya Ikolojia ya Lido (LEGO)](https://lego.lido.fi/) - _hugharamia ikolojia ya [Lido](https://lido.fi/)_ - [Programu ya Ruzuku ya mStable](https://docs.mstable.org/advanced/grants-program) - _jamii ya [mStablei](https://mstable.org/)_ - [Grafu](https://airtable.com/shrdfvnFvVch3IOVm) - _Ikolojia ya [Grafu](https://thegraph.com/)_ diff --git a/src/content/translations/tr/community/grants/index.md b/src/content/translations/tr/community/grants/index.md index 9016d198735..90994bcd029 100644 --- a/src/content/translations/tr/community/grants/index.md +++ b/src/content/translations/tr/community/grants/index.md @@ -31,7 +31,6 @@ Bu projeler kendi teknolojilerini geliştirmeye ve deneyimlemeye yönelik olarak - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) Ekosistem Fonu_ - [Compound Hibe Programı](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finans ekosistemi_ - [Consensys Hibe Programı](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blok zinciri fonlama & Ethereum hibeleri_ -- [dYdX Hibe Programı](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) merkeziyetsiz borsa_ - [Lido Ekosistem Hibeleri Organizasyonu (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) finans ekosistemi_ - [mStable Hibe Programı](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) topluluğu_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) ekosistemi_ diff --git a/src/content/translations/tr/whitepaper/index.md b/src/content/translations/tr/whitepaper/index.md index fb680878da8..7e0e7b4a23f 100644 --- a/src/content/translations/tr/whitepaper/index.md +++ b/src/content/translations/tr/whitepaper/index.md @@ -12,7 +12,7 @@ _Bu tanıtım yazısının orijinali 2014 yılında, [Ethereum](/what-is-ethereu _Birkaç yıllık olmasına rağmen, bu teknik raporu güncellemeyi sürdürüyoruz çünkü Ethereum ve vizyonunun yararlı bir referansı ve doğru bir temsili olarak hizmet etmeye devam ediyor. Ethereum hakkındaki en son gelişmeleri ve protokolde nasıl değişikliklerin yapıldığını öğrenmek için [bu kılavuzu](/learn/) öneriyoruz._ -[Ethereum teknik raporunu PDF olarak açın](./whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) +[Ethereum teknik raporunu PDF olarak açın](../../../whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) ## Yeni Nesil Akıllı Sözleşme ve Merkeziyetsiz Uygulama Platformu {#a-next-generation-smart-contract-and-decentralized-application-platform} diff --git a/src/content/translations/zh/community/grants/index.md b/src/content/translations/zh/community/grants/index.md index f4e06d67107..2e0c286b782 100644 --- a/src/content/translations/zh/community/grants/index.md +++ b/src/content/translations/zh/community/grants/index.md @@ -32,7 +32,6 @@ lang: zh - [Balancer](https://balancergrants.notion.site/Balancer-Community-Grants-23e562c5bc4347cd8304637bff0058e6) – _[Balancer](https://balancer.fi/) 生态系统基金_ - [Compound 资助计划](https://compoundgrants.org/) – _[Compound](https://compound.finance/) 金融生态系统_ - [Consensys 资助计划](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) 区块链融资与以太坊资助_ -- [dYdX 资助计划](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) 去中心化交易所_ - [Lido 生态系统资助组织 (LEGO)](https://lego.lido.fi/) – _[Lido](https://lido.fi/) 金融生态系统_ - [mStable 资助计划](https://docs.mstable.org/advanced/grants-program) - _[mStable](https://mstable.org/) 社区_ - [The Graph](https://airtable.com/shrdfvnFvVch3IOVm) – _[The Graph](https://thegraph.com/) 生态系统_ diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 463d0d40881..9318069b8b6 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -7,51 +7,43 @@ sidebar: true image: ../../../assets/upgrades/core.png summaryPoint1: The Beacon Chain doesn't change anything about the Ethereum we use today. summaryPoint2: It introduced proof-of-stake to the Ethereum ecosystem. -summaryPoint3: It will coordinate the network, serving as the consensus layer. -summaryPoint4: It is an essential precursor to upcoming scaling upgrades, such as sharding. +summaryPoint3: It was merged with the original Ethereum proof-of-work chain in 2022. +summaryPoint4: The consensus logic and block gossip protocol introduced by the Beacon Chain now secures Ethereum. --- - The Beacon Chain shipped on December 1, 2020. To learn more, explore the data. If you want to help validate the chain, you can stake your ETH. + The Beacon Chain shipped on December 1, 2020. At the time, it was a separate chain to Ethereum Mainnet. It ran proof-of-stake but did not handle any transactions. The Beacon Chain was merged with the original Ethereum Mainnet in 2022 to take over the consensus logic and block propagation for Ethereum. Since The Merge, there has only been one Ethereum chain. -## What does the Beacon Chain do? {#what-does-the-beacon-chain-do} +## What was the Beacon Chain? {#what-is-the-beacon-chain} -The Beacon Chain is a ledger of accounts that conducts and coordinates the network of [stakers](/staking/). It isn't quite like the [Ethereum Mainnet](/glossary/#mainnet) of today. It does not process transactions or handle smart contract interactions. +The Beacon Chain was the name of the original proof-of-stake blockchain that was launched in 2020. It was created to ensure the proof-of-stake consensus logic was sound and sustainable before enabling it on Ethereum Mainnet. Therefore, it ran alongside the original proof-of-work Ethereum. Switching off proof-of-work and switching on proof-of-stake on Ethereum required instructing the Beacon Chain to accept transactions from the original Ethereum chain, bundle them into blocks and then organize them into a blockchain using a proof-of-stake based consensus mechanism. At the same moment, the original Ethereum clients turned off their mining, block propagation and consensus logic, handing that all over to the Beacon Chain. This event was known as [The Merge](/upgrades/merge/). Once The Merge happened, there were no longer two blockchains; there was just one proof-of-stake Ethereum chain. -It is a new consensus engine (or "consensus layer") that will soon take the place of proof-of-work mining, bringing many significant improvements with it. +## What did the Beacon Chain do? {#what-does-the-beacon-chain-do} -The Beacon Chain's role will change over time, but it's a foundational component for [the secure, environmentally friendly and scalable Ethereum we’re working towards](/upgrades/vision/). +The Beacon Chain was the name given to a ledger of accounts that conducted and coordinated the network of Ethereum [stakers](/staking/) before those stakers started validating real Ethereum transactions. It did not process transactions or handle smart contract interactions. + +It introduced the consensus engine (or "consensus layer") that took the place of proof-of-work mining on Ethereum and brought many significant improvements with it. + +The Beacon Chain was a foundational component for [the secure, environmentally friendly and scalable Ethereum we have now](/upgrades/vision/). ## Beacon Chain impact {#beacon-chain-features} ### Introducing staking {#introducing-staking} -The Beacon Chain introduced [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) to Ethereum. This is a new way for you to help keep Ethereum secure. Think of it like a public good that will make Ethereum healthier and earn you more ETH in the process. In practice, staking involves you staking ETH in order to activate validator software. As a staker, you'll run node software that processes transactions and creates new blocks in the chain. +The Beacon Chain introduced [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) to Ethereum. This keeps Ethereum secure and earns validators more ETH in the process. In practice, staking involves staking ETH in order to activate validator software. As a staker, you run the software that creates and validates new blocks in the chain. -Staking serves a similar purpose to [mining](/developers/docs/mining/), but is different in many ways. Mining requires large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also does not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. +Staking serves a similar purpose that [mining](/developers/docs/mining/) used to, but is different in many ways. Mining required large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also did not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. -The transition to proof-of-stake will make Ethereum significantly more secure and decentralized by comparison. The more people that participate in the network, the more decentralized and safe from attacks it becomes. +The transition to proof-of-stake made Ethereum significantly more secure and decentralized by comparison to proof-of-work. The more people that participate in the network, the more decentralized and safe from attacks it becomes. If you're interested in becoming a validator and helping secure the Ethereum, learn more about staking. -### The Merge and the end of mining {#the-merge} - -While the Beacon Chain (or "consensus layer") is already live, it has existed as a separate chain from Mainnet (or the "execution layer") since its genesis. The plan is to swap out the current proof-of-work algorithm on the execution layer today and replace it with the proof-of-stake consensus protocol that the Beacon Chain provides. - -This process is known as **The Merge**, as it will 'merge' the new consensus layer with the existing execution layer and stop the use of mining. - -The Merge will have an immediate and profound impact on the carbon footprint of the Ethereum network. It also sets the stage for future scalability upgrades such as sharding. - -[Learn more about Ethereum energy consumption](/energy-consumption/) - -[Learn more about The Merge](/upgrades/merge/) - ### Setting up for sharding {#setting-up-for-sharding} -After Mainnet merges with the Beacon Chain, the next major upgrade will introduce sharding to the network. +Since the Beacon Chain merged with the original Ethereum Mainnet, the Ethereum community started looking to scaling the network. Proof-of-stake has the advantage of having a registry of all approved block producers at any given time, each with ETH at stake. This registry sets the stage for the ability to divide and conquer but reliably split up specific network responsibilities. @@ -65,7 +57,7 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how the Be ### Beacon Chain and The Merge {#merge-and-beacon-chain} -The Beacon Chain, at first, will exist separately to the Ethereum Mainnet we use today. But eventually they will be connected. The plan is to "merge" Mainnet into the proof-of-stake system that's controlled and coordinated by the Beacon Chain. +At first, The Beacon Chain existed separately from Ethereum Mainnet, but they were merged in 2022. The Merge @@ -73,14 +65,13 @@ The Beacon Chain, at first, will exist separately to the Ethereum Mainnet we use ### Shards and the Beacon Chain {#shards-and-beacon-chain} -Sharding can only safely enter the Ethereum ecosystem with a proof-of-stake consensus mechanism in place. The Beacon Chain introduced staking, which when 'merged' with Mainnet will pave the way for sharding to help further scale Ethereum. +Sharding can only safely enter the Ethereum ecosystem with a proof-of-stake consensus mechanism in place. The Beacon Chain introduced staking, which 'merged' with Mainnet, paving the way for sharding to help further scale Ethereum. Shard chains - - -## Interact with the Beacon Chain {#interact-with-beacon-chain} +## Further Reading - +[More on Ethereum's future upgrades](/upgrades/vision) +[More of proof-of-stake](/develoeprs/docs/consensus-mechanisms/pos) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index d4d48758207..fce582fd2be 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -1,61 +1,49 @@ --- title: The Merge -description: Learn about The Merge - when Mainnet Ethereum joins the Beacon Chain coordinated proof-of-stake system. +description: Learn about The Merge - when Mainnet Ethereum adopted proof-of-stake. lang: en template: upgrade sidebar: true image: ../../../assets/upgrades/merge.png -summaryPoint1: Soon, the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. -summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. -summaryPoint3: This sets the stage for future scaling upgrades including sharding. -summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. +summaryPoint1: Ethereum Mainnet uses proof-of-stake, but this wasn't always the case. +summaryPoint2: The transition from the original proof-of-work mechanism to proof-of-stake was called The Merge. +summaryPoint3: The Merge refers to the original Ethereum Mainnet becoming part of a separate proof-of-stake blockchain called the Beacon Chain, now existing as one chain. +summaryPoint4: The Merge reduced Ethereum's energy consumption by ~99.95%. --- - -The Merge is the most significant upgrade in the history of Ethereum. Extensive testing and bug bounties were undertaken to ensure a safe transition to proof-of-stake. +## What was The Merge? {#what-is-the-merge} -This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you're excited about The Merge, follow the [EF Blog](https://blog.ethereum.org) or the client communication channels for the latest official word on _When Merge?_ - - -## What is The Merge? {#what-is-the-merge} - -The Merge represents the joining of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminates the need for energy-intensive mining and instead secures the network using staked ETH. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. +The Merge was the joining of the original execution layer of Ethereum (the Mainnet that has existed since [genesis](/history/#frontier)) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminated the need for energy-intensive mining and instead enabled the the network to be secured using staked ETH. It was a truly exciting step in realizing the Ethereum vision—more scalability, security, and sustainability. -It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet - with all it's accounts, balances, smart contracts, and blockchain state - continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. +Initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet - with all it's accounts, balances, smart contracts, and blockchain state - continued to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain ran in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge was when these two systems finally came together, and proof-of-work was permanently replaced by proof-of-stake. -Let's consider an analogy. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. +Imagine Ethereum is a spaceship that launched before it was quite ready for an interstellar voyage. With the Beacon Chain, the community built a new engine and a hardened hull. After significant testing, it became time to hot-swap the new engine for the old one mid-flight. This merged the new, more efficient engine into the existing ship enabling it to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -Since [genesis](/history/#frontier), proof-of-work has secured Mainnet. This is the Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. +Proof-of-work secured Ethereum Mainnet from genesis until The Merge. This allowed the Ethereum blockchain we're all used to to come into existence in July 2015 with all its familiar features—transactions, smart contracts, accounts, etc. -Throughout Ethereum's history, developers have been hard at work preparing for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created, which has since existed as a separate blockchain to Mainnet, running in parallel. +Throughout Ethereum's history, developers prepared for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created as a separate blockchain to Mainnet, running in parallel. -The Beacon Chain has not been processing Mainnet transactions. Instead, it has been reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, the Beacon Chain's time to reach consensus on more is rapidly approaching. After The Merge, the Beacon Chain will be the consensus engine for all network data, including execution layer transactions and account balances. +The Beacon Chain was not originally processing Mainnet transactions. Instead, it was reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, it became time for the Beacon Chain to reach consensus on real world data. After The Merge, the Beacon Chain became the consensus engine for all network data, including execution layer transactions and account balances. -The Merge represents the official switch to using the Beacon Chain as the engine of block production. Mining will no longer be the means of producing valid blocks. Instead, the proof-of-stake validators assume this role and will be responsible for processing the validity of all transactions and proposing blocks. +The Merge represented the official switch to using the Beacon Chain as the engine of block production. Mining is no longer the means of producing valid blocks. Instead, the proof-of-stake validators have adopted this role and are now responsible for processing the validity of all transactions and proposing blocks. -No history is lost. As Mainnet gets merged with the Beacon Chain, it will also merge the entire transactional history of Ethereum. You don't need to do anything. Your funds are safe. +No history was lost in The Merge. As Mainnet merged with the Beacon Chain, it also merged the entire transactional history of Ethereum. -This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about ether issuance before and after The Merge. +This transition to proof-of-stake changed the way ether is issued. Learn more about ether issuance before and after The Merge. -## What do I need to do to get ready? {#preparing-for-the-merge} - -The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term some folks will need to take action to be fully prepared. - ### Users and holders {#users-holders} -**You do not need to do anything to protect your funds entering The Merge.** - -_This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, as well as non-node-operating stakers, **you do not need to do anything with your funds or wallet before The Merge.** +**The Merge did not change anything for holders/users.** -Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds held in your wallet before The Merge will still be accessible after The Merge. **No action is required to upgrade on your part.** +_This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, as well as non-node-operating stakers, **you do not need to do anything with your funds or wallet to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before—people telling you otherwise are likely scammers. -As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in an attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remained intact and unaltered by the transition to proof-of-stake. Any funds held in your wallet before The Merge will are still accessible after The Merge. **No action is required to upgrade on your part.** [More on Ethereum security](/security/#eth2-token-scam) @@ -63,49 +51,44 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for Key action items include: -1. Run _both_ a consensus layer client and an execution layer client; third-party endpoints to obtain execution data will be unavailable after The Merge. -1. Authenticate both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate. -1. Set a `fee recipient` address to receive your earned transaction fee tips/MEV. +1. Run _both_ a consensus client and an execution client; third-party endpoints to obtain execution data no longer work since The Merge. +2. Authenticate both execution and consensus clients with a shared JWT secret so they can securely communicate. +3. Set a `fee recipient` address to receive your earned transaction fee tips/MEV. -Not completing the first two items above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. +Not completing the first two items above items will result in your node being seen as "offline" until both layers are synced and authenticated. Not setting a `fee recipient` will still allow your validator to behave as usual, but you will miss out on unburnt fee tips and any MEV you would have otherwise earned in blocks your validator proposes. - -For more detailed information and a summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. - -Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe.](#users-holders) -You probably are already running an execution layer client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an execution layer client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. +Up until The Merge, an execution client (such as Geth, Erigon, Besu or Nethermind) was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload now also depends on the validity of the "consensus block" it is contained within. -As a result, a full Ethereum node after The Merge requires both an execution layer client and a consensus layer client. These two clients work together using a new Engine API. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. +As a result, a full Ethereum node now requires both an execution client and a consensus client. These two clients work together using a new Engine API. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. Key action items include: -- Install a consensus layer client in addition to an execution layer client +- Install a consensus client in addition to an execution client - Authenticate execution and consensus clients with a shared JWT secret so they can securely communicate with one another. -Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. +Not completing the above items will result in your node appearing to be "offline" until both layers are synced and authenticated. -Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as many of the details apply to all node operators. -The Merge comes with changes to consensus, which also includes changes related to: +The Merge came with changes to consensus, which also includes changes related to: - block structure - slot/block timing @@ -116,21 +99,19 @@ The Merge comes with changes to consensus, which also includes changes related t For more information, check out this blog post by Tim Beiko on [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer/). -## What date is The Merge? {#wen-merge} - -The Merge is expected to land within Q3/Q4 2022. The client developers are currently working to a soft deadline of 19th September 2022, but this could change depending upon the success of the final testnet merge (Goerli) in mid-August, continued client refinements and the hashrate of the existing miners continuing in a predictable manner. Everyone is working hard to deliver The Merge as soon as possible. +## The Merge and energy consumption {#merge-and-energy} -## After The Merge {#after-the-merge} +The Merge marked the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Ethereum's energy consumption dropped by an estimated 99.95%, making Ethereum a green blockchain. Learn more about [Ethereum energy consumption](/energy-consumption/). -This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Learn more about [Ethereum energy consumption](/energy-consumption/). +## The Merge and scaling {#merge-and-scaling} -This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). +The Merge also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). ## Misconceptions about The Merge {#misconceptions} +contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum (i.e. run a node). No ETH is required—not before The Merge, not after The Merge, not ever."> There are two types of Ethereum nodes: nodes that can propose blocks and nodes that don't. Nodes that propose blocks are only a small number of the total nodes on Ethereum. This category includes mining nodes under proof-of-work (PoW) and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in proof-of-work or staked ETH in proof-of-stake) in exchange for the ability to occasionally propose the next block and earn protocol rewards. @@ -146,41 +127,38 @@ The ability for anyone to run their own node is _absolutely essential_ to mainta -Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. +title="Misconception: "The Merge failed to reduced gas fees."" +contentPreview="False. The Merge was a change of consensus mechanism, not an expansion of network capacity, and was never intended to lower gas fees."> +Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecated the use of proof-of-work, transitioning to proof-of-stake for consensus, but did not significantly change any parameters that directly influence network capacity or throughput. With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at [layer 2](/layer-2/), while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. [More on gas and fees.](/developers/docs/gas/) +title="Misconception: "Transactions were accelerated substantially by The Merge."" +contentPreview="False. Though some slight changes exist, transaction speed is mostly the same on layer 1 now as it was before The Merge."> A transaction's "speed" can be measured in a few ways, including time to be included in a block and time to finalization. Both of these changes slightly, but not in a way that users will notice. -Historically, on proof-of-work, the target was to have a new block every ~13.3 seconds. On the Beacon Chain, slots occur precisely every 12 seconds, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (i.e. a validator is offline). On proof-of-stake blocks will be produced ~10% more frequently than on proof-of-work. This is a fairly insignificant change and is unlikely to be noticed by users. +Historically, on proof-of-work, the target was to have a new block every ~13.3 seconds. Under proof-of-stake, slots occur precisely every 12 seconds, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (i.e. a validator is offline). In proof-of-stake, blocks are produced ~10% more frequently than on proof-of-work. This was a fairly insignificant change and is unlikely to be noticed by users. -Proof-of-stake introduces the transaction finality concept that did not previously exist. On proof-of-work, the ability to reverse a block gets exponentially more difficult with every passing block mined on top of a transaction, but it never quite reaches zero. Under proof-of-stake, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which validators vote on. When an epoch ends, validators vote on whether to consider the epoch 'justified'. If validators agree to justify the epoch, it gets finalized in the next epoch. Undoing finalized transactions is economically unviable as it would require obtaining and burning over one-third of the total staked ETH. +Proof-of-stake introduced the transaction finality concept that did not previously exist. In proof-of-work, the ability to reverse a block gets exponentially more difficult with every passing block mined on top of a transaction, but it never quite reaches zero. Under proof-of-stake, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which validators vote on. When an epoch ends, validators vote on whether to consider the epoch 'justified'. If validators agree to justify the epoch, it gets finalized in the next epoch. Undoing finalized transactions is economically unviable as it would require obtaining and burning over one-third of the total staked ETH. -Many dapps require a number of proof-of-work block confirmations that take a period of time on par with how long proof-of-stake finality takes. Finality can offer additional security guarantees, but will not significantly speed up transactions. -Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. - -Withdrawals are planned for the Shanghai upgrade, the next major upgrade following The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. +Staked ETH and staking rewards continue to be locked without the ability to withdraw. Withdrawals are planned for the upcoming Shanghai upgrade. -This may seem counterintuitive to the above note that withdrawals are not enabled til the Shanghai upgrade, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. +contentPreview="False. Fee tips/MEV are credited to a non-staking account controlled by the validator, available immediately."> +This may seem counterintuitive to the above note that withdrawals are not enabled til the Shanghai upgrade, but validators DO have immediate access to the fee rewards/MEV earned during block proposals. -The protocol issues ETH as a reward to validators for contributing to consensus. This Beacon Chain accounts for the newly issued ETH, where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. +The protocol issues ETH as a reward to validators for contributing to consensus. The consensus layer accounts for the newly issued ETH, where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. -ETH on the execution layer (Ethereum Mainnet as we know it today) is accounted for separately from the consensus layer. When users execute transactions on Ethereum Mainnet, ETH must be paid to cover the gas, including a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). +ETH on the execution layer is accounted for separately from the consensus layer. When users execute transactions on Ethereum Mainnet, ETH must be paid to cover the gas, including a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). - -The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. - -This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. - -Looking at recent blockchain activity, approximately 10% of all gas fees being paid are currently going to miners in the form of a tip, while the rest is burnt. Outdated predictions estimated this percentage to be much higher, and was calculated when network usage was at all time highs. Extrapolating the 10% number to average recent network activity, it is estimated that the APR for staking will increase to ~7%, approximately 50% higher than the base issuance APR (as of June 2022). - - - -An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. - -The Merge is like changing an engine on a rocketship mid-flight and is designed to be performed without needing to pause anything during the switch. The Merge will be triggered by **[terminal total difficulty (TTD)](/glossary/#terminal-total-difficult)**, which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criterion is met, blocks will go from being built using proof-of-work in one block to being built by proof-of-stake in the next. - -Ethereum does not have downtime. - - ## What happened to 'Eth2'? {#eth2} -The term 'Eth2' has been deprecated as we approach The Merge. - -After merging 'Eth1' and 'Eth2' into a single chain, there will no longer be two distinct Ethereum networks; there will only be Ethereum. +The term 'Eth2' has been deprecated. After merging 'Eth1' and 'Eth2' into a single chain, there is no longer any need to +distinguish between two Ethereum networks; there is just Ethereum. To limit confusion, the community has updated these terms: @@ -234,9 +191,9 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Me ### The Merge and the Beacon Chain {#merge-and-beacon-chain} -The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the current Mainnet execution layer. Once The Merge happens, validators will be assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) will no longer be a valid means of block production. +The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the original Mainnet execution layer. Since The Merge, validators are assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) is no longer a valid means of block production. -Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including sharding. +Blocks are instead proposed by validating nodes that have staked ETH in return for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including sharding. The Beacon Chain @@ -244,13 +201,13 @@ Blocks will instead be proposed by validating nodes that have ether staked for t ### The Merge and the Shanghai upgrade {#merge-and-shanghai} -In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, which will enable the ability for stakers to withdraw. +In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade did not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, which will enable the ability for stakers to withdraw. Stay up-to-date with the [Shanghai upgrade planning issue on GitHub](https://github.com/ethereum/pm/issues/450), or the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. ### The Merge and sharding {#merge-and-data-sharding} -Originally, the plan was to work on sharding before The Merge to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. +Originally, the plan was to work on sharding before The Merge to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority shifted to swapping proof-of-work to proof-of-stake first. Plans for sharding are rapidly evolving, but given the rise and success of layer 2 technologies to scale transaction execution, sharding plans have shifted to finding the most optimal way to distribute the burden of storing compressed calldata from rollup contracts, allowing for exponential growth in network capacity. This would not be possible without first transitioning to proof-of-stake. diff --git a/src/content/upgrades/sharding/index.md b/src/content/upgrades/sharding/index.md index 6279c07bc65..ab6fc5eb02a 100644 --- a/src/content/upgrades/sharding/index.md +++ b/src/content/upgrades/sharding/index.md @@ -8,11 +8,11 @@ image: ../../../assets/upgrades/newrings.png summaryPoint1: Sharding is a multi-phase upgrade to improve Ethereum’s scalability and capacity. summaryPoint2: Sharding provides secure distribution of data storage requirements, enabling rollups to be even cheaper, and making nodes easier to operate. summaryPoint3: They enable layer 2 solutions to offer low transaction fees while leveraging the security of Ethereum. -summaryPoint4: This upgrade is planned to follow The Merge of Mainnet with the Beacon Chain. +summaryPoint4: This upgrade has become more of a focus since Ethereum moved to proof-of-stake. --- - Sharding should ship sometime in 2023, depending on how quickly work progresses after The Merge. These shards will give Ethereum more capacity to store and access data, but they won’t be used for executing code. + Sharding could ship sometime in 2023. Shards will give Ethereum more capacity to store and access data, but they won’t be used for executing code. ## What is sharding? {#what-is-sharding} @@ -31,31 +31,25 @@ Sharding is a good way to scale if you want to keep things decentralized as the Sharding will eventually let you run Ethereum on a personal laptop or phone. So more people should be able to participate, or run [clients](/developers/docs/nodes-and-clients/), in a sharded Ethereum. This will increase security because the more decentralized the network, the smaller the attack surface area. -With lower hardware requirements, sharding will make it easier to run [clients](/developers/docs/nodes-and-clients/) on your own, without relying on any intermediary services at all. And if you can, consider running multiple clients. This can help network health by further reducing points of failure. [Run a Beacon Chain client](/upgrades/get-involved/) +With lower hardware requirements, sharding will make it easier to run [clients](/developers/docs/nodes-and-clients/) on your own, without relying on any intermediary services at all. And if you can, consider running multiple clients. This can help network health by further reducing points of failure.
- At first, you'll need to run a Mainnet (execution layer) client at the same time as your Beacon Chain (consensus later) client. The launchpad will walk you through the hardware requirements and process. + You'll need to run an execution client at the same time as your consensus client. The launchpad will walk you through the hardware requirements and process. ## Shard chains version 1: data availability {#data-availability} Note: The plans for sharding have been evolving as more efficient paths to scaling have been developed. "Danksharding" is a new approach to sharding, which does not utilize the concept of shard "chains" but instead uses shard "blobs" to split up the data, along with "data availability sampling" to confirm all data has been made available. This change in plan solves the same original problem.

- Details below may be out of date with the latest development plans. While we update things, check out The Hitchhiker's Guide to the Ethereum for an excellent breakdown of Ethereum plans after The Merge. + Details below may be out of date with the latest development plans. While we update things, check out The Hitchhiker's Guide to the Ethereum for an excellent breakdown of Ethereum roadmap.
When the first shard chains are shipped they will just provide extra data to the network. They won’t handle transactions or smart contracts. But they’ll still offer incredible improvements to transactions per second when combined with rollups. Rollups are a "layer 2" technology that exists today. They allow dapps to bundle or “roll up” transactions into a single transaction off-chain, generate a cryptographic proof and then submit it to the chain. This reduces the data needed for a transaction. Combine this with all the extra data availability provided by shards and you get 100,000 transactions per second. - - Given recent progress in layer 2 scaling solution research and development, this has prompted the prioritization of transitioning to proof-of-stake ahead of sharding. Sharding will be the focus following The Merge. - -[More on rollups](/developers/docs/scaling/#rollups) - - ## Shard chains version 2: code execution {#code-execution} The plan was always to add extra functionality to shards, to make them more like the [Ethereum Mainnet](/glossary/#mainnet) today. This would allow them to store and execute code and handle transactions, as each shard would contain its unique set of smart contracts and account balances. Cross-shard communication would allow for transactions between shards. @@ -92,25 +86,9 @@ This is still an active discussion point. We’ll update these pages once we kno The Ethereum upgrades are all somewhat interrelated. So let’s recap how the shard chains relate the other upgrades. -### Shards and the beacon chain {#shards-and-beacon-chain} - -The Beacon Chain contains all the logic for keeping shards secure and synced up. The Beacon Chain will coordinate the stakers in the network, assigning them to shards they need to work on. And it will also facilitate communication between shards by receiving and storing shard transaction data that is accessible by other shards. This will give shards a snapshot of Ethereum’s state to keep everything up-to-date. - - - The Beacon Chain - - -### Shards and The Merge {#shards-and-docking} - -By the time additional shards are added, Ethereum Mainnet will already be secured by the Beacon Chain using proof-of-stake. This enables a fertile Mainnet to build shard chains off of, powered by layer 2 solutions that supercharge the scalability. - -It remains to be seen whether Mainnet will exist as the only “smart” shard that can handle code execution – but either way, the decision to expand shards can be revisited as needed. - - - The Merge - +### Shards and the Ethereum blockchain {#shards-and-blockchain} - +The logic for keeping shards secure and synced up is all integrated into the Ethereum clients that build the blockchain. Stakers in the network will be assigned to shards to work on. Shards will have access to snapshots of other shards so they can build a view of Ethereum’s state to keep everything up-to-date. ### Read more {#read-more} diff --git a/src/data/community-events.json b/src/data/community-events.json index 8bec7d8ee89..241afa23554 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -386,7 +386,7 @@ "startDate": "2022-09-09", "endDate": "2022-09-11" }, - { + { "title": "Arab Blockchain Week 2022", "to": "https://www.arabblockchainweek.com/", "sponsor": null, @@ -395,6 +395,15 @@ "startDate": "2022-10-01", "endDate": "2022-10-08" }, + { + "title": "Ethereum Zurich", + "to": "https://www.ethree.ch/ethereumzurich/", + "sponsor": null, + "location": "Zurich, Switzerland", + "description": "UX Hackathon, Ethereum Zurich is a wallet UX hackathon exploring innovative ways of implementing the HOPR protocol into the MetaMask wallet.", + "startDate": "2022-09-16", + "endDate": "2022-09-16" + }, { "title": "ETHBogotá", "to": "https://bogota.ethglobal.com", @@ -404,6 +413,15 @@ "startDate": "2022-10-07", "endDate": "2022-10-09" }, + { + "title": "Leading Privacy Alliance Conference", + "to": "https://www.leadingprivacy.com/devcon", + "sponsor": null, + "location": "Bogotá, Colombia", + "description": "This event will bring together the brightest minds of privacy during DevCon in Bogota.", + "startDate": "2022-10-09", + "endDate": "2022-10-09" + }, { "title": "DeFi Bogotá", "to": "https://2022.defibogota.org/", @@ -493,5 +511,23 @@ "description": "The Ethereum dev conference in Dubai on everything DeFi, NFTs, EVM scaling, layers 2 and more with a focus on decentralization and community projects.", "startDate": "2023-03-14", "endDate": "2023-03-16" + }, + { + "title": "The First Hackathon around Privacy", + "to": "https://www.leadingprivacy.com/istanbul", + "sponsor": null, + "location": "Turkey, Istanbul", + "description": "We will celebrate privacy and discuss latest findings & development, as well as must haves and upcoming opportunities of the Ethereum Ecosystem.", + "startDate": "2023-04-29", + "endDate": "2023-04-30" + }, + { + "title": "ETHMiami", + "to": "https://ethmiami.net/", + "sponsor": null, + "location": "Miami, USA", + "description": "Web3 IRL Hackathon & Ethereum Cultural Fest of the Year.", + "startDate": "2022-11-26", + "endDate": "2022-11-30" } ] diff --git a/src/data/developer-docs-links.yaml b/src/data/developer-docs-links.yaml index c7811137478..e29740e4f52 100644 --- a/src/data/developer-docs-links.yaml +++ b/src/data/developer-docs-links.yaml @@ -79,6 +79,8 @@ to: /developers/docs/consensus-mechanisms/pos/attestations - id: docs-nav-rewards-and-penalties to: /developers/docs/consensus-mechanisms/pos/rewards-and-penalties/ + - id: docs-nav-keys + to: /developers/docs/consensus-mechanisms/pos/keys/ - id: docs-nav-ethereum-stack path: /developers/docs/ items: diff --git a/src/data/execution-bounty-hunters.csv b/src/data/execution-bounty-hunters.csv index 043ce40e234..28f82b18d41 100644 --- a/src/data/execution-bounty-hunters.csv +++ b/src/data/execution-bounty-hunters.csv @@ -22,6 +22,7 @@ HarryR, "Harry Roberts", 5000 p-, "Peter Stöckli", 5000 Dedaub, "Neville Grech", 5000 EthHead, "EthHead", 5000 +axic, "Alex Beregszaszi", 3500 SergioDemianLerner, "Sergio Demian Lerner", 2500 danhper, "Daniel Perez", 2500 yaronvel, "Yaron Velner", 2000 diff --git a/src/data/layer-2/layer-2.json b/src/data/layer-2/layer-2.json index 52dca3a3d59..98ca172f9f4 100644 --- a/src/data/layer-2/layer-2.json +++ b/src/data/layer-2/layer-2.json @@ -50,32 +50,6 @@ } ], "zk": [ - { - "name": "dYdX", - "website": "https://dydx.exchange", - "developerDocs": "https://docs.dydx.exchange/#general", - "l2beat": "https://l2beat.com/projects/dydx/", - "bridge": "https://trade.dydx.exchange/", - "bridgeWallets": [ - "imToken", - "MetaMask", - "WalletConnect", - "Coinbase Wallet", - "Trust Wallet", - "Rainbow Wallet", - "Huobi Wallet", - "Token Pocket", - "Others" - ], - "blockExplorer": "", - "ecosystemPortal": "", - "tokenLists": "", - "noteKey": "", - "purpose": ["exchange"], - "descriptionKey": "dydx-description", - "imageKey": "dydx", - "background": "#121223" - }, { "name": "Loopring", "website": "https://loopring.org/#/", diff --git a/src/data/wallets/wallet-data.ts b/src/data/wallets/wallet-data.ts index 0ea3c6b44fc..5fed817a635 100644 --- a/src/data/wallets/wallet-data.ts +++ b/src/data/wallets/wallet-data.ts @@ -1710,7 +1710,7 @@ const walletData: WalletData[] = [ macOS: false, firefox: false, chromium: false, - hardware: true, + hardware: false, open_source: true, repo_url: "https://github.com/status-im/", non_custodial: true, @@ -1782,6 +1782,54 @@ const walletData: WalletData[] = [ onboard_documentation: "", documentation: "https://www.aktionariat.com/faq/en#wallet", }, + { + last_updated: "2022-08-21", + name: "Sequence", + image_name: "sequence", + brand_color: "#000000", + url: "https://www.sequence.xyz", + wallet_live_date: "2021-11-04", + active_development_team: true, + languages_supported: ["en"], + twitter: "https://twitter.com/0xsequence", + discord: "https://discord.gg/sequence", + reddit: "https://www.reddit.com/r/0xSequence/", + telegram: "", + ios: false, + android: false, + linux: false, + windows: false, + macOS: false, + firefox: true, + chromium: true, + hardware: false, + open_source: true, + repo_url: "https://github.com/0xsequence/wallet-contracts", + non_custodial: true, + security_audit: [ + "https://docs.sequence.build/wallet-contracts/contract-audits", + ], + scam_protection: true, + hardware_support: false, + walletconnect: true, + rpc_importing: false, + nft_support: true, + connect_to_dapps: true, + staking: false, + swaps: true, + multichain: true, + layer_2: false, + gas_fee_customization: false, + ens_support: true, + erc_20_support: true, + eip_1559_support: true, + buy_crypto: false, + withdraw_crypto: false, + multisig: true, + social_recovery: false, + onboard_documentation: "https://support.sequence.xyz/", + documentation: "https://docs.sequence.xyz/", + }, { last_updated: "2022-08-21", name: "Trezor", @@ -1886,6 +1934,222 @@ const walletData: WalletData[] = [ documentation: "https://support.ledger.com/hc/en-us/categories/4404376139409?docs=true", }, + { + last_updated: "2022-08-19", + name: "Infinity Wallet", + image_name: "infinity_wallet", + brand_color: "#137dc7", + url: "https://infinitywallet.io/", + wallet_live_date: "2019-11-01", + active_development_team: true, + languages_supported: ["en", "es"], + twitter: "https://twitter.com/InfinityWallet", + discord: "https://discordapp.com/invite/SgNjKzF", + reddit: "", + telegram: "", + ios: false, + android: false, + linux: true, + windows: true, + macOS: true, + firefox: false, + chromium: false, + hardware: false, + open_source: false, + repo_url: "", + non_custodial: true, + security_audit: [""], + scam_protection: true, + hardware_support: false, + walletconnect: true, + rpc_importing: false, + nft_support: true, + connect_to_dapps: true, + staking: false, + swaps: true, + multichain: true, + layer_2: true, + gas_fee_customization: true, + ens_support: false, + erc_20_support: true, + eip_1559_support: true, + buy_crypto: true, + withdraw_crypto: true, + multisig: false, + social_recovery: false, + onboard_documentation: "", + documentation: "https://docs.infinitywallet.io/", + }, + { + last_updated: "2022-08-19", + name: "Exodus", + image_name: "exodus", + brand_color: "#1F2033", + url: "https://exodus.com", + wallet_live_date: "2015-12-31", + active_development_team: true, + languages_supported: ["en"], + twitter: "https://twitter.com/exodus_io", + discord: "http://discord.gg/exodus", + reddit: "https://www.reddit.com/r/ExodusWallet", + telegram: "", + ios: true, + android: true, + linux: true, + windows: true, + macOS: true, + firefox: false, + chromium: true, + hardware: false, + open_source: false, + repo_url: "", + non_custodial: true, + security_audit: [ + "internal pen test team", + "internal audit team", + "Bug bounties through HackerOne, up to $100,000 for stealing funds remotely", + "https://hackerone.com/exodus?type=team", + "audit all packages before using", + ], + scam_protection: false, + hardware_support: true, + walletconnect: true, + rpc_importing: false, + nft_support: true, + connect_to_dapps: true, + staking: false, + swaps: true, + multichain: true, + layer_2: false, + gas_fee_customization: true, + ens_support: false, + erc_20_support: true, + eip_1559_support: true, + buy_crypto: true, + withdraw_crypto: false, + multisig: false, + social_recovery: false, + onboard_documentation: "", + documentation: "https://support.exodus.com/", + }, + { + last_updated: "2022-08-22", + name: "Rabby Wallet", + image_name: "rabbywallet", + brand_color: "#FFFFFF", + url: "https://rabby.io", + wallet_live_date: "2021-07-27", + active_development_team: true, + languages_supported: ["en"], + twitter: "https://twitter.com/Rabby_io", + discord: "https://discord.com/invite/seFBCWmUre", + reddit: "", + telegram: "", + ios: false, + android: false, + linux: false, + windows: false, + macOS: false, + firefox: false, + chromium: true, + hardware: false, + open_source: true, + repo_url: "https://github.com/RabbyHub/Rabby", + non_custodial: true, + security_audit: [ + "https://github.com/RabbyHub/Rabby/blob/develop/docs/SlowMist%20Audit%20Report%20-%20Rabby%20browser%20extension%20wallet-2022.03.18.pdf", + ], + scam_protection: true, + hardware_support: true, + walletconnect: true, + rpc_importing: false, + nft_support: true, + connect_to_dapps: true, + staking: false, + swaps: false, + multichain: true, + layer_2: true, + gas_fee_customization: true, + ens_support: false, + erc_20_support: true, + eip_1559_support: true, + buy_crypto: false, + withdraw_crypto: false, + multisig: false, + social_recovery: false, + onboard_documentation: "", + documentation: "", + }, + { + last_updated: "2022-08-22", + name: "Bitcoin.com Wallet", + image_name: "bitcoindotcom", + brand_color: "#F2F7FC", + url: "https://wallet.bitcoin.com", + wallet_live_date: "2017-06-18", + active_development_team: true, + languages_supported: [ + "en", + "ar", + "bg", + "ca", + "zh", + "zh-tw", + "cs", + "de", + "fr", + "hi", + "id", + "it", + "ja", + "ko", + "fa", + "po", + "pt", + "ru", + "es", + "se", + "th", + "tr", + "vi", + ], + twitter: "https://twitter.com/BitcoinCom", + discord: "https://discord.gg/7yHF65s7Z2", + reddit: "", + telegram: "https://t.me/www_Bitcoin_com", + ios: true, + android: true, + linux: false, + windows: false, + macOS: true, + firefox: false, + chromium: false, + hardware: false, + open_source: false, + repo_url: "", + non_custodial: true, + security_audit: [""], + scam_protection: false, + hardware_support: false, + walletconnect: true, + rpc_importing: false, + nft_support: false, + connect_to_dapps: true, + staking: false, + swaps: true, + multichain: true, + layer_2: false, + gas_fee_customization: true, + ens_support: true, + erc_20_support: true, + eip_1559_support: false, + buy_crypto: true, + withdraw_crypto: true, + multisig: false, + social_recovery: false, + onboard_documentation: "http://www.bitcoin.com/get-started/", + documentation: "http://www.bitcoin.com/get-started/", + }, ] export default walletData diff --git a/src/intl/ar/common.json b/src/intl/ar/common.json index 2acadd1ca61..39853baee51 100644 --- a/src/intl/ar/common.json +++ b/src/intl/ar/common.json @@ -42,7 +42,6 @@ "developers-home": "الصفحة الرئيسية للمبرمجين", "docs": "الوثائق", "documentation": "التوثيق", - "dydx-logo": "شعار شركة Dydx", "ecosystem": "النظام البيئي", "edit-page": "تعديل الصفحة", "ef-blog": "مدونة مؤسسة إثيريوم", diff --git a/src/intl/ar/page-dapps.json b/src/intl/ar/page-dapps.json index 92b770ffe35..26a9af9a0dd 100644 --- a/src/intl/ar/page-dapps.json +++ b/src/intl/ar/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "قم بإنشاء معارض فنية، وبناء متاجر، وشراء الأراضي – عالم إثيريوم الافتراضي.", "page-dapps-dapp-description-dark-forest": "اهزم الكواكب في كون لانهائي مُنشأ إجرائيًا ومُحدد بشكل مشفر.", "page-dapps-dapp-description-decentraland": "اجمع وتاجر في الأرض الافتراضية في عالم افتراضي يمكنك استكشافه.", - "page-dapps-dapp-description-dydx": "إمكانية البيع المكشوف أو المواضع المدعومة بنقطة قوة تصل إلى 10x. الإقراض والاقتراض متاحان أيضًا.", "page-dapps-dapp-description-ens": "أسماء سهلة الاستخدام لعناوين إثيريوم والمواقع اللامركزية.", "page-dapps-dapp-description-foundation": "استثمر في إصدارات فريدة من الأعمال الفنية الرقمية وقم بالمتاجرة في القطع مع مشترين آخرين.", "page-dapps-dapp-description-gitcoin": "اربح عملات رقمية من خلال العمل على برامج مفتوحة المصدر.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "شعار Rotki", "page-dapps-desc": "ابحث عن تطبيق إثيريوم للمحاولة.", "page-dapps-doge-img-alt": "رسم توضيحي لدوق يستخدم حاسوبًا", - "page-dapps-dydx-logo-alt": "شعار dYdX", "page-dapps-editors-choice-dark-forest": "اللعب ضد الآخرين لغزو الكواكب وتجربة التوسعة/تكنولوجيا الخصوصية الرائعة في إثيريوم. ربما يكون الأمر واحدًا لأولئك الذين يعرفون إثيريوم بالفعل.", "page-dapps-editors-choice-description": "بعض التطبيقات التي يحبها فريق ethereum.org الآن. اكتشف المزيد من التطبيقات اللامركزية أدناه.", "page-dapps-editors-choice-foundation": "استثمر في الثقافة. اشترِ وتاجر وبع أعمال فنية رقمية وأزياء فريدة من الفنانين والموسيقيين والعلامات التجارية الرائعة.", diff --git a/src/intl/az/common.json b/src/intl/az/common.json index 17addc99538..8b1a69cce3c 100644 --- a/src/intl/az/common.json +++ b/src/intl/az/common.json @@ -41,7 +41,6 @@ "developers-home": "Tərtibatçıların Ana Səhifəsi", "docs": "Sənədlər", "documentation": "Sənədləşdirmə", - "dydx-logo": "Dydx loqosu", "ecosystem": "Ekosistem", "edit-page": "Səhifəni redaktə et", "ef-blog": "Ethereum Fondu üzrə Bloq", diff --git a/src/intl/bg/common.json b/src/intl/bg/common.json index 352346ab367..4f725fd1b11 100644 --- a/src/intl/bg/common.json +++ b/src/intl/bg/common.json @@ -41,7 +41,6 @@ "developers-home": "Начална страница на разработчиците", "docs": "Документи", "documentation": "Документация", - "dydx-logo": "Лого на Dydx", "ecosystem": "Екосистема", "edit-page": "Редактиране на страницата", "ef-blog": "Блог на фондация Етереум", diff --git a/src/intl/bg/page-dapps.json b/src/intl/bg/page-dapps.json index 838351ddb97..5745038a3ca 100644 --- a/src/intl/bg/page-dapps.json +++ b/src/intl/bg/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Създайте картинни галерии, постройте магазини и купувайте земя – един виртуален свят в Етереум.", "page-dapps-dapp-description-dark-forest": "Завладявайте планети в една безкрайна, процедурно генерирана, криптографски обозначена вселена.", "page-dapps-dapp-description-decentraland": "Колекционирайте, търгувайте с виртуална земя във виртуален свят, който може да изследвате.", - "page-dapps-dapp-description-dydx": "Отворени къси или левъридж позиции с левъридж до 10 пъти. Даване и вземане назаем също е възможно.", "page-dapps-dapp-description-ens": "Лесни за употреба имена за адресите в Етереум и децентрализираните сайтове.", "page-dapps-dapp-description-foundation": "Инвестирайте в уникални произведения на дигиталното изкуство и търгувайте артикули с други купувачи.", "page-dapps-dapp-description-gitcoin": "Печелете крипто, докато работите върху софтуер с отворен код.", @@ -94,7 +93,6 @@ "page-dapps-rotki-logo-alt": "Лого на Rotki", "page-dapps-desc": "Намерете приложение на Етереум за проба.", "page-dapps-doge-img-alt": "Илюстрация на дож, който използва компютър", - "page-dapps-dydx-logo-alt": "лого на dYdX", "page-dapps-editors-choice-dark-forest": "Играйте срещу други, за да завладеете планети и да пробвате най-новата технология на Етереум за мащабиране/поверителност. Може би е за тези, които вече са запознати с Етереум.", "page-dapps-editors-choice-description": "Няколко dapps, които екипът на ethereum.org харесва точно в момента. Разгледайте повече dapps по-долу.", "page-dapps-editors-choice-foundation": "Инвестирайте в култура. Купувайте, търгувайте и продавайте уникални дигитални произведения на изкуството и модата от няколко невероятни художници, музиканти и марки.", diff --git a/src/intl/bn/common.json b/src/intl/bn/common.json index 3ed46df6d0a..4009e9d72ba 100644 --- a/src/intl/bn/common.json +++ b/src/intl/bn/common.json @@ -38,7 +38,6 @@ "developers-home": "ডেভেলপার-এর হোম পেজ", "docs": "ডকুমেন্ট", "documentation": "ডকুমেন্টেশন", - "dydx-logo": "Dydx লোগো", "ecosystem": "ইকোসিস্টেম", "edit-page": "পেজ এডিট করুন", "ef-blog": "ইথেরিয়াম ফাউন্ডেশন ব্লগ", diff --git a/src/intl/ca/common.json b/src/intl/ca/common.json index eeed1f8c776..1f79010e802 100644 --- a/src/intl/ca/common.json +++ b/src/intl/ca/common.json @@ -42,7 +42,6 @@ "developers-home": "Pàgina d'inici per a desenvolupadors", "docs": "Documents", "documentation": "Documentació", - "dydx-logo": "Logotip de Dydx", "ecosystem": "Ecosistema", "edit-page": "Edita la pàgina", "ef-blog": "Blog d'Ethereum Foundation", diff --git a/src/intl/ca/page-dapps.json b/src/intl/ca/page-dapps.json index 2e39f28eeb2..42fba45345c 100644 --- a/src/intl/ca/page-dapps.json +++ b/src/intl/ca/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Creeu galeries d'art, construïu botigues i compreu terrenys: un món virtual a Ethereum.", "page-dapps-dapp-description-dark-forest": "Conqueriu planetes en un univers infinit, criptogràficament específic i generat procedimentalment.", "page-dapps-dapp-description-decentraland": "Col·leccioneu i comercialitzeu amb terrenys virtuals en un món virtual que podeu explorar.", - "page-dapps-dapp-description-dydx": "Obriu posicions curtes o profitoses fins a 10x. També es pot prestar i demanar prestat.", "page-dapps-dapp-description-ens": "Noms fàcils d'utilitzar per a adreces Ethereum i llocs web descentralitzats.", "page-dapps-dapp-description-foundation": "Invertiu en edicions úniques d'obres d'art digitals i peces comercials amb altres compradors.", "page-dapps-dapp-description-gitcoin": "Guanyeu criptomonedes treballant en un programari de codi obert.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Logotip de Rotki", "page-dapps-desc": "Trobeu una aplicació Ethereum per provar.", "page-dapps-doge-img-alt": "Il·lustració d'un gos utilitzant un ordinador", - "page-dapps-dydx-logo-alt": "Logotip de dYdX", "page-dapps-editors-choice-dark-forest": "Jugueu contra altres persones per conquerir planetes i proveu la tecnologia puntera d'escalada/privacitat d'Ethereum. Potser una per als qui ja estan familiaritzats amb Ethereum.", "page-dapps-editors-choice-description": "Unes quantes dapps que agraden molt a l'equip d'ethereum-org. Exploreu més dapps a continuació.", "page-dapps-editors-choice-foundation": "Invertiu en cultura. Compreu, comercieu i veneu obres d'art digitals i moda úniques, d'artistes, músics i marques increïbles.", diff --git a/src/intl/cs/common.json b/src/intl/cs/common.json index 5a51ae5a2a2..0b00f670ab3 100644 --- a/src/intl/cs/common.json +++ b/src/intl/cs/common.json @@ -42,7 +42,6 @@ "developers-home": "Domovská stránka pro vývojáře", "docs": "Dokumentace", "documentation": "Dokumentace", - "dydx-logo": "Logo Dydx", "ecosystem": "Ekosystém", "edit-page": "Upravit stránku", "ef-blog": "Blog Ethereum nadace", diff --git a/src/intl/cs/page-dapps.json b/src/intl/cs/page-dapps.json index 1db0df1e818..e2077d71fad 100644 --- a/src/intl/cs/page-dapps.json +++ b/src/intl/cs/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Vytvářejte umělecké galerie, budujte obchody, a kupujte půdu ve virtuálním světě Ethereum.", "page-dapps-dapp-description-dark-forest": "Ovládněte planety v nekonečném, proceduálně generovaném, kryptograficky specifikovaném vesmíru.", "page-dapps-dapp-description-decentraland": "Sbírejte, obchodujte s virtuální půdou ve virtuálním světě, který můžete prozkoumat.", - "page-dapps-dapp-description-dydx": "Otevřete krátké pozice, nebo pozice s až 10násobnou finanční pákou. Dostupné jsou také úvěry a půjčky.", "page-dapps-dapp-description-ens": "Uživatelsky přívětivá jména pro Ethereum adresy a decentralizované stránky.", "page-dapps-dapp-description-foundation": "Investujte do jedinečných edic digitálních uměleckých děl a obchodujte s jinými kupci.", "page-dapps-dapp-description-gitcoin": "Vydělávejte kryptoměny, které fungují díky open-source softwaru.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Logo Rotki", "page-dapps-desc": "Najděte si Ethereum aplikaci, kterou chcete vyzkoušet.", "page-dapps-doge-img-alt": "Ilustrace se psem doge, který používá počítač", - "page-dapps-dydx-logo-alt": "logo Dydx", "page-dapps-editors-choice-dark-forest": "Hrajte proti ostatním, abyste obsadili planety a vyzkoušeli technologii škálování a soukromí Etherea. Možná jen pro ty, kteří už znají Ethereum.", "page-dapps-editors-choice-description": "Pár momentálně nejoblíbenějších dappek týmu ethereum.org. Prozkoumejte další dappky níže.", "page-dapps-editors-choice-foundation": "Investujte do kultury. Kupujte, obchodujte, prodávejte jedinečná digitální díla a módu od několik fantastických umělců, hudebníků, a značek.", diff --git a/src/intl/da/common.json b/src/intl/da/common.json index 08d465f91d7..60c0266140a 100644 --- a/src/intl/da/common.json +++ b/src/intl/da/common.json @@ -42,7 +42,6 @@ "developers-home": "Udviklerens startside", "docs": "Dokumenter", "documentation": "Dokumentation", - "dydx-logo": "Dydx logo", "ecosystem": "Økosystem", "edit-page": "Redigér side", "ef-blog": "Ethereum Foundation Blog", diff --git a/src/intl/de/common.json b/src/intl/de/common.json index e9e83a6c6a1..9b0ffc129dc 100644 --- a/src/intl/de/common.json +++ b/src/intl/de/common.json @@ -42,7 +42,6 @@ "developers-home": "Entwicklerbasis", "docs": "Dokumente", "documentation": "Dokumentation", - "dydx-logo": "Dydx-Logo", "ecosystem": "Ökosystem", "edit-page": "Seite bearbeiten", "ef-blog": "Ethereum Foundation-Blog", diff --git a/src/intl/de/page-dapps.json b/src/intl/de/page-dapps.json index e2ca1d508f2..ef664d3cfb5 100644 --- a/src/intl/de/page-dapps.json +++ b/src/intl/de/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Erschaffen Sie Kunstgalerien, bauen Sie Geschäfte und kaufen Sie Land – eine virtuelle Ethereum-Welt.", "page-dapps-dapp-description-dark-forest": "Erobern Sie Welten in einem unendlichen, prozedural generierten, kryptographisch spezifizierten Universum.", "page-dapps-dapp-description-decentraland": "Sammeln und handeln Sie virtuelles Land in einer virtuellen Welt, die Sie entdecken können.", - "page-dapps-dapp-description-dydx": "Eröffnen Sie Short- oder gehebelte Positionen mit einer bis zu 10-fachen Hebelwirkung. Auch Leihen und Ausleihen ist möglich.", "page-dapps-dapp-description-ens": "Benutzerfreundliche Namen für Ethereum-Adressen und dezentrale Seiten.", "page-dapps-dapp-description-foundation": "Investieren Sie in eine einzigartige Ausgabe von digitaler Kunst und handeln Sie Kunstwerke mit anderen Käufern.", "page-dapps-dapp-description-gitcoin": "Verdienen Sie Kryptowährung, indem Sie an Open-Source-Software arbeiten.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki-Logo", "page-dapps-desc": "Finden Sie eine Ethereum-Anwendung zum Ausprobieren.", "page-dapps-doge-img-alt": "Illustration eines Doge, der einen Computer benutzt", - "page-dapps-dydx-logo-alt": "dYdX-Logo", "page-dapps-editors-choice-dark-forest": "Spielen Sie gegen andere, um Planeten zu erobern, und testen Sie die neueste Skalierungs- und Privatsphäre-Technologie von Ethereum. Vielleicht etwas für diejenigen, die bereits mit Ethereum vertraut sind.", "page-dapps-editors-choice-description": "Ein paar dApps, die das ethereum.org-Team aktuell sehr schätzt. Entdecken Sie unten noch mehr dApps.", "page-dapps-editors-choice-foundation": "Investieren Sie in Kultur. Kaufen, handeln und verkaufen Sie einzigartige digitale Kunst und Mode von einigen unglaublichen Künstlern, Musikern und Marken.", diff --git a/src/intl/el/common.json b/src/intl/el/common.json index 3b31ed69210..a4a470522b3 100644 --- a/src/intl/el/common.json +++ b/src/intl/el/common.json @@ -40,7 +40,6 @@ "developers-home": "Αρχική προγραμματιστών", "docs": "Έγγραφα", "documentation": "Τεκμηρίωση", - "dydx-logo": "Λογότυπο Dydx", "ecosystem": "Οικοσύστημα", "edit-page": "Επεξεργασία σελίδας", "ef-blog": "Ιστολόγιο ιδρύματος Ethereum", diff --git a/src/intl/el/page-dapps.json b/src/intl/el/page-dapps.json index 5787abe37bf..4990f647c20 100644 --- a/src/intl/el/page-dapps.json +++ b/src/intl/el/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "Δημιουργήστε γκαλερί τέχνης, καταστήματα και αγοράστε γη - ένας εικονικός κόσμος στο Ethereum.", "page-dapps-dapp-description-dark-forest": "Κατακτήστε πλανήτες σε ένα άπειρο, δημιουργικό, κρυπτογραφικά καθορισμένο σύμπαν.", "page-dapps-dapp-description-decentraland": "Συλλέξτε και ανταλλάξτε εικονική γη σε έναν εικονικό κόσμο που μπορείτε να εξερευνήσετε.", - "page-dapps-dapp-description-dydx": "Ανοικτές σύντομες ή θέσεις με μόχλευση έως και 10x. Μπορείτε επίσης να δανείσετε ή να δανειστείτε.", "page-dapps-dapp-description-ens": "Φιλικά προς το χρήστη ονόματα διευθύνσεων Ethereum και αποκεντρωμένες ιστοσελίδες.", "page-dapps-dapp-description-foundation": "Επενδύστε σε μοναδικές εκδόσεις ψηφιακών έργων τέχνης και κομματιών με εμπορική αξία με άλλους αγοραστές.", "page-dapps-dapp-description-gitcoin": "Κερδίστε κρυπτονομίσματα συμμετέχοντας σε λογισμικό ανοιχτού κώδικα.", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "Λογότυπο Decentraland", "page-dapps-desc": "Βρείτε και δοκιμάστε μια εφαρμογή του Ethereum.", "page-dapps-doge-img-alt": "Απεικόνιση ενός σκύλου που χρησιμοποιεί υπολογιστή", - "page-dapps-dydx-logo-alt": "Λογότυπο Dydx", "page-dapps-editors-choice-dark-forest": "Παίξτε εναντίον άλλων για να κατακτήσετε τους πλανήτες και να δοκιμάσετε την bleeding-edge τεχνολογία κλιμάκωσης/απορρήτου του Ethereum. Ίσως κάποια για όσους είναι ήδη εξοικειωμένοι με το Ethereum.", "page-dapps-editors-choice-description": "Μερικές αγαπημένες εφαρμογές της ομάδας του ethereum.org. Εξερευνήστε περισσότερα παρακάτω.", "page-dapps-editors-choice-foundation": "Επενδύστε στον πολιτισμό. Αγοράστε, ανταλλάξτε και πουλήστε μοναδικά ψηφιακά έργα τέχνης και μόδας από μερικούς καταπληκτικούς καλλιτέχνες, μουσικούς αλλά και επώνυμα εμπορικά σήματα.", diff --git a/src/intl/en/common.json b/src/intl/en/common.json index 8df348221c9..59ea2af51c1 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -44,7 +44,6 @@ "developers-home": "Developers' home", "docs": "Docs", "documentation": "Documentation", - "dydx-logo": "Dydx logo", "ecosystem": "Ecosystem", "edit-page": "Edit page", "ef-blog": "Ethereum Foundation Blog", diff --git a/src/intl/en/page-dapps.json b/src/intl/en/page-dapps.json index c956e3884ed..2c41d811423 100644 --- a/src/intl/en/page-dapps.json +++ b/src/intl/en/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Create art galleries, build stores, and buy land – an Ethereum virtual world.", "page-dapps-dapp-description-dark-forest": "Conquer planets in an infinite, procedurally-generated, cryptographically-specified universe.", "page-dapps-dapp-description-decentraland": "Collect, trade virtual land in a virtual world you can explore.", - "page-dapps-dapp-description-dydx": "Open short or leveraged positions with leverage up to 10x. Lending and borrowing available too.", "page-dapps-dapp-description-ens": "User-friendly names for Ethereum addresses and decentralized sites.", "page-dapps-dapp-description-foundation": "Invest in unique editions of digital artwork and trade pieces with other buyers.", "page-dapps-dapp-description-gitcoin": "Earn crypto working on open-source software.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki logo", "page-dapps-desc": "Find an Ethereum application to try.", "page-dapps-doge-img-alt": "Illustration of a doge using a computer", - "page-dapps-dydx-logo-alt": "dYdX logo", "page-dapps-editors-choice-dark-forest": "Play against others to conquer planets and try out bleeding-edge Ethereum scaling/privacy technology. Maybe one for those already familiar with Ethereum.", "page-dapps-editors-choice-description": "A few dapps the ethereum.org team are loving right now. Explore more dapps below.", "page-dapps-editors-choice-foundation": "Invest in culture. Buy, trade, and sell unique digital artwork and fashion from some incredible artists, musicians, and brands.", diff --git a/src/intl/en/page-developers-docs.json b/src/intl/en/page-developers-docs.json index a7eece954ef..4ab1d0848ae 100644 --- a/src/intl/en/page-developers-docs.json +++ b/src/intl/en/page-developers-docs.json @@ -15,6 +15,7 @@ "docs-nav-gasper": "Gasper", "docs-nav-weak-subjectivity": "Weak subjectivity", "docs-nav-attestations": "Attestations", + "docs-nav-keys": "Keys", "docs-nav-data-and-analytics": "Data and analytics", "docs-nav-data-and-analytics-description": "How blockchain data is aggregated, organized and implemented into dapps", "docs-nav-data-availability": "Data availability", diff --git a/src/intl/en/page-developers-learning-tools.json b/src/intl/en/page-developers-learning-tools.json index 492be796b34..e106ec2a90f 100644 --- a/src/intl/en/page-developers-learning-tools.json +++ b/src/intl/en/page-developers-learning-tools.json @@ -35,6 +35,8 @@ "page-learning-tools-remix-logo-alt": "Remix logo", "page-learning-tools-sandbox": "Code sandboxes", "page-learning-tools-sandbox-desc": "These sandboxes will give you a space to experiment with writing smart contracts and understanding Ethereum.", + "page-learning-tools-speed-run-ethereum-description": "SpeedRunEthereum is a set of challenges to test your Solidity knowledge using Scaffold-ETH", + "page-learning-tools-speed-run-ethereum-logo-alt": "Speed Run Ethereum logo", "page-learning-tools-studio-description": "A web-based IDE where you can follow tutorials to create and test smart contracts, and build a frontend for them.", "page-learning-tools-vyperfun-description": "Learn Vyper building your own Pokémon game.", "page-learning-tools-vyperfun-logo-alt": "Vyper.fun logo", diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 57a223f4d3b..2d2814f9560 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -16,13 +16,13 @@ "page-eth-flexible-amounts-desc": "ETH is divisible up to 18 decimal places so you don't have to buy 1 whole ETH. You can buy fractions at a time – as little as 0.000000000000000001 ETH if you want.", "page-eth-fuels": "ETH fuels and secures Ethereum", "page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. This fee is an incentive for a block producer to process and verify what you're trying to do.", - "page-eth-fuels-desc-2": "Currently, miners are like the record-keepers of Ethereum—they check and prove that no one is cheating, and perform work for the right to propose a block of transactions. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", - "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", - "page-eth-fuels-staking": "Soon, ETH will become even more important with staking. When you stake your ETH, you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing their ETH deters attackers.", + "page-eth-fuels-desc-2": "Validators are like the record-keepers of Ethereum—they check and prove that no one is cheating. They are randomly selected to propose a block of transactions. Validators who do this work are also rewarded with small amounts of newly-issued ETH.", + "page-eth-fuels-desc-3": "The work validators do, and the capital they stake, keeps Ethereum secure and free of centralized control.", + "page-eth-fuels-staking": "When you stake your ETH, you help secure Ethereum and earn rewards. In this system, the threat of losing ETH deters attackers.", "page-eth-fuels-more-staking": "More on staking", "page-eth-get-eth-btn": "Get ETH", "page-eth-gov-tokens": "Governance tokens", - "page-eth-gov-tokens-desc": "Tokens that represent voting power in decentralized organisations.", + "page-eth-gov-tokens-desc": "Tokens that represent voting power in decentralized organizations.", "page-eth-has-value": "Why does ETH have value?", "page-eth-has-value-desc": "ETH's valuable in different ways to different people.", "page-eth-has-value-desc-2": "For users of Ethereum, ETH is valuable because it lets you pay transaction fees.", diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index 8a51fd56959..e38c27199de 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -124,7 +124,6 @@ "arbitrum-description": "Arbitrum is an Optimistic Rollup that aims to feel exactly like interacting with Ethereum, but with transactions costing a fraction of what they do on L1.", "optimism-description": "Optimism is a fast, simple, and secure EVM-equivalent optimistic rollup. It scales Ethereum's tech while also scaling its values through retroactive public goods funding.", "boba-description": "Boba is an Optimistic Rollup originally forked from Optimism which is a scaling solution that aims to reduce gas fees, improve transaction throughput, and extend the capabilities of smart contracts.", - "dydx-description": "dYdX aims to build a powerful and professional exchange for trading crypto assets where users can truly own their trades and, eventually, the exchange itself.", "loopring-description": "Loopring's zkRollup L2 solution aims to offer the same security guarantees as Ethereum mainnet, with a big scalability boost: throughput increased by 1000x, and cost reduced to just 0.1% of L1.", "zksync-description": "zkSync is a user-centric zk rollup platform from Matter Labs. It is a scaling solution for Ethereum, already live on Ethereum mainnet. It supports payments, token swaps and NFT minting.", "zkspace-description": "The ZKSpace platform consists of three main parts: a Layer 2 AMM DEX utilizing ZK-Rollups technology called ZKSwap, a payment service called ZKSquare, and an NFT marketplace called ZKSea.", diff --git a/src/intl/en/page-staking.json b/src/intl/en/page-staking.json index f8d634f5c94..ca9f6c7b1e5 100644 --- a/src/intl/en/page-staking.json +++ b/src/intl/en/page-staking.json @@ -10,7 +10,7 @@ "page-staking-check-address": "Check deposit address", "page-staking-deposit-address": "Check the deposit address", "page-staking-deposit-address-desc": "If you’ve already followed the setup instructions on the launchpad, you’ll know you need to send a transaction to the staking deposit contract. We recommend you check the address very carefully. You can find the official address on ethereum.org and a number of other trusted sites.", - "page-staking-description": "Staking is the act of depositing 32 ETH to activate validator software. As a validator you’ll be responsible for storing data, processing transactions, and adding new blocks to the blockchain. This will keep Ethereum secure for everyone and earn you new ETH in the process. This process, known as proof-of-stake, is being introduced by the Beacon Chain.", + "page-staking-description": "Staking is the act of depositing 32 ETH to activate validator software. As a validator you’ll be responsible for storing data, processing transactions, and adding new blocks to the blockchain. This will keep Ethereum secure for everyone and earn you new ETH in the process.", "page-staking-hero-title": "How to stake your ETH", "page-staking-hero-header": "Earn rewards while securing Ethereum", "page-staking-hero-subtitle": "Staking is a public good for the Ethereum ecosystem. Any user with any amount of ETH can help secure the network and earn rewards in the process.", @@ -139,7 +139,7 @@ "page-staking-section-comparison-rewards-title": "Rewards", "page-staking-section-comparison-solo-rewards-li1": "Maximum rewards - receive full rewards directly from the protocol", "page-staking-section-comparison-solo-rewards-li2": "You'll get rewards for batching transactions into a new block or checking the work of other validators to keep the chain running securely", - "page-staking-section-comparison-solo-rewards-li3": "After The Merge you'll receive unburnt transaction fees for blocks you propose", + "page-staking-section-comparison-solo-rewards-li3": "You'll also receive unburnt transaction fees for blocks you propose", "page-staking-section-comparison-saas-rewards-li1": "Usually involves full protocol rewards minus monthly fee for node operations", "page-staking-section-comparison-saas-rewards-li2": "Dashboards often available to easily track your validator client", "page-staking-section-comparison-pools-rewards-li1": "Pooled stakers accrue rewards differently, depending on which method of pooled staking chosen", @@ -163,15 +163,15 @@ "page-staking-section-comparison-pools-requirements-li1": "Lowest ETH requirements, some projects require as little as 0.01 ETH", "page-staking-section-comparison-pools-requirements-li2": "Deposit directly from your wallet to different pooled staking platforms or simply trade for one of the staking liquidity tokens", "page-staking-faq-1-question": "What is a validator?", - "page-staking-faq-1-answer": "A validator is a virtual entity that lives on the Beacon Chain and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators.", + "page-staking-faq-1-answer": "A validator is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators.", "page-staking-faq-2-question": "Why do I need to have funds at stake?", "page-staking-faq-2-answer": "A validator has the ability to propose and attest to blocks for the network. To prevent dishonest behavior, users must have their funds at stake. This allows the protocol to penalize malicious actors. Staking is a means to keep you honest, as your actions will have financial consequences.", "page-staking-faq-3-question": "Can I buy 'Eth2'?", - "page-staking-faq-3-answer-p1": "There is no 'Eth2' token native to the protocol, as the native token ether (ETH) will not change with the transition to proof-of-stake. Learn more about The Merge", + "page-staking-faq-3-answer-p1": "There is no 'Eth2' token native to the protocol, as the native token ether (ETH) did not change when Ethereum switched to proof-of-stake.", "page-staking-faq-3-answer-p2": "There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase). Learn more about staking pools", "page-staking-faq-4-question": "Is staking already live?", - "page-staking-faq-4-answer-p1": "Yes and no. Staking has been live since December 1, 2020, but until the Merge happens, the proof-of-stake consensus remains isolated on its own chain, while the existing Ethereum network as we know it continues to operate using proof-of-work. These two chains start separate, but with the Merge, proof-of-work will be fully deprecated, and proof-of-stake will become the sole means of consensus from here-on-out.", - "page-staking-faq-4-answer-p2": "This means that staking is currently live for users to deposit their ETH, run a validator client, and start earning rewards. After the Merge, stakers will earn higher rewards as validators begin to process transactions and earn fee tips on top of protocol rewards. After the Shanghai update (planned to follow the Merge by a few months), stakers will then be able to withdraw rewards and funds from their validator balance.", + "page-staking-faq-4-answer-p1": "Yes. Staking has been live since December 1, 2020", + "page-staking-faq-4-answer-p2": "This means that staking is currently live for users to deposit their ETH, run a validator client, and start earning rewards. After the Shanghai update, stakers will then be able to withdraw rewards and funds from their validator balance.", "page-staking-toc-how-to-stake-your-eth": "How to stake your ETH", "page-staking-toc-comparison-of-options": "Comparison of staking options", "page-staking-toc-faq": "FAQ", diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index 262fe32802b..a5633392409 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -18,11 +18,11 @@ "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by layer 2 rollup solutions.", "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit.", "page-upgrades-vision-security": "Security", - "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks, like a 51% attack. This is a type of attack where if someone controls the majority of the network, they can censor or reorder transactions.", - "page-upgrades-vision-security-desc-3": "The transition to proof-of-stake means that the Ethereum protocol has greater disincentives against attack. This is because in proof-of-stake, the validators who secure the network must stake significant amounts of ETH into the protocol. If they try and attack the network, the protocol can automatically destroy their ETH.", - "page-upgrades-vision-security-desc-5": "This isn't possible in proof-of-work, where the best a protocol can do is force entities who secure the network (the miners) to lose mining rewards they would have otherwise earned. To achieve the equivalent effect in proof-of-work, the protocol would have to be able to destroy all of a miner's equipment if they try and cheat.", - "page-upgrades-vision-security-desc-5-link": "More on proof of work", - "page-upgrades-vision-security-desc-8": "Ethereum's security model also needs to change because of the introduction of sharding. The Beacon Chain will coordinate all of the validators who will be responsible for asserting that all data has been made available, but every node will no longer be required to hold the entire history of the chain. A new role is also anticipated, known as a dedicated block builder, who will work alongside block proposers (validators) for efficient and safe block production. Proof-of-stake is a prerequisite to sharding.", + "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks.", + "page-upgrades-vision-security-desc-3": "In proof-of-stake additional security comes from greater crypto-economic disincentives against attack. This is because, in proof-of-stake, the validators who secure the network must stake significant amounts of ETH into the protocol. If they try and attack the network, the protocol can automatically destroy their ETH.", + "page-upgrades-vision-security-desc-5": "However, it is also important that upgrades that protect validators against denial-of-service attacks, enhance their anonymity, and separate block building and block propagation are implemented soon. These upgrades protect individual validators and the network as a whole against liveness attacks and censorship.", + "page-upgrades-vision-security-desc-5-link": "More on proof-of-stake", + "page-upgrades-vision-security-desc-8": "Ethereum's security model also enables sharding. Validators who will be responsible for asserting that all data has been made available, but individual nodes will no longer be required to hold the entire history of the chain. A new role is also anticipated, known as a dedicated block builder, who will work alongside block proposers (validators) for efficient and safe block production", "page-upgrades-vision-security-desc-10": "Staking also means you don't need to invest in elite hardware to participate directly in consensus. This should encourage more people to become a validator, increasing the network's decentralization and decreasing the attack surface area.", "page-upgrades-vision-security-staking": "Stake ETH", "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH.", @@ -30,11 +30,11 @@ "page-upgrades-vision-staking-lower": "More on staking", "page-upgrades-vision-subtitle": "Grow Ethereum until it's powerful enough to help all of humanity.", "page-upgrades-vision-sustainability": "Sustainability", - "page-upgrades-vision-sustainability-desc-1": "It's no secret that Ethereum and other blockchains like Bitcoin are energy intensive because of mining.", - "page-upgrades-vision-sustainability-desc-2": "But Ethereum is moving towards being secured by ETH via staking, not computing power.", - "page-upgrades-vision-sustainability-desc-3": "Although staking has already been introduced by the Beacon Chain, the Ethereum we use today is still running in parallel until The Merge. One system secured by ETH, the other by computing power.", - "page-upgrades-vision-sustainability-desc-8": "After significant testing, work is nearing completion on merging Mainnet with the new consensus layer. Mainnet will soon be secured by staked ETH and far less energy intensive.", - "page-upgrades-vision-sustainability-subtitle": "Ethereum needs to be greener.", + "page-upgrades-vision-sustainability-desc-1": "Ethereum is now a green blockchain. The energy consumption was reduced by ~99.95% when proof-of-work was swapped for proof-of-stake.", + "page-upgrades-vision-sustainability-desc-2": "Ethereum is now secured via staking, not computing power.", + "page-upgrades-vision-sustainability-desc-3": "This sustainability boost also brings security benefits - staked ether makes it much more expensive to attack the chain than under proof-of-work, but less expensive to secure it as less new ETH has to be issued to pay validators than miners.", + "page-upgrades-vision-sustainability-desc-8": "The move to proof-of-stake made Ethereum greener and more secure. It is a low-carbon platform for building apps and organizations.", + "page-upgrades-vision-sustainability-subtitle": "Ethereum is a green blockchain with strong crypto-economic security.", "page-upgrades-vision-title": "The Ethereum Vision", "page-upgrades-vision-title-1": "Clogged network", "page-upgrades-vision-title-2": "Disk space", diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index eb1036db228..5dbe8cadc8b 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -6,5 +6,8 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-merge-banner-intro": "The Merge is approaching, and comes with changes to Ethereum.", "page-upgrades-merge-banner-content-outdated": "Some content on this page is out-of-date related to these changes. Updates are coming soon.", - "page-upgrades-merge-banner-developers-landing": "Some docs have a banner indicating they are out-of-date. Updates coming soon." + "page-upgrades-merge-banner-developers-landing": "Some docs have a banner indicating they are out-of-date. Updates coming soon.", + "page-upgrades-post-merge-banner-tutorial-ood": "This tutorial is out of date after the merge and may not work. Please raise a PR if you would like to contribute.", + "page-upgrades-post-merge-banner-tutorial-light-node-ood": "This tutorial is out of date after the merge. Light nodes do not currently work on proof-of-stake, but are expected to ship soon.", + "page-upgrades-post-merge-banner-governance-ood": "Some content on this page is out-of-date after the merge. Please raise a PR if you would like to contribute." } diff --git a/src/intl/es/common.json b/src/intl/es/common.json index 50f1265f8ac..134bd1b374a 100644 --- a/src/intl/es/common.json +++ b/src/intl/es/common.json @@ -42,7 +42,6 @@ "developers-home": "Página de inicio para desarrolladores", "docs": "Documentos", "documentation": "Documentación", - "dydx-logo": "Logo de Dydx", "ecosystem": "Ecosistema", "edit-page": "Editar página", "ef-blog": "Blog de Ethereum Foundation", diff --git a/src/intl/es/page-dapps.json b/src/intl/es/page-dapps.json index 12c382f792f..35ac0093aab 100644 --- a/src/intl/es/page-dapps.json +++ b/src/intl/es/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Cree galerías de arte, construya tiendas y compre tierras: un mundo virtual de Ethereum.", "page-dapps-dapp-description-dark-forest": "Conquiste planetas en un universo infinito, generado por procedimientos y especificado criptográficamente.", "page-dapps-dapp-description-decentraland": "Coleccione, comercie con tierras virtuales en un mundo virtual que puede explorar.", - "page-dapps-dapp-description-dydx": "Posiciones abiertas cortas o apalancadas con apalancamiento de hasta 10x. Opciones de prestar y pedir prestado también disponibles.", "page-dapps-dapp-description-ens": "Nombres fáciles de usar para las direcciones de Ethereum y los sitios descentralizados.", "page-dapps-dapp-description-foundation": "Invierta en ediciones únicas de obras de arte digitales y piezas comerciales con otros compradores.", "page-dapps-dapp-description-gitcoin": "Gane criptomonedas trabajando en software de código abierto.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Logo de Rotki", "page-dapps-desc": "Encuentre una aplicación de Ethereum para probar.", "page-dapps-doge-img-alt": "Ilustración de un doge usando un ordenador", - "page-dapps-dydx-logo-alt": "Logo de dYdX", "page-dapps-editors-choice-dark-forest": "Juegue contra otros para conquistar planetas y probar la tecnología de escalado y privacidad de Ethereum de vanguardia. Tal vez uno para aquellos que ya están familiarizados con Ethereum.", "page-dapps-editors-choice-description": "Unas pocas dapps con las que el equipo de ethereum.org está encantado. Explore más aplicaciones a continuación.", "page-dapps-editors-choice-foundation": "Invierta en cultura. Compre, comercie y venda obras de arte digitales exclusivas y moda de artistas, músicos y marcas increíbles.", diff --git a/src/intl/fa/common.json b/src/intl/fa/common.json index 326c36d03ed..8639cf4578a 100644 --- a/src/intl/fa/common.json +++ b/src/intl/fa/common.json @@ -42,7 +42,6 @@ "developers-home": "خانه توسعه دهندگان", "docs": "اسناد", "documentation": "مستندات", - "dydx-logo": "لوگوی dYdX", "ecosystem": "اکوسیستم", "edit-page": "ویرایش صفحه", "ef-blog": "وبلاگ بنیاد اتریوم", diff --git a/src/intl/fa/page-dapps.json b/src/intl/fa/page-dapps.json index dae84691749..92d67593c97 100644 --- a/src/intl/fa/page-dapps.json +++ b/src/intl/fa/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "گالری‌‌های نقاشی بسازید، فروشگاه ایجاد کنید و یا زمین بخرید- جهان مجازی اتریوم.", "page-dapps-dapp-description-dark-forest": "در جهانی بی انتها که به طور خاص رمزنگاری شده و به صورت رویه ای تولید شده است، سیارات را تسخیر کنید.", "page-dapps-dapp-description-decentraland": "در جهانی مجازی که قادر به کشف آن هستید، دور هم جمع شوید و زمینی مجازی را بفروشید.", - "page-dapps-dapp-description-dydx": "موقعیت‌های تجاری کوتاه و یا اهرم‌شده را تا میزان ده برابر باز کنید. قرض دادن و قرض گرفتن نیز در دسترس است.", "page-dapps-dapp-description-ens": "اسامی کاربرپسند برای آدرس‌های اتریوم و سایت‌های متمرکز.", "page-dapps-dapp-description-foundation": "بر روی نسخه‌های منحصر‌به‌فرد از کارهای هنری دیجیتالی سرمایه‌گذاری کنید و قطعات را با دیگر خریداران مبادله کنید.", "page-dapps-dapp-description-gitcoin": "بر روی یک نرم‌افزار با منبع باز کار کنید و ارز دیجیتال دریافت کنید.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "لوگوی Rotki", "page-dapps-desc": "یافتن یک برنامه کاربردی اتریوم برای امتحان.", "page-dapps-doge-img-alt": "تصویر یک دوج درحال استفاده از کامپیوتر", - "page-dapps-dydx-logo-alt": "لوگوی dYdX", "page-dapps-editors-choice-dark-forest": "جلوی بقیه بازی کنید و سیاره‌های دیگر را شکست دهید و تکنولوژی نوپدید سنجش کردن/حریم شخصی اتریوم را امتحان کنید. شاید یک بار، برای آنها که پیشتر با اتریوم آشنایی دارند.", "page-dapps-editors-choice-description": "تعدادی از دپ‌هایی که تیم ethereum.org در حال حاضر عاشقش هستند. دپ‌های بیشتری را در پایین جستجو کنید.", "page-dapps-editors-choice-foundation": "در فرهنگ سرمایه‌گذاری کنید. هنرهای دیجیتال ویژه و مُد را از هنرمندان، نوازندگان و برندهای فوق‌العاده بخرید، مبادله کنید و بفروشید.", diff --git a/src/intl/fi/common.json b/src/intl/fi/common.json index f5435925718..5c74b91a638 100644 --- a/src/intl/fi/common.json +++ b/src/intl/fi/common.json @@ -41,7 +41,6 @@ "developers-home": "Kehittäjien etusivu", "docs": "Dokumentit", "documentation": "Dokumentaatio", - "dydx-logo": "Dydx-logo", "ecosystem": "Ekosysteemi", "edit-page": "Muokkaa sivua", "ef-blog": "Ethereum Foundation -säätiön blogi", diff --git a/src/intl/fr/common.json b/src/intl/fr/common.json index 2341610a0c3..caac283e37c 100644 --- a/src/intl/fr/common.json +++ b/src/intl/fr/common.json @@ -42,7 +42,6 @@ "developers-home": "Page d'accueil des développeurs", "docs": "Docs", "documentation": "Documentation", - "dydx-logo": "Logo Dydx", "ecosystem": "Écosystème", "edit-page": "Modifier la page", "ef-blog": "Blog de l'Ethereum Foundation", diff --git a/src/intl/fr/page-dapps.json b/src/intl/fr/page-dapps.json index 98b8344ad62..50248d8b960 100644 --- a/src/intl/fr/page-dapps.json +++ b/src/intl/fr/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Créez des galeries d'art, construisez des magasins et achetez des terrains – un monde virtuel Ethereum.", "page-dapps-dapp-description-dark-forest": "Conquérez des planètes dans un univers infini, généré de façon procédurale et spécifié par cryptographie.", "page-dapps-dapp-description-decentraland": "Collectez et échangez des terrains virtuels dans un monde virtuel que vous pouvez explorer.", - "page-dapps-dapp-description-dydx": "Ouvrez des positions courtes ou à effet de levier jusqu'à 10x. Prêts et emprunt également disponibles.", "page-dapps-dapp-description-ens": "Noms conviviaux pour les adresses Ethereum et les sites décentralisés.", "page-dapps-dapp-description-foundation": "Investissez dans des éditions uniques d'œuvres d'art numériques et échangez des pièces avec d'autres acheteurs.", "page-dapps-dapp-description-gitcoin": "Gagnez de la cryptomonnaie en travaillant sur des logiciels en open source.", @@ -96,8 +95,7 @@ "page-dapps-rotki-logo-alt": "Logo Rotki", "page-dapps-desc": "Trouvez une application Ethereum a essayer.", "page-dapps-doge-img-alt": "Image d'un Shiba utilisant un ordinateur", - "page-dapps-dydx-logo-alt": "Logo de dYdX", - "page-dapps-editors-choice-dark-forest": "Affrontez d'autres joueurs pour conquérir des planètes et essayez la technologie de pointe de mise à l'échelle/de confidentialité d'Ethereum. À destination uniquement de ceux qui sont familiarisés avec la technologie Ethereum.", + "page-dapps-editors-choice-dark-forest": "Affrontez d'autres joueurs pour conquérir des planètes et essayez la technologie de pointe de passage à l'échelle/de confidentialité d'Ethereum. Seulement pour ceux qui sont familiarisés avec la technologie Ethereum.", "page-dapps-editors-choice-description": "Quelques DApps que l'équipe ethereum.org adorent en ce moment. Découvrez plus DApps ci-dessous.", "page-dapps-editors-choice-foundation": "Investissez dans la culture. Achetez, échangez, et vendez des illustrations numériques uniques et des articles de mode de certains artistes, musiciens et marques incroyables.", "page-dapps-editors-choice-header": "Choix de la rédaction", diff --git a/src/intl/fr/page-layer-2.json b/src/intl/fr/page-layer-2.json index 1e83cc53574..261d0bb4d52 100644 --- a/src/intl/fr/page-layer-2.json +++ b/src/intl/fr/page-layer-2.json @@ -118,7 +118,6 @@ "arbitrum-description": "Arbitrum est un rollup optimiste qui vise à faire ressentir exactement comme si on interagissait avec Ethereum, mais avec des transactions qui coûtent une fraction de ce qu'elles coutent sur la couche 1.", "optimism-description": "Optimistic Ethereum est une chaîne Rollup Optimiste équivalente à l'EVM. Elle vise à être rapide, simple et sécurisée.", "boba-description": "Boba est un rollup optimiste initialement dérivé de Optimism qui est une solution de mise à l'échelle qui vise à réduire les frais de gaz, améliorer le débit des transactions et étendre les capacités des contrats intelligents.", - "dydx-description": "dYdX vise à construire une plateforme d'échange puissante et professionnelle pour le trading de crypto-actifs où les utilisateurs peuvent réellement posséder leurs actifs et, finalement, la plateforme elle-même.", "loopring-description": "La solution de rollup ZK L2 de Loopring vise à offrir les mêmes garanties de sécurité que le réseau principal Ethereum, avec une grande montée en charge : vitesse multipliée par 1000, et coût réduit à seulement 0,1 % du L1.", "zksync-description": "zkSync est une plateforme orientée utilisateur de rollups ZK par Matter Labs. Il s'agit d'une solution de mise à l'échelle pour Ethereum, déjà en lancée sur le réseau principal Ethereum. Elle prend en charge les paiements, les échanges de jetons ainsi que la frappe de NFT.", "zkspace-description": "La plate-forme ZKSpace est composée de trois parties principales : un échangeur décentralisé AMM de couche 2utilisant une technologie Rollups ZK appelée ZKSwap, un service de paiement nommé ZKSquare, et un marché NFT appelé ZKSea.", diff --git a/src/intl/gl/common.json b/src/intl/gl/common.json index ff559b9a5f2..a4c959a54c2 100644 --- a/src/intl/gl/common.json +++ b/src/intl/gl/common.json @@ -41,7 +41,6 @@ "developers-home": "Menú para programadores", "docs": "Documentos", "documentation": "Documentación", - "dydx-logo": "Logotipo de Dydx", "ecosystem": "Ecosistema", "edit-page": "Editar páxina", "ef-blog": "Blog da Fundación Ethereum", diff --git a/src/intl/hi/common.json b/src/intl/hi/common.json index 577c08de6a2..46139134ad2 100644 --- a/src/intl/hi/common.json +++ b/src/intl/hi/common.json @@ -42,7 +42,6 @@ "developers-home": "डेवलपर के लिए मुखपृष्ठ", "docs": "डॉक्स", "documentation": "प्रलेखन", - "dydx-logo": "Dydx लोगो", "ecosystem": "इकोसिस्टम", "edit-page": "पृष्ठ संपादित करें", "ef-blog": "Ethereum फाउंडेशन ब्लॉग", diff --git a/src/intl/hi/page-dapps.json b/src/intl/hi/page-dapps.json index e4f80964ee3..c0bd0746956 100644 --- a/src/intl/hi/page-dapps.json +++ b/src/intl/hi/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "आर्ट गैलरी बनाएं, स्टोर बनाएं और जमीन खरीदें - इथेरियम की आभासी दुनिया।", "page-dapps-dapp-description-dark-forest": "एक अनंत, प्रक्रिया से उत्पन्न, क्रिप्टोग्राफिक रूप से निर्दिष्ट ब्रह्मांड में ग्रहों पर विजय प्राप्त करें।", "page-dapps-dapp-description-decentraland": "एक आभासी दुनिया में आभासी भूमि को ट्रेड करें, जिसका आप अन्वेषण कर सकते हैं।", - "page-dapps-dapp-description-dydx": "10x तक के लाभ के साथ लघु या लाभ वाली स्थिति खोलें। उधार देने और उधार लेने की सुविधा भी उपलब्ध है।", "page-dapps-dapp-description-ens": "इथेरियम पतों और विकेन्द्रीकृत साइटों के लिए उपयोगकर्ता के अनुकूल नाम।", "page-dapps-dapp-description-foundation": "अन्य खरीदारों के साथ डिजिटल कलाकृति और ट्रेड पीस के अनूठे संस्करणों में निवेश करें।", "page-dapps-dapp-description-gitcoin": "ओपन-सोर्स सॉफ़्टवेयर पर काम करने वाले क्रिप्टो कमाएँ।", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "Decentraland का लोगो", "page-dapps-desc": "आज़माने के लिए एक इथेरियम एप्लिकेशन खोजें।", "page-dapps-doge-img-alt": "कंप्यूटर का उपयोग करते हुए एक कुत्ते का चित्रण", - "page-dapps-dydx-logo-alt": "dYdX का लोगो", "page-dapps-editors-choice-dark-forest": "ग्रहों पर विजय पाने के लिए दूसरों के खिलाफ खेलें और bleeding-edge वाले इथेरियम स्केलिंग/गोपनीयता तकनीक आज़माएँ। शायद उन लोगों के लिए जो पहले से ही इथेरियम से परिचित हैं।", "page-dapps-editors-choice-description": "कुछ डेप्स ethereum.org टीम को अभी पसंद हैं। नीचे और अधिक डेप्स का अन्वेषण करें।", "page-dapps-editors-choice-foundation": "संस्कृति में निवेश करें। कुछ अविश्वसनीय कलाकारों, संगीतकारों और ब्रांडों से अद्वितीय डिजिटल कलाकृति और फैशन खरीदें, व्यापार करें और बेचें।", diff --git a/src/intl/hr/common.json b/src/intl/hr/common.json index ba68f91d8d4..4d839add5df 100644 --- a/src/intl/hr/common.json +++ b/src/intl/hr/common.json @@ -42,7 +42,6 @@ "developers-home": "Početna stranica za programere", "docs": "Dokumenti", "documentation": "Dokumentacija", - "dydx-logo": "Dydx logo", "ecosystem": "Ekosustav", "edit-page": "Uredi stranicu", "ef-blog": "Blog zaklade Ethereum", diff --git a/src/intl/hr/page-dapps.json b/src/intl/hr/page-dapps.json index f343a85e0c5..cd50085de31 100644 --- a/src/intl/hr/page-dapps.json +++ b/src/intl/hr/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "Stvarajte umjetničke galerije, gradite trgovine i kupujte zemlju – virtualni svijet Ethereuma.", "page-dapps-dapp-description-dark-forest": "Osvajajte planete u beskonačnom, proceduralno generiranom, kriptografski specificiranom svemiru.", "page-dapps-dapp-description-decentraland": "Skupljajte, trgujte virtualnom zemljom u virtualnom svijetu koji možete istraživati.", - "page-dapps-dapp-description-dydx": "Otvorite kratke ili polužne položaje do 10x. Moguće je i posuđivanje i iznajmljivanje.", "page-dapps-dapp-description-ens": "Nazivi za Ethereumove adrese i decentralizirane web stranice jednostavni za korištenje.", "page-dapps-dapp-description-foundation": "Uložite u jedinstvena izdanja digitalnih umjetničkih djela i trgujte s drugim kupcima.", "page-dapps-dapp-description-gitcoin": "Zaradite kripto radeći na softveru otvorenog koda.", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "Decentraland logo", "page-dapps-desc": "Pronađite aplikaciju Ethereum za isprobavanje.", "page-dapps-doge-img-alt": "Ilustracija psa Doge-a koji upotrebljava računalo", - "page-dapps-dydx-logo-alt": "dYdX logo", "page-dapps-editors-choice-dark-forest": "Igrajte protiv drugih da biste osvojili planete i isprobajte najbolju tehnologiju skaliranja/privatnosti Ethereuma. Možda onih koji su već upoznati s Ethereumom.", "page-dapps-editors-choice-description": "Nekoliko dapp-ova koje tim ethereum.org trenutno voli. Istražite još dapp-ova u nastavku.", "page-dapps-editors-choice-foundation": "Ulažite u kulturu. Kupujte, trgujte i prodajte jedinstvena digitalna umjetnička djela i modu od nevjerojatnih umjetnika, glazbenika i brendova.", diff --git a/src/intl/hu/common.json b/src/intl/hu/common.json index e9ea099a6f5..67791707b78 100644 --- a/src/intl/hu/common.json +++ b/src/intl/hu/common.json @@ -42,7 +42,6 @@ "developers-home": "Fejlesztői kezdőlap", "docs": "Dokumentáció", "documentation": "Dokumentáció", - "dydx-logo": "Dydx logo", "ecosystem": "Ökoszisztéma", "edit-page": "Oldal szerkesztése", "ef-blog": "Ethereum Foundation Blog", diff --git a/src/intl/hu/page-dapps.json b/src/intl/hu/page-dapps.json index 8cdbf7da25b..7eb539785fb 100644 --- a/src/intl/hu/page-dapps.json +++ b/src/intl/hu/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "Hozz létre galériákat, építs üzleteket vagy vásárolj földet az Ethereum virtuális világban.", "page-dapps-dapp-description-dark-forest": "Hódíts meg bolygókat egy végtelen, algoritmikusan létrehozott, kriptográfiailag meghatározott univerzumban.", "page-dapps-dapp-description-decentraland": "Gyűjts és kereskedj virtuális földdel egy virtuális világban, amit felfedezhetsz.", - "page-dapps-dapp-description-dydx": "Shortolj vagy nyiss tőkeáttételes pozíciókat akár 10-szeres tőkeáttétellel. A kölcsönbe adás és a kölcsönzés is lehetséges.", "page-dapps-dapp-description-ens": "Felhasználóbarát nevek Ethereum címekhez vagy decentralizált oldalakhoz.", "page-dapps-dapp-description-foundation": "Fektess be egyedi kiadású műalkotásokba és kereskedj velük más vevőkkel.", "page-dapps-dapp-description-gitcoin": "Szerezz kriptót nyílt forráskódú szoftverfejlesztéssel.", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "Decentraland logo", "page-dapps-desc": "Keress Ethereum applikációt, amit szívesen kipróbálnál.", "page-dapps-doge-img-alt": "Illusztráció egy számítógépet használó doge-kutyáról", - "page-dapps-dydx-logo-alt": "dYdX logo", "page-dapps-editors-choice-dark-forest": "Játssz más játékosok ellen a bolygók meghódításában és próbáld ki a legkorszerűbb Ethereum méretezési/adatvédelmi technológiát. Inkább azoknak, akik már járatosak az Ethereumban.", "page-dapps-editors-choice-description": "Egy pár dapp, amit az ethereum.org csapat nagyon kedvel mostanság. Fedezz fel több dappot lentebb.", "page-dapps-editors-choice-foundation": "Fektess be a kultúrába. Vásárolj, kereskedj és adj el egyedi digitális műtárgyakat és divatcikkeket pár hihetetlen előadótól, zenésztől vagy márkától.", diff --git a/src/intl/id/common.json b/src/intl/id/common.json index 4f535e3dba8..f269a8b7401 100644 --- a/src/intl/id/common.json +++ b/src/intl/id/common.json @@ -42,7 +42,6 @@ "developers-home": "Beranda Pengembang", "docs": "Dokumen", "documentation": "Dokumentasi", - "dydx-logo": "Logo Dydx", "ecosystem": "Ekosistem", "edit-page": "Edit halaman", "ef-blog": "Blog Yayasan Ethereum", diff --git a/src/intl/id/page-dapps.json b/src/intl/id/page-dapps.json index 9c9fc0832d7..3c225f9dced 100644 --- a/src/intl/id/page-dapps.json +++ b/src/intl/id/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Buat galeri seni, bangun toko, dan beli tanah – sebuah dunia virtual Ethereum.", "page-dapps-dapp-description-dark-forest": "Taklukan planet-planet di alam semesta yang tidak terbatas, dihasilkan secara prosedural, dan dispesifikasikan secara kriptografis.", "page-dapps-dapp-description-decentraland": "Kumpulkan, dagangkan lahan virtual di dunia maya yang dapat Anda jelajahi.", - "page-dapps-dapp-description-dydx": "Posisi open short atau leverage dengan leverage sampai 10x. Pemberian dan penerimaan pinjaman juga tersedia.", "page-dapps-dapp-description-ens": "Nama yang ramah bagi pengguna untuk alamat Ethereum dan situs terdesentralisasi.", "page-dapps-dapp-description-foundation": "Investasikan dalam edisi unik karya seni digital dan perdagangkan bagiannya dengan pembeli lain.", "page-dapps-dapp-description-gitcoin": "Hasilkan kripto yang bekerja pada perangkat lunak sumber terbuka.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Logo Rotki", "page-dapps-desc": "Temukan aplikasi Ethereum untuk dicoba.", "page-dapps-doge-img-alt": "Ilustrasi seekor anjing menggunakan komputer", - "page-dapps-dydx-logo-alt": "Logo dYdX", "page-dapps-editors-choice-dark-forest": "Bermain dengan orang lain untuk menaklukkan planet dan mencoba penskalaan/privasi Ethereum yang mutakhir. Mungkin salah satu di antaranya sudah familier dengan Ethereum.", "page-dapps-editors-choice-description": "Beberapa dapp yang disukai tim ethereum.org saat ini. Jelajahi lebih banyak dapp di bawah ini.", "page-dapps-editors-choice-foundation": "Berinvestasilah dalam budaya. Beli, tukar, dan jual karya seni dan mode digital unik dari beberapa seniman, musisi, dan merek luar biasa.", diff --git a/src/intl/ig/common.json b/src/intl/ig/common.json index 71d57fd0a33..ac52cc7aeb7 100644 --- a/src/intl/ig/common.json +++ b/src/intl/ig/common.json @@ -38,7 +38,6 @@ "developers-home": "Isi ulo oru ndi Mmeputa", "docs": "Akwukwo", "documentation": "Ederede", - "dydx-logo": "Akara Dydx", "ecosystem": "Usoro gburugburu", "edit-page": "Dezie peeji", "ef-blog": "Ebe mbido Bloogu nke Ethereum", diff --git a/src/intl/it/common.json b/src/intl/it/common.json index e32e9293b45..6916b738462 100644 --- a/src/intl/it/common.json +++ b/src/intl/it/common.json @@ -42,7 +42,6 @@ "developers-home": "Home page sviluppatori", "docs": "Documenti", "documentation": "Documentazione", - "dydx-logo": "Logo di Dydx", "ecosystem": "Ecosistema", "edit-page": "Modifica la pagina", "ef-blog": "Blog della Ethereum Foundation", diff --git a/src/intl/it/page-dapps.json b/src/intl/it/page-dapps.json index 7d48f76fe8b..23dc488fa9b 100644 --- a/src/intl/it/page-dapps.json +++ b/src/intl/it/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Crea gallerie d'arte, costruisci negozi e compra terreni. Un mondo virtuale Ethereum.", "page-dapps-dapp-description-dark-forest": "Conquista pianeti in un universo infinito, generato proceduralmente e con specifiche crittografiche.", "page-dapps-dapp-description-decentraland": "Colleziona, vendi e acquista terre virtuali in un mondo virtuale che puoi esplorare.", - "page-dapps-dapp-description-dydx": "Apri posizioni corte o con effetto leva fino a 10x. Possibili erogazione e assunzione di prestiti.", "page-dapps-dapp-description-ens": "Nomi facili da usare per gli indirizzi Ethereum e siti decentralizzati.", "page-dapps-dapp-description-foundation": "Investi in edizioni uniche di opere d'arte digitali e scambiale con altri acquirenti.", "page-dapps-dapp-description-gitcoin": "Guadagna criptovalute lavorando con software open-source.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Logo di Rotki", "page-dapps-desc": "Trova un'applicazione Ethereum da provare.", "page-dapps-doge-img-alt": "Figura di un cane che usa un computer", - "page-dapps-dydx-logo-alt": "Logo dYdX", "page-dapps-editors-choice-dark-forest": "Gioca contro altri utenti per conquistare pianeti e prova la tecnologia avanzatissima di scaling/privacy di Ethereum. Forse per coloro che già conoscono Ethereum.", "page-dapps-editors-choice-description": "Alcune dapps che il team di ethereum.org adora in questo momento. Esplora più dapps qui sotto.", "page-dapps-editors-choice-foundation": "Investi nella cultura. Compra, scambia e vendi opere d'arte digitali uniche e moda da alcuni incredibili artisti, musicisti e marchi.", diff --git a/src/intl/it/page-layer-2.json b/src/intl/it/page-layer-2.json index 93a591ca0a8..477adf4bef6 100644 --- a/src/intl/it/page-layer-2.json +++ b/src/intl/it/page-layer-2.json @@ -118,7 +118,6 @@ "arbitrum-description": "Arbitrum è un Rollup Ottimistico che punta a dare la sensazione di interagire con Ethereum, ma con transazioni che costano una frazione di quanto costano sul L1.", "optimism-description": "Optimistic Ethereum è una catena di Rollup Ottimistici equivalente all'EVM. Mira a esser veloce, semplice e sicura.", "boba-description": "Boba è un Rollup Ottimistico originariamente biforcato da Optimism ed è una soluzione di scaling che mira a ridurre le commissioni del carburante, migliorare il volume delle transazioni ed estendere le capacità degli smart contract.", - "dydx-description": "dYdX mira a creare una borsa potente e professionale per scambiare risorse cripto. in cui gli utenti possiedono davvero ciò che scambiano ed, eventualmente, la borsa stessa.", "loopring-description": "La soluzione di L2 zkRollup di Loopring mira a offrire le stesse garanzie di sicurezza della rete principale di Ethereum, con un grande aumento di scalabilità: volume aumentato del 1000x e costo ridotto allo 0,1% di L1.", "zksync-description": "zkSync è una piattaforma di rollup zk incentrata sull'utente prodotta da Matter Labs. È una soluzione di scalabilità per Ethereum, già live sulla rete principale di Ethereum. Supporta pagamenti, scambi di token e conio di NFT.", "zkspace-description": "La piattaforma di ZKSpace consiste in tre parti principali: una DEX AMM di Livello 2 che usa la tecnologia di Rollup ZK detta ZKSwap, un servizio di pagamento detto ZKSquare e un mercato di NFT detto ZKSea.", diff --git a/src/intl/ja/common.json b/src/intl/ja/common.json index e148815f186..e16ca21e056 100644 --- a/src/intl/ja/common.json +++ b/src/intl/ja/common.json @@ -42,7 +42,6 @@ "developers-home": "開発者のホーム", "docs": "ドキュメント", "documentation": "ドキュメント", - "dydx-logo": "Dydx ロゴ", "ecosystem": "エコシステム", "edit-page": "ページ編集", "ef-blog": "イーサリアム財団ブログ", diff --git a/src/intl/ja/page-dapps.json b/src/intl/ja/page-dapps.json index 841a7997243..2f130bd4de8 100644 --- a/src/intl/ja/page-dapps.json +++ b/src/intl/ja/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "アートギャラリーを作成し、店舗を構築し、土地を購入する - Ethereum仮想世界。", "page-dapps-dapp-description-dark-forest": "無限の、手続き的に生成された、暗号学的に指定された宇宙で惑星を征服します。", "page-dapps-dapp-description-decentraland": "探索することができる仮想世界で仮想土地を収集、取引。", - "page-dapps-dapp-description-dydx": "10倍までのレバレッジでショートまたはレバレッジポジションを開きます。", "page-dapps-dapp-description-ens": "イーサリアムアドレスと分散サイトのユーザーフレンドリーな名前。", "page-dapps-dapp-description-foundation": "デジタルアートワークのユニークなエディションに投資し、他のバイヤーと作品を取引します。", "page-dapps-dapp-description-gitcoin": "オープンソースソフトウェアで作業する暗号を獲得します。", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotkiロゴ", "page-dapps-desc": "試してみたいイーサリアムのアプリケーションを見つけましょう。", "page-dapps-doge-img-alt": "コンピューターを使用しているドージのイラスト", - "page-dapps-dydx-logo-alt": "dydx ロゴ", "page-dapps-editors-choice-dark-forest": "惑星を征服し、最先端のEthereumスケーリング/プライバシー技術を試してみるために他の人と対戦します。", "page-dapps-editors-choice-description": "Ethereum.orgチームが今気に入っている分散アプリケーション(dapps)がいくつかあります。以下でdappsを探してください。", "page-dapps-editors-choice-foundation": "文化に投資しましょう。素晴らしいアーティスト、ミュージシャン、ブランドからユニークなデジタルアートワークやファッションを購入、取引、販売してください。", diff --git a/src/intl/ja/page-layer-2.json b/src/intl/ja/page-layer-2.json index 6c959ff3b3f..875eafcba92 100644 --- a/src/intl/ja/page-layer-2.json +++ b/src/intl/ja/page-layer-2.json @@ -118,7 +118,6 @@ "arbitrum-description": "Arbitrumはオプティミスティック・ロールアップで、イーサリアムと全く同じ感覚で取引できることを目指していますが、トランザクション費用はレイヤー1の数分の1です。", "optimism-description": "Optimistic Ethereumは、アーンド・バリュー・マネジメントに相当するオプティミスティック・ロールアップチェーンです。高速でシンプル、かつ安全であることを目指しています。", "boba-description": "Bobaは、もともとOptimismからフォークされたオプティミスティック・ロールアップで、ガス代の削減、トランザクション・スループットの向上、スマートコントラクトの機能拡張を目的とするスケーリング・ソリューションです。", - "dydx-description": "dYdXは、暗号資産を取引するための強力でプロフェッショナルな取引所を構築し、ユーザーが自分の取引、ひいては取引所そのものを真に所有できるようにすることを目指しています。", "loopring-description": "Loopringのゼロ知識レイヤー2ソリューションは、イーサリアムのメインネットと同等のセキュリティ保証と、スループットが1000倍、コストがレイヤー1の0.1%という大幅なスケーラビリティの向上を目指しています。", "zksync-description": "zkSyncは、Matter Labsが提供するユーザー中心のゼロ知識ロールアップ・プラットフォームです。イーサリアムのスケーリング・ソリューションであり、イーサリアムメインネットですでに稼働しています。支払い、トークンのスワップ、NFTのミンティングをサポートしています。", "zkspace-description": "ZKSpaceプラットフォームは、ゼロ知識ロールアップ(ZK-Rollup)の技術を活用したレイヤー2 AMM 分散型取引所(DEX)「ZKSwap」、決済サービス「ZKSquare」、NFTマーケットプレイス「ZKSea」の3本柱で構成されています。", diff --git a/src/intl/ka/common.json b/src/intl/ka/common.json index 9b6f120232d..11c1fdfee17 100644 --- a/src/intl/ka/common.json +++ b/src/intl/ka/common.json @@ -40,7 +40,6 @@ "developers-home": "დეველოპერების მთავარი", "docs": "დოკუმენტები", "documentation": "დოკუმენტაცია", - "dydx-logo": "Dydx-ის ლოგო", "ecosystem": "ეკოსისტემა", "edit-page": "გვერდის რედაქტირება", "ef-blog": "ეთერეუმის საფუძვლების ბლოგი", diff --git a/src/intl/kk/common.json b/src/intl/kk/common.json index 6fe13deb643..22570a5adc1 100644 --- a/src/intl/kk/common.json +++ b/src/intl/kk/common.json @@ -42,7 +42,6 @@ "developers-home": "Әзірлеушілер басты беті", "docs": "Құжаттар", "documentation": "Құжаттама", - "dydx-logo": "Dydx логотипі", "ecosystem": "Экожүйе", "edit-page": "Бетті өңдеу", "ef-blog": "Ethereum қорының блогі", diff --git a/src/intl/ko/common.json b/src/intl/ko/common.json index b70285acde6..a573175227c 100644 --- a/src/intl/ko/common.json +++ b/src/intl/ko/common.json @@ -42,7 +42,6 @@ "developers-home": "개발자 홈", "docs": "개발문서", "documentation": "개발문서", - "dydx-logo": "Dydx 로고", "ecosystem": "생태계", "edit-page": "페이지 수정", "ef-blog": "이더리움 재단 블로그", diff --git a/src/intl/ko/page-dapps.json b/src/intl/ko/page-dapps.json index 978d88a97cc..5a887b1ed61 100644 --- a/src/intl/ko/page-dapps.json +++ b/src/intl/ko/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "미술관을 만들고, 가게를 짓고, 땅을 사는 이더리움 가상 세계입니다.", "page-dapps-dapp-description-dark-forest": "무한정 절차대로 생성되는 암호화 기법으로 국한된 세계에서 행성들을 정복합니다.", "page-dapps-dapp-description-decentraland": "탐험할 수 있는 가상 세계에서 가상의 토지를 수집하고 교환합니다.", - "page-dapps-dapp-description-dydx": "공매도나 최대 10배의 레버리지가 있는 레버리지 포지션을 열어보세요. 대출도 가능합니다.", "page-dapps-dapp-description-ens": "이더리움 주소와 탈중앙화 사이트의 사용자 친화적 명칭입니다.", "page-dapps-dapp-description-foundation": "디지털 미술품의 특별판에 투자하고 다른 판매자와 작품을 교환합니다.", "page-dapps-dapp-description-gitcoin": "오픈소스 소프트웨어에 대해 작업하고 암호화폐를 얻습니다.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki 로고", "page-dapps-desc": "사용할 이더리움 애플리케이션을 찾으세요.", "page-dapps-doge-img-alt": "컴퓨터를 사용 중인 도지의 그림", - "page-dapps-dydx-logo-alt": "dYdX 로고", "page-dapps-editors-choice-dark-forest": "행성을 지배하기 위해 다른 사람들과 싸우고 최첨단 이더리움 스케일링/개인정보 보호 기술을 사용해 보세요. 해당 기술 중 하나는 이미 이더리움에서 익숙할 수 있습니다.", "page-dapps-editors-choice-description": "현재 ethereum.org 팀이 자주 사용하는 몇 가지 디앱스입니다. 아래에서 더 많은 디앱을 둘러보세요.", "page-dapps-editors-choice-foundation": "문화에 투자하세요. 뛰어난 아티스트, 뮤지션, 브랜드로부터 독자적인 디지털 미술품과 패션 아이템을 구입하고, 거래 및 판매합니다.", diff --git a/src/intl/lt/common.json b/src/intl/lt/common.json index fdb00741cec..9cae4c408b9 100644 --- a/src/intl/lt/common.json +++ b/src/intl/lt/common.json @@ -41,7 +41,6 @@ "developers-home": "Kūrėjų pagrindinis puslapis", "docs": "Dokumentai", "documentation": "Dokumentacija", - "dydx-logo": "„Dydx“ logotipas", "ecosystem": "Ekosistema", "edit-page": "Redaguoti puslapį", "ef-blog": "Ethereum fondo tinklaraštis", diff --git a/src/intl/ml/common.json b/src/intl/ml/common.json index c69431e4c36..62e0bd7b0bb 100644 --- a/src/intl/ml/common.json +++ b/src/intl/ml/common.json @@ -41,7 +41,6 @@ "developers-home": "ഡെവലപ്പേഴ്സ് ഹോം", "docs": "ഡോക്യുമെന്‍റുകൾ", "documentation": "പ്രമാണീകരണം", - "dydx-logo": "ഡിഡ്ക്സ് ലോഗോ", "ecosystem": "ഇക്കോസിസ്റ്റം", "edit-page": "പേജ് എഡിറ്റുചെയ്യുക", "ef-blog": "Ethereum ഫൗണ്ടേഷന്‍ ബ്ലോഗ്‌", diff --git a/src/intl/ml/page-dapps.json b/src/intl/ml/page-dapps.json index 51b607bcba9..24ce13a063b 100644 --- a/src/intl/ml/page-dapps.json +++ b/src/intl/ml/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "ആർട്ട് ഗാലറികൾ സൃഷ്ടിക്കുക, സ്റ്റോറുകൾ നിർമ്മിക്കുക, ഭൂമി വാങ്ങുക - ഒരു Ethereum വെർച്വൽ ലോകം.", "page-dapps-dapp-description-dark-forest": "ക്രിപ്റ്റോഗ്രാഫിക്കായി വ്യക്തമാക്കിയ പ്രപഞ്ചത്തിൽ അനന്തമായ, നടപടിക്രമപരമായി സൃഷ്ടിക്കപ്പെട്ട ഗ്രഹങ്ങളെ കീഴടക്കുക.", "page-dapps-dapp-description-decentraland": "നിങ്ങൾക്ക് പര്യവേക്ഷണം ചെയ്യാൻ കഴിയുന്ന ഒരു വെർച്വൽ ലോകത്ത് വെർച്വൽ ഭൂമി ശേഖരിക്കുക, വ്യാപാരം ചെയ്യുക.", - "page-dapps-dapp-description-dydx": "10x വരെ ലിവറേജോടുകൂടിയ ഹ്രസ്വമായ അല്ലെങ്കിൽ വര്‍ദ്ധിച്ച സ്ഥാനങ്ങൾ തുറക്കുക. കടംകൊടുക്കലും കടംവാങ്ങലും ലഭ്യമാണ്.", "page-dapps-dapp-description-ens": "Ethereum വിലാസങ്ങൾക്കും വികേന്ദ്രീകൃത സൈറ്റുകൾക്കുമായുള്ള ഉപയോക്തൃ-സൗഹൃദ പേരുകൾ.", "page-dapps-dapp-description-foundation": "മറ്റ് വാങ്ങുന്നവരുമായി ഡിജിറ്റൽ ആർട്ട്‌വർക്കിന്റെയും ട്രേഡ് പീസുകളുടെയും അദ്വിതീയ പതിപ്പുകളിൽ നിക്ഷേപിക്കുക.", "page-dapps-dapp-description-gitcoin": "ഓപ്പണ്‍-സോഴ്സ് സോഫ്റ്റ് വെയറുകളില്‍ പ്രവര്‍ത്തിച്ചുകൊണ്ട് ക്രിപ്റ്റോ നേടുക.", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "ഡിസെൻട്രാലാൻഡ് ലോഗോ", "page-dapps-desc": "ശ്രമിക്കുന്നതിന് ഒരു Ethereum അപ്ലിക്കേഷൻ കണ്ടെത്തുക.", "page-dapps-doge-img-alt": "കമ്പ്യൂട്ടർ ഉപയോഗിക്കുന്ന ഒരു ഡോഗിയുടെ ചിത്രീകരണം", - "page-dapps-dydx-logo-alt": "ഡിഡ്ക്സ് ലോഗോ", "page-dapps-editors-choice-dark-forest": "ഗ്രഹങ്ങളെ കീഴടക്കുന്നതിനും പുതിയ Ethereum സ്കെയിലിംഗ് / സ്വകാര്യതാ സാങ്കേതികവിദ്യ പരീക്ഷിക്കുന്നതിനും മറ്റുള്ളവർക്കെതിരെ കളിക്കുക. ചിലപ്പോള്‍ Ethereumവുമായി ഇതിനകം പരിചയമുള്ളവർക്കായിരിക്കാം.", "page-dapps-editors-choice-description": "Ethereum.org ടീം ഇപ്പോൾ സ്നേഹിക്കുന്ന കുറച്ച് ഡാപ്പുകൾ. ചുവടെ കൂടുതൽ ഡാപ്പുകൾ പര്യവേക്ഷണം ചെയ്യുക.", "page-dapps-editors-choice-foundation": "സംസ്കാരത്തിൽ നിക്ഷേപിക്കുക. അവിശ്വസനീയമായ ചില ആർട്ടിസ്റ്റുകൾ, സംഗീതജ്ഞർ, ബ്രാൻഡുകൾ എന്നിവരിൽ നിന്ന് അദ്വിതീയ ഡിജിറ്റൽ കലാസൃഷ്ടികളും ഫാഷനും വാങ്ങുക, വ്യാപാരം ചെയ്യുക, വിൽക്കുക.", diff --git a/src/intl/mr/common.json b/src/intl/mr/common.json index 1e0f564a774..fa9ddb89bea 100644 --- a/src/intl/mr/common.json +++ b/src/intl/mr/common.json @@ -38,7 +38,6 @@ "developers-home": "विकासकांचे मुख्यपृष्ठ", "docs": "दस्तऐवज", "documentation": "दस्तऐवज", - "dydx-logo": "Dydx लोगो", "ecosystem": "इकोसिस्टम", "edit-page": "पृष्ठ संपादित करा", "ef-blog": "Ethereum फाउंडेशन ब्लॉग", diff --git a/src/intl/ms/common.json b/src/intl/ms/common.json index 223396d859d..439e1393dc4 100644 --- a/src/intl/ms/common.json +++ b/src/intl/ms/common.json @@ -41,7 +41,6 @@ "developers-home": "Laman Utama Pembangun", "docs": "Dokumen", "documentation": "Dokumentasi", - "dydx-logo": "Logo Dydx", "ecosystem": "Ekosistem", "edit-page": "Edit halaman", "ef-blog": "Blog Yayasan Ethereum", diff --git a/src/intl/nb/common.json b/src/intl/nb/common.json index b5bde10e230..1b98638a23e 100644 --- a/src/intl/nb/common.json +++ b/src/intl/nb/common.json @@ -38,7 +38,6 @@ "developers-home": "Startside for utviklere", "docs": "Dokumenter", "documentation": "Dokumentasjon", - "dydx-logo": "Dydx-logo", "ecosystem": "Økosystem", "edit-page": "Rediger side", "ef-blog": "Ethereum Foundation-blogg", diff --git a/src/intl/nl/common.json b/src/intl/nl/common.json index 29be28cf2aa..fcc7b44c8b0 100644 --- a/src/intl/nl/common.json +++ b/src/intl/nl/common.json @@ -42,7 +42,6 @@ "developers-home": "Startpagina voor ontwikkelaars", "docs": "Documentatie", "documentation": "Documentatie", - "dydx-logo": "Dydx-logo", "ecosystem": "Ecosysteem", "edit-page": "Pagina bewerken", "ef-blog": "Ethereum Foundation-blog", diff --git a/src/intl/nl/page-dapps.json b/src/intl/nl/page-dapps.json index 95a687a6f54..df83cd4c8ac 100644 --- a/src/intl/nl/page-dapps.json +++ b/src/intl/nl/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Maak kunstgalerijen, bouw winkels en koop land - een virtuele Ethereum-wereld.", "page-dapps-dapp-description-dark-forest": "Verover planeten in een oneindig, procedureel gegenereerd, cryptografisch gespecificeerd universum.", "page-dapps-dapp-description-decentraland": "Verzamel, ruil virtueel land in een virtuele wereld die u kunt verkennen.", - "page-dapps-dapp-description-dydx": "Open short of leveraged posities tot maximaal 10x leverage. Ook uitlenen en lenen mogelijk.", "page-dapps-dapp-description-ens": "Gebruiksvriendelijke namen voor adressen en gedecentraliseerde sites van Ethereum.", "page-dapps-dapp-description-foundation": "Investeer in unieke edities van digitale kunstwerken en ruil stukken met andere kopers.", "page-dapps-dapp-description-gitcoin": "Verdien crypto door te werken aan opensource software.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki logo", "page-dapps-desc": "Zoek een Ethereum-applicatie om uit te proberen.", "page-dapps-doge-img-alt": "Illustratie van een doge die een computer gebruikt", - "page-dapps-dydx-logo-alt": "dYdX logo", "page-dapps-editors-choice-dark-forest": "Speel tegen anderen om planeten te veroveren en probeer bleeding-edge Ethereum scaling/privacy-technologie uit. Misschien iets voor degenen die al bekend zijn met Ethereum.", "page-dapps-editors-choice-description": "Enkele dapps waar het ethereum.org-team van houdt. Ontdek meer dapps hieronder.", "page-dapps-editors-choice-foundation": "Investeer in cultuur. Koop, ruil en verkoop unieke digitale kunstwerken en mode van een aantal ongelooflijke artiesten, muzikanten en merken.", diff --git a/src/intl/ph/common.json b/src/intl/ph/common.json index 2a2d53583ae..a2751900ad2 100644 --- a/src/intl/ph/common.json +++ b/src/intl/ph/common.json @@ -42,7 +42,6 @@ "developers-home": "Home ng mga developer", "docs": "Mga Dokumento", "documentation": "Dokumentasyon", - "dydx-logo": "Logo ng Dydx", "ecosystem": "Ecosystem", "edit-page": "I-edit ang pahina", "ef-blog": "Blog ng Ethereum Foundation", diff --git a/src/intl/pl/common.json b/src/intl/pl/common.json index d2acedc0f76..b5ca3ec7be2 100644 --- a/src/intl/pl/common.json +++ b/src/intl/pl/common.json @@ -42,7 +42,6 @@ "developers-home": "Strona główna dla deweloperów", "docs": "Dokumenty", "documentation": "Dokumentacja", - "dydx-logo": "Logo Dydx", "ecosystem": "Ekosystem", "edit-page": "Edytuj stronę", "ef-blog": "Blog Fundacji Ethereum", diff --git a/src/intl/pl/page-dapps.json b/src/intl/pl/page-dapps.json index a1692734192..befc3ba9c7a 100644 --- a/src/intl/pl/page-dapps.json +++ b/src/intl/pl/page-dapps.json @@ -51,7 +51,6 @@ "page-dapps-dapp-description-cryptovoxels": "Stwórz galerię sztuki, buduj sklepy i kup ziemię — wirtualny świat Ethereum.", "page-dapps-dapp-description-dark-forest": "Podbijaj planety w nieskończonym, proceduralnie generowanym, kryptograficznie określonym wszechświecie.", "page-dapps-dapp-description-decentraland": "Zbieraj, handluj wirtualną ziemią w wirtualnym świecie, który możesz odkrywać.", - "page-dapps-dapp-description-dydx": "Otwieraj krótkie pozycje lub pozycje z dźwignią finansową do 10x. Dostępne są również pożyczki i kredyty.", "page-dapps-dapp-description-ens": "Przyjazne dla użytkowników nazwy adresów Ethereum i zdecentralizowanych stron.", "page-dapps-dapp-description-foundation": "Inwestuj w unikalne edycje sztuki cyfrowej i handluj z innymi nabywcami.", "page-dapps-dapp-description-gitcoin": "Zarabiaj kryptowaluty, pracując nad oprogramowaniu open source.", @@ -77,7 +76,6 @@ "page-dapps-decentraland-logo-alt": "Logo Decentraland", "page-dapps-desc": "Znajdź aplikację Ethereum, aby wypróbować.", "page-dapps-doge-img-alt": "Ilustracja pieseła siedzącego przy komputerze", - "page-dapps-dydx-logo-alt": "logo Dydx", "page-dapps-editors-choice-dark-forest": "Zagraj przeciwko innym, aby zdobyć planety i wypróbować wspaniałe skalowanie/technologię prywatności Ethereum. Może dla tych, którzy znają już Ethereum.", "page-dapps-editors-choice-description": "Kilka zdecentralizowanych aplikacji, które zespół ethereum.org uwielbia w tej chwili. Odkryj więcej zdecentralizowanych aplikacji poniżej.", "page-dapps-editors-choice-foundation": "Zainwestuj w kulturę. Kupuj, wymieniaj i sprzedawaj unikalne cyfrowe dzieła sztuki i modę od niesamowitych artystów, muzyków i marek.", diff --git a/src/intl/pt-br/common.json b/src/intl/pt-br/common.json index 278461f980d..dd64061d872 100644 --- a/src/intl/pt-br/common.json +++ b/src/intl/pt-br/common.json @@ -42,7 +42,6 @@ "developers-home": "Página inicial dos desenvolvedores", "docs": "Documentos", "documentation": "Documentação", - "dydx-logo": "Logotipo da Dydx", "ecosystem": "Ecossistema", "edit-page": "Editar Página", "ef-blog": "Blog da Fundação Ethereum", diff --git a/src/intl/pt-br/page-dapps.json b/src/intl/pt-br/page-dapps.json index 06b38577fe9..17bc90d8588 100644 --- a/src/intl/pt-br/page-dapps.json +++ b/src/intl/pt-br/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Crie galerias de arte, construa lojas e compre terra. Um mundo virtual na Ethereum.", "page-dapps-dapp-description-dark-forest": "Conquiste planetas em um universo infinito, gerado processualmente e especificado criptograficamente.", "page-dapps-dapp-description-decentraland": "Colecione e negocie terras virtuais em um mundo virtual que você pode explorar.", - "page-dapps-dapp-description-dydx": "Abra posições de alavancagem curta ou alavancagem com até 10x. Empreste ou faça empréstimos também.", "page-dapps-dapp-description-ens": "Nomes amigáveis para endereços Ethereum e sites descentralizados.", "page-dapps-dapp-description-foundation": "Invista em edições únicas de arte digital e negocie peças com outros compradores.", "page-dapps-dapp-description-gitcoin": "Ganhe criptomoedas trabalhando em software de código aberto.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki: logotipo", "page-dapps-desc": "Encontre um aplicativo na Ethereum para testar.", "page-dapps-doge-img-alt": "Ilustração de um cachorro doge usando um computador", - "page-dapps-dydx-logo-alt": "logotipo do dYdX", "page-dapps-editors-choice-dark-forest": "Jogue contra outros para conquistar planetas e experimente a tecnologia de ponta de escalabilidade e privacidade na Ethereum. Talvez para aqueles que já estão familiarizados com a Ethereum.", "page-dapps-editors-choice-description": "Alguns dapps que a equipe ethereum.org adora. Explore mais dapps abaixo.", "page-dapps-editors-choice-foundation": "Invista em cultura. Compre, negocie e venda arte digital e moda únicas de alguns incríveis artistas, músicos e marcas.", diff --git a/src/intl/pt/common.json b/src/intl/pt/common.json index b8648de9026..ae098a0e92e 100644 --- a/src/intl/pt/common.json +++ b/src/intl/pt/common.json @@ -42,7 +42,6 @@ "developers-home": "Menu para Programadores", "docs": "Documentos", "documentation": "Documentação", - "dydx-logo": "Logótipo da Dydx", "ecosystem": "Ecossistema", "edit-page": "Editar página", "ef-blog": "Blog da Fundação Ethereum", diff --git a/src/intl/ro/common.json b/src/intl/ro/common.json index 8bfd4525b88..2cc1bc088d9 100644 --- a/src/intl/ro/common.json +++ b/src/intl/ro/common.json @@ -40,7 +40,6 @@ "developers-home": "Pagina de pornire pentru dezvoltatori", "docs": "Documente", "documentation": "Documentație", - "dydx-logo": "Sigla Dydx", "ecosystem": "Ecosistemul", "edit-page": "Modificați pagina", "ef-blog": "Blogul Fundației Ethereum", diff --git a/src/intl/ro/page-dapps.json b/src/intl/ro/page-dapps.json index 0cc2a2da8c4..3380c658d94 100644 --- a/src/intl/ro/page-dapps.json +++ b/src/intl/ro/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Creați galerii de artă, construiți magazine și cumpărați terenuri – o lume virtuală Ethereum.", "page-dapps-dapp-description-dark-forest": "Cuceriți planetele într-un univers infinit, generat procedural, specificat criptografic.", "page-dapps-dapp-description-decentraland": "Colecționați și comercializați terenuri virtuale într-o lume virtuală pe care o puteți explora.", - "page-dapps-dapp-description-dydx": "Deschideți poziții de vânzare (short) sau folosite ca atu mobilizând până la de 10x mai mult. Se pot și da și lua împrumuturi.", "page-dapps-dapp-description-ens": "Nume ușor de folosit pentru adresele Ethereum și site-urile descentralizate.", "page-dapps-dapp-description-foundation": "Investiți în ediții unice de opere de artă digitală și tranzacționați piese cu alți cumpărători.", "page-dapps-dapp-description-gitcoin": "Câștigați cripto lucrând la software open-source.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Sigla Rotki", "page-dapps-desc": "Găsiți o aplicație Ethereum pe care să o încercați.", "page-dapps-doge-img-alt": "Imaginea unui câine așezat la calculator", - "page-dapps-dydx-logo-alt": "Sigla dYdX", "page-dapps-editors-choice-dark-forest": "Jucați cu alți parteneri pentru a cuceri planete și încercați tehnologia cea mai avansată de scalare/confidențialitate Ethereum. Poate pentru cei care cunosc deja Ethereum.", "page-dapps-editors-choice-description": "Câteva aplicații descentralizate (dapps) pe care echipa ethereum.org le adoră acum. Explorați și alte aplicații descentralizate mai jos.", "page-dapps-editors-choice-foundation": "Investiți în cultură. Cumpărați, tranzacționați și vindeți opere de artă digitale unice și articole de modă de la incredibili artiști, muzicieni și mărci.", diff --git a/src/intl/ru/common.json b/src/intl/ru/common.json index f4fec42595d..46f67cbcc10 100644 --- a/src/intl/ru/common.json +++ b/src/intl/ru/common.json @@ -42,7 +42,6 @@ "developers-home": "Домашняя страница для разработчиков", "docs": "Документация", "documentation": "Документация", - "dydx-logo": "Логотип Dydx", "ecosystem": "Экосистема", "edit-page": "Редактировать страницу", "ef-blog": "Блог фонда Ethereum", diff --git a/src/intl/ru/page-dapps.json b/src/intl/ru/page-dapps.json index bccf06dcb54..36ab3c9db00 100644 --- a/src/intl/ru/page-dapps.json +++ b/src/intl/ru/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Создавайте художественные галереи, стройте магазины и покупайте землю – виртуальный мир Ethereum.", "page-dapps-dapp-description-dark-forest": "Завоевывайте планеты в бесконечной, случайно сгенерированной, криптографически определенной вселенной.", "page-dapps-dapp-description-decentraland": "Собирайте и торгуйте виртуальной землей в виртуальном мире, который можно исследовать.", - "page-dapps-dapp-description-dydx": "Открывайте короткие или маржинальные позиции с помощью кредитного плеча, которое может достигать десятикратного размера. Также доступны кредитование и займы.", "page-dapps-dapp-description-ens": "Удобные имена для адресов Ethereum и децентрализованных площадок.", "page-dapps-dapp-description-foundation": "Инвестируйте в уникальные издания цифровых произведений искусства и торгуйте работами с другими покупателями.", "page-dapps-dapp-description-gitcoin": "Зарабатывайте криптовалюту, работающую на ПО с открытым исходным кодом.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Логотип Rotki", "page-dapps-desc": "Выберите и попробуйте приложение Ethereum.", "page-dapps-doge-img-alt": "Рисунок доге за компьютером", - "page-dapps-dydx-logo-alt": "Логотип dYdX", "page-dapps-editors-choice-dark-forest": "Играйте против других, чтобы завоевать планеты и опробовать новейшие технологии масштабирования/приватности Ethereum. Подойдет для тех, кто уже знаком с Ethereum.", "page-dapps-editors-choice-description": "Несколько децентрализованных приложений, которые понравились команде ethereum.org. Ниже вы найдете еще больше приложений.", "page-dapps-editors-choice-foundation": "Инвестируйте в культуру. Покупайте, обменивайте и продавайте уникальные цифровые произведения искусства и моды от невероятных художников, музыкантов и брендов.", diff --git a/src/intl/se/common.json b/src/intl/se/common.json index 9f4e39e60fc..7ae9932bd70 100644 --- a/src/intl/se/common.json +++ b/src/intl/se/common.json @@ -38,7 +38,6 @@ "developers-home": "Startsida för utvecklare", "docs": "Dokumentation", "documentation": "Dokumentation", - "dydx-logo": "Dydx-logotyp", "ecosystem": "Ekosystem", "edit-page": "Redigera sida", "ef-blog": "Ethereum Foundation-blogg", diff --git a/src/intl/sk/common.json b/src/intl/sk/common.json index 30978aa84e7..3b4ecbbd937 100644 --- a/src/intl/sk/common.json +++ b/src/intl/sk/common.json @@ -41,7 +41,6 @@ "developers-home": "Domovská stránka pre vývojárov", "docs": "Dokumenty", "documentation": "Dokumentácia", - "dydx-logo": "Logo Dydx", "ecosystem": "Ekosystém", "edit-page": "Upraviť stránku", "ef-blog": "Blog organizácie Ethereum Foundation", diff --git a/src/intl/sl/common.json b/src/intl/sl/common.json index f87bf1d7edf..2bd863c59b4 100644 --- a/src/intl/sl/common.json +++ b/src/intl/sl/common.json @@ -42,7 +42,6 @@ "developers-home": "Začetna stran za razvijalce", "docs": "Dokumenti", "documentation": "Dokumentacija", - "dydx-logo": "Logotip Dydx", "ecosystem": "Ekosistem", "edit-page": "Uredi stran", "ef-blog": "Spletni dnevnik ustanove Ethereum Foundation", diff --git a/src/intl/sl/page-dapps.json b/src/intl/sl/page-dapps.json index c7d8fc8716e..9f08ec8a45c 100644 --- a/src/intl/sl/page-dapps.json +++ b/src/intl/sl/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Ustvarjajte umetnostne galerije, postavljajte trgovine in kupujte zemljišča – virtualni svet na Ethereumu.", "page-dapps-dapp-description-dark-forest": "Osvajajte planete v neskončnem vesolju, ki je postopkovno generirano in kriptografsko določeno.", "page-dapps-dapp-description-decentraland": "Zbirajte virtualna zemljišča v in trgujte z njimi v virtualnem svetu, ki ga lahko raziskujete.", - "page-dapps-dapp-description-dydx": "Odprite kratke pozicije ali pozicije z največ 10-kratnim vzvodom. Na voljo so tudi kreditiranje in posojila.", "page-dapps-dapp-description-ens": "Uporabnikom prijazna imena za naslove Ethereum in decentralizirana spletna mesta.", "page-dapps-dapp-description-foundation": "Vlagajte v edinstvene izdaje digitalnih umetnin in z izdelki trgujte z drugimi kupci.", "page-dapps-dapp-description-gitcoin": "Zaslužite kriptovalute s sodelovanjem na odprtokodni programski opremi.", @@ -94,7 +93,6 @@ "page-dapps-rotki-logo-alt": "Logotip Rotki", "page-dapps-desc": "Poiščite aplikacijo Ethereum in jo preizkusite.", "page-dapps-doge-img-alt": "Slika psa »doge«, ki uporablja računalnik", - "page-dapps-dydx-logo-alt": "Logotip dYdX", "page-dapps-editors-choice-dark-forest": "Igrajte proti drugim in osvajajte planete ter preizkusite vrhunsko tehnologijo za razširljivost in zasebnost Ethereuma. Morda je primernejše za tiste, ki že poznajo Ethereum.", "page-dapps-editors-choice-description": "Nekaj decentraliziranih aplikacij, ki jih ekipa ethereum.org trenutno obožuje. Spodaj raziščite več aplikacij.", "page-dapps-editors-choice-foundation": "Vlagajte v kulturo. Kupujte, trgujte in prodajajte edinstvene digitalne umetnine in modne izdelke nekaterih neverjetnih umetnikov, glasbenikov in blagovnih znamk.", diff --git a/src/intl/sr/common.json b/src/intl/sr/common.json index 0e652fa42ba..c3ba34b8e99 100644 --- a/src/intl/sr/common.json +++ b/src/intl/sr/common.json @@ -40,7 +40,6 @@ "developers-home": "Kuća programera", "docs": "Dokumentacija", "documentation": "Dokumentacija", - "dydx-logo": "Dydx logo", "ecosystem": "Ekosistem", "edit-page": "Izmeni stranicu", "ef-blog": "Blog Ethereum fondacije", diff --git a/src/intl/sw/common.json b/src/intl/sw/common.json index f45042e126c..8d27709a7f9 100644 --- a/src/intl/sw/common.json +++ b/src/intl/sw/common.json @@ -41,7 +41,6 @@ "developers-home": "Nyumba ya Wasanidi Programu", "docs": "Nyaraka", "documentation": "Nyaraka", - "dydx-logo": "Nembo ya Dydx", "ecosystem": "Mfumo wa ikolojia", "edit-page": "Hariri ukurasa", "ef-blog": "Blogu ya msingi ya Ethereum", diff --git a/src/intl/sw/page-dapps.json b/src/intl/sw/page-dapps.json index 3af276ee0c4..b24a7038930 100644 --- a/src/intl/sw/page-dapps.json +++ b/src/intl/sw/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Unda nyumba za sanaa, jenga maduka, na nunua ardhi - Ulimwengu wa mtandaoni wa Ethereum.", "page-dapps-dapp-description-dark-forest": "Jishindie sayari bila ukomo, zinazoundwa kwa utaratibu, kwa ulimwengu maalumu wa kriptografia.", "page-dapps-dapp-description-decentraland": "Kusanya, fanya biashara kwenye ardhi ya mtandaoni kwenye ulimwengu wa mtandaoni unaoweza kuvinjari.", - "page-dapps-dapp-description-dydx": "Fungua nafasi fupi au nafasi ya kujiinua na nafasi hadi mara kumi (x10). Kukopesha na kukopa vinapatikana pia.", "page-dapps-dapp-description-ens": "Majina rafiki ya anunuani za Ethereum na tovuti zilizogatuliwa.", "page-dapps-dapp-description-foundation": "Wekeza kwenye matoleo ya pekee ya sanaa za kidijitali na fanya biashara na wanunuzi wengine.", "page-dapps-dapp-description-gitcoin": "Jipatie kripto kwa kufanya kazi kwenye programu zilizo na vyanzo vya wazi.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Nembo ya Rotiki", "page-dapps-desc": "Tafuta programu ya Ethereum ujaribishe.", "page-dapps-doge-img-alt": "Kielelezo cha doge akitumia tarakilishi", - "page-dapps-dydx-logo-alt": "nembo ya Dydx", "page-dapps-editors-choice-dark-forest": "Cheza dhidi ya wengine kujipatia sayari na jaribishe upanga unaovuja wa Ethereum inayotanuka/teknolojia binafsi. Labda kwa wale wanaoitambua Ethereum tayari.", "page-dapps-editors-choice-description": "Dapps chache ambazo wana Ethereum wanazipenda hivi sasa. Chunguza dapps zaidi hapo chini.", "page-dapps-editors-choice-foundation": "Wekeza katika utamaduni. Nunua, fanya biashara na uza kazi za kipekee za kidijitali na mitindo kutoka kwa wasanii, wanamuziki na chapa za ajabu.", diff --git a/src/intl/sw/page-index.json b/src/intl/sw/page-index.json index 1defcc5a594..5b605bd0143 100644 --- a/src/intl/sw/page-index.json +++ b/src/intl/sw/page-index.json @@ -6,7 +6,7 @@ "page-index-description": "Ethereum ni teknolojia inayoendeshwa na jamii inayoipa nguvu sarafu ya kripto, \nether (ETH) na maelfu ya programu zisizotegemea benki za kiserikali.", "page-index-title-button": "Chunguza Ethereum", "page-index-get-started": "Anza", - "page-index-get-started-description": "ethreum.org ni mlango wako wa kuingia katika ulimwengu wa Ethereum. Teknolojia hii ni mpya na inayoendelea kubadilika - ni vizuri kuwa na mwongozo.", + "page-index-get-started-description": "ethereum.org ni mlango wako wa kuingia katika ulimwengu wa Ethereum. Teknolojia hii ni mpya na inayoendelea kubadilika - ni vizuri kuwa na mwongozo.", "page-index-get-started-image-alt": "Kielelezo cha mtu anayefanya kazi kwenye tarakilishi.", "page-index-get-started-wallet-title": "Chagua pochi", "page-index-get-started-wallet-description": "Pochi hukuruhusu kuungana na Ethereum na unaweza kudhibiti fedha zako.", @@ -18,7 +18,7 @@ "page-index-get-started-dapps-description": "Dapps ni programu zinazoendeshwa na Ethereum. Tazama unachoweza kufanya.", "page-index-get-started-dapps-image-alt": "Kielelezo cha doge akitumia tarakilishi.", "page-index-get-started-devs-title": "Anza kujenga", - "page-index-get-started-devs-description": "Kama unataka kuanza usimbuaji na Ethreum, tuna nyaraka, mafunzo na vingine vingi kwenye mlango wetu wa msanidi programu.", + "page-index-get-started-devs-description": "Kama unataka kuanza usimbuaji na Ethereum, tuna nyaraka, mafunzo na vingine vingi kwenye mlango wetu wa msanidi programu.", "page-index-get-started-devs-image-alt": "Kielelezo cha mkono ukiunda nembo ya ETH kwa matofali aina ya lego.", "page-index-what-is-ethereum": "Ethereum ni nini?", "page-index-what-is-ethereum-description": "Ethereum ni teknolojia ambayo ni nyumbani kwa hela ya kidijitali, malipo ya kimataifa, na programu. Jamii hii imejenga uchumi wa kidijitali unaoongezeka kwa kasi, njia mpya za kijasiri zinazowawezesha waundaji kupata kipato mtandaoni na mengine mengi. Jamii hii iko wazi kwa kila mtu, popote ulipo ulimwenguni - unachohitaji ni mtandao.", @@ -55,7 +55,7 @@ "page-index-network-stats-value-defi-description": "Thamani iliofungwa kwenye DeFi(USD)", "page-index-network-stats-value-defi-explainer": "Kiasi cha pesa kilichopo kwenye programu zisizotegemea madaraka (DeFi), uchumi wa dijiti wa Ethereum.", "page-index-network-stats-nodes-description": "Nodi", - "page-index-network-stats-nodes-explainer": "Ethreum inawezeshwa na maelfu ya watu wanaojitolea ulimwenguni kote, wajulikanao kama nodi.", + "page-index-network-stats-nodes-explainer": "Ethereum inawezeshwa na maelfu ya watu wanaojitolea ulimwenguni kote, wajulikanao kama nodi.", "page-index-touts-header": "Chunguza ethereum.org", "page-index-contribution-banner-title": "Changia kwenye ethereum.org", "page-index-contribution-banner-description": "Ukurusa huu ni ulio na chanzo kilicho wazi, ukiwa na mamia ya wanajamii wanaochangia. Unaweza kupendekeza madilisho juu ya yaliomo kwenye tovuti, pendekeza vipengele vipya na vizuri, au tusaidia kuondoa wadudu.", @@ -68,7 +68,7 @@ "page-index-tout-enterprise-description": "Ona jinsi ambavyo Ethereum inaweza kufungua mtindo mpya wa biashara, punguza gharama zako na uthibitisho wa baadaye wa biashara yako.", "page-index-tout-enterprise-image-alt": "Kielelezo cha tarakilishi/kifaa cha wakati ujao.", "page-index-tout-community-title": "Jamii ya wana - Ethereum", - "page-index-tout-community-description": "Msingi wa Ethreum inahusu jamii. Imeundwa na watu wenye asili na maslahi tofauti. Angalia jinsi ya kujiunga.", + "page-index-tout-community-description": "Msingi wa Ethereum inahusu jamii. Imeundwa na watu wenye asili na maslahi tofauti. Angalia jinsi ya kujiunga.", "page-index-tout-community-image-alt": "Mfano wa kikundi cha wajenzi wanaofanya kazi pamoja.", "page-index-nft": "Mtandao wa mali", "page-index-nft-description": "Ethereum sii kwa ajili ya pesa za dijiti peke yake. Chochote unachoweza kumiliki kinaweza kuwakilishwa, kuuzwa/kununua, na kutumika ipasvyo kama ishara isiyo ya kuvu.(NFTs). Unaweza ukaweka sanaa yako kama ishara na kupata mrabaha moja kwa moja kila inapouzwa tena. Au tumia ishara hio kwa kitu unachomiliki na kupewa mkopo. Uwezekano unakua kila wakati.", diff --git a/src/intl/sw/page-run-a-node.json b/src/intl/sw/page-run-a-node.json index 34241b71f34..9000ae66995 100644 --- a/src/intl/sw/page-run-a-node.json +++ b/src/intl/sw/page-run-a-node.json @@ -91,7 +91,7 @@ "page-run-a-node-participate-2": "Kama wewe ni mwanahisa, weka thamani kwenye ETH yako kwa kuunga mkono afya na ugatuaji wa mtandqao, na hakikisha na usemi katiuka Ethereum siku zijazo.", "page-run-a-node-privacy-title": "Faragha na usalama", "page-run-a-node-privacy-preview": "Acha kuvujisha taarifa zako binafsi kwa mashirika mengine.", - "page-run-a-node-privacy-1": "Unapofanya miamala kwa kutumia nodi za umma, taarifa binafsi zinaweza kuvujishwa kwenda kwa mashirika mengine kama vile anwani ya itifaki ya mtandao(IP address) na anuaniu gani za Ethreum unazomiliki.", + "page-run-a-node-privacy-1": "Unapofanya miamala kwa kutumia nodi za umma, taarifa binafsi zinaweza kuvujishwa kwenda kwa mashirika mengine kama vile anwani ya itifaki ya mtandao(IP address) na anuaniu gani za Ethereum unazomiliki.", "page-run-a-node-privacy-2": "Kwa kuelekeza pochi inayoendana na nodi yakounaweza kutumia pochi yako kuingiliana na mnyororo wa bloku (blockchain) kwa njia binafsi na salama zaidi.", "page-run-a-node-privacy-3": "Pia, kama nodi hasidi itasambaza miamala feki, kwa urahisi tu nodi yako itaikataa. Kila muamala unaofanyika unahakikiwa ndani ya mashine yako, kwahiyo huitaji kuamini chanzo chochote.", "page-run-a-node-rasp-pi-title": "Kumbuka kwenye Raspberry Pi (kichakatuaji aina ya ARM)", diff --git a/src/intl/sw/page-staking.json b/src/intl/sw/page-staking.json index acd6f10f842..7b10a03bf1d 100644 --- a/src/intl/sw/page-staking.json +++ b/src/intl/sw/page-staking.json @@ -53,7 +53,7 @@ "page-staking-upgrades-li": "Uthibitisho-wa-hisa unasimamiwa na Mnyororo Kioleza.", "page-staking-upgrades-li-2": "Ethereum itakua na uthibitisho-wa-hisa wa Mnyororo Kioleza na uthibitisho-wa-kazi wa Mtandao Mkuu inayoonekana siku zijazo. Mtandao Mkuu ndio Ethereum tuliokuwa tukitumia kwa miaka sasa.", "page-staking-upgrades-li-3": "Wakati huu, wawekaji wa hisa watakua wanaongeza bloku mpya kwenye Mnyororo Kioleza lakini haichakati miamala ya Mtandao Mkuu.", - "page-staking-upgrades-li-4": "Ethreum itafnya mpito kamili kwenda kwenye uthibitisho-wa-hisa pale ambapo Mtandao Mkuu wa Ethereum utaungana na Mnyororo Kioleza.", + "page-staking-upgrades-li-4": "Ethereum itafnya mpito kamili kwenda kwenye uthibitisho-wa-hisa pale ambapo Mtandao Mkuu wa Ethereum utaungana na Mnyororo Kioleza.", "page-staking-upgrades-li-5": "Kisasisho kisicho cha msingi kitafuata ili kuwezesha utoaji wa hisa zilizoshawekwa.", "page-staking-upgrades-title": "Uthibitisho-wa-hisa na maboresho ya makubaliano", "page-staking-validators": "Wathibitishaji zaidi, usalama zaidi", diff --git a/src/intl/sw/page-upgrades-get-involved-bug-bounty.json b/src/intl/sw/page-upgrades-get-involved-bug-bounty.json index 9a2e7b4adc5..dac6fd32cd5 100644 --- a/src/intl/sw/page-upgrades-get-involved-bug-bounty.json +++ b/src/intl/sw/page-upgrades-get-involved-bug-bounty.json @@ -21,7 +21,7 @@ "page-upgrades-bug-bounty-hunting-li-4": "Mpango wa fadhila wa Ethereum huzingatia idadi ya vigezo katika kuamua zawadi. Maamuzi ya kustahiki, alama na masharti yote yanayohusiana na tuzo ni kwa uamuzi wa mwisho wa Msingi wa jukwaa la Ethereum.", "page-upgrades-bug-bounty-leaderboard": "Tazama ubao kamili wa wanaoongoza", "page-upgrades-bug-bounty-leaderboard-points": "pointi", - "page-upgrades-bug-bounty-ledger-desc": "Mnyororo Kioleza hutoa maelezo ya vipimo vyenye mantiki ya uundaji na mabadiliko pendekezwa kwenye Ethreum kupitia maboresho ya mnyororo kioleza.", + "page-upgrades-bug-bounty-ledger-desc": "Mnyororo Kioleza hutoa maelezo ya vipimo vyenye mantiki ya uundaji na mabadiliko pendekezwa kwenye Ethereum kupitia maboresho ya mnyororo kioleza.", "page-upgrades-bug-bounty-ledger-title": "Hitilafu za ubainishaji wa mnyororo kioleza", "page-upgrades-bug-bounty-meta-description": "Muhtasari wa mpango wa uwindaji wa wadudu wa programu: jinsi ya kuhusika na kutoa taarifa.", "page-upgrades-bug-bounty-meta-title": "Programu ya utafiti wa hitilafu za safu ya makubaliano", diff --git a/src/intl/th/common.json b/src/intl/th/common.json index 19ca8b361e5..6d56e8e50ec 100644 --- a/src/intl/th/common.json +++ b/src/intl/th/common.json @@ -42,7 +42,6 @@ "developers-home": "หน้าแรกของนักพัฒนา", "docs": "เอกสาร", "documentation": "เอกสารประกอบ", - "dydx-logo": "โลโก้ Dydx", "ecosystem": "ระบบนิเวศ", "edit-page": "แก้ไขหน้า", "ef-blog": "บล็อก Ethereum Foundation", diff --git a/src/intl/tr/common.json b/src/intl/tr/common.json index e0f7144b7da..2ee0dcb6cab 100644 --- a/src/intl/tr/common.json +++ b/src/intl/tr/common.json @@ -42,7 +42,6 @@ "developers-home": "Geliştirici Ana Sayfası", "docs": "Belgeler", "documentation": "Dokümanlar", - "dydx-logo": "Dydx logosu", "ecosystem": "Ekosistem\n", "edit-page": "Sayfayı düzenle", "ef-blog": "Ethereum Foundation Blogu", diff --git a/src/intl/tr/page-dapps.json b/src/intl/tr/page-dapps.json index c257152745d..4b93d6e4237 100644 --- a/src/intl/tr/page-dapps.json +++ b/src/intl/tr/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Sanat galerileri oluşturun, mağazalar inşa edin ve arazi satın alın - bir Ethereum sanal dünyası.", "page-dapps-dapp-description-dark-forest": "Sonsuz, prosedürel olarak oluşturulmuş, kriptografik olarak belirlenmiş bir evrende gezegenleri fethedin.", "page-dapps-dapp-description-decentraland": "Keşfedebileceğiniz sanal bir dünyada sanal arazi toplayın, ticaretini yapın.", - "page-dapps-dapp-description-dydx": "10 kata kadar kaldıraçla kısa veya kaldıraçlı pozisyonlar açın. Borç verme ve borçlanma da mevcuttur.", "page-dapps-dapp-description-ens": "Ethereum adresleri için kullanıcı dostu isimler ve merkezi olmayan siteler.", "page-dapps-dapp-description-foundation": "Dijital sanat eserlerinin benzersiz baskılarına yatırım yapın ve diğer alıcılarla ticaret yapın.", "page-dapps-dapp-description-gitcoin": "Açık kaynaklı yazılım üzerinde çalışarak kripto kazanın.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki Logosu", "page-dapps-desc": "Denemek için bir Ethereum uygulaması bulun.", "page-dapps-doge-img-alt": "Bilgisayar kullanan bir köpek görseli", - "page-dapps-dydx-logo-alt": "dYdX logosu", "page-dapps-editors-choice-dark-forest": "Gezegenleri fethetmek ve en son Ethereum ölçekleme/gizlilik teknolojisini denemek için başkalarına karşı oynayın. Ethereum' a zaten aşına olanlar için örneklerden bir tanesi.", "page-dapps-editors-choice-description": "Ethereum.org ekibinin şu anda sevdiği birkaç merkezi olmayan uygulama (dapp). Aşağıdan daha fazla uygulama keşfedin.", "page-dapps-editors-choice-foundation": "Kültüre yatırım yapın. İnanılmaz sanatçı, müzisyen ve markadan benzersiz dijital sanat eserleri ve moda ürünleri satın alın, ticaret yapın ve satın.", diff --git a/src/intl/uk/common.json b/src/intl/uk/common.json index 078551686b5..8a9f11d9a62 100644 --- a/src/intl/uk/common.json +++ b/src/intl/uk/common.json @@ -42,7 +42,6 @@ "developers-home": "Головна сторінка для розробників", "docs": "Документи", "documentation": "Документація", - "dydx-logo": "Dydx logo", "ecosystem": "Екосистема", "edit-page": "Змінити сторінку", "ef-blog": "Блог Ethereum Foundation", diff --git a/src/intl/uk/page-dapps.json b/src/intl/uk/page-dapps.json index 09d2edd0c7f..49b499f4304 100644 --- a/src/intl/uk/page-dapps.json +++ b/src/intl/uk/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Створюйте мистецькі галереї, відкривайте магазини й купуйте земельні ділянки у віртуальному світі Ethereum.", "page-dapps-dapp-description-dark-forest": "Завойовуйте планети в безмежному криптографічному всесвіті, для створення якого кожна деталь бралася до уваги.", "page-dapps-dapp-description-decentraland": "Збирайте й продавайте земельні ділянки в цікавому віртуальному світі.", - "page-dapps-dapp-description-dydx": "Відкривайте короткі позиції або позиції за кредитні кошти й отримуйте в 10 разів більше. Доступні також кредитування й позики.", "page-dapps-dapp-description-ens": "Зручні імена для адрес Ethereum і децентралізовані сайти.", "page-dapps-dapp-description-foundation": "Інвестуйте в унікальні цифрові витвори мистецтва й торгуйте ними з іншими покупцями.", "page-dapps-dapp-description-gitcoin": "Заробляйте криптовалюту за допомогою програмного забезпечення з відкритим кодом.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Логотип Rotki", "page-dapps-desc": "Знайдіть потрібну програму Ethereum.", "page-dapps-doge-img-alt": "Ілюстрація собаки за комп’ютером", - "page-dapps-dydx-logo-alt": "dYdX logo", "page-dapps-editors-choice-dark-forest": "Змагайтеся з іншими, завойовуйте планети та випробуйте найсучаснішу технологію масштабування та забезпечення конфіденційності Ethereum. Можливо, вона підійде для тих, хто вже працював із мережею Ethereum.", "page-dapps-editors-choice-description": "Кілька улюблених децентралізованих програм команди ethereum.org. Нижче можна дізнатися про інші.", "page-dapps-editors-choice-foundation": "Інвестуйте в культуру. Купуйте й продавайте унікальні цифрові витвори мистецтва й елементи моди від талановитих митців, музикантів і брендів.", diff --git a/src/intl/vi/common.json b/src/intl/vi/common.json index 2d13916c8ac..cdf0a59d7a1 100644 --- a/src/intl/vi/common.json +++ b/src/intl/vi/common.json @@ -42,7 +42,6 @@ "developers-home": "Trang chủ dành cho nhà phát triển", "docs": "Tài liệu tham khảo", "documentation": "Tài liệu tham khảo", - "dydx-logo": "Logo Dydx", "ecosystem": "Hệ sinh thái", "edit-page": "Trang chỉnh sửa", "ef-blog": "Blog về Nền tảng Ethereum", diff --git a/src/intl/vi/page-dapps.json b/src/intl/vi/page-dapps.json index 4d9d60fc8fe..df74bd7c1b7 100644 --- a/src/intl/vi/page-dapps.json +++ b/src/intl/vi/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "Tạo phòng trưng bày nghệ thuật, xây dựng cửa hàng và mua đất trong môi trường ảo dựa trên Ethereum.", "page-dapps-dapp-description-dark-forest": "Chinh phục các hành tinh trong một vũ trụ vô tận, được tạo ra theo thủ tục và được chỉ định bằng mật mã.", "page-dapps-dapp-description-decentraland": "Thu mua và giao dịch đất ảo trong một môi trường ảo mà bạn có thể khám phá.", - "page-dapps-dapp-description-dydx": "Mở các vị thế ngắn hạn hoặc vị thế đòn bẩy với đòn bẩy lên đến 10 lần. Hoạt động cho vay và vay mượn cũng khả dụng.", "page-dapps-dapp-description-ens": "Tên dễ hiểu đối với người dùng cho địa chỉ Ethereum và các trang web phi tập trung.", "page-dapps-dapp-description-foundation": "Đầu tư vào các phiên bản riêng biệt của nghệ thuật số và giao dịch các tác phẩm với người mua khác.", "page-dapps-dapp-description-gitcoin": "Kiếm tiền điện tử bằng cách phát triển phần mềm mã nguồn mở.", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Biểu trưng Rotki", "page-dapps-desc": "Tìm một ứng dụng Ethereum để thử.", "page-dapps-doge-img-alt": "Hình minh họa một con chó (doge) đang sử dụng máy tính", - "page-dapps-dydx-logo-alt": "Biểu trưng dYdX", "page-dapps-editors-choice-dark-forest": "Tranh đấu với những người chơi khác để chinh phục các hành tinh và thử nghiệm công nghệ bảo mật/tay đổi quy mô tiên tiến của Ethereum. Có thể dành cho người chơi đã quen thuộc với Ethereum.", "page-dapps-editors-choice-description": "Một vài ứng dụng phi tập trung (dapp) mà hiện nhóm ethereum.org đang yêu thích. Khám phá thêm các ứng dụng phi tập trung (dapp) bên dưới.", "page-dapps-editors-choice-foundation": "Đầu tư vào văn hóa. Mua, bán và giao dịch các tác phẩm nghệ thuật và thời trang số độc quyền từ một số nghệ sĩ, nhạc sĩ và thương hiệu đình đám nhất thế giới.", diff --git a/src/intl/zh-tw/common.json b/src/intl/zh-tw/common.json index 99107d239a7..d64c53e0d2c 100644 --- a/src/intl/zh-tw/common.json +++ b/src/intl/zh-tw/common.json @@ -42,7 +42,6 @@ "developers-home": "開發者首頁", "docs": "文件", "documentation": "文件", - "dydx-logo": "Dydx 標誌", "ecosystem": "生態系統", "edit-page": "編輯頁面", "ef-blog": "以太坊基金會部落格", diff --git a/src/intl/zh-tw/page-dapps.json b/src/intl/zh-tw/page-dapps.json index 1bbc7219c43..9b5b2d6eaa2 100644 --- a/src/intl/zh-tw/page-dapps.json +++ b/src/intl/zh-tw/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "在以太坊虛擬世界中,建立藝廊、開店和購買土地。", "page-dapps-dapp-description-dark-forest": "在無垠、程序化生成、特定加密的宇宙中征服眾多行星。", "page-dapps-dapp-description-decentraland": "在無盡探索的虛擬世界中收集、交易虛擬土地。", - "page-dapps-dapp-description-dydx": "開啟賣空或槓桿融資,槓桿倍數最高為 10 倍。借出和借入都可以。", "page-dapps-dapp-description-ens": "使用者友善的以太坊位址名稱,以及去中心化網站。", "page-dapps-dapp-description-foundation": "投資獨一無二版本的數位藝術品,並與其他買家交易。", "page-dapps-dapp-description-gitcoin": "改善開源軟體賺取加密貨幣。", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki 標誌", "page-dapps-desc": "找個以太坊應用程式試一試。", "page-dapps-doge-img-alt": "插圖:狗狗使用電腦", - "page-dapps-dydx-logo-alt": "dYdX 標誌", "page-dapps-editors-choice-dark-forest": "對抗其他玩家、征服星球,並嘗試以太坊最新擴張/隱私技術。也許您的對手已經對以太坊很熟悉。", "page-dapps-editors-choice-description": "一些 ethereum.org 團隊現在愛不釋手的一些去中心化應用程式。在下方探索更多去中心化應用程式。", "page-dapps-editors-choice-foundation": "投資文化。向頂尖藝術家、音樂家及樂團,購買、交易,及販賣獨一無二的數位藝術品和時尚。", diff --git a/src/intl/zh/common.json b/src/intl/zh/common.json index 8250409ba43..4a23384dca6 100644 --- a/src/intl/zh/common.json +++ b/src/intl/zh/common.json @@ -42,7 +42,6 @@ "developers-home": "开发者主页", "docs": "相关文档", "documentation": "相关文档", - "dydx-logo": "dYdX徽章", "ecosystem": "生态系统", "edit-page": "编辑页面", "ef-blog": "以太坊基金会博客", diff --git a/src/intl/zh/page-dapps.json b/src/intl/zh/page-dapps.json index b339266eef6..dd4f4b66662 100644 --- a/src/intl/zh/page-dapps.json +++ b/src/intl/zh/page-dapps.json @@ -54,7 +54,6 @@ "page-dapps-dapp-description-cryptovoxels": "创建艺术画廊,建立商店,购买土地--一个以太坊虚拟世界。", "page-dapps-dapp-description-dark-forest": "在一个无限的、程序生成的、密码学指定的宇宙中征服行星。", "page-dapps-dapp-description-decentraland": "在您可以探索的虚拟世界中收集、交易虚拟土地。", - "page-dapps-dapp-description-dydx": "开空或杠杆,杠杆高达10倍。也可借贷。", "page-dapps-dapp-description-ens": "用户友好的以太坊地址和去中心化网站的名称。", "page-dapps-dapp-description-foundation": "投资独特版本的数字艺术品,并与其他买家交易作品。", "page-dapps-dapp-description-gitcoin": "在开源软件上工作,赚取加密货币。", @@ -96,7 +95,6 @@ "page-dapps-rotki-logo-alt": "Rotki 徽标", "page-dapps-desc": "找一个以太坊应用试试。", "page-dapps-doge-img-alt": "用电脑设计一只狗", - "page-dapps-dydx-logo-alt": "dYdX徽标", "page-dapps-editors-choice-dark-forest": "与他人对弈,征服星球,尝试最前沿的以太坊扩展/隐私技术。也许是对于那些已经熟悉以太坊的人来说。", "page-dapps-editors-choice-description": "一些ethereum.org团队现在喜欢的去中心化应用。下面是更多的去中心化应用。", "page-dapps-editors-choice-foundation": "投资于文化。购买、交易和出售来自一些不可思议的艺术家、音乐家和品牌的独特数字艺术品和时尚。", diff --git a/src/intl/zh/page-layer-2.json b/src/intl/zh/page-layer-2.json index 44d327b99ae..2118e9c2328 100644 --- a/src/intl/zh/page-layer-2.json +++ b/src/intl/zh/page-layer-2.json @@ -118,7 +118,6 @@ "arbitrum-description": "Arbitrum 是一种乐观卷叠,目的是提供与以太坊完全一致的交互体验,但交易成本只是它们在一层网络上的很小比例。", "optimism-description": "乐观以太坊是一种 EVM 等效的乐观卷叠链。它的目标是快捷、简单和安全。", "boba-description": "Boba 是最初从乐观卷叠分叉而来的乐观卷叠链,它是一种旨在降低铸币费用,提高交易吞吐量,并扩展智能合约能力的扩容解决方案。", - "dydx-description": "dYdX 旨在建立一个强大、专业的交易所来交易加密资产,在这里用户能够真正掌控自己的交易,并最终拥有交易所本身。", "loopring-description": "Loopring 的零知识卷叠二层网络解决方案旨在提供与以太坊主链相同的安全保障,并大规模提升可扩展性:交易吞吐量增加 1000 倍,交易费用降至一层网络 0.1%。", "zksync-description": "zkSync 是由 Matter Labs 推出的以用户为中心的零知识卷叠平台。它是以太坊的扩容解决方案,已经在以太坊主链上线,支持付款、代币交换和 NFT 挖矿。", "zkspace-description": "ZKSpace 平台由三个主要部分组成:利用零知识卷叠技术建立的二层自动化做市商,被称为 ZKSwap;还有被称为 ZKSquare 的支付服务,以及被称为 ZKSea 的非同质化代币市场。", diff --git a/src/pages-conditional/dapps.tsx b/src/pages-conditional/dapps.tsx index 5dd67c7693b..70f36527bed 100644 --- a/src/pages-conditional/dapps.tsx +++ b/src/pages-conditional/dapps.tsx @@ -198,6 +198,7 @@ const StepBox = styled(Link)` text-decoration: none; width: 100%; &:hover { + text-decoration: none; background: ${(props) => props.theme.colors.ednBackground}; transition: transform 0.2s; transform: scale(1.05); @@ -721,13 +722,6 @@ const DappsPage = ({ image: getImage(data.loopring), alt: translateMessageId("page-dapps-loopring-logo-alt", intl), }, - { - title: "dYdX", - description: translateMessageId("page-dapps-dapp-description-dydx", intl), - link: "https://dydx.exchange/", - image: getImage(data.dydx), - alt: "page-dapps-dydx-logo-alt", - }, ] const lottery = [ @@ -1155,7 +1149,7 @@ const DappsPage = ({ { content: translateMessageId("page-dapps-what-are-dapps", intl), to: "#what-are-dapps", - isSecondary: true, + variant: "outline", }, ], } @@ -1548,7 +1542,7 @@ const DappsPage = ({ @@ -1578,21 +1572,21 @@ const DappsPage = ({ {selectedCategory === CategoryType.FINANCE && ( - + )} {selectedCategory === CategoryType.COLLECTIBLES && ( - + )} {selectedCategory === CategoryType.GAMING && ( - + @@ -1872,9 +1866,6 @@ export const query = graphql` oneinch: file(relativePath: { eq: "exchanges/1inch.png" }) { ...dappImage } - dydx: file(relativePath: { eq: "exchanges/dydx.png" }) { - ...dappImage - } augur: file(relativePath: { eq: "dapps/augur.png" }) { ...dappImage } diff --git a/src/pages-conditional/what-is-ethereum.tsx b/src/pages-conditional/what-is-ethereum.tsx index 92ef16b9fbb..bb4a7b6505a 100644 --- a/src/pages-conditional/what-is-ethereum.tsx +++ b/src/pages-conditional/what-is-ethereum.tsx @@ -8,7 +8,8 @@ import { useIntl } from "react-intl" import Translation from "../components/Translation" import Callout from "../components/Callout" import Card from "../components/Card" -import OriginalButtonLink from "../components/ButtonLink" +import ButtonLink from "../components/ButtonLink" +import Button from "../components/Button" import PageMetadata from "../components/PageMetadata" import Tooltip from "../components/Tooltip" import Tabs from "../components/Tabs" @@ -204,15 +205,15 @@ const StatDescription = styled.div` color: ${({ theme }) => theme.colors.text200}; ` -const ButtonLink = styled(OriginalButtonLink)`` - const ButtonRow = styled.div` display: flex; align-items: center; margin-top: 1rem; + margin-bottom: 1.45rem; flex-wrap: wrap; - & ${ButtonLink} { + & > button, + & > a { margin-right: 1rem; @media (max-width: ${({ theme }) => theme.breakpoints.l}) { @@ -399,7 +400,7 @@ const WhatIsEthereumPage = ({ const tooltipContent = ({ apiUrl, apiProvider, ariaLabel }) => (
{" "} - + {apiProvider}
@@ -428,9 +429,9 @@ const WhatIsEthereumPage = ({ - +

-

- - - - - - - - -

+ + + + + + + + @@ -794,16 +793,14 @@ const WhatIsEthereumPage = ({

-

- - - - - - - - -

+ + + + + + + + @@ -823,13 +820,11 @@ const WhatIsEthereumPage = ({

-

- - - - - -

+ + + + + @@ -855,16 +850,14 @@ const WhatIsEthereumPage = ({

-

- - - - - - - - -

+ + + + + + + + @@ -927,16 +920,14 @@ const WhatIsEthereumPage = ({

-

- - - - - - - - -

+ + + + + + + + diff --git a/src/pages/bug-bounty.tsx b/src/pages/bug-bounty.tsx index 881306f7af7..4d6ede655e5 100644 --- a/src/pages/bug-bounty.tsx +++ b/src/pages/bug-bounty.tsx @@ -27,6 +27,7 @@ import { SloganGradient, } from "../components/SharedStyledComponents" import FeedbackCard from "../components/FeedbackCard" +import BugBountyBanner from "../components/Banners/BugBountyBanner" import { Context } from "../types" const HeroCard = styled.div` @@ -108,7 +109,6 @@ const ButtonRow = styled.div` ` const StyledButton = styled(ButtonLink)` - flex: 0 1 7.75rem; margin-right: 1rem; @media (max-width: ${(props) => props.theme.breakpoints.l}) { margin-bottom: 1rem; @@ -398,6 +398,8 @@ const BugBountiesPage = ({ intl )} /> + {/* TODO: Remove September 8 */} + @@ -419,14 +421,14 @@ const BugBountiesPage = ({ - + - + diff --git a/src/pages/community.tsx b/src/pages/community.tsx index 84d9e35d59c..9c8179aa93b 100644 --- a/src/pages/community.tsx +++ b/src/pages/community.tsx @@ -491,7 +491,7 @@ const CommunityPage = ({ - + @@ -522,7 +522,7 @@ const CommunityPage = ({
diff --git a/src/pages/developers/index.tsx b/src/pages/developers/index.tsx index 59cf99dbf0e..839e25a158a 100644 --- a/src/pages/developers/index.tsx +++ b/src/pages/developers/index.tsx @@ -9,7 +9,6 @@ import Card from "../../components/Card" import Callout from "../../components/Callout" import Link from "../../components/Link" import Translation from "../../components/Translation" -import PreMergeBanner from "../../components/PreMergeBanner" import ButtonLink from "../../components/ButtonLink" import PageMetadata from "../../components/PageMetadata" import { @@ -248,9 +247,6 @@ const DevelopersPage = ({ title={translateMessageId("page-developer-meta-title", intl)} description={translateMessageId("page-developers-meta-desc", intl)} /> - - - diff --git a/src/pages/developers/learning-tools.tsx b/src/pages/developers/learning-tools.tsx index 2ad3385a86b..f77d0ff9b19 100644 --- a/src/pages/developers/learning-tools.tsx +++ b/src/pages/developers/learning-tools.tsx @@ -233,6 +233,15 @@ const LearningToolsPage = ({ background: "#121f3d", subjects: ["Solidity", "web3"], }, + { + name: "Speed Run Ethereum", + description: "page-learning-tools-speed-run-ethereum-description", + url: "https://speedrunethereum.com/", + image: getImage(data.speedRunEthereum), + alt: "page-learning-tools-speed-run-ethereum-logo-alt", + background: "#ffffff", + subjects: ["Solidity", "web3"], + }, ] return ( @@ -391,6 +400,11 @@ export const query = graphql` replit: file(relativePath: { eq: "dev-tools/replit.png" }) { ...learningToolImage } + speedRunEthereum: file( + relativePath: { eq: "dev-tools/speed-run-ethereum.png" } + ) { + ...learningToolImage + } ethdotbuild: file(relativePath: { eq: "dev-tools/eth-dot-build.png" }) { ...learningToolImage } diff --git a/src/pages/developers/tutorials.tsx b/src/pages/developers/tutorials.tsx index 52bd0e18690..63378e73b63 100644 --- a/src/pages/developers/tutorials.tsx +++ b/src/pages/developers/tutorials.tsx @@ -48,6 +48,7 @@ const TutorialCard = styled(Link)` width: 100%; color: #000000; &:hover { + text-decoration: none; border-radius: 4px; box-shadow: 0 0 1px ${(props) => props.theme.colors.primary}; background: ${(props) => props.theme.colors.tableBackgroundHover}; @@ -230,7 +231,7 @@ interface IExternalTutorial { } interface ITutorial { - to?: string | null + to: string title: string description: string author: string @@ -258,7 +259,7 @@ const TutorialsPage = ({ to: tutorial?.fields?.slug?.substr(0, 3) === "/en" ? tutorial.fields.slug.substr(3) - : tutorial.fields?.slug, + : tutorial.fields?.slug || "/", title: tutorial?.frontmatter?.title || "", description: tutorial?.frontmatter?.description || "", author: tutorial?.frontmatter?.author || "", @@ -414,7 +415,7 @@ const TutorialsPage = ({

{" "} @@ -436,7 +437,7 @@ const TutorialsPage = ({

{" "} @@ -562,7 +563,6 @@ export const query = graphql` skill published lang - preMergeBanner } } } diff --git a/src/pages/get-eth.tsx b/src/pages/get-eth.tsx index 215885f8b90..4ff76d37e2a 100644 --- a/src/pages/get-eth.tsx +++ b/src/pages/get-eth.tsx @@ -191,11 +191,6 @@ const GetETHPage = ({ data }: PageProps) => { link: "https://www.bancor.network/", image: getImage(data.bancor), }, - { - title: "dYdX", - link: "https://dydx.exchange/", - image: getImage(data.dydx), - }, { title: "Kyber", link: "https://kyberswap.com/#/swap/", @@ -503,8 +498,5 @@ export const query = graphql` bancor: file(relativePath: { eq: "exchanges/bancor.png" }) { ...listItemImage } - dydx: file(relativePath: { eq: "exchanges/dydx.png" }) { - ...listItemImage - } } ` diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9714240572e..3ade9225fd5 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -24,7 +24,6 @@ import { LeftColumn, } from "../components/SharedStyledComponents" import { translateMessageId, isLangRightToLeft } from "../utils/translations" -import PreMergeBanner from "../components/PreMergeBanner" import SimpleWalletContent from "!!raw-loader!../data/SimpleWallet.sol" import SimpleTokenContent from "!!raw-loader!../data/SimpleToken.sol" @@ -560,7 +559,6 @@ const HomePage = ({ title={translateMessageId("page-index-meta-title", intl)} description={translateMessageId("page-index-meta-description", intl)} /> - - + @@ -626,7 +624,7 @@ const HomePage = ({ - + @@ -706,7 +704,7 @@ const HomePage = ({ - + @@ -805,7 +803,7 @@ const HomePage = ({ GitHub diff --git a/src/pages/languages.tsx b/src/pages/languages.tsx index 687f43130f8..15572e2bc17 100644 --- a/src/pages/languages.tsx +++ b/src/pages/languages.tsx @@ -7,7 +7,7 @@ import Translation from "../components/Translation" import Link from "../components/Link" import { Page, Content } from "../components/SharedStyledComponents" -import { Language, languageMetadata } from "../utils/languages" +import { Lang, Language, languageMetadata } from "../utils/languages" import { translateMessageId, TranslationKey } from "../utils/translations" import { CardItem as LangItem } from "../components/SharedStyledComponents" import Icon from "../components/Icon" @@ -69,7 +69,7 @@ const ResetIcon = styled(Icon)` ` interface TranslatedLanguage extends Language { - path?: string + path: string } const LanguagesPage = () => { @@ -85,19 +85,19 @@ const LanguagesPage = () => { ) let translationsCompleted: Array = [] for (const lang in languageMetadata) { - const langMetadata = languageMetadata[lang] - langMetadata["path"] = `/${lang}/` - langMetadata["name"] = translateMessageId( - `language-${lang}` as TranslationKey, - intl - ) - const nativeLangTitle = langMetadata["localName"] - const englishLangTitle = langMetadata["name"] + const langMetadata = { + ...languageMetadata[lang], + path: "/", + name: translateMessageId(`language-${lang}` as TranslationKey, intl), + } + + const nativeLangTitle = langMetadata.localName + const englishLangTitle = langMetadata.name if ( englishLangTitle.toLowerCase().includes(keyword.toLowerCase()) || nativeLangTitle.toLowerCase().includes(keyword.toLowerCase()) ) { - translationsCompleted.push(languageMetadata[lang]) + translationsCompleted.push(langMetadata) } } translationsCompleted.sort((a, b) => a["name"].localeCompare(b["name"])) @@ -147,7 +147,7 @@ const LanguagesPage = () => { {translationsCompleted.map((lang) => ( - + {lang["name"]}

{lang.localName}

diff --git a/src/pages/layer-2.tsx b/src/pages/layer-2.tsx index cc58bcfc687..3f885f047b3 100644 --- a/src/pages/layer-2.tsx +++ b/src/pages/layer-2.tsx @@ -187,7 +187,9 @@ const StatDivider = styled.div` ` interface L2DataResponse { - data: Array<[string, number, number]> + daily: { + data: Array<[string, number, number]> + } } interface FeeDataResponse { @@ -210,6 +212,7 @@ const Layer2Page = ({ data }: PageProps) => { const l2BeatData = await getData( `${GATSBY_FUNCTIONS_PATH}/l2beat` ) + // formatted TVL from L2beat API formatted const TVL = new Intl.NumberFormat(localeForStatsBoxNumbers, { style: "currency", @@ -217,13 +220,13 @@ const Layer2Page = ({ data }: PageProps) => { notation: "compact", minimumSignificantDigits: 2, maximumSignificantDigits: 3, - }).format(l2BeatData.data[l2BeatData.data.length - 1][1]) + }).format(l2BeatData.daily.data[l2BeatData.daily.data.length - 1][1]) setTVL(`${TVL}`) // Calculate percent change ((new value - old value) / old value) *100) const percentage = - ((l2BeatData.data[l2BeatData.data.length - 1][1] - - l2BeatData.data[l2BeatData.data.length - 31][1]) / - l2BeatData.data[l2BeatData.data.length - 31][1]) * + ((l2BeatData.daily.data[l2BeatData.daily.data.length - 1][1] - + l2BeatData.daily.data[l2BeatData.daily.data.length - 31][1]) / + l2BeatData.daily.data[l2BeatData.daily.data.length - 31][1]) * 100 setL2PercentChange( percentage > 0 @@ -284,12 +287,12 @@ const Layer2Page = ({ data }: PageProps) => { { content: translateMessageId("layer-2-hero-button-2", intl), toId: "use-layer-2", - isSecondary: true, + variant: "outline", }, { content: translateMessageId("layer-2-hero-button-3", intl), toId: "how-to-get-onto-layer-2", - isSecondary: true, + variant: "outline", }, ], } @@ -1111,16 +1114,7 @@ export const query = graphql` ) } } - dydx: file(relativePath: { eq: "layer-2/dydx.png" }) { - childImageSharp { - gatsbyImageData( - width: 100 - layout: CONSTRAINED - placeholder: BLURRED - quality: 100 - ) - } - } + l2beat: file(relativePath: { eq: "layer-2/l2beat.jpg" }) { childImageSharp { gatsbyImageData( diff --git a/src/pages/run-a-node.tsx b/src/pages/run-a-node.tsx index efe1eb4f76a..112db45c20e 100644 --- a/src/pages/run-a-node.tsx +++ b/src/pages/run-a-node.tsx @@ -107,10 +107,7 @@ const Column = styled.div` ` const ResponsiveButtonLink = styled(ButtonLink)` - display: flex; - align-items: center; gap: 1rem; - width: fit-content; padding-left: 2rem; padding-right: 2rem; @@ -430,7 +427,7 @@ const RunANodePage = ({ data }: PageProps) => { { content: , toId: "getting-started", - isSecondary: true, + variant: "outline", }, ], } @@ -873,7 +870,7 @@ const RunANodePage = ({ data }: PageProps) => { @@ -902,7 +899,7 @@ const RunANodePage = ({ data }: PageProps) => { - + diff --git a/src/pages/stablecoins.tsx b/src/pages/stablecoins.tsx index 5e1bc7ab9be..96b66805756 100644 --- a/src/pages/stablecoins.tsx +++ b/src/pages/stablecoins.tsx @@ -536,17 +536,6 @@ const StablecoinsPage = ({ data }: PageProps) => { intl ), }, - { - background: "#212121", - url: "https://trade.dydx.exchange/portfolio/overview", - alt: translateMessageId("dydx-logo", intl), - image: getImage(data.dydx), - name: "dYdX", - description: translateMessageId( - "page-stablecoins-stablecoins-dapp-description-3", - intl - ), - }, { background: "linear-gradient(135deg, #c7efe6 0%, #eeeac7 100%)", url: "https://oasis.app", @@ -592,7 +581,7 @@ const StablecoinsPage = ({ data }: PageProps) => { intl ), toId: "how", - isSecondary: true, + variant: "outline", }, ], } @@ -723,7 +712,7 @@ const StablecoinsPage = ({ data }: PageProps) => {
@@ -758,7 +747,7 @@ const StablecoinsPage = ({ data }: PageProps) => {
@@ -818,7 +807,7 @@ const StablecoinsPage = ({ data }: PageProps) => { - + @@ -974,16 +963,6 @@ export const query = graphql` ) } } - dydx: file(relativePath: { eq: "exchanges/dydx.png" }) { - childImageSharp { - gatsbyImageData( - width: 80 - layout: FIXED - placeholder: BLURRED - quality: 100 - ) - } - } oasis: file(relativePath: { eq: "stablecoins/dai-large.png" }) { childImageSharp { gatsbyImageData( diff --git a/src/pages/studio.tsx b/src/pages/studio.tsx index 76e9b4145f1..f0b4c2a8dc5 100644 --- a/src/pages/studio.tsx +++ b/src/pages/studio.tsx @@ -68,10 +68,10 @@ const StudioRedirectPage = () => ( . Check out our developer portal for tools, documentation, and more.

- + Use Remix - + Developer portal diff --git a/src/pages/upgrades/index.tsx b/src/pages/upgrades/index.tsx index 9faf472d6f8..9b6af75a1b9 100644 --- a/src/pages/upgrades/index.tsx +++ b/src/pages/upgrades/index.tsx @@ -240,7 +240,7 @@ const Eth2IndexPage = ({ data }: PageProps) => { { content: translateMessageId("page-upgrades-whats-ethereum", intl), to: "/what-is-ethereum/", - isSecondary: true, + variant: "outline", }, ], } @@ -422,7 +422,7 @@ const Eth2IndexPage = ({ data }: PageProps) => {
- + diff --git a/src/pages/wallets/find-wallet.tsx b/src/pages/wallets/find-wallet.tsx index c1294a5b34a..ca19d500e7e 100644 --- a/src/pages/wallets/find-wallet.tsx +++ b/src/pages/wallets/find-wallet.tsx @@ -727,6 +727,11 @@ export const query = graphql` gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) } } + sequence: file(relativePath: { eq: "wallets/sequence.png" }) { + childImageSharp { + gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) + } + } trezor: file(relativePath: { eq: "wallets/trezor.png" }) { childImageSharp { gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) @@ -737,5 +742,25 @@ export const query = graphql` gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) } } + infinity_wallet: file(relativePath: { eq: "wallets/infinity_wallet.png" }) { + childImageSharp { + gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) + } + } + exodus: file(relativePath: { eq: "wallets/exodus.png" }) { + childImageSharp { + gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) + } + } + rabbywallet: file(relativePath: { eq: "wallets/rabbywallet.png" }) { + childImageSharp { + gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) + } + } + bitcoindotcom: file(relativePath: { eq: "wallets/bitcoindotcom.png" }) { + childImageSharp { + gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED, quality: 100) + } + } } ` diff --git a/src/schema/sdls/Frontmatter.ts b/src/schema/sdls/Frontmatter.ts index 92c20c03fa7..e1c5ef159b2 100644 --- a/src/schema/sdls/Frontmatter.ts +++ b/src/schema/sdls/Frontmatter.ts @@ -24,6 +24,5 @@ export const Frontmatter = ` author: String tags: [String] isOutdated: Boolean - preMergeBanner: Boolean } ` diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index 92a3af8821e..4815c833fe8 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -35,7 +35,7 @@ import { Header4, ListItem, } from "../components/SharedStyledComponents" -import PreMergeBanner from "../components/PreMergeBanner" +import PostMergeBanner from "../components/Banners/PostMergeBanner" import { ZenModeContext } from "../contexts/ZenModeContext" import { isLangRightToLeft } from "../utils/translations" @@ -191,7 +191,7 @@ const DocsPage = ({ const { editContentUrl } = siteData.siteMetadata || {} const absoluteEditPath = `${editContentUrl}${relativePath}` const isDevelopersHome = relativePath.endsWith("/developers/docs/index.md") - const showMergeBanner = !!mdx.frontmatter.preMergeBanner || isDevelopersHome + const showPostMergeBanner = !!mdx.frontmatter.postMergeBanner return ( @@ -204,13 +204,7 @@ const DocsPage = ({