From f974c636293d3fa9a6f41a3e03951482e71074f0 Mon Sep 17 00:00:00 2001 From: Pablo Date: Mon, 14 Jul 2025 16:11:58 +0200 Subject: [PATCH 01/98] remove LazyLoadComponent --- src/components/LazyLoadComponent.tsx | 55 ---------------------------- 1 file changed, 55 deletions(-) delete mode 100644 src/components/LazyLoadComponent.tsx diff --git a/src/components/LazyLoadComponent.tsx b/src/components/LazyLoadComponent.tsx deleted file mode 100644 index ed31c5dbe96..00000000000 --- a/src/components/LazyLoadComponent.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { Suspense, useEffect, useRef, useState } from "react" - -interface LazyLoadComponentProps { - component: T - fallback: React.ReactNode - componentProps: React.ComponentProps - intersectionOptions?: IntersectionObserverInit -} - -const LazyLoadComponent = ({ - component: Component, - fallback, - componentProps, - intersectionOptions = {}, -}: LazyLoadComponentProps) => { - const [isVisible, setIsVisible] = useState(false) - const ref = useRef(null) - - useEffect(() => { - const obsRef = ref.current - - const observer = new IntersectionObserver(([entry]) => { - // Update the state when observer callback fires - if (entry.isIntersecting) { - setIsVisible(true) - observer.disconnect() - } - }, intersectionOptions) - - if (obsRef) { - observer.observe(obsRef) - } - - // Clean up the observer on component unmount - return () => { - if (obsRef) { - observer.disconnect() - } - } - }, [intersectionOptions]) - - return ( -
- {isVisible ? ( - - - - ) : ( - fallback // Show fallback until the component is visible - )} -
- ) -} - -export default LazyLoadComponent From 92e9c46e8bc8e33580b63ec81f77045bfa837aa6 Mon Sep 17 00:00:00 2001 From: Pablo Date: Mon, 14 Jul 2025 16:13:44 +0200 Subject: [PATCH 02/98] implement IntersectionObserverReveal component and integrate it with ValuesMarquee for lazy loading on the page --- app/[locale]/page.tsx | 19 ++++--- src/components/IntersectionObserverReveal.tsx | 50 +++++++++++++++++++ 2 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/components/IntersectionObserverReveal.tsx diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 606fe0ca3fc..0a3b2d3f8ef 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -35,6 +35,7 @@ import Twitter from "@/components/icons/twitter.svg" import Whitepaper from "@/components/icons/whitepaper.svg" import { Image } from "@/components/Image" import CardImage from "@/components/Image/CardImage" +import IntersectionObserverReveal from "@/components/IntersectionObserverReveal" import MainArticle from "@/components/MainArticle" import { ButtonLink } from "@/components/ui/buttons/Button" import SvgButtonLink, { @@ -649,14 +650,16 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { {/* dynamic / lazy loaded */} - + + + {/* Builders - Blockchain's biggest builder community */} diff --git a/src/components/IntersectionObserverReveal.tsx b/src/components/IntersectionObserverReveal.tsx new file mode 100644 index 00000000000..8dc413cef97 --- /dev/null +++ b/src/components/IntersectionObserverReveal.tsx @@ -0,0 +1,50 @@ +"use client" + +import { ReactNode, useState } from "react" +import { useIntersectionObserver } from "usehooks-ts" + +import { cn } from "@/lib/utils/cn" + +interface IntersectionObserverRevealProps { + children: ReactNode + threshold?: number + className?: string + rootMargin?: string +} + +const IntersectionObserverReveal = ({ + children, + threshold = 0, + className, + rootMargin, +}: IntersectionObserverRevealProps) => { + const { ref, isIntersecting } = useIntersectionObserver({ + threshold, + root: null, + rootMargin, + }) + + // once the element is visible, set a flag to prevent the element from being hidden again + const [hasBeenVisible, setHasBeenVisible] = useState(false) + + if (isIntersecting && !hasBeenVisible) { + setHasBeenVisible(true) + } + + return ( +
+ {(isIntersecting || hasBeenVisible) && ( +
+ {children} +
+ )} +
+ ) +} + +export default IntersectionObserverReveal From 7674835933e8dfb880293be6b34d625fc380b277 Mon Sep 17 00:00:00 2001 From: haouvw Date: Mon, 21 Jul 2025 14:49:27 +0800 Subject: [PATCH 03/98] chore(docs): Fix Typo in src/data/audio/smart-contracts/script.md Signed-off-by: haouvw --- src/data/audio/smart-contracts/script.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/audio/smart-contracts/script.md b/src/data/audio/smart-contracts/script.md index ff958c4e497..5c749fe4d70 100644 --- a/src/data/audio/smart-contracts/script.md +++ b/src/data/audio/smart-contracts/script.md @@ -12,6 +12,6 @@ Second, they're transparent. Anyone can verify what a smart contract will do bef Third, Smart contracts also protect your privacy. Since Ethereum is a pseudonymous network (your transactions are tied publicly to a unique cryptographic address, not your identity), you can protect your privacy from observers. -Smart contracts are already being used in many exciting ways such as: Stablecoins, creating and distrubting unique digital assets, decentralized exchanges, gaming, insurance, and much more. +Smart contracts are already being used in many exciting ways such as: Stablecoins, creating and distributing unique digital assets, decentralized exchanges, gaming, insurance, and much more. In essence, smart contracts are revolutionizing how we think about agreements and automation in the digital age. They're making transactions more efficient, transparent, and trustworthy - all without requiring intermediaries. From 2e0e9122e2c7f4e1d3ffc86ec97a3338fcf0d881 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 1 Aug 2025 09:37:12 -0700 Subject: [PATCH 04/98] fix: highlight all browser language preferences --- .../LanguagePicker/useLanguagePicker.tsx | 71 +++++++++++++------ 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/src/components/LanguagePicker/useLanguagePicker.tsx b/src/components/LanguagePicker/useLanguagePicker.tsx index 01733d819e0..34da208be57 100644 --- a/src/components/LanguagePicker/useLanguagePicker.tsx +++ b/src/components/LanguagePicker/useLanguagePicker.tsx @@ -17,22 +17,33 @@ export const useLanguagePicker = (handleClose?: () => void) => { const { t } = useTranslation("common") const locale = useLocale() - // Get the preferred language for the users browser - const [navLang] = typeof navigator !== "undefined" ? navigator.languages : [] const locales = useMemo(() => filterRealLocales(LOCALES_CODES), []) - const intlLocalePreference = useMemo( - () => - locales?.reduce((acc, cur) => { - if (cur.toLowerCase() === navLang.toLowerCase()) return cur - if ( - navLang.toLowerCase().startsWith(cur.toLowerCase()) && - acc !== navLang - ) - return cur - return acc - }, "") as Lang, - [navLang, locales] - ) + + // Find all matching browser language preferences in order + const intlLocalePreferences = useMemo(() => { + // Get the preferred languages for the users browser + const navLangs = typeof navigator !== "undefined" ? navigator.languages : [] + const preferences: Lang[] = [] + + for (const navLang of navLangs) { + const match = locales?.find((locale) => { + // Exact match first + if (locale.toLowerCase() === navLang.toLowerCase()) return true + // Then partial match (e.g., 'en-US' matches 'en') + if (navLang.toLowerCase().startsWith(locale.toLowerCase())) return true + return false + }) as Lang | undefined + + if (match && !preferences.includes(match)) { + preferences.push(match) + } + } + + return preferences + }, [locales]) + + // Keep the first preference for backward compatibility + const intlLocalePreference = intlLocalePreferences[0] || "" const languages = useMemo( () => @@ -43,17 +54,35 @@ export const useLanguagePicker = (handleClose?: () => void) => { locale as Lang, t ) - const isBrowserDefault = intlLocalePreference === localeOption - return { ...displayInfo, isBrowserDefault } + const isBrowserDefault = intlLocalePreferences.includes( + localeOption as Lang + ) + return { + ...displayInfo, + isBrowserDefault, + } }) .sort((a, b) => { - // Always put the browser's preferred language first - if (a.localeOption === intlLocalePreference) return -1 - if (b.localeOption === intlLocalePreference) return 1 + const aPreferenceIndex = intlLocalePreferences.indexOf( + a.localeOption as Lang + ) + const bPreferenceIndex = intlLocalePreferences.indexOf( + b.localeOption as Lang + ) + + // First, sort by browser preferences (all browser preferences come first) + if (a.isBrowserDefault && !b.isBrowserDefault) return -1 + if (!a.isBrowserDefault && b.isBrowserDefault) return 1 + + // If both are browser preferences, sort by preference order + if (a.isBrowserDefault && b.isBrowserDefault) { + return aPreferenceIndex - bPreferenceIndex + } + // Otherwise, sort alphabetically by source name using localeCompare return a.sourceName.localeCompare(b.sourceName, locale) }) || [], - [intlLocalePreference, locale, locales, t] + [intlLocalePreferences, locale, locales, t] ) const intlLanguagePreference = languages.find( From d60693d8c9c1636f4c14d9b0eed397bd1932cb5b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 7 Aug 2025 19:15:21 -0700 Subject: [PATCH 05/98] feat: ContentHero design update --- .../layer-2/learn/_components/learn.tsx | 4 +- .../layer-2/networks/_components/networks.tsx | 4 +- public/images/heroes/translatathon-hero.png | Bin 0 -> 104164 bytes public/images/heroes/translatathon-hero.svg | 198 ------------------ .../Hero/ContentHero/ContentHero.stories.tsx | 6 +- src/components/Hero/ContentHero/index.tsx | 75 ++++--- src/layouts/Static.tsx | 1 - src/layouts/md/Roadmap.tsx | 7 +- src/layouts/md/Staking.tsx | 2 +- src/layouts/md/Translatathon.tsx | 8 +- src/layouts/md/Upgrade.tsx | 2 +- src/layouts/md/UseCases.tsx | 2 +- src/lib/types.ts | 2 +- 13 files changed, 57 insertions(+), 254 deletions(-) create mode 100644 public/images/heroes/translatathon-hero.png delete mode 100644 public/images/heroes/translatathon-hero.svg diff --git a/app/[locale]/layer-2/learn/_components/learn.tsx b/app/[locale]/layer-2/learn/_components/learn.tsx index 76f0bbcaf2c..2751930fb07 100644 --- a/app/[locale]/layer-2/learn/_components/learn.tsx +++ b/app/[locale]/layer-2/learn/_components/learn.tsx @@ -15,6 +15,7 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import useTranslation from "@/hooks/useTranslation" import { usePathname } from "@/i18n/routing" import Callout2Image from "@/public/images/layer-2/learn-hero.png" +import heroImg from "@/public/images/layer-2/learn-hero.png" import OptimisticRollupImage from "@/public/images/layer-2/optimistic_rollup.png" import RollupImage from "@/public/images/layer-2/rollup-2.png" import ZKRollupImage from "@/public/images/layer-2/zk_rollup.png" @@ -31,8 +32,7 @@ const Layer2Learn = ({ const heroProps: ContentHeroProps = { breadcrumbs: { slug: pathname, startDepth: 1 }, - heroImg: "/images/layer-2/learn-hero.png", - blurDataURL: "/images/layer-2/learn-hero.png", + heroImg, title: t("page-layer-2-learn-title"), description: t("page-layer-2-learn-description"), buttons: [ diff --git a/app/[locale]/layer-2/networks/_components/networks.tsx b/app/[locale]/layer-2/networks/_components/networks.tsx index 66de0628a8f..d1b707a622c 100644 --- a/app/[locale]/layer-2/networks/_components/networks.tsx +++ b/app/[locale]/layer-2/networks/_components/networks.tsx @@ -10,6 +10,7 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import useTranslation from "@/hooks/useTranslation" import { usePathname } from "@/i18n/routing" import Callout2Image from "@/public/images/layer-2/layer-2-walking.png" +import heroImg from "@/public/images/layer-2/learn-hero.png" import Callout1Image from "@/public/images/man-and-dog-playing.png" const Layer2Networks = ({ layer2Data, locale, mainnetData }) => { @@ -18,8 +19,7 @@ const Layer2Networks = ({ layer2Data, locale, mainnetData }) => { const heroProps: ContentHeroProps = { breadcrumbs: { slug: pathname, startDepth: 1 }, - heroImg: "/images/layer-2/learn-hero.png", - blurDataURL: "/images/layer-2/learn-hero.png", + heroImg, title: t("common:nav-networks-explore-networks-label"), description: t("page-layer-2-networks-hero-description"), } diff --git a/public/images/heroes/translatathon-hero.png b/public/images/heroes/translatathon-hero.png new file mode 100644 index 0000000000000000000000000000000000000000..4302d070b1849a1b3f1e679b665c1f8595a95bb3 GIT binary patch literal 104164 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 z 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 Loh`bh<^UuCz>V|Cr2 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/Hero/ContentHero/ContentHero.stories.tsx b/src/components/Hero/ContentHero/ContentHero.stories.tsx index a6767b46b31..785017be34c 100644 --- a/src/components/Hero/ContentHero/ContentHero.stories.tsx +++ b/src/components/Hero/ContentHero/ContentHero.stories.tsx @@ -5,6 +5,8 @@ import { langViewportModes } from "@/storybook/modes" import ContentHeroComponent, { ContentHeroProps } from "." +import heroImg from "@/public/images/upgrades/merge.png" + const meta = { title: "Organisms / Layouts / Hero", component: ContentHeroComponent, @@ -55,9 +57,7 @@ export const ContentHero: StoryObj = { return ( , "header"> +export type ContentHeroProps = Omit< + CommonHeroProps, + "header" | "blurDataURL" +> & { + blurDataURL?: CommonHeroProps["blurDataURL"] +} const ContentHero = (props: ContentHeroProps) => { const { breadcrumbs, heroImg, buttons, title, description, blurDataURL } = props + if (blurDataURL) heroImg.blurDataURL = blurDataURL + return ( -
-
-
- +
+
+ +
+
+ +
+

{title}

+ {typeof description === "string" ? ( +

{description}

+ ) : ( + description + )} + {buttons && ( +
+ {buttons.map((button, idx) => { + if (!button) return + return + })} +
+ )}
- - - -

{title}

- {typeof description === "string" ? ( -

{description}

- ) : ( - description - )} - {buttons && ( - - {buttons.map((button, idx) => { - if (!button) return - return - })} - - )} -
- {/* TODO: - * Add conditional Big Stat box here - */} -
) diff --git a/src/layouts/Static.tsx b/src/layouts/Static.tsx index 03ddac7948d..1ad0f0521a7 100644 --- a/src/layouts/Static.tsx +++ b/src/layouts/Static.tsx @@ -110,7 +110,6 @@ export const StaticLayout = ({ ) : ( diff --git a/src/layouts/md/Roadmap.tsx b/src/layouts/md/Roadmap.tsx index fac90dcac5b..18cb9eb0f88 100644 --- a/src/layouts/md/Roadmap.tsx +++ b/src/layouts/md/Roadmap.tsx @@ -94,7 +94,11 @@ export const RoadmapLayout = ({ const heroProps = { ...frontmatter, breadcrumbs: { slug, startDepth: 1 }, - heroImg: frontmatter.image, + heroImg: { + src: frontmatter.image, + width: 1456, + height: 816, + }, } return ( @@ -110,7 +114,6 @@ export const RoadmapLayout = ({ ) : ( diff --git a/src/layouts/md/Staking.tsx b/src/layouts/md/Staking.tsx index fc848dc9a95..0df3431c9d1 100644 --- a/src/layouts/md/Staking.tsx +++ b/src/layouts/md/Staking.tsx @@ -153,7 +153,7 @@ export const StakingLayout = ({ const heroProps = { ...frontmatter, breadcrumbs: { slug, startDepth: 1 }, - heroImg: frontmatter.image, + heroImg: { src: frontmatter.image, width: 800, height: 605 }, description: ( <>
diff --git a/src/layouts/md/Translatathon.tsx b/src/layouts/md/Translatathon.tsx index dd5a1811f27..4101b111933 100644 --- a/src/layouts/md/Translatathon.tsx +++ b/src/layouts/md/Translatathon.tsx @@ -16,6 +16,7 @@ import { Flex } from "@/components/ui/flex" import { ContentLayout } from "../ContentLayout" +import heroImg from "@/public/images/heroes/translatathon-hero.png" import WhyWeDoItImage from "@/public/images/translatathon/man-baby-woman.png" import HowDoesItWorkImage from "@/public/images/translatathon/round-table.png" import robotImage from "@/public/images/wallet.png" @@ -148,14 +149,13 @@ export const TranslatathonLayout = ({ const heroProps = { ...frontmatter, breadcrumbs: { slug, startDepth: 1 }, - heroImg: "/images/heroes/translatathon-hero.svg", - blurDataURL: "", + heroImg, description: ( <>

Welcome to the ethereum.org Translatathon!

- The translatathon is a translation competition where you can - compete for prizes by translating ethereum.org content into different + The translatathon is a translation competition where you can compete + for prizes by translating ethereum.org content into different languages.

diff --git a/src/layouts/md/Upgrade.tsx b/src/layouts/md/Upgrade.tsx index de874db2dc8..400a515eb86 100644 --- a/src/layouts/md/Upgrade.tsx +++ b/src/layouts/md/Upgrade.tsx @@ -73,7 +73,7 @@ export const UpgradeLayout = ({ const heroProps = { ...frontmatter, breadcrumbs: { slug, startDepth: 1 }, - heroImg: frontmatter.image, + heroImg: { src: frontmatter.image, width: 5750, height: 4332 }, description: ( <>
diff --git a/src/layouts/md/UseCases.tsx b/src/layouts/md/UseCases.tsx index 43701ce9d94..2666398d165 100644 --- a/src/layouts/md/UseCases.tsx +++ b/src/layouts/md/UseCases.tsx @@ -170,7 +170,7 @@ export const UseCasesLayout = ({ const heroProps = { ...frontmatter, breadcrumbs: { slug, startDepth: 1 }, - heroImg: frontmatter.image, + heroImg: { src: frontmatter.image, width: 760, height: 450 }, description: (
diff --git a/src/lib/types.ts b/src/lib/types.ts index 868dfbc0e17..9b26cdf0c40 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -467,7 +467,7 @@ export type CommonHeroProps< /** * The primary title of the page */ - title: string + title?: string /** * A tag name for the page */ From df92bf13ce1cd6b250cd46a316e988bd493963f7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 8 Aug 2025 17:31:45 -0700 Subject: [PATCH 06/98] feat-wip: what is ethereum revamp --- app/[locale]/what-is-ethereum/page.tsx | 817 ++++--------------------- 1 file changed, 103 insertions(+), 714 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index eaeb86ae16b..53f3848b222 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -1,168 +1,28 @@ -import { pick } from "lodash" -import { Info } from "lucide-react" -import { - getMessages, - getTranslations, - setRequestLocale, -} from "next-intl/server" +import { ChevronDown } from "lucide-react" +import { getTranslations } from "next-intl/server" -import type { ChildOnlyProp, CommitHistory, Lang } from "@/lib/types" +import type { CommitHistory, Lang } from "@/lib/types" -import AdoptionChart from "@/components/AdoptionChart/server" -import { - Banner, - BannerBody, - BannerGrid, - BannerGridCell, - BannerImage, -} from "@/components/BannerGrid" -import Callout from "@/components/Callout" -import Card from "@/components/Card" -import EnergyConsumptionChart from "@/components/EnergyConsumptionChart/server" -import FeedbackCard from "@/components/FeedbackCard" import FileContributors from "@/components/FileContributors" -import I18nProvider from "@/components/I18nProvider" -import { Image, ImageProps } from "@/components/Image" +import ContentHero, { ContentHeroProps } from "@/components/Hero/ContentHero" +import { Image } from "@/components/Image" import ListenToPlayer from "@/components/ListenToPlayer/server" import MainArticle from "@/components/MainArticle" -import { StandaloneQuizWidget } from "@/components/Quiz/QuizWidget" -import StatErrorMessage from "@/components/StatErrorMessage" -import Tooltip from "@/components/Tooltip" -import Translation from "@/components/Translation" -import { Button } from "@/components/ui/buttons/Button" -import { ButtonLink } from "@/components/ui/buttons/Button" -import { Center, Flex, HStack, Stack } from "@/components/ui/flex" -import InlineLink from "@/components/ui/Link" +import { Section } from "@/components/ui/section" -import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" -import { dataLoader } from "@/lib/utils/data/dataLoader" import { getMetadata } from "@/lib/utils/metadata" -import { - getLocaleForNumberFormat, - getRequiredNamespacesForPage, -} from "@/lib/utils/translations" -import WhatTabs from "./_components/WhatTabs/lazy" -import WhySwiper from "./_components/WhySwiper/lazy" - -import { fetchGrowThePie } from "@/lib/api/fetchGrowThePie" -import dogeComputerImg from "@/public/images/doge-computer.png" -import ethImg from "@/public/images/eth.png" -import diffEthAndBtc from "@/public/images/eth.png" -import criminalActivity from "@/public/images/finance_transparent.png" -import ethCoin from "@/public/images/impact_transparent.png" -import whatAreSmartContracts from "@/public/images/infrastructure_transparent.png" -import whoRunsEthereum from "@/public/images/run-a-node/ethereum-inside.png" -import stats from "@/public/images/upgrades/newrings.png" -import hero from "@/public/images/what-is-ethereum.png" - -const Summary = ({ - className, - ...rest -}: React.HTMLAttributes) => ( -
-) - -const TwoColumnContent = ({ - className, - ...rest -}: React.HTMLAttributes) => ( - -) - -const Section = ({ - className, - ...rest -}: React.HTMLAttributes) => ( -
-) - -const Width60 = ({ - className, - children, -}: React.HTMLAttributes) => ( -
{children}
-) - -const Width40 = (props: ChildOnlyProp) => ( -
-) - -const H2 = ({ className, ...rest }: React.HTMLAttributes) => ( -

-) - -const CardContainer = ({ - className, - ...rest -}: React.HTMLAttributes) => ( - -) - -const Column = (props: ChildOnlyProp) => ( -
-) - -const StatPrimary = (props: ChildOnlyProp) => ( -
-) - -const StatDescription = (props: ChildOnlyProp) => ( -
-) - -const ButtonRow = ({ - className, - ...rest -}: React.HTMLAttributes) => ( - -) - -const NoWrapText = (props: ChildOnlyProp) => ( - -) - -const Image400 = ({ src }: Pick) => ( - -) - -const loadData = dataLoader([["growThePieData", fetchGrowThePie]]) +import networksBanner from "@/public/images/heroes/learn-hub-hero.png" +import heroImg from "@/public/images/what-is-ethereum.png" const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params - const localeForNumberFormat = getLocaleForNumberFormat(locale as Lang) - const t = await getTranslations({ - locale, - namespace: "page-what-is-ethereum", - }) - const tCommon = await getTranslations({ - locale, - namespace: "common", - }) - setRequestLocale(locale) - - // Get i18n messages - const allMessages = await getMessages({ locale }) - const requiredNamespaces = getRequiredNamespacesForPage("/what-is-ethereum") - const messages = pick(allMessages, requiredNamespaces) + // const t = await getTranslations({ + // locale, + // namespace: "page-what-is-ethereum", + // }) const commitHistoryCache: CommitHistory = {} const { contributors, lastEditLocaleTimestamp } = @@ -172,578 +32,107 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { commitHistoryCache ) - // Load data - const [loadedData] = await loadData() - const data = loadedData.txCount - - const formatNumber = ( - value: number, - minSignificantDigits: number, - maxSignificantDigits: number, - style?: Intl.NumberFormatOptions["style"], - currency?: string - ) => - new Intl.NumberFormat(localeForNumberFormat, { - notation: "compact", - minimumSignificantDigits: minSignificantDigits, - maximumSignificantDigits: maxSignificantDigits, - style: style, - currency: currency, - currencyDisplay: "narrowSymbol", - }).format(value) - - const txStat = "error" in data ? "" : formatNumber(data.value, 3, 4) - - const cards = [ - { - emoji: ":bank:", - title: t("page-what-is-ethereum-banking-card"), - description: t("page-what-is-ethereum-banking-card-desc"), - }, - - { - emoji: ":detective:", - title: t("page-what-is-ethereum-internet-card"), - description: t("page-what-is-ethereum-internet-card-desc"), - }, - { - emoji: ":busts_in_silhouette:", - title: t("page-what-is-ethereum-p2p-card"), - description: t("page-what-is-ethereum-p2p-card-desc"), - }, - { - emoji: ":shield:", - title: t("page-what-is-ethereum-censorless-card"), - description: t("page-what-is-ethereum-censorless-card-desc"), - }, - { - emoji: ":shopping_bags:", - title: t("page-what-is-ethereum-commerce-card"), - description: t("page-what-is-ethereum-commerce-card-desc"), - }, - { - emoji: ":handshake:", - title: t("page-what-is-ethereum-composable-card"), - description: t("page-what-is-ethereum-composable-card-desc"), - }, - ] - - const tooltipContent = ({ apiUrl, apiProvider, ariaLabel }) => ( -
- {tCommon("data-provided-by")}{" "} - - {apiProvider} - -
- ) + const heroProps: ContentHeroProps = { + breadcrumbs: { slug: "learn/what-is-ethereum", startDepth: 1 }, + heroImg, + title: "What is Ethereum?", + description: ( + <> +

+ Ethereum is a decentralized blockchain network and software + development platform, powered by the cryptocurrency ether (ETH). +

+

+ It's home to thousands of cryptocurrencies and applications + across DeFi, NFTs, gaming, decentralized social media and stablecoins. +

+ + ), + } return ( - - - - -
-

- {t("page-what-is-ethereum-title")} -

- -

- {t("page-what-is-ethereum-desc")} -

-

- {t("page-what-is-ethereum-subtitle")} -

- - - -
-
-
-
- {t("page-what-is-ethereum-alt-img-bazaar")} -
-
- -
-
-
- -
- - - - - -

- {t("page-what-is-ethereum-summary-title")} -

- -

{t("page-what-is-ethereum-summary-desc-1")}

-

{t("page-what-is-ethereum-summary-desc-2")}

-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
-
-
-
- -
- -
-

{t("page-what-is-ethereum-what-can-eth-do-title")}

- - {cards.map((card, idx) => ( - - ))} - -
- - - - - - - -
-
-
- -
- - -

- {t("page-what-is-ethereum-why-would-i-use-ethereum-title")} -

- -

{t("page-what-is-ethereum-why-would-i-use-ethereum-1")}

-

{t("page-what-is-ethereum-why-would-i-use-ethereum-2")}

- -
- -
-
-
- - - -
-
- -
- - -

{t("page-what-is-ethereum-ethereum-in-numbers-title")}

- - - {formatNumber(4000, 1, 1)}+ - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-1-desc" - )} - -   - - - - - - - - - - {formatNumber(96_000_000, 2, 2)}+ - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-2-desc" - )} - -   - - - - - - - - - - {formatNumber(53_300_000, 3, 3)}+ - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-3-desc" - )} - -   - - - - - - - - - - - {formatNumber(410_000_000_000, 3, 3, "currency", "USD")} - - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-4-desc" - )} - -   - - - - - - - - - - - {formatNumber(3_500_000_000, 2, 2, "currency", "USD")} - - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-5-desc" - )} - -   - - - - - - - - - - - {txStat || } - - {/* TODO: Extract strings for translation */} - - {t( - "page-what-is-ethereum-ethereum-in-numbers-stat-6-desc" - )} - -   - - - - - - - - - -
- - - -
-
- -
- - - - - -

{t("page-what-is-ethereum-who-runs-ethereum-title")}

- -

- -

-

- -

- - - {t("page-what-is-ethereum-run-a-node")} - - -
-
-
-
- -
- - - - - -

{t("page-what-is-ethereum-smart-contract-title")}

- -

- -

-

- -

-

- -

- - - {t("page-what-is-ethereum-more-on-smart-contracts")} - - - {t("page-what-is-ethereum-explore-dapps")} - - -
-
-
-
- -
- - - - - -

{t("page-what-is-ethereum-meet-ether-title")}

- -

{t("page-what-is-ethereum-meet-ether-desc-1")}

-

{t("page-what-is-ethereum-meet-ether-desc-2")}

- - - {t("page-what-is-ethereum-what-is-ether")} - - - {t("page-what-is-ethereum-get-eth")} - - -
-
-
-
- -
- - - - - -

{t("page-what-is-ethereum-energy-title")}

- -

- -

-

- -

- - - {t("page-what-is-ethereum-more-on-energy-consumption")} - - - {t("page-what-is-ethereum-the-merge-update")} - - -
-
-
-
+ + + +
+
+ -
- - - - - -

{t("page-what-is-ethereum-criminal-activity-title")}

- -

{t("page-what-is-ethereum-criminal-activity-desc-1")}

-

{t("page-what-is-ethereum-criminal-activity-desc-2")}

-

- - {t("page-what-is-ethereum-criminal-activity-desc-3")} - -

-
    -
  • - - Europol Spotlight - Cryptocurrencies - Tracing the - evolution of criminal finances.pdf - {" "} - EN (1.4 MB) -
  • -
-
-
-
-
+ +
-
- - - - - -

{t("page-what-is-ethereum-btc-eth-diff-title")}

- -

{t("page-what-is-ethereum-btc-eth-diff-1")}

-

- -

-

{t("page-what-is-ethereum-btc-eth-diff-3")}

-

{t("page-what-is-ethereum-btc-eth-diff-4")}

-
-
-
-
+
+ On this page +
-
-

{t("page-what-is-ethereum-additional-reading")}

- -

- - {t("page-what-is-ethereum-week-in-ethereum")} - {" "} - {t("page-what-is-ethereum-week-in-ethereum-desc")} +

+
+

+ Ethereum is an open, public blockchain{" "} + launched in July 2015 by a software developer + called Vitalik Buterin and a small team of co-founders.

-

- - {t("page-what-is-ethereum-atoms-institutions-blockchains")} - {" "} - {t("page-what-is-ethereum-atoms-institutions-blockchains-desc")} +

+ The idea behind Ethereum was simple. While Bitcoin let you send + and receive digital cash, Ethereum would build on this with + open-source programs called smart contracts.

- -

- - {t("page-what-is-ethereum-kernel-dreamers")} - {" "} - {t("page-what-is-ethereum-kernel-dreamers-desc")} +

+ Smart contracts let anyone create their own + digital assets and decentralized applications (dapps) that run + 24/7, globally. And unlike banks, corporations or other + institutions, smart contracts are available to anyone with an + internet connection.

- -
- -
- -

{t("page-what-is-ethereum-explore")}

-
- - -
- - {t("page-what-is-ethereum-get-eth")} - -
-
- -
- - {t("page-what-is-ethereum-explore-dapps")} - -
-
-
-
- -
- -
+

+ Since 2015, Ethereum has grown into a thriving ecosystem of + digital assets like stablecoins, non-fungible + tokens (NFTs), and governance tokens, as well as + a sprawling world of dapps for decentralized finance ( + DeFi), art and collectibles, gaming and + decentralized social media. +

+

+ Collectively, this ecosystem is called "web3 + ", representing the third phase of the{" "} + internet centered around ownership. +

+

+ Today, Ethereum is used by millions of people around the + world holding billions of dollars in assets who send and + receive trillions of dollars every year — all without a + bank. +

+

+ At the heart of all this is Ethereum's native cryptocurrency{" "} + ether (ETH), a new kind of digital money used to + power the whole network. +

+
-
- - -
- - +
+ Illustration of futuristic Ethereum community center +
+
+
+
) } From ecc6eaf2ade5b0a94136cb75d6339964292bc537 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 9 Aug 2025 12:57:46 -0700 Subject: [PATCH 07/98] wip: fill out toc, headers, images structure --- app/[locale]/what-is-ethereum/page.tsx | 257 ++++++++++++++++++++++-- public/images/translatathon/walking.png | Bin 16087 -> 37787 bytes 2 files changed, 242 insertions(+), 15 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 53f3848b222..a582c31ab06 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -1,19 +1,27 @@ import { ChevronDown } from "lucide-react" import { getTranslations } from "next-intl/server" -import type { CommitHistory, Lang } from "@/lib/types" +import type { CommitHistory, Lang, ToCItem } from "@/lib/types" import FileContributors from "@/components/FileContributors" import ContentHero, { ContentHeroProps } from "@/components/Hero/ContentHero" import { Image } from "@/components/Image" import ListenToPlayer from "@/components/ListenToPlayer/server" import MainArticle from "@/components/MainArticle" +import Link from "@/components/ui/Link" +import { ListItem, OrderedList } from "@/components/ui/list" import { Section } from "@/components/ui/section" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" +import { screens } from "@/lib/utils/screen" +import whatBanner from "@/public/images/eth.png" +import howBanner from "@/public/images/hackathon_transparent.png" +import startBanner from "@/public/images/heroes/guides-hub-hero.jpg" import networksBanner from "@/public/images/heroes/learn-hub-hero.png" +import etherBanner from "@/public/images/impact_transparent.png" +import whenWhoBanner from "@/public/images/translatathon/walking.png" import heroImg from "@/public/images/what-is-ethereum.png" const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { @@ -32,10 +40,28 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { commitHistoryCache ) + const tocItems: ToCItem[] = [ + { title: "What is Ethereum?", url: "#ethereum" }, + { title: "What is the Ethereum network?", url: "#network" }, + { title: "What is ether (ETH)?", url: "#ether" }, + { title: "How does Ethereum work?", url: "#how" }, + { title: "What is Ethereum used for?", url: "#what" }, + { title: "How to start using Ethereum", url: "#start" }, + { + title: "What's the difference between Ethereum and Bitcoin?", + url: "#bitcoin", + }, + { + title: "When did Ethereum launch, who founded it and who runs it now?", + url: "#when-who", + }, + { title: "What is the Ethereum roadmap for 2025?", url: "#roadmap" }, + ] + const heroProps: ContentHeroProps = { breadcrumbs: { slug: "learn/what-is-ethereum", startDepth: 1 }, heroImg, - title: "What is Ethereum?", + title: tocItems[0].title, description: ( <>

@@ -50,6 +76,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { ), } + const getId = (input: string) => { + const parts = input.split("#") + return parts.length > 1 ? parts[1] : "" + } return ( @@ -70,35 +100,45 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

- On this page - +
+ On this page + (TODO) + +
+ + {tocItems.map(({ title, url }) => ( + + {title} + + ))} +
-
-

+

+

Ethereum is an open, public blockchain{" "} launched in July 2015 by a software developer called Vitalik Buterin and a small team of co-founders.

-

+

The idea behind Ethereum was simple. While Bitcoin let you send and receive digital cash, Ethereum would build on this with open-source programs called smart contracts.

-

+

Smart contracts let anyone create their own digital assets and decentralized applications (dapps) that run 24/7, globally. And unlike banks, corporations or other institutions, smart contracts are available to anyone with an internet connection.

-

+

Since 2015, Ethereum has grown into a thriving ecosystem of digital assets like stablecoins, non-fungible tokens (NFTs), and governance tokens, as well as @@ -106,29 +146,216 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { DeFi), art and collectibles, gaming and decentralized social media.

-

+

Collectively, this ecosystem is called "web3 ", representing the third phase of the{" "} internet centered around ownership.

-

+

Today, Ethereum is used by millions of people around the world holding billions of dollars in assets who send and receive trillions of dollars every year — all without a bank.

-

+

At the heart of all this is Ethereum's native cryptocurrency{" "} ether (ETH), a new kind of digital money used to power the whole network.

-
+
Illustration of futuristic Ethereum community center + +
+

{tocItems[1].title}

+ +

+ You can think of the ethereum network as{" "} + + a global digital infrastructure that anyone can use + {" "} + but nobody can abuse. +

+ +

+ The network is made up of{" "} + thousands of independent computers + around the world called nodes. These nodes, run by regular + people, work together to provide financial services and digital + applications to anyone, anywhere. +

+ +

+ The Ethereum network has 3 key advantages over + traditional networks owned by institutions. These are censorship + resistance, enhanced security and improved reliability. +

+
+ +
+
+

Censorship resistant

+
+

+ While traditional apps and financial services rely on banks + or corporations that can decide to block access or freeze + accounts, dapps on Ethereum are censorship resistant. +

+

+ This is because ethereum's network of nodes record + every single transaction without discrimination—and this + rule is embedded in the code. +

+
+
+
+

Highly secure

+
+

+ While many apps today are hosted on cloud providers like AWS + and can be vulnerable to takedowns and attacks, dapps on + Ethereum are secured by the network itself. Every node + stores and syncs the entire state of Ethereum, including all + contracts. +

+

+ If someone tried to change a contract, the network would + reject it since it wouldn’t match their records. To take + down a single app, attackers need to take over the entire + network, which would costs billions and be extremely hard to + coordinate. +

+
+
+
+

Durable and reliable

+
+

+ Downtime on cloud hosting platforms can take apps offline, + but Ethereum's design ensures perfect uptime. + The network will keep running even if some nodes go offline + due to software bugs, government crackdowns, natural + disaster, or war. +

+

+ Millions of people use thousands of dapps on Ethereum every + day. While high demand can lead to elevated transaction + fees, it reflects the strength of a network that prioritizes + security, decentralization, and the guarantee that it's + always available when you need it. +

+
+
+
+ +
+

Ethereum extensions (Layer 2)

+ +
+

+ Different teams have created Layer 2 (L2) networks that run on + top of Ethereum to increase Ethereum's capacity. L2s act + like express lanes, making transactions faster and cheaper — + sometimes costing less than a cent on average. +

+ +

+ Some of the most popular L2s including Optimism, Arbitrum, + ZKSync, and Base now process millions of transactions worth + billions of dollars each year. +

+
+
+ + + → Learn more about the Ethereum network + +
+ +
+
+ Open hands holding ether glyph +

+ {tocItems[2].title} +

+
+
+ +
+
+ Man repairing computer +

+ {tocItems[3].title} +

+
+
+ +
+ +

+ {tocItems[4].title} +

+
+ +
+ +

+ {tocItems[5].title} +

+
+ +
+

+ {tocItems[6].title} +

+
+ +
+ +

+ {tocItems[7].title} +

+
+ +
+

+ {tocItems[8].title} +

diff --git a/public/images/translatathon/walking.png b/public/images/translatathon/walking.png index c08981a9a044c65767d8b7353b7f2f6e2d8741a9..7e31ca4e9fb729a787d0eee52f3ab81add6d3434 100644 GIT binary patch literal 37787 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 literal 16087 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�}$yQoDBYYp{h6f%dhVmLrMJlCga(Kiv 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 Date: Sat, 9 Aug 2025 13:57:19 -0700 Subject: [PATCH 08/98] feat: create IconBox --- app/[locale]/what-is-ethereum/page.tsx | 127 +++++++++++++++---------- 1 file changed, 79 insertions(+), 48 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index a582c31ab06..8582f2a3481 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -1,4 +1,4 @@ -import { ChevronDown } from "lucide-react" +import { Castle, ChevronDown, LockKeyhole, Shield } from "lucide-react" import { getTranslations } from "next-intl/server" import type { CommitHistory, Lang, ToCItem } from "@/lib/types" @@ -12,6 +12,7 @@ import Link from "@/components/ui/Link" import { ListItem, OrderedList } from "@/components/ui/list" import { Section } from "@/components/ui/section" +import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" import { screens } from "@/lib/utils/screen" @@ -24,6 +25,19 @@ import etherBanner from "@/public/images/impact_transparent.png" import whenWhoBanner from "@/public/images/translatathon/walking.png" import heroImg from "@/public/images/what-is-ethereum.png" +const IconBox = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) + const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params @@ -198,57 +212,74 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-
-

Censorship resistant

-
-

- While traditional apps and financial services rely on banks - or corporations that can decide to block access or freeze - accounts, dapps on Ethereum are censorship resistant. -

-

- This is because ethereum's network of nodes record - every single transaction without discrimination—and this - rule is embedded in the code. -

+
+ + + +
+

Censorship resistant

+
+

+ While traditional apps and financial services rely on + banks or corporations that can decide to block access or + freeze accounts, dapps on Ethereum are censorship + resistant. +

+

+ This is because ethereum's network of nodes record + every single transaction without discrimination—and this + rule is embedded in the code. +

+
-
-

Highly secure

-
-

- While many apps today are hosted on cloud providers like AWS - and can be vulnerable to takedowns and attacks, dapps on - Ethereum are secured by the network itself. Every node - stores and syncs the entire state of Ethereum, including all - contracts. -

-

- If someone tried to change a contract, the network would - reject it since it wouldn’t match their records. To take - down a single app, attackers need to take over the entire - network, which would costs billions and be extremely hard to - coordinate. -

+
+ + + +
+

Highly secure

+
+

+ While many apps today are hosted on cloud providers like + AWS and can be vulnerable to takedowns and attacks, dapps + on Ethereum are secured by the network itself. Every node + stores and syncs the entire state of Ethereum, including + all contracts. +

+

+ If someone tried to change a contract, the network would + reject it since it wouldn’t match their records. To take + down a single app, attackers need to take over the entire + network, which would costs billions and be extremely hard + to coordinate. +

+
-
-

Durable and reliable

-
-

- Downtime on cloud hosting platforms can take apps offline, - but Ethereum's design ensures perfect uptime. - The network will keep running even if some nodes go offline - due to software bugs, government crackdowns, natural - disaster, or war. -

-

- Millions of people use thousands of dapps on Ethereum every - day. While high demand can lead to elevated transaction - fees, it reflects the strength of a network that prioritizes - security, decentralization, and the guarantee that it's - always available when you need it. -

+
+ + + +
+

Durable and reliable

+
+

+ Downtime on cloud hosting platforms can take apps offline, + but Ethereum's design ensures perfect uptime. + The network will keep running even if some nodes go + offline due to software bugs, government crackdowns, + natural disaster, or war. +

+

+ Millions of people use thousands of dapps on Ethereum + every day. While high demand can lead to elevated + transaction fees, it reflects the strength of a network + that prioritizes security, decentralization, and the + guarantee that it's always available when you need + it. +

+
From b1ecf63f23e6582c11ae91d47aa9181ec964ef3b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:05:30 -0700 Subject: [PATCH 09/98] feat: add content --- app/[locale]/what-is-ethereum/page.tsx | 191 +++++++++++++++++++++++-- 1 file changed, 178 insertions(+), 13 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 8582f2a3481..24608dba465 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -14,6 +14,7 @@ import { Section } from "@/components/ui/section" import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" +import { getDirection } from "@/lib/utils/direction" import { getMetadata } from "@/lib/utils/metadata" import { screens } from "@/lib/utils/screen" @@ -40,7 +41,7 @@ const IconBox = ({ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params - + const { twFlipForRtl } = getDirection(locale) // const t = await getTranslations({ // locale, // namespace: "page-what-is-ethereum", @@ -178,7 +179,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

-
+
Illustration of futuristic Ethereum community center }) => { />
-

{tocItems[1].title}

+

+ {tocItems[1].title} +

You can think of the ethereum network as{" "} @@ -249,10 +252,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

If someone tried to change a contract, the network would - reject it since it wouldn’t match their records. To take - down a single app, attackers need to take over the entire - network, which would costs billions and be extremely hard - to coordinate. + reject it since it wouldn't match their records. To + take down a single app, attackers need to take over the + entire network, which would costs billions and be + extremely hard to coordinate.

@@ -303,8 +306,14 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- - → Learn more about the Ethereum network + + {" "} + + Learn more about the Ethereum network + @@ -312,34 +321,190 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { id={getId(tocItems[2].url)} className="space-y-8 rounded-4xl border border-accent-a/20 bg-gradient-to-b from-accent-a/5 to-accent-a/15 px-4 py-6 lg:p-12" > -
+
Open hands holding ether glyph

{tocItems[2].title}

+ +
+

Ether (ETH) is the native cryptocurrency of Ethereum.

+

+ It's a new kind of{" "} + + digital money you can send to anyone, anywhere in the world in + seconds + {" "} + for as little as a few cents. But ETH is about more than just + payments. It plays a vital role in keeping the Ethereum network + running. +

+

+ When you use Ethereum to send money, collect art or build a new + dapp, you pay a small transaction fee (or gas + fee) in ETH. This fee helps prevent spam and + rewards the people called validators who process transactions. +

+

+ These{" "} + validators help secure the ethereum network{" "} + through a system called staking. By locking up their ETH + they're eligible to process transactions. In return, they + earn ETH as a reward. This gives Ethereum its own + self-sustaining economy, powered by users rather than companies. +

+

+ Unlike many traditional currencies,{" "} + ETH can become more scarce over time. Every + time someone uses Ethereum, a small portion of ETH is burned, + which permanently removes it from the supply. On busy days, more + ETH is burned than created, making ETH deflationary and + increasing its value over time. The more Ethereum is used, the + more ETH is burned. +

+

+ Because of this, many people see ETH as an investment and choose + to hold, stake or lend it to grow their savings. +

+
+ + + {" "} + + Learn more about ether (ETH) + +
-
+
Man repairing computer

{tocItems[3].title}

+ +
+

+ When Ethereum launched in 2015, it used a system called Proof of + Work. +

+

+ This mechanism pioneered by Bitcoin, is how all computers agreed + on who owns what. Computers would use a lot of energy trying to + solve a complex mathematical puzzle. The winner would get to + propose a block of incoming transactions and earn new ETH. +

+

+ In 2022, Ethereum upgraded to a new system called{" "} + Proof of Stake{" "} + that's 99% more energy efficient. Instead of + mathematical puzzles, validators lock their ETH as a security + deposit to earn the right to process transactions. +

+

+ If they do it correctly, they earn ETH. If they cheat, they lose + some of their stake. +

+

Here's an example:

+

+ When you send $10 in stablecoins to a friend on Ethereum: +

+ + + You open your wallet, add the account address and the amount, + then click send. + + + Your wallet signs the payment and broadcasts it to the + network. + + + The payment waits in the public queue (mempool) until a block + proposer picks it. + + + The block proposer adds it to the next block of transactions, + broadcasts it, and earns a fee. + + + The stablecoin contract moves $10 from you to your friend, and + both wallets update. + + + A global network of validators double-check and attest to the + validity of the changes. + + +

+ When you mint a $5 collectible on Ethereum: +

+ + + You connect your wallet to the dapp and choose the item to + mint. + + + You confirm the purchase; the wallet signs and broadcasts the + transaction. + + + The mint request joins the mempool and is added to a block by + a validator. + + + The NFT smart contract records your wallet as the new owner. + + + Your new collectible appears in your wallet a few seconds + later. + + +

+ This is all possible thanks to the power of smart contracts; + open-source programs that live on Ethereum and run 24/7, 365 + accessible to anyone, anywhere. +

+

+ + Every transaction, update, and action is synced across + thousands of independent nodes. + {" "} + This gives Ethereum its reliability, transparency, and + censorship resistance. +

+
+ + {" "} + + Learn more about how Ethereum works + + + + {" "} + + Read developer docs for a technical overview of Ethereum + + +
+
From ec27052483cd8cbb654fb78cccb6e8f1b73e8fcf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:39:10 -0700 Subject: [PATCH 10/98] feat: what-is-ethereum iteration --- app/[locale]/what-is-ethereum/page.tsx | 238 ++++++++++++++++++++++--- 1 file changed, 212 insertions(+), 26 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 24608dba465..1a49acf4751 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -1,4 +1,12 @@ -import { Castle, ChevronDown, LockKeyhole, Shield } from "lucide-react" +import { + Castle, + ChevronDown, + Landmark, + LockKeyhole, + Shield, + SquareCode, + User, +} from "lucide-react" import { getTranslations } from "next-intl/server" import type { CommitHistory, Lang, ToCItem } from "@/lib/types" @@ -8,8 +16,9 @@ import ContentHero, { ContentHeroProps } from "@/components/Hero/ContentHero" import { Image } from "@/components/Image" import ListenToPlayer from "@/components/ListenToPlayer/server" import MainArticle from "@/components/MainArticle" +import { CardTitle } from "@/components/ui/card" import Link from "@/components/ui/Link" -import { ListItem, OrderedList } from "@/components/ui/list" +import { ListItem, OrderedList, UnorderedList } from "@/components/ui/list" import { Section } from "@/components/ui/section" import { cn } from "@/lib/utils/cn" @@ -39,6 +48,36 @@ const IconBox = ({ /> ) +const HighlightStack = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
div:first-child]:pt-0 [&>div:last-child]:pb-0 [&>div]:py-8", + className + )} + {...props} + /> +) + +const HighlightCard = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) + +const HighlightCardContent = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) + const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params const { twFlipForRtl } = getDirection(locale) @@ -214,67 +253,67 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

-
-
+ +
-

Censorship resistant

-
-

+ Censorship resistant + +

While traditional apps and financial services rely on banks or corporations that can decide to block access or freeze accounts, dapps on Ethereum are censorship resistant.

-

+

This is because ethereum's network of nodes record every single transaction without discrimination—and this rule is embedded in the code.

-
+
-
-
+ +
-

Highly secure

-
-

+ Highly secure + +

While many apps today are hosted on cloud providers like AWS and can be vulnerable to takedowns and attacks, dapps on Ethereum are secured by the network itself. Every node stores and syncs the entire state of Ethereum, including all contracts.

-

+

If someone tried to change a contract, the network would reject it since it wouldn't match their records. To take down a single app, attackers need to take over the entire network, which would costs billions and be extremely hard to coordinate.

-
+
-
-
+ +
-

Durable and reliable

-
-

+ Durable and reliable + +

Downtime on cloud hosting platforms can take apps offline, but Ethereum's design ensures perfect uptime. The network will keep running even if some nodes go offline due to software bugs, government crackdowns, natural disaster, or war.

-

+

Millions of people use thousands of dapps on Ethereum every day. While high demand can lead to elevated transaction fees, it reflects the strength of a network @@ -282,10 +321,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { guarantee that it's always available when you need it.

-
+
-
-
+ +

Ethereum extensions (Layer 2)

@@ -424,7 +463,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

When you send $10 in stablecoins to a friend on Ethereum:

- + You open your wallet, add the account address and the amount, then click send. @@ -517,6 +556,153 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

{tocItems[4].title}

+
+

+ People use Ethereum to do things that weren't possible + before. +

+

+ Farmers in Kenya can receive{" "} + automated insurance on their crops + without applying to a bank. Businesses like{" "} + Visa can launch{" "} + new payment systems that works globally from day one. + Global organizations like the UN can deliver{" "} + aid to refugees saving millions in bank fees. +

+

+ These dapps and assets run on Ethereum using open-source code + and can't be restricted, censored or turned off. +

+

Here's how different groups are using it today:

+
+ + + + + + +
+ Consumers + +

+ Millions of people already use dapps on Ethereum to move + money, trade, and own digital assets every day. Unlike + traditional apps, there's no need to register with + your name, wait for a bank to approve you, or hand over + your personal data.{" "} +

+

+ With just a wallet and an internet connection you can: +

+ + + Access financial services without a bank account or + credit history + + + Own digital collectibles, art, and assets that + can't be copied or confiscated + + + Sign into dapps using your wallet, not your email — no + passwords, no personal information necessary + + + Participate in global communities where you can vote, + contribute, and earn borderlessly{" "} + + +
+
+
+ + + + +
+ + Businesses & developers + + + + + Launch dapps with built-in global payments system from + day one + + + Deploy tamper-proof contracts that{" "} + automatically enforce agreements + + + Create financial products that anyone can build on and + drive value to{" "} + + +

+ For example,{" "} + + PayPal launched its own stablecoin, PYUSD, on Ethereum + + . This is a sign that even the world's largest + payments companies see the benefit of Ethereum's open + and programmable nature. +

+
+
+
+ + + + +
+ Governments + +

+ Governments are also starting to explore what Ethereum + makes possible. +

+ + + Distribute public funds and benefits + directly to citizens with full transparency + + + Issue digital IDs or records that are + verifiable and portable across borders + + + Build{" "} + + tamper-proof public infrastructure for voting + + , land titles, and registries + + +

+ In another case, Ukraine's Ministry of Digital + Transformation{" "} + used Ethereum to distribute wartime aid. +

+

+ Funds were sent directly to citizens and NGOs using open + smart contracts, providing transparency, speed, and + accountability during a crisis. +

+
+
+
+
+ + + {" "} + + Learn more about what Ethereum is used for + +
From 73e456add8e8db28021483f488e1e82c162f3429 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:58:05 -0700 Subject: [PATCH 11/98] feat: iterate content --- app/[locale]/what-is-ethereum/page.tsx | 151 ++++++++++++++++++++++--- 1 file changed, 133 insertions(+), 18 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 1a49acf4751..24bab207e15 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -367,9 +367,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="224px" className="mx//-auto w-56" /> -

+

{tocItems[2].title} -

+
@@ -432,9 +432,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="288px" className="mx-auto w-full max-w-72" /> -

+

{tocItems[3].title} -

+
@@ -553,9 +553,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="320px" className="mx-auto w-80 -scale-x-100" /> -

+

{tocItems[4].title} -

+

People use Ethereum to do things that weren't possible @@ -590,7 +590,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { money, trade, and own digital assets every day. Unlike traditional apps, there's no need to register with your name, wait for a bank to approve you, or hand over - your personal data.{" "} + your personal data.

With just a wallet and an internet connection you can: @@ -610,7 +610,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { Participate in global communities where you can vote, - contribute, and earn borderlessly{" "} + contribute, and earn borderlessly @@ -711,15 +711,130 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { alt="" sizes={`(max-width: 800px) 100vw, (max-width: ${screens.xl}) 800px, (max-width: ${screens.xl}) calc(100vw - 480px), 800px`} /> -

- {tocItems[5].title} -

+
+

+ {tocItems[5].title} +

+
+

+ Getting started with Ethereum is easier than you might think. +

+

+ You don't need permission. You don't need a bank or + even an ID document. All you need to get started is a device + and an internet connection. +

+
+
+
TODO: StartCards
-
-

+
+

{tocItems[6].title} -

+

+ +
+

+ Bitcoin and Ethereum are the two biggest cryptocurrencies in the + world. +

+ +

+ They both let you send money without a bank, both run on + blockchain technology, and both are open to anyone. But + that's where the similarities end. +

+ +
+

+ Bitcoin is like digital gold. +

+

+ It has a fixed supply of 21 million coins, a narrow focus on + peer-to-peer payments, and a basic scripting language that + limits what you can build with it. This simplicity is by + design since Bitcoin prioritizes predictability, durability, + and long-term security over flexibility. +

+
+ +
+

+ Ethereum takes a broader approach. +

+

+ It's not just money, it's programmable + infrastructure. Instead of just sending and receiving value, + Ethereum lets developers build entire applications. + You've already seen this in action: from lending markets + and stablecoins to collectibles, social media, and real-time + payments — all powered by smart contracts and secured by ETH. +

+
+ +
+

+ The way the networks reach consensus is also different. +

+
+

+ Bitcoin uses miners to secure the network. These are + powerful computers that compete to solve complex puzzle, and + the winner gets to add the next block of transactions to the + chain and claim bitcoins as a reward. This process is called + mining and it uses large amounts of electricity. +

+

+ Ethereum used to work like this too. But in 2022, it + transitioned from Proof of Work to Proof of Stake. Today, + transactions are confirmed by validators who lock up ETH as + collateral. Honest validators earn ETH rewards while any + dishonest ones lose part of their stake. This shift made + Ethereum over 99.988% more energy efficient without + sacrificing security or decentralization. +

+
+
+ +
+

+ There's also a difference in how supply is handled. +

+
+

+ Bitcoin has a fixed supply. There will only ever be 21 + million coins. Ethereum, on the other hand, has a dynamic + supply. New ETH is issued to reward validators, while a + portion is burned with every transaction. This means + + Ethereum can't just “print infinite ETH.” + +

+

+ The issuance rate is limited by how much ETH is staked. As + more ETH is staked, individual rewards decrease, creating a + natural balance. This design ensures a sustainable security + budget well into the future, without relying solely on + transaction fees. +

+

+ In short, Bitcoin is a tool for sending value. Ethereum is a + platform for building it. +

+
+
+ + + {" "} + + Learn more about the difference between Ethereum and Bitcoin + + +
@@ -729,15 +844,15 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="176px" className="mx-auto w-44" /> -

+

{tocItems[7].title} -

+
-

+

{tocItems[8].title} -

+
From 417e6d46d2ba47f047f3e336d1788ee2b9e1df6f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 10 Aug 2025 10:20:53 -0700 Subject: [PATCH 12/98] feat: content iteration --- app/[locale]/what-is-ethereum/page.tsx | 123 ++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 3 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 24bab207e15..e57047e29a2 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -27,6 +27,7 @@ import { getDirection } from "@/lib/utils/direction" import { getMetadata } from "@/lib/utils/metadata" import { screens } from "@/lib/utils/screen" +import contributionBanner from "@/public/images/doge-computer.png" import whatBanner from "@/public/images/eth.png" import howBanner from "@/public/images/hackathon_transparent.png" import startBanner from "@/public/images/heroes/guides-hub-hero.jpg" @@ -844,9 +845,125 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="176px" className="mx-auto w-44" /> -

- {tocItems[7].title} -

+ +
+

+ {tocItems[7].title} +

+
+
+

+ From the start, Ethereum was designed to run by its + community. +

+

+ In 2013, Vitalik Buterin published a white paper proposing a + new kind of blockchain for money and apps anyone could use. + The idea quickly gained traction. +

+

+ By 2014, co-founders like Gavin Wood and Joseph Lubin joined + the effort, and the team raised funds through one of the + earliest crypto crowdfunding campaigns. +

+

Ethereum officially launched in July 2015.

+
+
+

Key moments in Ethereum’s history

+ + + 2013:{" "} + 19-year-old Vitalik Buterin publishes the Ethereum + whitepaper + + + 2014:{" "} + The Ethereum Foundation forms and launches a crowdfunding + campaign + + + 2015:{" "} + Developers launch the Ethereum network with the Frontier + release + + + 2016:{" "} + Smart contract exploit drains $60M (3.6M ETH) from The DAO + prompting a chain fork + + + 2020:{" "} + Beacon Chain launch starts the move to Proof-of-Stake + + + 2021:{" "} + “London” upgrade starts burning gas fees via EIP-1559 + + + 2022:{" "} + “The Merge” replaces mining with staking, cutting energy + use by 99% + + + 2025:{" "} + “Pectra” upgrade improves smart wallet support and L2 + compatibility + + +

Today, no single person or company runs Ethereum.

+
+ Doge smiling at the computer +
+

+ The network is maintained by a broad group of contributors: +

+ + + Developers who write and propose upgrades + + + Node operators contributing to distributed physical + infrastructure + + Stakers who validate transactions + + Community members who build the tools and culture + + + You by using the network + + +

+ + There’s no CEO, board, or central authority. + {" "} + The Ethereum Foundation still helps fund research and + development, but the ecosystem runs on open participation. +

+

+ Changes are proposed through{" "} + Ethereum Improvement Proposals (EIPs), discussed + publicly, and only adopted{" "} + if the wider community supports them. +

+

+ This makes Ethereum slower to change than a startup, but + also much harder to shut down or take over. +

+
+ + {" "} + + Learn more about Ethereum's history + + +
+
From 834752cf7028b756038cc8c4dcc152287257d254 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 11 Aug 2025 12:16:07 -0700 Subject: [PATCH 13/98] patch: layout styles --- app/[locale]/what-is-ethereum/page.tsx | 30 +++++++++++--------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index e57047e29a2..4eb7a7a4575 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -366,9 +366,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { src={etherBanner} alt="Open hands holding ether glyph" sizes="224px" - className="mx//-auto w-56" + className="w-56" /> -

+

{tocItems[2].title}

@@ -426,14 +426,14 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { id={getId(tocItems[3].url)} className="space-y-8 rounded-4xl border border-accent-c/20 bg-gradient-to-b from-accent-c/5 to-accent-c/15 px-4 py-6 lg:p-12" > -
+
Man repairing computer -

+

{tocItems[3].title}

@@ -554,7 +554,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes="320px" className="mx-auto w-80 -scale-x-100" /> -

+

{tocItems[4].title}

@@ -564,9 +564,8 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

Farmers in Kenya can receive{" "} - automated insurance on their crops - without applying to a bank. Businesses like{" "} - Visa can launch{" "} + automated insurance on their crops without applying to a + bank. Businesses like Visa can launch{" "} new payment systems that works globally from day one. Global organizations like the UN can deliver{" "} aid to refugees saving millions in bank fees. @@ -713,7 +712,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { sizes={`(max-width: 800px) 100vw, (max-width: ${screens.xl}) 800px, (max-width: ${screens.xl}) calc(100vw - 480px), 800px`} />

-

+

{tocItems[5].title}

@@ -730,11 +729,8 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
TODO: StartCards
-
-

+
+

{tocItems[6].title}

@@ -847,7 +843,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { />
-

+

{tocItems[7].title}

@@ -967,7 +963,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-

+

{tocItems[8].title}

From 318d316214d40f1ce96024d2191168f793a3694b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 11 Aug 2025 15:59:33 -0700 Subject: [PATCH 14/98] wip: content addition, component refactoring --- app/[locale]/what-is-ethereum/page.tsx | 213 ++++++++++++++++--------- 1 file changed, 139 insertions(+), 74 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 4eb7a7a4575..74924fcd21d 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -7,17 +7,19 @@ import { SquareCode, User, } from "lucide-react" -import { getTranslations } from "next-intl/server" +import { getLocale, getTranslations } from "next-intl/server" import type { CommitHistory, Lang, ToCItem } from "@/lib/types" +import DocLink from "@/components/DocLink" +import FeedbackCard from "@/components/FeedbackCard" import FileContributors from "@/components/FileContributors" import ContentHero, { ContentHeroProps } from "@/components/Hero/ContentHero" import { Image } from "@/components/Image" import ListenToPlayer from "@/components/ListenToPlayer/server" import MainArticle from "@/components/MainArticle" import { CardTitle } from "@/components/ui/card" -import Link from "@/components/ui/Link" +import Link, { LinkProps } from "@/components/ui/Link" import { ListItem, OrderedList, UnorderedList } from "@/components/ui/list" import { Section } from "@/components/ui/section" @@ -79,9 +81,24 @@ const HighlightCardContent = ({
) +const LinkWithArrow = async ({ href, className, children }: LinkProps) => { + const locale = await getLocale() + const { twFlipForRtl } = getDirection(locale as Lang) + return ( + + + → + +   + {children} + + ) +} const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params - const { twFlipForRtl } = getDirection(locale) // const t = await getTranslations({ // locale, // namespace: "page-what-is-ethereum", @@ -136,10 +153,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { return parts.length > 1 ? parts[1] : "" } return ( - +
-
+
}) => {
- - {" "} - - Learn more about the Ethereum network - - + + Learn more about the Ethereum network +

}) => {

- - {" "} - - Learn more about ether (ETH) - - + + Learn more about ether (ETH) +
}) => {

- When Ethereum launched in 2015, it used a system called Proof of - Work. + When Ethereum launched in 2015, it used a system called proof of + work.

This mechanism pioneered by Bitcoin, is how all computers agreed @@ -451,7 +459,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

In 2022, Ethereum upgraded to a new system called{" "} - Proof of Stake{" "} + proof of stake{" "} that's 99% more energy efficient. Instead of mathematical puzzles, validators lock their ETH as a security deposit to earn the right to process transactions. @@ -528,21 +536,12 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { censorship resistance.

- - {" "} - - Learn more about how Ethereum works - - - - {" "} - - Read developer docs for a technical overview of Ethereum - - + + Learn more about how Ethereum works + + + Read developer docs for a technical overview of Ethereum +
@@ -576,7 +575,6 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

Here's how different groups are using it today:

- @@ -694,15 +692,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { - - {" "} - - Learn more about what Ethereum is used for - - + {/* // TODO: Confirm links */} + + Learn more about what Ethereum is used for +
@@ -787,7 +780,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

Ethereum used to work like this too. But in 2022, it - transitioned from Proof of Work to Proof of Stake. Today, + transitioned from proof of work to proof of stake. Today, transactions are confirmed by validators who lock up ETH as collateral. Honest validators earn ETH rewards while any dishonest ones lose part of their stake. This shift made @@ -806,7 +799,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { Bitcoin has a fixed supply. There will only ever be 21 million coins. Ethereum, on the other hand, has a dynamic supply. New ETH is issued to reward validators, while a - portion is burned with every transaction. This means + portion is burned with every transaction. This means{" "} Ethereum can't just “print infinite ETH.” @@ -825,12 +818,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

- - {" "} - - Learn more about the difference between Ethereum and Bitcoin - - + + Learn more about the difference between Ethereum and Bitcoin +
@@ -865,7 +855,9 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

Ethereum officially launched in July 2015.

-

Key moments in Ethereum’s history

+

+ Key moments in Ethereum's history +

2013:{" "} @@ -879,8 +871,8 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { 2015:{" "} - Developers launch the Ethereum network with the Frontier - release + Developers launch the Ethereum network with the{" "} + Frontier release 2016:{" "} @@ -893,17 +885,18 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { 2021:{" "} - “London” upgrade starts burning gas fees via EIP-1559 + London upgrade starts burning gas fees via + EIP-1559 2022:{" "} - “The Merge” replaces mining with staking, cutting energy - use by 99% + The Merge replaces mining with staking, cutting + energy use by 99% 2025:{" "} - “Pectra” upgrade improves smart wallet support and L2 - compatibility + Pectra upgrade improves smart wallet support and + L2 compatibility

Today, no single person or company runs Ethereum.

@@ -936,7 +929,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

- There’s no CEO, board, or central authority. + There's no CEO, board, or central authority. {" "} The Ethereum Foundation still helps fund research and development, but the ecosystem runs on open participation. @@ -952,24 +945,96 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { also much harder to shut down or take over.

- - {" "} - - Learn more about Ethereum's history - - + + Learn more about Ethereum's history +
-
+

{tocItems[8].title}

+
+
+

+ Ethereum doesn't follow a fixed roadmap. It follows a + shared vision. +

+

+ Network upgrades are made as EIP proposals and developed in + public by contributors around the world. There's no + central team deciding what happens, just people building what + they believe is useful based on users' needs. +

+

+ Pectra is the most recent upgrade launched in May 2025. + This upgrade improved wallet features, gave stakers more + flexibility, and made it easier for dapps to run on L2s. The + goal was to improve usability without compromising on security + or decentralization. +

+ +

+ Looking ahead, Ethereum's + priorities include: +

+ + + + Making the core protocol and its L2s faster and cheaper for + everyone + + + Improving the experience for users and developers + + + +

+ These priorities will helps ensure Ethereum is secure, + scalable and user friendly as more people rely on the network + everyday. +

+

+ If you want to steer the direction for Ethereum,{" "} + get involved. You don't need permission, just the + desire to make a difference in this new digital economy. +

+
+ + + See an overview of the Ethereum roadmap + +
+
+ +
+

+ Read next +

+ + + What are wallets? + + + What is ether (ETH)? + + + What is web3? + + + + Learn more about the Ethereum network + + +
+ + - - + + ) } From 1490d15b2977349c75d045e997c673736345cf1b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 11 Aug 2025 19:23:27 -0700 Subject: [PATCH 15/98] feat: add selectable attributes to ToC elements --- src/components/TableOfContents/TableOfContentsLink.tsx | 2 ++ src/components/TableOfContents/index.tsx | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/TableOfContents/TableOfContentsLink.tsx b/src/components/TableOfContents/TableOfContentsLink.tsx index f99c116348f..b81759d1721 100644 --- a/src/components/TableOfContents/TableOfContentsLink.tsx +++ b/src/components/TableOfContents/TableOfContentsLink.tsx @@ -19,6 +19,7 @@ const Link = ({ return (
span]:flex-none [&_button]:mb-16 [&_button]:justify-center [&_button]:rounded-lg [&_button]:border-border [&_button]:bg-accent-a/10 [&_button]:text-lg [&_button]:font-bold" + )} > -
- On this page - (TODO) - -
- - {tocItems.map(({ title, url }) => ( - - {title} - - ))} - + +
Date: Mon, 11 Aug 2025 19:43:59 -0700 Subject: [PATCH 17/98] fix: item number alignment --- app/[locale]/what-is-ethereum/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 59fcef5fc5d..4bfbcbe7caa 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -173,7 +173,8 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
a]:inline [&_li]:list-item [&_ul]:list-inside [&_ul]:ps-0", "[&_[data-label='marker']]:!hidden [&_li:has([data-state-active='false'])]:me-4 [&_li:has([data-state-active='true'])]:font-bold", // me-4 added to prevent layout shift when active turns bold // `aside` targets desktop version "[&_aside]:sticky [&_aside]:top-[7.25rem]", From d53ff41d798c2b31d470281b1afa81eb49d68cd1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 11 Aug 2025 20:06:22 -0700 Subject: [PATCH 18/98] feat: add "how to start" content boxes --- app/[locale]/what-is-ethereum/page.tsx | 140 ++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 2 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 4bfbcbe7caa..9ca2104616e 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -18,7 +18,8 @@ import { Image } from "@/components/Image" import ListenToPlayer from "@/components/ListenToPlayer/server" import MainArticle from "@/components/MainArticle" import TableOfContents from "@/components/TableOfContents" -import { CardTitle } from "@/components/ui/card" +import { ButtonLink } from "@/components/ui/buttons/Button" +import { Card, CardContent, CardTitle } from "@/components/ui/card" import Link, { LinkProps } from "@/components/ui/Link" import { ListItem, OrderedList, UnorderedList } from "@/components/ui/list" import { Section } from "@/components/ui/section" @@ -720,7 +721,142 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

-
TODO: StartCards
+ + + + +

For individuals

+
+ +
+

+ + The first step is downloading a wallet. + + Think of it like an app that acts as both your account and + your internet browser for Ethereum. It manages your crypto, + lets you sign in to dapps, as well as send and receive + digital assets like tokens and NFTs.{" "} +

+ +

+ Popular wallets like Zerion, Rainbow, and{" "} + Coinbase Wallet are free and easy to use. Once your + wallet is set up, you can: +

+ + + + Buy a small amount of ETH on an exchange or directly + inside some wallets + + + Use that ETH to pay for transactions like sending tokens + or collecting NFTs + + + Explore dapps like Zora, Uniswap, or{" "} + Warpcast — no new logins or approvals needed + + + +

+ These priorities will helps ensure Ethereum is secure, + scalable and user friendly as more people rely on the + network everyday. +

+

+ These dapps run in your browser and work with your wallet + instantly. You can start using Ethereum in minutes.{" "} +

+
+ +
+ Start here + + See apps + +
+
+
+ + + + +

For developers

+
+ +
+

+ Ethereum is a playground for developers. You can start + building without permission, approvals, or even real money. +

+

+ The Ethereum Developer Docs walk you through + everything from writing your first smart contract to + deploying on test networks like Sepolia. +

+

+ You can build full-stack dapps with tools like{" "} + Hardhat, Foundry, and Ethers.js, or + experiment with low-code platforms like thirdweb or{" "} + Moralis. +

+

+ Everything is open-source and composable, so you can remix + and build on what’s already out there without asking for + permission. +

+
+ + Start building on Ethereum + +
+
+ + + + +

Use Ethereum in business

+
+ +
+

+ Enterprises are already using Ethereum to power new + infrastructure. +

+

+ Many enterprises are starting with L2 networks like Optimism + and Base to support high-volume use cases. These networks + offer lower fees, faster speeds while still benefiting from + Ethereum’s security and removing counterparty risk. +

+

+ You can: + + + Launch modular loyalty programs that boost retention and + cut third-party costs + + + Tokenize assets like tickets, coupons, or certificates + to reduce fraud and resale risk + + + Enable instant global payments to lower transaction fees + and unlock new markets + + +

+

+ For example, in 2025, Shopify launched on Base to + allow consumers to spend stablecoins with millions of + merchants around the globe. +

+
+ Use Ethereum in business +
+
From 32ce9f6130d9787690fb1e25fd143de05894c6e5 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 12 Aug 2025 08:09:15 -0600 Subject: [PATCH 19/98] setup /roadmap for translation --- .../roadmap/_components/ReleaseCarousel.tsx | 26 ++- app/[locale]/roadmap/_components/roadmap.tsx | 207 +++++++----------- src/data/roadmap/releases.tsx | 140 +++++------- src/hooks/useTranslation.ts | 43 +++- src/intl/en/page-roadmap.json | 97 +++++++- 5 files changed, 288 insertions(+), 225 deletions(-) diff --git a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx index f155418db03..5d2b3fcd23c 100644 --- a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx +++ b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx @@ -1,6 +1,5 @@ "use client" -// TODO: Extract intl strings // TODO: Fix RTL compatibility; currently forced to LTR flow import { useCallback, useEffect, useMemo, useState } from "react" import { useLocale } from "next-intl" @@ -19,10 +18,15 @@ import { import { cn } from "@/lib/utils/cn" import { formatDate } from "@/lib/utils/date" -import { Release, releasesData } from "@/data/roadmap/releases" +import { getReleasesData, Release } from "@/data/roadmap/releases" + +import { useTranslation } from "@/hooks/useTranslation" const ReleaseCarousel = () => { const locale = useLocale() + const { t } = useTranslation("page-roadmap") + + const releasesData = useMemo(() => getReleasesData(t), [t]) const [api1, setApi1] = useState() const [api2, setApi2] = useState() @@ -49,7 +53,7 @@ const ReleaseCarousel = () => { // If no upcoming releases, start at the last production release return productionReleases.length - 1 - }, []) + }, [releasesData]) const [currentIndex, setCurrentIndex] = useState(startIndex) @@ -125,7 +129,9 @@ const ReleaseCarousel = () => { currentIndex !== index && "hidden" )} > -

In production

+

+ {t("page-roadmap-release-status-prod")} +

)} {status === "soon" && ( @@ -136,7 +142,7 @@ const ReleaseCarousel = () => { )} >

- Coming soon + {t("page-roadmap-release-status-soon")}

)} @@ -148,7 +154,7 @@ const ReleaseCarousel = () => { )} >

- In development + {t("page-roadmap-release-status-dev")}

)} @@ -243,17 +249,19 @@ const ReleaseCarousel = () => {

- Main features + {t("page-roadmap-release-main-features")}

- {release.content} + {typeof release.content === "function" + ? release.content(t) + : release.content}
- Learn more + {t("page-roadmap-release-learn-more")} diff --git a/app/[locale]/roadmap/_components/roadmap.tsx b/app/[locale]/roadmap/_components/roadmap.tsx index 7c74eb8362a..85d5bc55e50 100644 --- a/app/[locale]/roadmap/_components/roadmap.tsx +++ b/app/[locale]/roadmap/_components/roadmap.tsx @@ -39,42 +39,38 @@ const RoadmapPage = () => { const changesComingItems = [ { - title: "Cheaper transactions", + title: t("page-roadmap-cheaper-transactions-title"), icon: , - description: - "Rollups are too expensive and rely on centralized components, causing users to place too much trust in their operators. The roadmap includes fixes for both of these problems.", + description: t("page-roadmap-cheaper-transactions-description"), button: { - label: "More on reducing fees", + label: t("page-roadmap-cheaper-transactions-button"), href: "/roadmap/scaling", }, }, { - title: "Extra security", + title: t("page-roadmap-extra-security-title"), icon: , - description: - "Ethereum is already very secure but it can be made even stronger, ready to withstand all kinds of attack far into the future.", + description: t("page-roadmap-extra-security-description"), button: { - label: "More on security", + label: t("page-roadmap-extra-security-button"), href: "/roadmap/security", }, }, { - title: "Better user experience", + title: t("page-roadmap-better-user-experience-title"), icon: , - description: - "More support for smart contract wallets and light-weight nodes will make using Ethereum simpler and safer.", + description: t("page-roadmap-better-user-experience-description"), button: { - label: "More on user experience", + label: t("page-roadmap-better-user-experience-button"), href: "/roadmap/user-experience", }, }, { - title: "Future-proofing", + title: t("page-roadmap-future-proofing-title"), icon: , - description: - "Ethereum researchers and developers are solving tomorrow's problems today, readying the network for future generations.", + description: t("page-roadmap-future-proofing-description"), button: { - label: "More on future-proofing", + label: t("page-roadmap-future-proofing-button"), href: "/roadmap/future-proofing", }, }, @@ -83,30 +79,26 @@ const RoadmapPage = () => { const technicalUpgradesItems = [ { icon: , - title: "Danksharding", - description: - "Danksharding makes L2 rollups much cheaper for users by adding “blobs” of data to Ethereum blocks.", + title: t("page-roadmap-danksharding-title"), + description: t("page-roadmap-danksharding-description"), href: "/roadmap/danksharding", }, { icon: , - title: "Single slot finality", - description: - "Instead of waiting for fifteen minutes, blocks could get proposed and finalized in the same slot. This is more convenient for apps and difficult to attack.", + title: t("page-roadmap-single-slot-finality-title"), + description: t("page-roadmap-single-slot-finality-description"), href: "/roadmap/single-slot-finality", }, { icon: , - title: "Account abstraction", - description: - "Account abstraction is a class of upgrades that support smart contract wallets natively on Ethereum, rather than having to use complex middleware.", + title: t("page-roadmap-account-abstraction-title"), + description: t("page-roadmap-account-abstraction-description"), href: "/roadmap/account-abstraction", }, { icon: , - title: "Statelessness", - description: - "Stateless clients will be able to verify new blocks without having to store large amounts of data. This will provide all the benefits of running a node with only a tiny fraction of today’s costs.", + title: t("page-roadmap-statelessness-title"), + description: t("page-roadmap-statelessness-description"), href: "/roadmap/statelessness", }, ] @@ -115,9 +107,7 @@ const RoadmapPage = () => { return ( -

- Ethereum's development is community-driven and subject to change. -

+

{t("page-roadmap-banner-notification")}

@@ -127,12 +117,9 @@ const RoadmapPage = () => {
-

What changes are coming to Ethereum?

+

{t("page-roadmap-changes-coming-title")}

- Ethereum is already a powerful platform, but it is still being - improved. An ambitious set of improvements will upgrade Ethereum - from its current form into a fully scaled, maximally resilient - platform. + {t("page-roadmap-changes-coming-description")}

{changesComingItems.map((item) => ( @@ -157,53 +144,39 @@ const RoadmapPage = () => {
-

Why does Ethereum need a roadmap?

-

- Ethereum gets regular upgrades that enhance its scalability, - security, or sustainability. One of Ethereum's core strengths - is adapting as new ideas emerge from research and development. - Adaptability gives Ethereum the flexibility to tackle emerging - challenges and keep up with the most advanced technological - breakthroughs. -

-

How the roadmap is defined

-

- The roadmap is mostly the result of years of work by researchers - and developers - because the protocol is very technical - but any - motivated person can participate. -

+

{t("page-roadmap-why-need-title")}

+

{t("page-roadmap-why-need-description")}

+

{t("page-roadmap-how-defined-title")}

+

{t("page-roadmap-how-defined-p1")}

- Ideas usually start off as discussions on a forum such as{" "} - ethresear.ch,{" "} - - Ethereum Magicians - {" "} - or the Eth R&D discord server. They may be responses to new - vulnerabilities that are discovered, suggestions from - organizations working in the application layer (such as dapps and - exchanges) or from known frictions for end users (such as costs or - transaction speeds). + {t.rich("page-roadmap-how-defined-p2", { + ethresearch: (chunks) => ( + {chunks} + ), + "ethereum-magicians": (chunks) => ( + {chunks} + ), + })}

- When these ideas mature, they can be proposed as{" "} - - Ethereum Improvement Proposals - - . This is all done in public so that anyone from the community can - weigh in at any time. + {t.rich("page-roadmap-how-defined-p3", { + eips: (chunks) => ( + {chunks} + ), + })}

- More on Ethereum governance + {t("page-roadmap-governance-button")}
Ethereum roadmap @@ -212,7 +185,7 @@ const RoadmapPage = () => {

- What technical upgrades are coming to Ethereum? + {t("page-roadmap-technical-upgrades-title")}

{technicalUpgradesItems.map((item) => ( @@ -233,7 +206,7 @@ const RoadmapPage = () => { href={item.href} className="hover:text-primary-hover" > - Learn more + {t("page-roadmap-learn-more")} @@ -245,98 +218,68 @@ const RoadmapPage = () => {
Ethereum blocks
-

What is the timeline for these upgrades?

+

{t("page-roadmap-timeline-title")}

- Yes—almost definitely. The roadmap is the - current plan for upgrading Ethereum, covering both near-term - and future plans. We expect the roadmap to change as new - information and technology become available. -

-

- Think of Ethereum's roadmap as a set of intentions for - improving Ethereum; it is the core researchers' and - developers' best hypothesis of Ethereum's most - optimal path forward. + {t("page-roadmap-faq-1-p1")}{" "} + {t("page-roadmap-faq-1-p1-continued")}

+

{t("page-roadmap-faq-1-p2")}

- Some upgrades are lower priority and likely not to be - implemented for the next 5-10 years (e.g. quantum - resistance).{" "} - - Giving precise timing of each upgrade is complicated - {" "} - to predict as many roadmap items are worked on in parallel - and developed at different speeds. The urgency of an upgrade - can also change over time depending on external factors - (e.g. a sudden leap in the performance and availability of - quantum computers may make quantum-resistant cryptography - more urgent). -

-

- One way to think about Ethereum development is by analogy to - biological evolution. A network that is able to adapt to new - challenges and maintain fitness is more likely to succeed - than one that is resistant to change, although as the - network becomes more and more performant, scalable and - secure fewer changes to the protocol will be required. + {t("page-roadmap-faq-2-p1")}{" "} + {t("page-roadmap-faq-2-p1-strong")}{" "} + {t("page-roadmap-faq-2-p1-continued")}

+

{t("page-roadmap-faq-2-p2")}

- Upgrades tend not to impact end-users except by providing - better user-experiences and a more secure protocol and - perhaps more options for how to interact with - Ethereum.{" "} - - Regular users are not required to actively participate in - an upgrade, nor are they required to do anything** to - secure their assets. - {" "} - Node operators will need - to update their clients to prepare for an upgrade. Some - upgrades may lead to changes for application developers. For - example, history expiry upgrades may lead application - developers to grab historical data from new sources. + {t.rich("page-roadmap-faq-3-p1", { + emphasis: (chunks) => {chunks}, + strong: (chunks) => {chunks}, + node: (chunks) => ( + {chunks} + ), + })}

- +

- Sharding is splitting up the Ethereum blockchain so that - subsets of{" "} - validators are only - responsible for a fraction of the total data. This was - originally intended to be the way for Ethereum to scale. - However, layer 2{" "} - rollups have developed much faster than expected and have - provided a lot of scaling already, and will provide much - more after Proto-Danksharding is implemented. This means - "shard chains" are no longer needed and have been - dropped from the roadmap. + {t.rich("page-roadmap-faq-4-p1", { + validators: (chunks) => ( + {chunks} + ), + layer2: (chunks) => ( + {chunks} + ), + })}

diff --git a/src/data/roadmap/releases.tsx b/src/data/roadmap/releases.tsx index 70d57f6ffc5..b9f0355b193 100644 --- a/src/data/roadmap/releases.tsx +++ b/src/data/roadmap/releases.tsx @@ -7,6 +7,8 @@ import QuizzesHubHeroImage from "@/public/images/heroes/quizzes-hub-hero.png" import FusakaImage from "@/public/images/roadmap/roadmap-fusaka.png" import PectraImage from "@/public/images/roadmap/roadmap-pectra.png" +type TranslationFunction = (key: string) => string + type DateString = `2${number}${number}${number}-${number}${number}-${number}${number}` type YearString = `2${number}${number}${number}` @@ -14,7 +16,7 @@ type YearString = `2${number}${number}${number}` interface BaseRelease { image: StaticImageData releaseName: string - content: React.ReactNode + content: React.ReactNode | ((t: TranslationFunction) => React.ReactNode) href: string } @@ -36,29 +38,27 @@ interface ReleaseUnscheduled extends BaseRelease { // Release may have either a releaseDate or a plannedReleaseYear, but not both. export type Release = ReleaseWithDate | ReleaseWithYear | ReleaseUnscheduled -export const releasesData: Release[] = [ +export const getReleasesData = (t: TranslationFunction): Release[] => [ { image: DevelopersHubHeroImage, releaseName: "Paris (The Merge)", releaseDate: "2022-09-15", content: (
-

Transition to Proof of Stake

+

{t("page-roadmap-paris-pos-title")}

    -
  • Replaced energy-intensive mining with staking-based consensus
  • -
  • Reduced Ethereum's energy consumption by ~99.95%
  • +
  • {t("page-roadmap-paris-pos-item-1")}
  • +
  • {t("page-roadmap-paris-pos-item-2")}
-

Beacon Chain Integration

+

{t("page-roadmap-paris-beacon-title")}

    -
  • Merged the Beacon Chain with the Ethereum mainnet
  • -
  • Enabled the full transition to PoS consensus mechanism
  • +
  • {t("page-roadmap-paris-beacon-item-1")}
  • +
  • {t("page-roadmap-paris-beacon-item-2")}
-

Difficulty Bomb Removal

+

{t("page-roadmap-paris-difficulty-title")}

    -
  • - Removed the difficulty bomb that was increasing mining difficulty -
  • -
  • Ensured smooth transition to the new consensus mechanism
  • +
  • {t("page-roadmap-paris-difficulty-item-1")}
  • +
  • {t("page-roadmap-paris-difficulty-item-2")}
), @@ -70,22 +70,22 @@ export const releasesData: Release[] = [ releaseDate: "2023-04-12", content: (
-

Staking withdrawals

+

+ {t("page-roadmap-shapella-withdrawals-title")} +

    -
  • Enabled validators to withdraw their staked ETH and rewards
  • -
  • Introduced partial and full withdrawal capabilities
  • +
  • {t("page-roadmap-shapella-withdrawals-item-1")}
  • +
  • {t("page-roadmap-shapella-withdrawals-item-2")}
-

EIP-4895: Beacon chain push withdrawals

+

{t("page-roadmap-shapella-eip4895-title")}

    -
  • Added a new system-level operation for withdrawals
  • -
  • - Ensured secure and efficient processing of withdrawal requests -
  • +
  • {t("page-roadmap-shapella-eip4895-item-1")}
  • +
  • {t("page-roadmap-shapella-eip4895-item-2")}
-

EIP-3651: Warm COINBASE

+

{t("page-roadmap-shapella-eip3651-title")}

    -
  • Reduced gas costs for accessing the COINBASE address
  • -
  • Improved efficiency of certain smart contract operations
  • +
  • {t("page-roadmap-shapella-eip3651-item-1")}
  • +
  • {t("page-roadmap-shapella-eip3651-item-2")}
), @@ -97,33 +97,22 @@ export const releasesData: Release[] = [ releaseDate: "2024-03-13", content: (
-

Proto-danksharding (EIP-4844)

+

+ {t("page-roadmap-dencun-danksharding-title")} +

    -
  • - Introduced blob transactions to significantly reduce rollup - transaction costs -
  • -
  • - Added a new transaction type that stores data temporarily and - cheaply -
  • +
  • {t("page-roadmap-dencun-danksharding-item-1")}
  • +
  • {t("page-roadmap-dencun-danksharding-item-2")}
-

EIP-1153: Transient storage opcodes

+

{t("page-roadmap-dencun-eip1153-title")}

    -
  • - Added TSTORE and TLOAD opcodes for temporary storage during - transaction execution -
  • -
  • - Enables more efficient smart contract patterns and reduces gas costs -
  • +
  • {t("page-roadmap-dencun-eip1153-item-1")}
  • +
  • {t("page-roadmap-dencun-eip1153-item-2")}
-

EIP-4788: Beacon block root in the EVM

+

{t("page-roadmap-dencun-eip4788-title")}

    -
  • Exposes consensus layer information to smart contracts
  • -
  • - Enables new trust-minimized applications and cross-chain bridges -
  • +
  • {t("page-roadmap-dencun-eip4788-item-1")}
  • +
  • {t("page-roadmap-dencun-eip4788-item-2")}
), @@ -135,29 +124,17 @@ export const releasesData: Release[] = [ releaseDate: "2025-05-07", content: (
-

- Enhance EOA wallets with smart contract functionality -

+

{t("page-roadmap-pectra-eoa-title")}

    -
  • - Users can set their address to be represented by a code of an - existing smart contract and gain benefits such as transaction - batching, transaction fee sponsorship or better recovery mechanisms -
  • +
  • {t("page-roadmap-pectra-eoa-item-1")}
-

Increase the max effective balance

+

{t("page-roadmap-pectra-balance-title")}

    -
  • - Stakers can now choose an arbitrary amount of ETH to stake and - receive rewards on every 1 ETH above the minimum -
  • +
  • {t("page-roadmap-pectra-balance-item-1")}
-

Blob throughput increase

+

{t("page-roadmap-pectra-blob-title")}

    -
  • - The blob count will be increased from 3 to 6 targets, with a maximum - of 9, resulting in cheaper fees in Ethereum rollups -
  • +
  • {t("page-roadmap-pectra-blob-item-1")}
), @@ -169,23 +146,16 @@ export const releasesData: Release[] = [ plannedReleaseYear: "2025", content: (
-

- PeerDAS (Peer-to-Peer Data Availability Sampling) -

+

{t("page-roadmap-fusaka-peerdas-title")}

    -
  • Enables more efficient data availability for rollups
  • -
  • - Makes running a node more accessible while maintaining - decentralization -
  • +
  • {t("page-roadmap-fusaka-peerdas-item-1")}
  • +
  • {t("page-roadmap-fusaka-peerdas-item-2")}
-

Potential Additional Features

+

{t("page-roadmap-fusaka-additional-title")}

    -
  • Support for secure enclaves on mobile devices to improve UX
  • -
  • Blob fee market improvements
  • -
  • - Further improvements to validator efficiency and network performance -
  • +
  • {t("page-roadmap-fusaka-additional-item-1")}
  • +
  • {t("page-roadmap-fusaka-additional-item-2")}
  • +
  • {t("page-roadmap-fusaka-additional-item-3")}
), @@ -197,12 +167,22 @@ export const releasesData: Release[] = [ plannedReleaseYear: "2026", content: (
-

Discussed for Glamsterdam

+

+ {t("page-roadmap-glamsterdam-discussed-title")} +

    -
  • Verkle trees
  • +
  • {t("page-roadmap-glamsterdam-discussed-item-1")}
), href: "https://eips.ethereum.org/EIPS/eip-7773", }, ] + +// Legacy export for backward compatibility - uses hardcoded English strings +export const releasesData: Release[] = getReleasesData((key: string) => { + // This is a fallback that returns the key itself if translations aren't available + // In practice, this should not be used in the actual app + console.warn(`Translation key ${key} used without translation function`) + return key +}) diff --git a/src/hooks/useTranslation.ts b/src/hooks/useTranslation.ts index 9928ae365b1..f8105243e74 100644 --- a/src/hooks/useTranslation.ts +++ b/src/hooks/useTranslation.ts @@ -35,6 +35,10 @@ export function useTranslation(namespaces?: string[] | string) { ? namespaces[0] : namespaces || DEFAULT_NAMESPACE + if (values) { + return t(`${namespace}.${fullKey}`, values) + } + return t.raw(`${namespace}.${fullKey}`) } catch (error) { // Suppress errors by default, enable if needed to debug @@ -43,10 +47,43 @@ export function useTranslation(namespaces?: string[] | string) { } } - // keep the original methods + // keep the original methods with namespace handling customT.raw = t.raw - customT.rich = t.rich - customT.markup = t.markup + + customT.rich = (fullKey: string, values?: unknown) => { + try { + if (fullKey.includes(":")) { + const [namespace, key] = fullKey.split(":") + return t.rich(`${namespace}.${key}`, values) + } + + const namespace = Array.isArray(namespaces) + ? namespaces[0] + : namespaces || DEFAULT_NAMESPACE + + return t.rich(`${namespace}.${fullKey}`, values) + } catch (error) { + return fullKey + } + } + + customT.markup = (fullKey: string, values?: unknown) => { + try { + if (fullKey.includes(":")) { + const [namespace, key] = fullKey.split(":") + return t.markup(`${namespace}.${key}`, values) + } + + const namespace = Array.isArray(namespaces) + ? namespaces[0] + : namespaces || DEFAULT_NAMESPACE + + return t.markup(`${namespace}.${fullKey}`, values) + } catch (error) { + return fullKey + } + } + customT.has = t.has return { t: customT } diff --git a/src/intl/en/page-roadmap.json b/src/intl/en/page-roadmap.json index 3a9faa530bc..3f732d1f338 100644 --- a/src/intl/en/page-roadmap.json +++ b/src/intl/en/page-roadmap.json @@ -1,4 +1,99 @@ { "page-roadmap-meta-title": "Ethereum roadmap", - "page-roadmap-meta-description": "The path to more scalability, security and sustainability for Ethereum." + "page-roadmap-meta-description": "The path to more scalability, security and sustainability for Ethereum.", + "page-roadmap-banner-notification": "Ethereum's development is community-driven and subject to change.", + "page-roadmap-changes-coming-title": "What changes are coming to Ethereum?", + "page-roadmap-changes-coming-description": "Ethereum is already a powerful platform, but it is still being improved. An ambitious set of improvements will upgrade Ethereum from its current form into a fully scaled, maximally resilient platform.", + "page-roadmap-cheaper-transactions-title": "Cheaper transactions", + "page-roadmap-cheaper-transactions-description": "Rollups are too expensive and rely on centralized components, causing users to place too much trust in their operators. The roadmap includes fixes for both of these problems.", + "page-roadmap-cheaper-transactions-button": "More on reducing fees", + "page-roadmap-extra-security-title": "Extra security", + "page-roadmap-extra-security-description": "Ethereum is already very secure but it can be made even stronger, ready to withstand all kinds of attack far into the future.", + "page-roadmap-extra-security-button": "More on security", + "page-roadmap-better-user-experience-title": "Better user experience", + "page-roadmap-better-user-experience-description": "More support for smart contract wallets and light-weight nodes will make using Ethereum simpler and safer.", + "page-roadmap-better-user-experience-button": "More on user experience", + "page-roadmap-future-proofing-title": "Future-proofing", + "page-roadmap-future-proofing-description": "Ethereum researchers and developers are solving tomorrow's problems today, readying the network for future generations.", + "page-roadmap-future-proofing-button": "More on future-proofing", + "page-roadmap-why-need-title": "Why does Ethereum need a roadmap?", + "page-roadmap-why-need-description": "Ethereum gets regular upgrades that enhance its scalability, security, or sustainability. One of Ethereum's core strengths is adapting as new ideas emerge from research and development. Adaptability gives Ethereum the flexibility to tackle emerging challenges and keep up with the most advanced technological breakthroughs.", + "page-roadmap-how-defined-title": "How the roadmap is defined", + "page-roadmap-how-defined-p1": "The roadmap is mostly the result of years of work by researchers and developers - because the protocol is very technical - but any motivated person can participate.", + "page-roadmap-how-defined-p2": "Ideas usually start off as discussions on a forum such as ethresear.ch, Ethereum Magicians or the Eth R&D discord server. They may be responses to new vulnerabilities that are discovered, suggestions from organizations working in the application layer (such as dapps and exchanges) or from known frictions for end users (such as costs or transaction speeds).", + "page-roadmap-how-defined-p3": "When these ideas mature, they can be proposed as Ethereum Improvement Proposals. This is all done in public so that anyone from the community can weigh in at any time.", + "page-roadmap-governance-button": "More on Ethereum governance", + "page-roadmap-hero-alt": "Ethereum roadmap", + "page-roadmap-technical-upgrades-title": "What technical upgrades are coming to Ethereum?", + "page-roadmap-danksharding-title": "Danksharding", + "page-roadmap-danksharding-description": "Danksharding makes L2 rollups much cheaper for users by adding \"blobs\" of data to Ethereum blocks.", + "page-roadmap-single-slot-finality-title": "Single slot finality", + "page-roadmap-single-slot-finality-description": "Instead of waiting for fifteen minutes, blocks could get proposed and finalized in the same slot. This is more convenient for apps and difficult to attack.", + "page-roadmap-account-abstraction-title": "Account abstraction", + "page-roadmap-account-abstraction-description": "Account abstraction is a class of upgrades that support smart contract wallets natively on Ethereum, rather than having to use complex middleware.", + "page-roadmap-statelessness-title": "Statelessness", + "page-roadmap-statelessness-description": "Stateless clients will be able to verify new blocks without having to store large amounts of data. This will provide all the benefits of running a node with only a tiny fraction of today's costs.", + "page-roadmap-learn-more": "Learn more", + "page-roadmap-timeline-title": "What is the timeline for these upgrades?", + "page-roadmap-blocks-alt": "Ethereum blocks", + "page-roadmap-faq-1-title": "Will Ethereum's roadmap change over time?", + "page-roadmap-faq-1-p1": "Yes—almost definitely.", + "page-roadmap-faq-1-p1-continued": "The roadmap is the current plan for upgrading Ethereum, covering both near-term and future plans. We expect the roadmap to change as new information and technology become available.", + "page-roadmap-faq-1-p2": "Think of Ethereum's roadmap as a set of intentions for improving Ethereum; it is the core researchers' and developers' best hypothesis of Ethereum's most optimal path forward.", + "page-roadmap-faq-2-title": "When will the roadmap be finished?", + "page-roadmap-faq-2-p1": "Some upgrades are lower priority and likely not to be implemented for the next 5-10 years (e.g. quantum resistance).", + "page-roadmap-faq-2-p1-strong": "Giving precise timing of each upgrade is complicated", + "page-roadmap-faq-2-p1-continued": "to predict as many roadmap items are worked on in parallel and developed at different speeds. The urgency of an upgrade can also change over time depending on external factors (e.g. a sudden leap in the performance and availability of quantum computers may make quantum-resistant cryptography more urgent).", + "page-roadmap-faq-2-p2": "One way to think about Ethereum development is by analogy to biological evolution. A network that is able to adapt to new challenges and maintain fitness is more likely to succeed than one that is resistant to change, although as the network becomes more and more performant, scalable and secure fewer changes to the protocol will be required.", + "page-roadmap-faq-3-title": "Do I have to do anything to prepare for these upgrades?", + "page-roadmap-faq-3-p1": "Upgrades tend not to impact end-users except by providing better user-experiences and a more secure protocol and perhaps more options for how to interact with Ethereum. Regular users are not required to actively participate in an upgrade, nor are they required to do anything** to secure their assets. Node operators will need to update their clients to prepare for an upgrade. Some upgrades may lead to changes for application developers. For example, history expiry upgrades may lead application developers to grab historical data from new sources.", + "page-roadmap-faq-4-title": "What about sharding?", + "page-roadmap-faq-4-p1": "Sharding is splitting up the Ethereum blockchain so that subsets of validators are only responsible for a fraction of the total data. This was originally intended to be the way for Ethereum to scale. However, layer 2 rollups have developed much faster than expected and have provided a lot of scaling already, and will provide much more after Proto-Danksharding is implemented. This means \"shard chains\" are no longer needed and have been dropped from the roadmap.", + "page-roadmap-release-status-prod": "In production", + "page-roadmap-release-status-soon": "Coming soon", + "page-roadmap-release-status-dev": "In development", + "page-roadmap-release-main-features": "Main features", + "page-roadmap-release-learn-more": "Learn more", + "page-roadmap-paris-pos-title": "Transition to Proof of Stake", + "page-roadmap-paris-pos-item-1": "Replaced energy-intensive mining with staking-based consensus", + "page-roadmap-paris-pos-item-2": "Reduced Ethereum's energy consumption by ~99.95%", + "page-roadmap-paris-beacon-title": "Beacon Chain Integration", + "page-roadmap-paris-beacon-item-1": "Merged the Beacon Chain with the Ethereum mainnet", + "page-roadmap-paris-beacon-item-2": "Enabled the full transition to PoS consensus mechanism", + "page-roadmap-paris-difficulty-title": "Difficulty Bomb Removal", + "page-roadmap-paris-difficulty-item-1": "Removed the difficulty bomb that was increasing mining difficulty", + "page-roadmap-paris-difficulty-item-2": "Ensured smooth transition to the new consensus mechanism", + "page-roadmap-shapella-withdrawals-title": "Staking withdrawals", + "page-roadmap-shapella-withdrawals-item-1": "Enabled validators to withdraw their staked ETH and rewards", + "page-roadmap-shapella-withdrawals-item-2": "Introduced partial and full withdrawal capabilities", + "page-roadmap-shapella-eip4895-title": "EIP-4895: Beacon chain push withdrawals", + "page-roadmap-shapella-eip4895-item-1": "Added a new system-level operation for withdrawals", + "page-roadmap-shapella-eip4895-item-2": "Ensured secure and efficient processing of withdrawal requests", + "page-roadmap-shapella-eip3651-title": "EIP-3651: Warm COINBASE", + "page-roadmap-shapella-eip3651-item-1": "Reduced gas costs for accessing the COINBASE address", + "page-roadmap-shapella-eip3651-item-2": "Improved efficiency of certain smart contract operations", + "page-roadmap-dencun-danksharding-title": "Proto-danksharding (EIP-4844)", + "page-roadmap-dencun-danksharding-item-1": "Introduced blob transactions to significantly reduce rollup transaction costs", + "page-roadmap-dencun-danksharding-item-2": "Added a new transaction type that stores data temporarily and cheaply", + "page-roadmap-dencun-eip1153-title": "EIP-1153: Transient storage opcodes", + "page-roadmap-dencun-eip1153-item-1": "Added TSTORE and TLOAD opcodes for temporary storage during transaction execution", + "page-roadmap-dencun-eip1153-item-2": "Enables more efficient smart contract patterns and reduces gas costs", + "page-roadmap-dencun-eip4788-title": "EIP-4788: Beacon block root in the EVM", + "page-roadmap-dencun-eip4788-item-1": "Exposes consensus layer information to smart contracts", + "page-roadmap-dencun-eip4788-item-2": "Enables new trust-minimized applications and cross-chain bridges", + "page-roadmap-pectra-eoa-title": "Enhance EOA wallets with smart contract functionality", + "page-roadmap-pectra-eoa-item-1": "Users can set their address to be represented by a code of an existing smart contract and gain benefits such as transaction batching, transaction fee sponsorship or better recovery mechanisms", + "page-roadmap-pectra-balance-title": "Increase the max effective balance", + "page-roadmap-pectra-balance-item-1": "Stakers can now choose an arbitrary amount of ETH to stake and receive rewards on every 1 ETH above the minimum", + "page-roadmap-pectra-blob-title": "Blob throughput increase", + "page-roadmap-pectra-blob-item-1": "The blob count will be increased from 3 to 6 targets, with a maximum of 9, resulting in cheaper fees in Ethereum rollups", + "page-roadmap-fusaka-peerdas-title": "PeerDAS (Peer-to-Peer Data Availability Sampling)", + "page-roadmap-fusaka-peerdas-item-1": "Enables more efficient data availability for rollups", + "page-roadmap-fusaka-peerdas-item-2": "Makes running a node more accessible while maintaining decentralization", + "page-roadmap-fusaka-additional-title": "Potential Additional Features", + "page-roadmap-fusaka-additional-item-1": "Support for secure enclaves on mobile devices to improve UX", + "page-roadmap-fusaka-additional-item-2": "Blob fee market improvements", + "page-roadmap-fusaka-additional-item-3": "Further improvements to validator efficiency and network performance", + "page-roadmap-glamsterdam-discussed-title": "Discussed for Glamsterdam", + "page-roadmap-glamsterdam-discussed-item-1": "Verkle trees" } \ No newline at end of file From 75b9e19e4833d0f3d829f3cf9eec5da09cd1398a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 12 Aug 2025 09:25:55 -0700 Subject: [PATCH 20/98] fix: heading element ordering fixes error: "Heading elements are not in a sequentially-descending order" --- src/components/FeedbackCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.tsx index 0c0de4eb010..563a7f652f8 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.tsx @@ -69,7 +69,7 @@ const FeedbackCard = ({ prompt, isArticle, ...props }: FeedbackCardProps) => { dir={dir} >
-

{getTitle(feedbackSubmitted)}

+

{getTitle(feedbackSubmitted)}

{feedbackSubmitted && (

{t("feedback-widget-thank-you-subtitle")}{" "} From 2e66f025c07067409231a196bdd35d0b497f3fbc Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 12 Aug 2025 13:03:34 -0600 Subject: [PATCH 21/98] cleanup --- app/[locale]/roadmap/_components/roadmap.tsx | 43 +++----------------- src/hooks/useTranslation.ts | 43 ++------------------ src/intl/en/page-roadmap.json | 8 ++-- 3 files changed, 13 insertions(+), 81 deletions(-) diff --git a/app/[locale]/roadmap/_components/roadmap.tsx b/app/[locale]/roadmap/_components/roadmap.tsx index 85d5bc55e50..2aac617a721 100644 --- a/app/[locale]/roadmap/_components/roadmap.tsx +++ b/app/[locale]/roadmap/_components/roadmap.tsx @@ -1,3 +1,5 @@ +import htmr from "htmr" + import BannerNotification from "@/components/Banners/BannerNotification" import ExpandableCard from "@/components/ExpandableCard" import FeedbackCard from "@/components/FeedbackCard" @@ -16,7 +18,6 @@ import { import { Image } from "@/components/Image" import MainArticle from "@/components/MainArticle" import { ButtonLink } from "@/components/ui/buttons/Button" -import Link from "@/components/ui/Link" import InlineLink from "@/components/ui/Link" import { LinkBox, LinkOverlay } from "@/components/ui/link-box" @@ -148,23 +149,8 @@ const RoadmapPage = () => {

{t("page-roadmap-why-need-description")}

{t("page-roadmap-how-defined-title")}

{t("page-roadmap-how-defined-p1")}

-

- {t.rich("page-roadmap-how-defined-p2", { - ethresearch: (chunks) => ( - {chunks} - ), - "ethereum-magicians": (chunks) => ( - {chunks} - ), - })} -

-

- {t.rich("page-roadmap-how-defined-p3", { - eips: (chunks) => ( - {chunks} - ), - })} -

+

{htmr(t("page-roadmap-how-defined-p2"))}

+

{htmr(t("page-roadmap-how-defined-p3"))}

{ className="mb-0" >
-

- {t.rich("page-roadmap-faq-3-p1", { - emphasis: (chunks) => {chunks}, - strong: (chunks) => {chunks}, - node: (chunks) => ( - {chunks} - ), - })} -

+

{htmr(t("page-roadmap-faq-3-p1"))}

{ className="mb-0" >
-

- {t.rich("page-roadmap-faq-4-p1", { - validators: (chunks) => ( - {chunks} - ), - layer2: (chunks) => ( - {chunks} - ), - })} -

+

{htmr(t("page-roadmap-faq-4-p1"))}

diff --git a/src/hooks/useTranslation.ts b/src/hooks/useTranslation.ts index f8105243e74..9928ae365b1 100644 --- a/src/hooks/useTranslation.ts +++ b/src/hooks/useTranslation.ts @@ -35,10 +35,6 @@ export function useTranslation(namespaces?: string[] | string) { ? namespaces[0] : namespaces || DEFAULT_NAMESPACE - if (values) { - return t(`${namespace}.${fullKey}`, values) - } - return t.raw(`${namespace}.${fullKey}`) } catch (error) { // Suppress errors by default, enable if needed to debug @@ -47,43 +43,10 @@ export function useTranslation(namespaces?: string[] | string) { } } - // keep the original methods with namespace handling + // keep the original methods customT.raw = t.raw - - customT.rich = (fullKey: string, values?: unknown) => { - try { - if (fullKey.includes(":")) { - const [namespace, key] = fullKey.split(":") - return t.rich(`${namespace}.${key}`, values) - } - - const namespace = Array.isArray(namespaces) - ? namespaces[0] - : namespaces || DEFAULT_NAMESPACE - - return t.rich(`${namespace}.${fullKey}`, values) - } catch (error) { - return fullKey - } - } - - customT.markup = (fullKey: string, values?: unknown) => { - try { - if (fullKey.includes(":")) { - const [namespace, key] = fullKey.split(":") - return t.markup(`${namespace}.${key}`, values) - } - - const namespace = Array.isArray(namespaces) - ? namespaces[0] - : namespaces || DEFAULT_NAMESPACE - - return t.markup(`${namespace}.${fullKey}`, values) - } catch (error) { - return fullKey - } - } - + customT.rich = t.rich + customT.markup = t.markup customT.has = t.has return { t: customT } diff --git a/src/intl/en/page-roadmap.json b/src/intl/en/page-roadmap.json index 3f732d1f338..b0520f79a01 100644 --- a/src/intl/en/page-roadmap.json +++ b/src/intl/en/page-roadmap.json @@ -20,8 +20,8 @@ "page-roadmap-why-need-description": "Ethereum gets regular upgrades that enhance its scalability, security, or sustainability. One of Ethereum's core strengths is adapting as new ideas emerge from research and development. Adaptability gives Ethereum the flexibility to tackle emerging challenges and keep up with the most advanced technological breakthroughs.", "page-roadmap-how-defined-title": "How the roadmap is defined", "page-roadmap-how-defined-p1": "The roadmap is mostly the result of years of work by researchers and developers - because the protocol is very technical - but any motivated person can participate.", - "page-roadmap-how-defined-p2": "Ideas usually start off as discussions on a forum such as ethresear.ch, Ethereum Magicians or the Eth R&D discord server. They may be responses to new vulnerabilities that are discovered, suggestions from organizations working in the application layer (such as dapps and exchanges) or from known frictions for end users (such as costs or transaction speeds).", - "page-roadmap-how-defined-p3": "When these ideas mature, they can be proposed as Ethereum Improvement Proposals. This is all done in public so that anyone from the community can weigh in at any time.", + "page-roadmap-how-defined-p2": "Ideas usually start off as discussions on a forum such as ethresear.ch, Ethereum Magicians or the Eth R&D discord server. They may be responses to new vulnerabilities that are discovered, suggestions from organizations working in the application layer (such as dapps and exchanges) or from known frictions for end users (such as costs or transaction speeds).", + "page-roadmap-how-defined-p3": "When these ideas mature, they can be proposed as Ethereum Improvement Proposals. This is all done in public so that anyone from the community can weigh in at any time.", "page-roadmap-governance-button": "More on Ethereum governance", "page-roadmap-hero-alt": "Ethereum roadmap", "page-roadmap-technical-upgrades-title": "What technical upgrades are coming to Ethereum?", @@ -46,9 +46,9 @@ "page-roadmap-faq-2-p1-continued": "to predict as many roadmap items are worked on in parallel and developed at different speeds. The urgency of an upgrade can also change over time depending on external factors (e.g. a sudden leap in the performance and availability of quantum computers may make quantum-resistant cryptography more urgent).", "page-roadmap-faq-2-p2": "One way to think about Ethereum development is by analogy to biological evolution. A network that is able to adapt to new challenges and maintain fitness is more likely to succeed than one that is resistant to change, although as the network becomes more and more performant, scalable and secure fewer changes to the protocol will be required.", "page-roadmap-faq-3-title": "Do I have to do anything to prepare for these upgrades?", - "page-roadmap-faq-3-p1": "Upgrades tend not to impact end-users except by providing better user-experiences and a more secure protocol and perhaps more options for how to interact with Ethereum. Regular users are not required to actively participate in an upgrade, nor are they required to do anything** to secure their assets. Node operators will need to update their clients to prepare for an upgrade. Some upgrades may lead to changes for application developers. For example, history expiry upgrades may lead application developers to grab historical data from new sources.", + "page-roadmap-faq-3-p1": "Upgrades tend not to impact end-users except by providing better user-experiences and a more secure protocol and perhaps more options for how to interact with Ethereum. Regular users are not required to actively participate in an upgrade, nor are they required to do anything** to secure their assets. Node operators will need to update their clients to prepare for an upgrade. Some upgrades may lead to changes for application developers. For example, history expiry upgrades may lead application developers to grab historical data from new sources.", "page-roadmap-faq-4-title": "What about sharding?", - "page-roadmap-faq-4-p1": "Sharding is splitting up the Ethereum blockchain so that subsets of validators are only responsible for a fraction of the total data. This was originally intended to be the way for Ethereum to scale. However, layer 2 rollups have developed much faster than expected and have provided a lot of scaling already, and will provide much more after Proto-Danksharding is implemented. This means \"shard chains\" are no longer needed and have been dropped from the roadmap.", + "page-roadmap-faq-4-p1": "Sharding is splitting up the Ethereum blockchain so that subsets of validators are only responsible for a fraction of the total data. This was originally intended to be the way for Ethereum to scale. However, layer 2 rollups have developed much faster than expected and have provided a lot of scaling already, and will provide much more after Proto-Danksharding is implemented. This means \"shard chains\" are no longer needed and have been dropped from the roadmap.", "page-roadmap-release-status-prod": "In production", "page-roadmap-release-status-soon": "Coming soon", "page-roadmap-release-status-dev": "In development", From 0df366a372064acae2793dff58a9642a0244e652 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:19:15 -0700 Subject: [PATCH 22/98] i18n: extract strings for intl --- app/[locale]/what-is-ethereum/page.tsx | 909 ++++++++++++------------- src/intl/en/page-what-is-ethereum.json | 307 +++++---- 2 files changed, 608 insertions(+), 608 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 9ca2104616e..1331a59771b 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -98,12 +98,16 @@ const LinkWithArrow = async ({ href, className, children }: LinkProps) => { ) } + +const Strong = (chunks) => {chunks} +const Emphasis = (chunks) => {chunks} + const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params - // const t = await getTranslations({ - // locale, - // namespace: "page-what-is-ethereum", - // }) + const t = await getTranslations({ + locale, + namespace: "page-what-is-ethereum", + }) const commitHistoryCache: CommitHistory = {} const { contributors, lastEditLocaleTimestamp } = @@ -114,21 +118,21 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { ) const tocItems: ToCItem[] = [ - { title: "What is Ethereum?", url: "#ethereum" }, - { title: "What is the Ethereum network?", url: "#network" }, - { title: "What is ether (ETH)?", url: "#ether" }, - { title: "How does Ethereum work?", url: "#how" }, - { title: "What is Ethereum used for?", url: "#what" }, - { title: "How to start using Ethereum", url: "#start" }, + { title: t("page-what-is-ethereum-toc-ethereum"), url: "#ethereum" }, + { title: t("page-what-is-ethereum-toc-network"), url: "#network" }, + { title: t("page-what-is-ethereum-toc-ether"), url: "#ether" }, + { title: t("page-what-is-ethereum-toc-how"), url: "#how" }, + { title: t("page-what-is-ethereum-toc-what"), url: "#what" }, + { title: t("page-what-is-ethereum-toc-start"), url: "#start" }, { - title: "What's the difference between Ethereum and Bitcoin?", + title: t("page-what-is-ethereum-toc-bitcoin"), url: "#bitcoin", }, { - title: "When did Ethereum launch, who founded it and who runs it now?", + title: t("page-what-is-ethereum-toc-when-who"), url: "#when-who", }, - { title: "What is the Ethereum roadmap for 2025?", url: "#roadmap" }, + { title: t("page-what-is-ethereum-toc-roadmap"), url: "#roadmap" }, ] const heroProps: ContentHeroProps = { @@ -137,14 +141,8 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { title: tocItems[0].title, description: ( <> -

- Ethereum is a decentralized blockchain network and software - development platform, powered by the cryptocurrency ether (ETH). -

-

- It's home to thousands of cryptocurrencies and applications - across DeFi, NFTs, gaming, decentralized social media and stablecoins. -

+

{t("page-what-is-ethereum-hero-description-1")}

+

{t("page-what-is-ethereum-hero-description-2")}

), } @@ -196,52 +194,48 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { >

- Ethereum is an open, public blockchain{" "} - launched in July 2015 by a software developer - called Vitalik Buterin and a small team of co-founders. + {t.rich("page-what-is-ethereum-ethereum-intro-1", { + strong: Strong, + })}

- The idea behind Ethereum was simple. While Bitcoin let you send - and receive digital cash, Ethereum would build on this with - open-source programs called smart contracts. + {t.rich("page-what-is-ethereum-ethereum-intro-2", { + a: (chunks) => {chunks}, + })}

- Smart contracts let anyone create their own - digital assets and decentralized applications (dapps) that run - 24/7, globally. And unlike banks, corporations or other - institutions, smart contracts are available to anyone with an - internet connection. + {t.rich("page-what-is-ethereum-ethereum-intro-3", { + strong: Strong, + })}

- Since 2015, Ethereum has grown into a thriving ecosystem of - digital assets like stablecoins, non-fungible - tokens (NFTs), and governance tokens, as well as - a sprawling world of dapps for decentralized finance ( - DeFi), art and collectibles, gaming and - decentralized social media. + {t.rich("page-what-is-ethereum-ethereum-intro-4", { + strong: Strong, + })}

- Collectively, this ecosystem is called "web3 - ", representing the third phase of the{" "} - internet centered around ownership. + {t.rich("page-what-is-ethereum-ethereum-intro-5", { + strong: Strong, + })}

- Today, Ethereum is used by millions of people around the - world holding billions of dollars in assets who send and - receive trillions of dollars every year — all without a - bank. + {t.rich("page-what-is-ethereum-ethereum-intro-6", { + a: (chunks) => {chunks}, + p: (chunks) => {chunks}, + span: (chunks) => {chunks}, + })}

- At the heart of all this is Ethereum's native cryptocurrency{" "} - ether (ETH), a new kind of digital money used to - power the whole network. + {t.rich("page-what-is-ethereum-ethereum-intro-7", { + strong: Strong, + })}

Illustration of futuristic Ethereum community center @@ -251,25 +245,21 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

- You can think of the ethereum network as{" "} - - a global digital infrastructure that anyone can use - {" "} - but nobody can abuse. + {t.rich("page-what-is-ethereum-network-intro-1", { + strong: Strong, + })}

- The network is made up of{" "} - thousands of independent computers - around the world called nodes. These nodes, run by regular - people, work together to provide financial services and digital - applications to anyone, anywhere. + {t.rich("page-what-is-ethereum-network-intro-2", { + strong: Strong, + })}

- The Ethereum network has 3 key advantages over - traditional networks owned by institutions. These are censorship - resistance, enhanced security and improved reliability. + {t.rich("page-what-is-ethereum-network-intro-3", { + strong: Strong, + })}

@@ -279,18 +269,15 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Censorship resistant + + {t("page-what-is-ethereum-network-censorship-title")} +

- While traditional apps and financial services rely on - banks or corporations that can decide to block access or - freeze accounts, dapps on Ethereum are censorship - resistant. + {t("page-what-is-ethereum-network-censorship-desc-1")}

- This is because ethereum's network of nodes record - every single transaction without discrimination—and this - rule is embedded in the code. + {t("page-what-is-ethereum-network-censorship-desc-2")}

@@ -300,22 +287,12 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Highly secure + + {t("page-what-is-ethereum-network-security-title")} + -

- While many apps today are hosted on cloud providers like - AWS and can be vulnerable to takedowns and attacks, dapps - on Ethereum are secured by the network itself. Every node - stores and syncs the entire state of Ethereum, including - all contracts. -

-

- If someone tried to change a contract, the network would - reject it since it wouldn't match their records. To - take down a single app, attackers need to take over the - entire network, which would costs billions and be - extremely hard to coordinate. -

+

{t("page-what-is-ethereum-network-security-desc-1")}

+

{t("page-what-is-ethereum-network-security-desc-2")}

@@ -324,22 +301,20 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Durable and reliable + + {t("page-what-is-ethereum-network-reliability-title")} +

- Downtime on cloud hosting platforms can take apps offline, - but Ethereum's design ensures perfect uptime. - The network will keep running even if some nodes go - offline due to software bugs, government crackdowns, - natural disaster, or war. + {t.rich( + "page-what-is-ethereum-network-reliability-desc-1", + { + a: (chunks) => {chunks}, + } + )}

- Millions of people use thousands of dapps on Ethereum - every day. While high demand can lead to elevated - transaction fees, it reflects the strength of a network - that prioritizes security, decentralization, and the - guarantee that it's always available when you need - it. + {t("page-what-is-ethereum-network-reliability-desc-2")}

@@ -347,26 +322,34 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-

Ethereum extensions (Layer 2)

+

+ {t("page-what-is-ethereum-network-layer2-title")} +

-

- Different teams have created Layer 2 (L2) networks that run on - top of Ethereum to increase Ethereum's capacity. L2s act - like express lanes, making transactions faster and cheaper — - sometimes costing less than a cent on average. -

+

{t("page-what-is-ethereum-network-layer2-desc-1")}

- Some of the most popular L2s including Optimism, Arbitrum, - ZKSync, and Base now process millions of transactions worth - billions of dollars each year. + {t.rich("page-what-is-ethereum-network-layer2-desc-2", { + a: (chunks) => ( + {chunks} + ), + p: (chunks) => ( + {chunks} + ), + span: (chunks) => ( + {chunks} + ), + div: (chunks) => ( + {chunks} + ), + })}

- Learn more about the Ethereum network + {t("page-what-is-ethereum-network-learn-more")}
@@ -377,7 +360,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
Open hands holding ether glyph @@ -387,48 +370,32 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-

Ether (ETH) is the native cryptocurrency of Ethereum.

-

- It's a new kind of{" "} - - digital money you can send to anyone, anywhere in the world in - seconds - {" "} - for as little as a few cents. But ETH is about more than just - payments. It plays a vital role in keeping the Ethereum network - running. -

+

{t("page-what-is-ethereum-ether-intro-1")}

- When you use Ethereum to send money, collect art or build a new - dapp, you pay a small transaction fee (or gas - fee) in ETH. This fee helps prevent spam and - rewards the people called validators who process transactions. + {t.rich("page-what-is-ethereum-ether-intro-2", { + strong: Strong, + })}

- These{" "} - validators help secure the ethereum network{" "} - through a system called staking. By locking up their ETH - they're eligible to process transactions. In return, they - earn ETH as a reward. This gives Ethereum its own - self-sustaining economy, powered by users rather than companies. + {t.rich("page-what-is-ethereum-ether-intro-3", { + strong: Strong, + })}

- Unlike many traditional currencies,{" "} - ETH can become more scarce over time. Every - time someone uses Ethereum, a small portion of ETH is burned, - which permanently removes it from the supply. On busy days, more - ETH is burned than created, making ETH deflationary and - increasing its value over time. The more Ethereum is used, the - more ETH is burned. + {t.rich("page-what-is-ethereum-ether-intro-4", { + strong: Strong, + })}

- Because of this, many people see ETH as an investment and choose - to hold, stake or lend it to grow their savings. + {t.rich("page-what-is-ethereum-ether-intro-5", { + strong: Strong, + })}

+

{t("page-what-is-ethereum-ether-intro-6")}

- Learn more about ether (ETH) + {t("page-what-is-ethereum-ether-learn-more")} @@ -439,7 +406,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
Man repairing computer @@ -450,99 +417,76 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

- When Ethereum launched in 2015, it used a system called proof of - work. -

-

- This mechanism pioneered by Bitcoin, is how all computers agreed - on who owns what. Computers would use a lot of energy trying to - solve a complex mathematical puzzle. The winner would get to - propose a block of incoming transactions and earn new ETH. + {t.rich("page-what-is-ethereum-how-intro-1", { + strong: Strong, + })}

+

{t("page-what-is-ethereum-how-intro-2")}

- In 2022, Ethereum upgraded to a new system called{" "} - proof of stake{" "} - that's 99% more energy efficient. Instead of - mathematical puzzles, validators lock their ETH as a security - deposit to earn the right to process transactions. + {t.rich("page-what-is-ethereum-how-intro-3", { + strong: Strong, + a: (chunks) => ( + {chunks} + ), + })}

-

- If they do it correctly, they earn ETH. If they cheat, they lose - some of their stake. -

-

Here's an example:

+

{t("page-what-is-ethereum-how-intro-4")}

+

{t("page-what-is-ethereum-how-intro-5")}

- When you send $10 in stablecoins to a friend on Ethereum: + {t("page-what-is-ethereum-how-example-1-title")}

- You open your wallet, add the account address and the amount, - then click send. + {t("page-what-is-ethereum-how-example-1-step-1")} - Your wallet signs the payment and broadcasts it to the - network. + {t("page-what-is-ethereum-how-example-1-step-2")} - The payment waits in the public queue (mempool) until a block - proposer picks it. + {t("page-what-is-ethereum-how-example-1-step-3")} - The block proposer adds it to the next block of transactions, - broadcasts it, and earns a fee. + {t("page-what-is-ethereum-how-example-1-step-4")} - The stablecoin contract moves $10 from you to your friend, and - both wallets update. + {t("page-what-is-ethereum-how-example-1-step-5")} - A global network of validators double-check and attest to the - validity of the changes. + {t("page-what-is-ethereum-how-example-1-step-6")}

- When you mint a $5 collectible on Ethereum: + {t("page-what-is-ethereum-how-example-2-title")}

- You connect your wallet to the dapp and choose the item to - mint. + {t("page-what-is-ethereum-how-example-2-step-1")} - You confirm the purchase; the wallet signs and broadcasts the - transaction. + {t("page-what-is-ethereum-how-example-2-step-2")} - The mint request joins the mempool and is added to a block by - a validator. + {t("page-what-is-ethereum-how-example-2-step-3")} - The NFT smart contract records your wallet as the new owner. + {t("page-what-is-ethereum-how-example-2-step-4")} - Your new collectible appears in your wallet a few seconds - later. + {t("page-what-is-ethereum-how-example-2-step-5")} +

{t("page-what-is-ethereum-how-outro-1")}

- This is all possible thanks to the power of smart contracts; - open-source programs that live on Ethereum and run 24/7, 365 - accessible to anyone, anywhere. -

-

- - Every transaction, update, and action is synced across - thousands of independent nodes. - {" "} - This gives Ethereum its reliability, transparency, and - censorship resistance. + {t.rich("page-what-is-ethereum-how-outro-2", { + span: (chunks) => {chunks}, + })}

- Learn more about how Ethereum works + {t("page-what-is-ethereum-how-learn-more-1")} - Read developer docs for a technical overview of Ethereum + {t("page-what-is-ethereum-how-learn-more-2")}
@@ -551,7 +495,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
@@ -559,23 +503,29 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { {tocItems[4].title}
+

{t("page-what-is-ethereum-what-intro-1")}

- People use Ethereum to do things that weren't possible - before. -

-

- Farmers in Kenya can receive{" "} - automated insurance on their crops without applying to a - bank. Businesses like Visa can launch{" "} - new payment systems that works globally from day one. - Global organizations like the UN can deliver{" "} - aid to refugees saving millions in bank fees. + {t.rich("page-what-is-ethereum-what-intro-2", { + strong: Strong, + a: (chunks) => ( + + {chunks} + + ), + p: (chunks) => ( + + {chunks} + + ), + span: (chunks) => ( + + {chunks} + + ), + })}

-

- These dapps and assets run on Ethereum using open-source code - and can't be restricted, censored or turned off. -

-

Here's how different groups are using it today:

+

{t("page-what-is-ethereum-what-intro-3")}

+

{t("page-what-is-ethereum-what-intro-4")}

@@ -583,34 +533,39 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Consumers + + {t("page-what-is-ethereum-what-consumers-title")} + -

- Millions of people already use dapps on Ethereum to move - money, trade, and own digital assets every day. Unlike - traditional apps, there's no need to register with - your name, wait for a bank to approve you, or hand over - your personal data. -

-

- With just a wallet and an internet connection you can: -

+

{t("page-what-is-ethereum-what-consumers-desc-1")}

+

{t("page-what-is-ethereum-what-consumers-desc-2")}

- Access financial services without a bank account or - credit history + {t.rich( + "page-what-is-ethereum-what-consumers-benefit-1", + { + strong: Strong, + } + )} - Own digital collectibles, art, and assets that - can't be copied or confiscated + {t.rich( + "page-what-is-ethereum-what-consumers-benefit-2", + { + strong: Strong, + } + )} - Sign into dapps using your wallet, not your email — no - passwords, no personal information necessary + {t.rich( + "page-what-is-ethereum-what-consumers-benefit-3", + { + strong: Strong, + } + )} - Participate in global communities where you can vote, - contribute, and earn borderlessly + {t("page-what-is-ethereum-what-consumers-benefit-4")}
@@ -622,31 +577,33 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Businesses & developers + {t("page-what-is-ethereum-what-businesses-title")} - Launch dapps with built-in global payments system from - day one + {t("page-what-is-ethereum-what-businesses-benefit-1")} - Deploy tamper-proof contracts that{" "} - automatically enforce agreements + {t.rich( + "page-what-is-ethereum-what-businesses-benefit-2", + { + strong: Strong, + } + )} - Create financial products that anyone can build on and - drive value to{" "} + {t("page-what-is-ethereum-what-businesses-benefit-3")}

- For example,{" "} - - PayPal launched its own stablecoin, PYUSD, on Ethereum - - . This is a sign that even the world's largest - payments companies see the benefit of Ethereum's open - and programmable nature. + {t.rich("page-what-is-ethereum-what-businesses-example", { + a: (chunks) => ( + + {chunks} + + ), + })}

@@ -656,54 +613,66 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
- Governments + + {t("page-what-is-ethereum-what-governments-title")} + -

- Governments are also starting to explore what Ethereum - makes possible. -

+

{t("page-what-is-ethereum-what-governments-intro")}

- Distribute public funds and benefits - directly to citizens with full transparency + {t.rich( + "page-what-is-ethereum-what-governments-benefit-1", + { + strong: Strong, + } + )} - Issue digital IDs or records that are - verifiable and portable across borders + {t.rich( + "page-what-is-ethereum-what-governments-benefit-2", + { + strong: Strong, + } + )} - Build{" "} - - tamper-proof public infrastructure for voting - - , land titles, and registries + {t.rich( + "page-what-is-ethereum-what-governments-benefit-3", + { + strong: Strong, + } + )}

- In another case, Ukraine's Ministry of Digital - Transformation{" "} - used Ethereum to distribute wartime aid. + {t.rich( + "page-what-is-ethereum-what-governments-example-1", + { + a: (chunks) => ( + + {chunks} + + ), + } + )}

- Funds were sent directly to citizens and NGOs using open - smart contracts, providing transparency, speed, and - accountability during a crisis. + {t("page-what-is-ethereum-what-governments-example-2")}

- {/* // TODO: Confirm links */} - Learn more about what Ethereum is used for + {t("page-what-is-ethereum-what-learn-more")}
@@ -711,70 +680,79 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { {tocItems[5].title}
-

- Getting started with Ethereum is easier than you might think. -

-

- You don't need permission. You don't need a bank or - even an ID document. All you need to get started is a device - and an internet connection. -

+

{t("page-what-is-ethereum-start-intro-1")}

+

{t("page-what-is-ethereum-start-intro-2")}

-

For individuals

+

+ {t("page-what-is-ethereum-start-individuals-title")} +

- The first step is downloading a wallet. + {t("page-what-is-ethereum-start-individuals-desc-1")} - Think of it like an app that acts as both your account and - your internet browser for Ethereum. It manages your crypto, - lets you sign in to dapps, as well as send and receive - digital assets like tokens and NFTs.{" "}

- Popular wallets like Zerion, Rainbow, and{" "} - Coinbase Wallet are free and easy to use. Once your - wallet is set up, you can: + {t.rich("page-what-is-ethereum-start-individuals-desc-3", { + a: (chunks) => ( + {chunks} + ), + p: (chunks) => ( + {chunks} + ), + span: (chunks) => ( + + {chunks} + + ), + })}

- Buy a small amount of ETH on an exchange or directly - inside some wallets + {t("page-what-is-ethereum-start-individuals-step-1")} - Use that ETH to pay for transactions like sending tokens - or collecting NFTs + {t("page-what-is-ethereum-start-individuals-step-2")} - Explore dapps like Zora, Uniswap, or{" "} - Warpcast — no new logins or approvals needed + {t.rich( + "page-what-is-ethereum-start-individuals-step-3", + { + a: (chunks) => ( + {chunks} + ), + p: (chunks) => ( + + {chunks} + + ), + span: (chunks) => ( + {chunks} + ), + } + )} -

- These priorities will helps ensure Ethereum is secure, - scalable and user friendly as more people rely on the - network everyday. -

-

- These dapps run in your browser and work with your wallet - instantly. You can start using Ethereum in minutes.{" "} -

+

{t("page-what-is-ethereum-start-individuals-desc-4")}

+

{t("page-what-is-ethereum-start-individuals-desc-5")}

- Start here + + {t("page-what-is-ethereum-start-individuals-cta-1")} + - See apps + {t("page-what-is-ethereum-start-individuals-cta-2")}
@@ -783,33 +761,43 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { -

For developers

+

+ {t("page-what-is-ethereum-start-developers-title")} +

+

{t("page-what-is-ethereum-start-developers-desc-1")}

- Ethereum is a playground for developers. You can start - building without permission, approvals, or even real money. -

-

- The Ethereum Developer Docs walk you through - everything from writing your first smart contract to - deploying on test networks like Sepolia. -

-

- You can build full-stack dapps with tools like{" "} - Hardhat, Foundry, and Ethers.js, or - experiment with low-code platforms like thirdweb or{" "} - Moralis. + {t.rich("page-what-is-ethereum-start-developers-desc-2", { + a: (chunks) => ( + {chunks} + ), + })}

- Everything is open-source and composable, so you can remix - and build on what’s already out there without asking for - permission. + {t.rich("page-what-is-ethereum-start-developers-desc-3", { + a: (chunks) => ( + {chunks} + ), + p: (chunks) => ( + {chunks} + ), + span: (chunks) => ( + {chunks} + ), + div: (chunks) => ( + {chunks} + ), + aside: (chunks) => ( + {chunks} + ), + })}

+

{t("page-what-is-ethereum-start-developers-desc-4")}

- Start building on Ethereum + {t("page-what-is-ethereum-start-developers-cta")}
@@ -817,44 +805,41 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { -

Use Ethereum in business

+

+ {t("page-what-is-ethereum-start-business-title")} +

+

{t("page-what-is-ethereum-start-business-desc-1")}

+

{t("page-what-is-ethereum-start-business-desc-2")}

- Enterprises are already using Ethereum to power new - infrastructure. -

-

- Many enterprises are starting with L2 networks like Optimism - and Base to support high-volume use cases. These networks - offer lower fees, faster speeds while still benefiting from - Ethereum’s security and removing counterparty risk. -

-

- You can: + {t("page-what-is-ethereum-start-business-desc-3")} - Launch modular loyalty programs that boost retention and - cut third-party costs + {t("page-what-is-ethereum-start-business-benefit-1")} - Tokenize assets like tickets, coupons, or certificates - to reduce fraud and resale risk + {t("page-what-is-ethereum-start-business-benefit-2")} - Enable instant global payments to lower transaction fees - and unlock new markets + {t("page-what-is-ethereum-start-business-benefit-3")}

- For example, in 2025, Shopify launched on Base to - allow consumers to spend stablecoins with millions of - merchants around the globe. + {t.rich("page-what-is-ethereum-start-business-example", { + a: (chunks) => ( + + {chunks} + + ), + })}

- Use Ethereum in business + + {t("page-what-is-ethereum-start-business-cta")} +
@@ -865,98 +850,64 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-

- Bitcoin and Ethereum are the two biggest cryptocurrencies in the - world. -

+

{t("page-what-is-ethereum-bitcoin-intro-1")}

- They both let you send money without a bank, both run on - blockchain technology, and both are open to anyone. But - that's where the similarities end. + {t.rich("page-what-is-ethereum-bitcoin-intro-2", { + strong: Strong, + })}

- Bitcoin is like digital gold. + {t("page-what-is-ethereum-bitcoin-comparison-1-title")}

-

- It has a fixed supply of 21 million coins, a narrow focus on - peer-to-peer payments, and a basic scripting language that - limits what you can build with it. This simplicity is by - design since Bitcoin prioritizes predictability, durability, - and long-term security over flexibility. -

+

{t("page-what-is-ethereum-bitcoin-comparison-1-desc")}

- Ethereum takes a broader approach. + {t("page-what-is-ethereum-bitcoin-comparison-2-title")}

-

- It's not just money, it's programmable - infrastructure. Instead of just sending and receiving value, - Ethereum lets developers build entire applications. - You've already seen this in action: from lending markets - and stablecoins to collectibles, social media, and real-time - payments — all powered by smart contracts and secured by ETH. -

+

{t("page-what-is-ethereum-bitcoin-comparison-2-desc")}

- The way the networks reach consensus is also different. + {t("page-what-is-ethereum-bitcoin-comparison-3-title")}

- Bitcoin uses miners to secure the network. These are - powerful computers that compete to solve complex puzzle, and - the winner gets to add the next block of transactions to the - chain and claim bitcoins as a reward. This process is called - mining and it uses large amounts of electricity. + {t("page-what-is-ethereum-bitcoin-comparison-3-desc-1")}

- Ethereum used to work like this too. But in 2022, it - transitioned from proof of work to proof of stake. Today, - transactions are confirmed by validators who lock up ETH as - collateral. Honest validators earn ETH rewards while any - dishonest ones lose part of their stake. This shift made - Ethereum over 99.988% more energy efficient without - sacrificing security or decentralization. + {t("page-what-is-ethereum-bitcoin-comparison-3-desc-2")}

- There's also a difference in how supply is handled. + {t("page-what-is-ethereum-bitcoin-comparison-4-title")}

- Bitcoin has a fixed supply. There will only ever be 21 - million coins. Ethereum, on the other hand, has a dynamic - supply. New ETH is issued to reward validators, while a - portion is burned with every transaction. This means{" "} - - Ethereum can't just “print infinite ETH.” - + {t.rich( + "page-what-is-ethereum-bitcoin-comparison-4-desc-1", + { strong: Strong } + )}

- The issuance rate is limited by how much ETH is staked. As - more ETH is staked, individual rewards decrease, creating a - natural balance. This design ensures a sustainable security - budget well into the future, without relying solely on - transaction fees. + {t("page-what-is-ethereum-bitcoin-comparison-4-desc-2")}

- In short, Bitcoin is a tool for sending value. Ethereum is a - platform for building it. + {t("page-what-is-ethereum-bitcoin-comparison-4-desc-3")}

- Learn more about the difference between Ethereum and Bitcoin + {t("page-what-is-ethereum-bitcoin-learn-more")}
@@ -964,7 +915,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
@@ -975,115 +926,108 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
-

- From the start, Ethereum was designed to run by its - community. -

-

- In 2013, Vitalik Buterin published a white paper proposing a - new kind of blockchain for money and apps anyone could use. - The idea quickly gained traction. -

-

- By 2014, co-founders like Gavin Wood and Joseph Lubin joined - the effort, and the team raised funds through one of the - earliest crypto crowdfunding campaigns. -

-

Ethereum officially launched in July 2015.

+

{t("page-what-is-ethereum-when-who-intro-1")}

+

{t("page-what-is-ethereum-when-who-intro-2")}

+

{t("page-what-is-ethereum-when-who-intro-3")}

+

{t("page-what-is-ethereum-when-who-intro-4")}

- Key moments in Ethereum's history + {t("page-what-is-ethereum-when-who-history-title")}

2013:{" "} - 19-year-old Vitalik Buterin publishes the Ethereum - whitepaper + {t("page-what-is-ethereum-when-who-history-2013")} 2014:{" "} - The Ethereum Foundation forms and launches a crowdfunding - campaign + {t("page-what-is-ethereum-when-who-history-2014")} 2015:{" "} - Developers launch the Ethereum network with the{" "} - Frontier release + {t.rich("page-what-is-ethereum-when-who-history-2015", { + em: Emphasis, + })} 2016:{" "} - Smart contract exploit drains $60M (3.6M ETH) from The DAO - prompting a chain fork + {t("page-what-is-ethereum-when-who-history-2016")}{" "} 2020:{" "} - Beacon Chain launch starts the move to Proof-of-Stake + {t("page-what-is-ethereum-when-who-history-2020")}{" "} 2021:{" "} - London upgrade starts burning gas fees via - EIP-1559 + {t.rich("page-what-is-ethereum-when-who-history-2021", { + em: Emphasis, + })}{" "} 2022:{" "} - The Merge replaces mining with staking, cutting - energy use by 99% + {t.rich("page-what-is-ethereum-when-who-history-2022", { + em: Emphasis, + })}{" "} 2025:{" "} - Pectra upgrade improves smart wallet support and - L2 compatibility + {t.rich("page-what-is-ethereum-when-who-history-2025", { + em: Emphasis, + })}{" "} -

Today, no single person or company runs Ethereum.

+

{t("page-what-is-ethereum-when-who-governance-1")}

Doge smiling at the computer

- The network is maintained by a broad group of contributors: + {t("page-what-is-ethereum-when-who-contributors-title")}

- Developers who write and propose upgrades + {t("page-what-is-ethereum-when-who-contributors-1")} - Node operators contributing to distributed physical - infrastructure + {t("page-what-is-ethereum-when-who-contributors-2")} - Stakers who validate transactions - Community members who build the tools and culture + {" "} + {t("page-what-is-ethereum-when-who-contributors-3")} - You by using the network + {t("page-what-is-ethereum-when-who-contributors-4")} + + + {t.rich("page-what-is-ethereum-when-who-contributors-5", { + strong: Strong, + })}

- - There's no CEO, board, or central authority. - {" "} - The Ethereum Foundation still helps fund research and - development, but the ecosystem runs on open participation. -

-

- Changes are proposed through{" "} - Ethereum Improvement Proposals (EIPs), discussed - publicly, and only adopted{" "} - if the wider community supports them. + {t.rich("page-what-is-ethereum-when-who-governance-2", { + strong: Strong, + })}

- This makes Ethereum slower to change than a startup, but - also much harder to shut down or take over. + {t.rich("page-what-is-ethereum-when-who-governance-3", { + a: (chunks) => ( + {chunks} + ), + p: (chunks) => ( + {chunks} + ), + })}

+

{t("page-what-is-ethereum-when-who-governance-4")}

- Learn more about Ethereum's history + {t("page-what-is-ethereum-when-who-learn-more")}
@@ -1095,74 +1039,71 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
+

{t("page-what-is-ethereum-roadmap-intro-1")}

+

{t("page-what-is-ethereum-roadmap-intro-2")}

- Ethereum doesn't follow a fixed roadmap. It follows a - shared vision. -

-

- Network upgrades are made as EIP proposals and developed in - public by contributors around the world. There's no - central team deciding what happens, just people building what - they believe is useful based on users' needs. + {t.rich("page-what-is-ethereum-roadmap-intro-3", { + a: (chunks) => ( + {chunks} + ), + })}

- Pectra is the most recent upgrade launched in May 2025. - This upgrade improved wallet features, gave stakers more - flexibility, and made it easier for dapps to run on L2s. The - goal was to improve usability without compromising on security - or decentralization. -

- -

- Looking ahead, Ethereum's - priorities include: + {t.rich("page-what-is-ethereum-roadmap-priorities-intro", { + a: (chunks) => ( + + {chunks} + + ), + })}

- Making the core protocol and its L2s faster and cheaper for - everyone + {t("page-what-is-ethereum-roadmap-priority-1")} - Improving the experience for users and developers + {t("page-what-is-ethereum-roadmap-priority-2")} +

{t("page-what-is-ethereum-roadmap-outro-1")}

- These priorities will helps ensure Ethereum is secure, - scalable and user friendly as more people rely on the network - everyday. -

-

- If you want to steer the direction for Ethereum,{" "} - get involved. You don't need permission, just the - desire to make a difference in this new digital economy. + {t.rich("page-what-is-ethereum-roadmap-outro-2", { + a: (chunks) => {chunks}, + })}

- See an overview of the Ethereum roadmap + {t("page-what-is-ethereum-roadmap-learn-more")}

- Read next + {t("page-what-is-ethereum-further-reading-title")}

- What are wallets? + + {t("page-what-is-ethereum-further-reading-wallets")} + - What is ether (ETH)? + + {t("page-what-is-ethereum-further-reading-eth")} + - What is web3? + + {t("page-what-is-ethereum-further-reading-web3")} + - Learn more about the Ethereum network + {t("page-what-is-ethereum-further-reading-networks")} diff --git a/src/intl/en/page-what-is-ethereum.json b/src/intl/en/page-what-is-ethereum.json index be581d05601..52bd1f02ef2 100644 --- a/src/intl/en/page-what-is-ethereum.json +++ b/src/intl/en/page-what-is-ethereum.json @@ -1,128 +1,187 @@ { - "page-what-is-ethereum-alt-img-bazaar": "Illustration of a person peering into a bazaar, meant to represent Ethereum", - "page-what-is-ethereum-alt-img-comm": "An illustration of Ethereum community members working together", - "page-what-is-ethereum-alt-img-lego": "An illustration of a hand creating an ETH logo made of lego bricks", - "page-what-is-ethereum-banking-card": "Banking for everyone", - "page-what-is-ethereum-banking-card-desc": "Not everyone has access to financial services. An internet connection is all you need to access Ethereum and the lending, borrowing and savings products built on it.", - "page-what-is-ethereum-build": "Make something with Ethereum", - "page-what-is-ethereum-build-desc": "If you want to try building with Ethereum, read our docs, try some tutorials, or check out the tools you need to get started.", - "page-what-is-ethereum-censorless-card": "Censorship-resistant", - "page-what-is-ethereum-censorless-card-desc": "No government or company has control over Ethereum. Decentralization makes it nearly impossible for anyone to stop you from receiving payments or using services on Ethereum.", - "page-what-is-ethereum-comm-desc": "Our community includes people from all backgrounds, including artists, crypto-anarchists, fortune 500 companies, and now you. Find out how you can get involved today.", - "page-what-is-ethereum-commerce-card": "Commerce guarantees", - "page-what-is-ethereum-commerce-card-desc": "Customers have a secure, built-in guarantee that funds will only change hands if you provide what was agreed. Likewise, developers can have certainty that the rules won't change on them.", - "page-what-is-ethereum-composable-card": "Composable products", - "page-what-is-ethereum-composable-card-desc": "All apps are built on the same blockchain with a shared global state, meaning they can build off each other (like Lego bricks). This allows for better products and experiences and assurances that no-one can remove any tools apps rely upon.", - "page-what-is-ethereum-community": "The Ethereum community", - "page-what-is-ethereum-desc": "The foundation for our digital future", - "page-what-is-ethereum-explore": "Explore Ethereum", - "page-what-is-ethereum-internet-card": "An open internet", - "page-what-is-ethereum-internet-card-desc": "Anyone can interact with Ethereum network or build applications on it. This allows you to control your own assets and identity, instead of them being controlled by a few mega-corporations.", - "page-what-is-ethereum-meet-comm": "Meet the community", - "page-what-is-ethereum-meta-description": "Learn about Ethereum, what it does and how to try it for yourself.", "page-what-is-ethereum-meta-title": "What is Ethereum?", - "page-what-is-ethereum-p2p-card": "A peer-to-peer network", - "page-what-is-ethereum-p2p-card-desc": "Ethereum allows you to coordinate, make agreements or transfer digital assets directly with other people. You don't need to rely on intermediaries.", - "page-what-is-ethereum-start-building-btn": "Start building", + "page-what-is-ethereum-meta-description": "Ethereum is a decentralized blockchain network and software development platform, powered by the cryptocurrency ether (ETH). It's home to thousands of cryptocurrencies and applications across DeFi, NFTs, gaming, decentralized social media and stablecoins.", "page-what-is-ethereum-title": "What is Ethereum?", - "page-what-is-ethereum-subtitle": "A complete beginner's guide to how Ethereum works, the benefits it brings and how it's being used by millions of people around the world.", - "page-what-is-ethereum-button-lets-start": "Let's start", - "page-what-is-ethereum-blockchain-tab-title": "What is a blockchain?", - "page-what-is-ethereum-blockchain-tab-content": "A blockchain is a database of transactions that is updated and shared across many computers in a network. Every time a new set of transactions is added, its called a “block” - hence the name blockchain. Public blockchains like Ethereum allow anyone to add, but not remove, data. If someone wanted to alter any of the information or cheat the system, they’d need to do so on the majority of computers on the network. That is a lot! This makes decentralized blockchains like Ethereum highly secure.", - "page-what-is-ethereum-cryptocurrency-tab-title": "What is a cryptocurrency?", - "page-what-is-ethereum-cryptocurrency-tab-content-1": "Cryptocurrency is a term used to describe many types of fungible digital tokens secured using a blockchain. It all started with Bitcoin. Bitcoin can be used to transfer value between two parties without having to trust a middleman. You only have to trust the Bitcoin code, which is all open and freely available.", - "page-what-is-ethereum-cryptocurrency-tab-content-2": "The reason assets such as bitcoin and ether are called “cryptocurrencies” is that the security of your data and assets is guaranteed by cryptography, not by trusting an institution or corporation to act honestly.", - "page-what-is-ethereum-cryptocurrency-tab-content-3": "Ethereum has its own native cryptocurrency, ether (ETH), which is used to pay for certain activities on the network. It can be transferred to other users or swapped for other tokens on Ethereum. Ether is special because it is used to pay for the computation required to build and run apps and organizations on Ethereum.", - "page-what-is-ethereum-summary-title": "Summary", - "page-what-is-ethereum-summary-desc-1": "Ethereum is the main platform for thousands of apps and blockchains, all powered by the Ethereum protocol.", - "page-what-is-ethereum-summary-desc-2": "This vibrant ecosystem fuels innovation and a wide range of decentralized apps and services.", - "page-what-is-ethereum-summary-bullet-1": "Free and global Ethereum accounts", - "page-what-is-ethereum-summary-bullet-2": "Pseudo-private, no personal information needed", - "page-what-is-ethereum-summary-bullet-3": "Without restrictions anyone can participate", - "page-what-is-ethereum-summary-bullet-4": "No company owns Ethereum or decides its future", - "page-what-is-ethereum-btc-eth-diff-title": "What is the difference between Ethereum and Bitcoin?", - "page-what-is-ethereum-btc-eth-diff-1": "Launched in 2015, Ethereum builds on Bitcoin's innovation, with some big differences.", - "page-what-is-ethereum-btc-eth-diff-2": "Both let you use digital money without payment providers or banks. But Ethereum is programmable, so you can also build and deploy decentralized applications on its network.", - "page-what-is-ethereum-btc-eth-diff-3": "Bitcoin enables us to send basic messages to one another about what we think is valuable. Establishing value without authority is already powerful. Ethereum extends this: rather than just messages, you can write any general program, or contract. There is no limit to the kind of contracts which can be created and agreed upon, hence great innovation happens on the Ethereum network.", - "page-what-is-ethereum-btc-eth-diff-4": "While Bitcoin is only a payment network, Ethereum is more like a marketplace of financial services, games, social networks and other apps.", - "page-what-is-ethereum-what-can-eth-do-title": "What can Ethereum do?", - "page-what-is-ethereum-why-would-i-use-ethereum-title": "Why would I use Ethereum?", - "page-what-is-ethereum-why-would-i-use-ethereum-1": "If you're interested in more resilient, open, and trustworthy ways to coordinate globally, create organizations, build apps and share value, Ethereum is for you. Ethereum is a story that is written by all of us, so come and discover what incredible worlds we can build with it together.", - "page-what-is-ethereum-why-would-i-use-ethereum-2": "Ethereum has also been invaluable for people who have had to handle uncertainty around the security or soundness or mobility of their assets due to external forces outside of their control.", - "page-what-is-ethereum-slide-1-title": "Cheaper and Faster Crossborder Payments", - "page-what-is-ethereum-slide-1-desc-1": "Stablecoins are a novel type of cryptocurrency that relies on a more stable asset as the basis for its value. Most of them are linked to the United States dollar and therefore maintain the value of that currency. These allow for a very cheap and stable global payment system. Many current stablecoins are built on the Ethereum network.", - "page-what-is-ethereum-slide-1-desc-2": "Ethereum and stablecoins simplify the process of sending money overseas. It often takes only few minutes to move funds across the globe, as opposed to the several business days or even weeks that it may take your average bank, and for a fraction of the price. Additionally, there is no extra fee for making a high value transaction, and there are zero restrictions on where or why you are sending your money.", - "page-what-is-ethereum-slide-2-title": "The Quickest Help in Times of Crisis", - "page-what-is-ethereum-slide-2-desc-1": "If you are lucky enough to have multiple banking options through trusted institutions where you live, you may take for granted the financial freedom, security and stability that they offer. But for many people around the world facing political repression or economic hardship, financial institutions may not provide the protection or services they need.", - "page-what-is-ethereum-slide-2-desc-2": "When war, economic catastrophes or crackdowns on civil liberties struck the residents of Venezuela, Cuba, Afghanistan, Nigeria, Belarus, and Ukraine, cryptocurrencies constituted the quickest and often the only option to retain financial agency.1 As seen in these examples, cryptocurrencies like Ethereum can provide unfettered access to the global economy when people are cut off from the outside world. Additionally, stablecoins offer a store of value when local currencies are collapsing due to hyperinflation.", - "page-what-is-ethereum-slide-3-title": "Empowering Creators", - "page-what-is-ethereum-slide-3-desc-1": "In 2021 alone, artists, musicians, writers, and other creators used Ethereum to earn around $3.5 billion collectively. This makes Ethereum one of the largest global platforms for creators, alongside Spotify, YouTube, and Etsy. Learn more.", - "page-what-is-ethereum-slide-4-title": "Empowering Gamers", - "page-what-is-ethereum-slide-4-desc-1": "Play to earn games (where players are actually rewarded for playing the games) have recently emerged and are transforming the gaming industry. Traditionally, it is often prohibited to trade or transfer in-game assets to other players for real money. This forces players to use black market websites that are often a security risk. Blockchain gaming embraces the in-game economy and promotes such behavior in a trusted manner.", - "page-what-is-ethereum-slide-4-desc-2": "Moreover, players are incentivized by being able to trade in-game tokens for real money and thus being truly rewarded for their play time.", - "page-what-is-ethereum-meet-ether-title": "Meet ether, Ethereum's cryptocurrency", - "page-what-is-ethereum-meet-ether-desc-1": "Many actions on the Ethereum network require some work to be done on Ethereum's embedded computer (known as the Ethereum Virtual Machine). This computation is not free; it is paid for using Ethereum's native cryptocurrency called ether (ETH). This means you need at least a small amount of ether to use the network.", - "page-what-is-ethereum-meet-ether-desc-2": "Ether is purely digital, and you can send it to anyone anywhere in the world instantly. The supply of ether isn’t controlled by any government or company - it is decentralized and completely transparent. Ether is issued in a precise manner according to the protocol, only to stakers who secure the network.", - "page-what-is-ethereum-what-is-ether": "What is ether?", - "page-what-is-ethereum-get-eth": "Get ETH", - "page-what-is-ethereum-explore-applications": "Explore applications", - "page-what-is-ethereum-learn-defi": "Learn about DeFi", - "page-what-is-ethereum-who-runs-ethereum-title": "Who runs Ethereum?", - "page-what-is-ethereum-who-runs-ethereum-desc-1": "Ethereum is not controlled by any particular entity. It exists whenever there are connected computers running software following the Ethereum protocol and adding to the Ethereum blockchain. Each of these computers is known as a node. Nodes can be run by anyone, although to participate in securing the network you have to stake ETH (Ethereum’s native token). Anyone with 32 ETH can do this without needing permission.", - "page-what-is-ethereum-who-runs-ethereum-desc-2": "Even the Ethereum source code is not produced by a single entity. Anyone can suggest changes to the protocol and discuss upgrades. There are several implementations of the Ethereum protocol that are produced by independent organizations in several programming languages, and they are usually built in the open and encourage community contributions.", - "page-what-is-ethereum-run-a-node": "Run a node", - "page-what-is-ethereum-smart-contract-title": "What are smart contracts?", - "page-what-is-ethereum-smart-contract-desc-1": "Smart contracts are computer programs living on the Ethereum blockchain. They execute when triggered by a transaction from a user. They make Ethereum very flexible in what it can do. These programs act as building blocks for decentralized apps and organizations.", - "page-what-is-ethereum-smart-contract-desc-2": "Have you ever used a product that changed its terms of service? Or removed a feature you found useful? Once a smart contract is published to Ethereum, it will be online and operational for as long as Ethereum exists. Not even the author can take it down. Since smart contracts are automated, they do not discriminate against any user and are always ready to use.", - "page-what-is-ethereum-smart-contract-desc-3": "Popular examples of smart contracts are lending apps, decentralized trading exchanges, insurance, quadratic funding, social networks, NFTs - basically anything you can think of.", - "page-what-is-ethereum-more-on-smart-contracts": "More on smart contracts", - "page-what-is-ethereum-explore-dapps": "Explore dapps", - "page-what-is-ethereum-criminal-activity-title": "I heard crypto is being used as a tool for criminal activity. Is this true?", - "page-what-is-ethereum-criminal-activity-desc-1": "Like any technology, it will sometimes be misused. However, because all Ethereum transactions happen on an open blockchain, it’s often easier for authorities to track illicit activity than it would be in the traditional financial system, arguably making Ethereum a less appealing choice for those who would rather go undetected.", - "page-what-is-ethereum-criminal-activity-desc-2": "Crypto is used much less than fiat currencies for criminal purposes according to the key findings of a recent report by Europol, the European Union Agency for Law Enforcement Cooperation:", - "page-what-is-ethereum-criminal-activity-desc-3": "“The use of cryptocurrencies for illicit activities seems to comprise only a small part of the overall cryptocurrency economy, and it appears to be comparatively smaller than the amount of illicit funds involved in traditional finance.”", - "page-what-is-ethereum-energy-title": "What about Ethereum's energy consumption?", - "page-what-is-ethereum-energy-desc-1": "On September 15, 2022, Ethereum went through The Merge upgrade which transitioned Ethereum from proof-of-work to proof-of-stake.", - "page-what-is-ethereum-energy-desc-2": "The Merge was Ethereum's biggest upgrade and reduced the energy consumption required to secure Ethereum by 99.95%, creating a more secure network for a much smaller carbon cost. Ethereum is now a low-carbon blockchain while boosting its security and scalability.", - "page-what-is-ethereum-more-on-energy-consumption": "More on energy consumption", - "page-what-is-ethereum-energy-consumption-chart-legend": "Annual Energy Consumption in TWh/yr", - "energy-consumption-chart-global-data-centers-label": "Global data centers", - "energy-consumption-gold-mining-cbeci-label": "Gold mining", - "energy-consumption-chart-btc-pow-label": "BTC PoW", - "energy-consumption-chart-netflix-label": "Netflix", - "energy-consumption-chart-eth-pow-label": "ETH PoW", - "energy-consumption-chart-gaming-us-label": "Gaming in the US", - "energy-consumption-chart-airbnb-label": "AirBnB", - "energy-consumption-chart-paypal-label": "PayPal", - "energy-consumption-chart-eth-pos-label": "ETH PoS", - "page-what-is-ethereum-the-merge-update": "The Merge update", - "page-what-is-ethereum-additional-reading": "Further reading", - "page-what-is-ethereum-week-in-ethereum": "Week in Ethereum News", - "page-what-is-ethereum-week-in-ethereum-desc": "- A weekly newsletter covering key developments across the ecosystem.", - "page-what-is-ethereum-kernel-dreamers": "Kernel", - "page-what-is-ethereum-kernel-dreamers-desc": "Ethereum's Dream", - "page-what-is-ethereum-atoms-institutions-blockchains": "Atoms, Institutions, Blockchains", - "page-what-is-ethereum-atoms-institutions-blockchains-desc": "- Why blockchains matter?", - "page-what-is-ethereum-ethereum-in-numbers-title": "Ethereum in numbers", - "page-what-is-ethereum-ethereum-in-numbers-stat-1-desc": "Projects build on Ethereum", - "page-what-is-ethereum-ethereum-in-numbers-stat-2-desc": "Accounts (wallets) with an ETH balance", - "page-what-is-ethereum-ethereum-in-numbers-stat-3-desc": "Smart contracts on Ethereum", - "page-what-is-ethereum-ethereum-in-numbers-stat-4-desc": "Value secured on Ethereum", - "page-what-is-ethereum-ethereum-in-numbers-stat-5-desc": "Creator earnings on Ethereum in 2021", - "page-what-is-ethereum-ethereum-in-numbers-stat-6-desc": "Number of transactions today", - "adoption-chart-column-now-label": "Now", - "adoption-chart-investors-label": "Investors", - "adoption-chart-developers-label": "Developers", - "adoption-chart-companies-label": "Companies", - "adoption-chart-artists-label": "Artists", - "adoption-chart-musicians-label": "Musicians", - "adoption-chart-writers-label": "Writers", - "adoption-chart-gamers-label": "Gamers", - "adoption-chart-refugees-label": "Refugees", - "page-what-is-ethereum-get-eth-alt": "Get some ETH", - "page-what-is-ethereum-get-eth-description": "ETH is the native currency of Ethereum. You'll need some ETH in your wallet to use Ethereum applications.", - "page-what-is-ethereum-get-eth-title": "Get some ETH", - "page-what-is-ethereum-explore-dapps-alt": "Explore dapps", - "page-what-is-ethereum-explore-dapps-description": "Dapps are applications built on Ethereum. Dapps are disrupting current business models and inventing new ones.", - "page-what-is-ethereum-explore-dapps-title": "Try some dapps" + "page-what-is-ethereum-hero-description-1": "Ethereum is a decentralized blockchain network and software development platform, powered by the cryptocurrency ether (ETH).", + "page-what-is-ethereum-hero-description-2": "It's home to thousands of cryptocurrencies and applications across DeFi, NFTs, gaming, decentralized social media and stablecoins.", + "page-what-is-ethereum-ethereum-intro-1": "Ethereum is an open, public blockchain launched in July 2015 by a software developer called Vitalik Buterin and a small team of co-founders.", + "page-what-is-ethereum-ethereum-intro-2": "The idea behind Ethereum was simple. While Bitcoin let you send and receive digital cash, Ethereum would build on this with open-source programs called smart contracts.", + "page-what-is-ethereum-ethereum-intro-3": "Smart contracts let anyone create their own digital assets and decentralized applications (dapps) that run 24/7, globally. And unlike banks, corporations or other institutions, smart contracts are available to anyone with an internet connection.", + "page-what-is-ethereum-ethereum-intro-4": "Since 2015, Ethereum has grown into a thriving ecosystem of digital assets like stablecoins, non-fungible tokens (NFTs), and governance tokens, as well as a sprawling world of dapps for decentralized finance (DeFi), art and collectibles, gaming and decentralized social media.", + "page-what-is-ethereum-ethereum-intro-5": "Collectively, this ecosystem is called \"web3\", representing the third phase of the internet centered around ownership.", + "page-what-is-ethereum-ethereum-intro-6": "Today, Ethereum is used by millions of people around the world

holding billions of dollars

in assets who send and receive trillions of dollars every year—all without a bank.", + "page-what-is-ethereum-ethereum-intro-7": "At the heart of all this is Ethereum's native cryptocurrency ether (ETH), a new kind of digital money used to power the whole network.", + "page-what-is-ethereum-network-title": "What is the Ethereum network?", + "page-what-is-ethereum-network-intro-1": "You can think of the ethereum network as a global digital infrastructure that anyone can use but nobody can abuse.", + "page-what-is-ethereum-network-intro-2": "The network is made up of thousands of independent computers around the world called nodes. These nodes, run by regular people, work together to provide financial services and digital applications to anyone, anywhere.", + "page-what-is-ethereum-network-intro-3": "The Ethereum network has 3 key advantages over traditional networks owned by institutions. These are censorship resistance, enhanced security and improved reliability.", + "page-what-is-ethereum-network-censorship-title": "Censorship resistant", + "page-what-is-ethereum-network-censorship-desc-1": "While traditional apps and financial services rely on banks or corporations that can decide to block access or freeze accounts, dapps on Ethereum are censorship resistant.", + "page-what-is-ethereum-network-censorship-desc-2": "This is because ethereum's network of nodes record every single transaction without discrimination—and this rule is embedded in the code.", + "page-what-is-ethereum-network-security-title": "Highly secure", + "page-what-is-ethereum-network-security-desc-1": "While many apps today are hosted on cloud providers like AWS and can be vulnerable to takedowns and attacks, dapps on Ethereum are secured by the network itself. Every node stores and syncs the entire state of Ethereum, including all contracts.", + "page-what-is-ethereum-network-security-desc-2": "If someone tried to change a contract, the network would reject it since it wouldn't match their records. To take down a single app, attackers need to take over the entire network, which would costs billions and be extremely hard to coordinate.", + "page-what-is-ethereum-network-reliability-title": "Durable and reliable", + "page-what-is-ethereum-network-reliability-desc-1": "Downtime on cloud hosting platforms can take apps offline, but Ethereum's design ensures perfect uptime. The network will keep running even if some nodes go offline due to software bugs, government crackdowns, natural disaster, or war.", + "page-what-is-ethereum-network-reliability-desc-2": "Millions of people use thousands of dapps on Ethereum every day. While high demand can lead to elevated transaction fees, it reflects the strength of a network that prioritizes security, decentralization, and the guarantee that it's always available when you need it.", + "page-what-is-ethereum-network-layer2-title": "Ethereum extensions (Layer 2)", + "page-what-is-ethereum-network-layer2-desc-1": "Different teams have created Layer 2 (L2) networks that run on top of Ethereum to increase Ethereum's capacity. L2s act like express lanes, making transactions faster and cheaper—sometimes costing less than a cent on average.", + "page-what-is-ethereum-network-layer2-desc-2": "Some of the most popular L2s including Optimism,

Arbitrum

, ZKSync, and
Base
now process millions of transactions worth billions of dollars each year.", + "page-what-is-ethereum-network-learn-more": "Learn more about the Ethereum network", + "page-what-is-ethereum-ether-title": "What is ether (ETH)?", + "page-what-is-ethereum-ether-intro-1": "Ether (ETH) is the native cryptocurrency of Ethereum.", + "page-what-is-ethereum-ether-intro-2": "It's a new kind of digital money you can send to anyone, anywhere in the world in seconds for as little as a few cents. But ETH is about more than just payments. It plays a vital role in keeping the Ethereum network running.", + "page-what-is-ethereum-ether-intro-3": "When you use Ethereum to send money, collect art or build a new dapp, you pay a small transaction fee (or gas fee) in ETH. This fee helps prevent spam and rewards the people called validators who process transactions.", + "page-what-is-ethereum-ether-intro-4": "These validators help secure the ethereum network through a system called staking. By locking up their ETH they're eligible to process transactions. In return, they earn ETH as a reward. This gives Ethereum its own self-sustaining economy, powered by users rather than companies.", + "page-what-is-ethereum-ether-intro-5": "Unlike many traditional currencies, ETH can become more scarce over time. Every time someone uses Ethereum, a small portion of ETH is burned, which permanently removes it from the supply. On busy days, more ETH is burned than created, making ETH deflationary and increasing its value over time. The more Ethereum is used, the more ETH is burned.", + "page-what-is-ethereum-ether-intro-6": "Because of this, many people see ETH as an investment and choose to hold, stake or lend it to grow their savings.", + "page-what-is-ethereum-ether-learn-more": "Learn more about ether (ETH)", + "page-what-is-ethereum-how-title": "How does Ethereum work?", + "page-what-is-ethereum-how-intro-1": "When Ethereum launched in 2015, it used a system called proof of work.", + "page-what-is-ethereum-how-intro-2": "This mechanism pioneered by Bitcoin, is how all computers agreed on who owns what. Computers would use a lot of energy trying to solve a complex mathematical puzzle. The winner would get to propose a block of incoming transactions and earn new ETH.", + "page-what-is-ethereum-how-intro-3": "In 2022, Ethereum upgraded to a new system called proof of stake that's 99% more energy efficient. Instead of mathematical puzzles, validators lock their ETH as a security deposit to earn the right to process transactions.", + "page-what-is-ethereum-how-intro-4": "If they do it correctly, they earn ETH. If they cheat, they lose some of their stake.", + "page-what-is-ethereum-how-intro-5": "Here's an example:", + "page-what-is-ethereum-how-example-1-title": "When you send $10 in stablecoins to a friend on Ethereum:", + "page-what-is-ethereum-how-example-1-step-1": "You open your wallet, add the account address and the amount, then click send.", + "page-what-is-ethereum-how-example-1-step-2": "Your wallet signs the payment and broadcasts it to the network.", + "page-what-is-ethereum-how-example-1-step-3": "The payment waits in the public queue (mempool) until a block proposer picks it.", + "page-what-is-ethereum-how-example-1-step-4": "The block proposer adds it to the next block of transactions, broadcasts it, and earns a fee.", + "page-what-is-ethereum-how-example-1-step-5": "The stablecoin contract moves $10 from you to your friend, and both wallets update.", + "page-what-is-ethereum-how-example-1-step-6": "A global network of validators double-check and attest to the validity of the changes.", + "page-what-is-ethereum-how-example-2-title": "When you mint a $5 collectible on Ethereum:", + "page-what-is-ethereum-how-example-2-step-1": "You connect your wallet to the dapp and choose the item to mint.", + "page-what-is-ethereum-how-example-2-step-2": "You confirm the purchase; the wallet signs and broadcasts the transaction.", + "page-what-is-ethereum-how-example-2-step-3": "The mint request joins the mempool and is added to a block by a validator.", + "page-what-is-ethereum-how-example-2-step-4": "The NFT smart contract records your wallet as the new owner.", + "page-what-is-ethereum-how-example-2-step-5": "Your new collectible appears in your wallet a few seconds later.", + "page-what-is-ethereum-how-outro-1": "This is all possible thanks to the power of smart contracts; open-source programs that live on Ethereum and run 24/7, 365 accessible to anyone, anywhere.", + "page-what-is-ethereum-how-outro-2": "Every transaction, update, and action is synced across thousands of independent nodes. This gives Ethereum its reliability, transparency, and censorship resistance.", + "page-what-is-ethereum-how-learn-more-1": "Learn more about how Ethereum works", + "page-what-is-ethereum-how-learn-more-2": "Read developer docs for a technical overview of Ethereum", + "page-what-is-ethereum-what-title": "What is Ethereum used for?", + "page-what-is-ethereum-what-intro-1": "People use Ethereum to do things that weren't possible before.", + "page-what-is-ethereum-what-intro-2": "Farmers in Kenya can receive automated insurance on their crops without applying to a bank. Businesses like Visa can launch

new payment systems that works globally

from day one. Global organizations like the UN can deliver aid to refugees saving millions in bank fees.", + "page-what-is-ethereum-what-intro-3": "These dapps and assets run on Ethereum using open-source code and can't be restricted, censored or turned off.", + "page-what-is-ethereum-what-intro-4": "Here's how different groups are using it today:", + "page-what-is-ethereum-what-consumers-title": "Consumers", + "page-what-is-ethereum-what-consumers-desc-1": "Millions of people already use dapps on Ethereum to move money, trade, and own digital assets every day. Unlike traditional apps, there's no need to register with your name, wait for a bank to approve you, or hand over your personal data.", + "page-what-is-ethereum-what-consumers-desc-2": "With just a wallet and an internet connection you can:", + "page-what-is-ethereum-what-consumers-benefit-1": "Access financial services without a bank account or credit history", + "page-what-is-ethereum-what-consumers-benefit-2": "Own digital collectibles, art, and assets that can't be copied or confiscated", + "page-what-is-ethereum-what-consumers-benefit-3": "Sign into dapps using your wallet, not your email—no passwords, no personal information necessary", + "page-what-is-ethereum-what-consumers-benefit-4": "Participate in global communities where you can vote, contribute, and earn borderlessly", + "page-what-is-ethereum-what-businesses-title": "Businesses & developers", + "page-what-is-ethereum-what-businesses-benefit-1": "Launch dapps with built-in global payments system from day one", + "page-what-is-ethereum-what-businesses-benefit-2": "Deploy tamper-proof contracts that automatically enforce agreements", + "page-what-is-ethereum-what-businesses-benefit-3": "Create financial products that anyone can build on and drive value to", + "page-what-is-ethereum-what-businesses-example": "For example, PayPal launched its own stablecoin, PYUSD, on Ethereum. This is a sign that even the world's largest payments companies see the benefit of Ethereum's open and programmable nature.", + "page-what-is-ethereum-what-governments-title": "Governments", + "page-what-is-ethereum-what-governments-intro": "Governments are also starting to explore what Ethereum makes possible.", + "page-what-is-ethereum-what-governments-benefit-1": "Distribute public funds and benefits directly to citizens with full transparency", + "page-what-is-ethereum-what-governments-benefit-2": "Issue digital IDs or records that are verifiable and portable across borders", + "page-what-is-ethereum-what-governments-benefit-3": "Build tamper-proof public infrastructure for voting, land titles, and registries", + "page-what-is-ethereum-what-governments-example-1": "In another case, Ukraine's Ministry of Digital Transformation used Ethereum to distribute wartime aid.", + "page-what-is-ethereum-what-governments-example-2": "Funds were sent directly to citizens and NGOs using open smart contracts, providing transparency, speed, and accountability during a crisis.", + "page-what-is-ethereum-what-learn-more": "Learn more about what Ethereum is used for", + "page-what-is-ethereum-start-title": "How to start using Ethereum", + "page-what-is-ethereum-start-intro-1": "Getting started with Ethereum is easier than you might think.", + "page-what-is-ethereum-start-intro-2": "You don't need permission. You don't need a bank or even an ID document. All you need to get started is a device and an internet connection.", + "page-what-is-ethereum-start-individuals-title": "For individuals", + "page-what-is-ethereum-start-individuals-desc-1": "The first step is downloading a wallet.", + "page-what-is-ethereum-start-individuals-desc-2": "Think of it like an app that acts as both your account and your internet browser for Ethereum. It manages your crypto, lets you sign in to dapps, as well as send and receive digital assets like tokens and NFTs.", + "page-what-is-ethereum-start-individuals-desc-3": "Popular wallets like Zerion,

Rainbow

, and Coinbase Wallet are free and easy to use. Once your wallet is set up, you can:", + "page-what-is-ethereum-start-individuals-step-1": "Buy a small amount of ETH on an exchange or directly inside some wallets", + "page-what-is-ethereum-start-individuals-step-2": "Use that ETH to pay for transactions like sending tokens or collecting NFTs", + "page-what-is-ethereum-start-individuals-step-3": "Explore dapps like Zora,

Uniswap

, or Farcaster—no new logins or approvals needed", + "page-what-is-ethereum-start-individuals-desc-4": "These priorities will helps ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", + "page-what-is-ethereum-start-individuals-desc-5": "These dapps run in your browser and work with your wallet instantly. You can start using Ethereum in minutes.", + "page-what-is-ethereum-start-individuals-cta-1": "Start here", + "page-what-is-ethereum-start-individuals-cta-2": "See apps", + "page-what-is-ethereum-start-developers-title": "For developers", + "page-what-is-ethereum-start-developers-desc-1": "Ethereum is a playground for developers. You can start building without permission, approvals, or even real money.", + "page-what-is-ethereum-start-developers-desc-2": "The Ethereum Developer Docs walk you through everything from writing your first smart contract to deploying on test networks like Sepolia.", + "page-what-is-ethereum-start-developers-desc-3": "You can build full-stack dapps with tools like Hardhat,

Foundry

, and Ethers.js, or experiment with low-code platforms like
thirdweb
or .", + "page-what-is-ethereum-start-developers-desc-4": "Everything is open-source and composable, so you can remix and build on what's already out there without asking for permission.", + "page-what-is-ethereum-start-developers-cta": "Start building on Ethereum", + "page-what-is-ethereum-start-business-title": "Use Ethereum in business", + "page-what-is-ethereum-start-business-desc-1": "Enterprises are already using Ethereum to power new infrastructure.", + "page-what-is-ethereum-start-business-desc-2": "Many enterprises are starting with L2 networks like Optimism and Base to support high-volume use cases. These networks offer lower fees, faster speeds while still benefiting from Ethereum's security and removing counterparty risk.", + "page-what-is-ethereum-start-business-desc-3": "You can:", + "page-what-is-ethereum-start-business-benefit-1": "Launch modular loyalty programs that boost retention and cut third-party costs", + "page-what-is-ethereum-start-business-benefit-2": "Tokenize assets like tickets, coupons, or certificates to reduce fraud and resale risk", + "page-what-is-ethereum-start-business-benefit-3": "Enable instant global payments to lower transaction fees and unlock new markets", + "page-what-is-ethereum-start-business-example": "For example, in 2025, Shopify launched on Base to allow consumers to spend stablecoins with millions of merchants around the globe.", + "page-what-is-ethereum-start-business-cta": "Use Ethereum in business", + "page-what-is-ethereum-bitcoin-title": "What's the difference between Ethereum and Bitcoin?", + "page-what-is-ethereum-bitcoin-intro-1": "Bitcoin and Ethereum are the two biggest cryptocurrencies in the world.", + "page-what-is-ethereum-bitcoin-intro-2": "They both let you send money without a bank, both run on blockchain technology, and both are open to anyone. But that's where the similarities end.", + "page-what-is-ethereum-bitcoin-comparison-1-title": "Bitcoin is like digital gold.", + "page-what-is-ethereum-bitcoin-comparison-1-desc": "It has a fixed supply of 21 million coins, a narrow focus on peer-to-peer payments, and a basic scripting language that limits what you can build with it. This simplicity is by design since Bitcoin prioritizes predictability, durability, and long-term security over flexibility.", + "page-what-is-ethereum-bitcoin-comparison-2-title": "Ethereum takes a broader approach.", + "page-what-is-ethereum-bitcoin-comparison-2-desc": "It's not just money, it's programmable infrastructure. Instead of just sending and receiving value, Ethereum lets developers build entire applications. You've already seen this in action: from lending markets and stablecoins to collectibles, social media, and real-time payments—all powered by smart contracts and secured by ETH.", + "page-what-is-ethereum-bitcoin-comparison-3-title": "The way the networks reach consensus is also different.", + "page-what-is-ethereum-bitcoin-comparison-3-desc-1": "Bitcoin uses miners to secure the network. These are powerful computers that compete to solve complex puzzle, and the winner gets to add the next block of transactions to the chain and claim bitcoins as a reward. This process is called mining and it uses large amounts of electricity.", + "page-what-is-ethereum-bitcoin-comparison-3-desc-2": "Ethereum used to work like this too. But in 2022, it transitioned from proof of work to proof of stake. Today, transactions are confirmed by validators who lock up ETH as collateral. Honest validators earn ETH rewards while any dishonest ones lose part of their stake. This shift made Ethereum over 99.988% more energy efficient without sacrificing security or decentralization.", + "page-what-is-ethereum-bitcoin-comparison-4-title": "There's also a difference in how supply is handled.", + "page-what-is-ethereum-bitcoin-comparison-4-desc-1": "Bitcoin has a fixed supply. There will only ever be 21 million coins. Ethereum, on the other hand, has a dynamic supply. New ETH is issued to reward validators, while a portion is burned with every transaction. This means Ethereum can't just \"print infinite ETH.\"", + "page-what-is-ethereum-bitcoin-comparison-4-desc-2": "The issuance rate is limited by how much ETH is staked. As more ETH is staked, individual rewards decrease, creating a natural balance. This design ensures a sustainable security budget well into the future, without relying solely on transaction fees.", + "page-what-is-ethereum-bitcoin-comparison-4-desc-3": "In short, Bitcoin is a tool for sending value. Ethereum is a platform for building it.", + "page-what-is-ethereum-bitcoin-learn-more": "Learn more about the difference between Ethereum and Bitcoin", + "page-what-is-ethereum-when-who-title": "When did Ethereum launch, who founded it and who runs it now?", + "page-what-is-ethereum-when-who-intro-1": "From the start, Ethereum was designed to run by its community.", + "page-what-is-ethereum-when-who-intro-2": "In 2013, Vitalik Buterin published a white paper proposing a new kind of blockchain for money and apps anyone could use. The idea quickly gained traction.", + "page-what-is-ethereum-when-who-intro-3": "By 2014, co-founders like Gavin Wood and Joseph Lubin joined the effort, and the team raised funds through one of the earliest crypto crowdfunding campaigns.", + "page-what-is-ethereum-when-who-intro-4": "Ethereum officially launched in July 2015.", + "page-what-is-ethereum-when-who-history-title": "Key moments in Ethereum's history", + "page-what-is-ethereum-when-who-history-2013": "19-year-old Vitalik Buterin publishes the Ethereum whitepaper", + "page-what-is-ethereum-when-who-history-2014": "The Ethereum Foundation forms and launches a crowdfunding campaign", + "page-what-is-ethereum-when-who-history-2015": "Developers launch the Ethereum network with the Frontier release", + "page-what-is-ethereum-when-who-history-2016": "Smart contract exploit drains $60M (3.6M ETH) from The DAO prompting a chain fork", + "page-what-is-ethereum-when-who-history-2020": "Beacon Chain launch starts the move to Proof-of-Stake", + "page-what-is-ethereum-when-who-history-2021": "London upgrade starts burning gas fees via EIP-1559", + "page-what-is-ethereum-when-who-history-2022": "The Merge replaces mining with staking, cutting energy use by 99%", + "page-what-is-ethereum-when-who-history-2025": "Pectra upgrade improves smart wallet support and L2 compatibility", + "page-what-is-ethereum-when-who-governance-1": "Today, no single person or company runs Ethereum.", + "page-what-is-ethereum-when-who-contributors-title": "The network is maintained by a broad group of contributors:", + "page-what-is-ethereum-when-who-contributors-1": "Developers who write and propose upgrades", + "page-what-is-ethereum-when-who-contributors-2": "Node operators contributing to distributed physical infrastructure", + "page-what-is-ethereum-when-who-contributors-3": "Stakers who validate transactions", + "page-what-is-ethereum-when-who-contributors-4": "Community members who build the tools and culture", + "page-what-is-ethereum-when-who-contributors-5": "You by using the network", + "page-what-is-ethereum-when-who-governance-2": "There's no CEO, board, or central authority. The Ethereum Foundation still helps fund research and development, but the ecosystem runs on open participation.", + "page-what-is-ethereum-when-who-governance-3": "Changes are proposed through Ethereum Improvement Proposals (EIPs), discussed publicly, and only adopted

if the wider community supports them

.", + "page-what-is-ethereum-when-who-governance-4": "This makes Ethereum slower to change than a startup, but also much harder to shut down or take over.", + "page-what-is-ethereum-when-who-learn-more": "Learn more about Ethereum's history", + "page-what-is-ethereum-roadmap-title": "What is the Ethereum roadmap for 2025?", + "page-what-is-ethereum-roadmap-intro-1": "Ethereum doesn't follow a fixed roadmap. It follows a shared vision.", + "page-what-is-ethereum-roadmap-intro-2": "Network upgrades are made as EIP proposals and developed in public by contributors around the world. There's no central team deciding what happens, just people building what they believe is useful based on users' needs.", + "page-what-is-ethereum-roadmap-intro-3": "Pectra is the most recent upgrade launched in May 2025. This upgrade improved wallet features, gave stakers more flexibility, and made it easier for dapps to run on L2s. The goal was to improve usability without compromising on security or decentralization.", + "page-what-is-ethereum-roadmap-priorities-intro": "Looking ahead, Ethereum's priorities include:", + "page-what-is-ethereum-roadmap-priority-1": "Making the core protocol and its L2s faster and cheaper for everyone", + "page-what-is-ethereum-roadmap-priority-2": "Improving the experience for users and developers", + "page-what-is-ethereum-roadmap-outro-1": "These priorities will helps ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", + "page-what-is-ethereum-roadmap-outro-2": "If you want to steer the direction for Ethereum, get involved. You don't need permission, just the desire to make a difference in this new digital economy.", + "page-what-is-ethereum-roadmap-learn-more": "See an overview of the Ethereum roadmap", + "page-what-is-ethereum-further-reading-title": "Read next", + "page-what-is-ethereum-further-reading-wallets": "What are wallets?", + "page-what-is-ethereum-further-reading-eth": "What is ether (ETH)?", + "page-what-is-ethereum-further-reading-web3": "What is web3?", + "page-what-is-ethereum-further-reading-networks": "Learn more about the Ethereum network", + "page-what-is-ethereum-toc-ethereum": "What is Ethereum?", + "page-what-is-ethereum-toc-network": "What is the Ethereum network?", + "page-what-is-ethereum-toc-ether": "What is ether (ETH)?", + "page-what-is-ethereum-toc-how": "How does Ethereum work?", + "page-what-is-ethereum-toc-what": "What is Ethereum used for?", + "page-what-is-ethereum-toc-start": "How to start using Ethereum", + "page-what-is-ethereum-toc-bitcoin": "What's the difference between Ethereum and Bitcoin?", + "page-what-is-ethereum-toc-when-who": "When did Ethereum launch, who founded it and who runs it now?", + "page-what-is-ethereum-toc-roadmap": "What is the Ethereum roadmap for 2025?", + "page-what-is-ethereum-banner-networks-alt": "Illustration of futuristic Ethereum community center", + "page-what-is-ethereum-banner-ether-alt": "Open hands holding ether glyph", + "page-what-is-ethereum-banner-how-alt": "Man repairing computer", + "page-what-is-ethereum-banner-contributing-alt": "Doge smiling at the computer", + "page-what-is-ethereum-banner-what-alt": "Four futuristic humans and a doge gazing into an Ethereum prism", + "page-what-is-ethereum-banner-start-alt": "Futuristic community gathering center", + "page-what-is-ethereum-banner-when-who-alt": "Two humans walking and talking" } From 253ee420a41dbb92d009c79be191c49828ac75c1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:33:21 -0700 Subject: [PATCH 23/98] fix: links, metadata strings --- app/[locale]/what-is-ethereum/page.tsx | 18 +++++++++++++++--- src/intl/en/page-what-is-ethereum.json | 4 ++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 1331a59771b..80552022216 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -220,9 +220,21 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {

{t.rich("page-what-is-ethereum-ethereum-intro-6", { - a: (chunks) => {chunks}, - p: (chunks) => {chunks}, - span: (chunks) => {chunks}, + a: (chunks) => ( + + {chunks} + + ), + p: (chunks) => ( + + {chunks} + + ), + span: (chunks) => ( + + {chunks} + + ), })}

diff --git a/src/intl/en/page-what-is-ethereum.json b/src/intl/en/page-what-is-ethereum.json index 52bd1f02ef2..19a1a4da82b 100644 --- a/src/intl/en/page-what-is-ethereum.json +++ b/src/intl/en/page-what-is-ethereum.json @@ -1,6 +1,6 @@ { - "page-what-is-ethereum-meta-title": "What is Ethereum?", - "page-what-is-ethereum-meta-description": "Ethereum is a decentralized blockchain network and software development platform, powered by the cryptocurrency ether (ETH). It's home to thousands of cryptocurrencies and applications across DeFi, NFTs, gaming, decentralized social media and stablecoins.", + "page-what-is-ethereum-meta-title": "What is Ethereum? (A Complete Guide) | ethereum.org", + "page-what-is-ethereum-meta-description": "A full overview of what Ethereum is, how it works, what it does and how to start using or building on it. Explained in simple terms.", "page-what-is-ethereum-title": "What is Ethereum?", "page-what-is-ethereum-hero-description-1": "Ethereum is a decentralized blockchain network and software development platform, powered by the cryptocurrency ether (ETH).", "page-what-is-ethereum-hero-description-2": "It's home to thousands of cryptocurrencies and applications across DeFi, NFTs, gaming, decentralized social media and stablecoins.", From 2f32cbc717de8e84a8ec8a7a39a3588e790049d2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:51:33 -0700 Subject: [PATCH 24/98] i18n-refactor: replace energy-consumption strings add namespace for /energy-consumption -- charts no longer being used on what-is-ethereum --- .../EnergyConsumptionChart/index.tsx | 4 ++-- src/intl/en/page-energy-consumption.json | 21 +++++++++++++++++++ src/lib/utils/translations.ts | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/intl/en/page-energy-consumption.json diff --git a/src/components/EnergyConsumptionChart/index.tsx b/src/components/EnergyConsumptionChart/index.tsx index 89ba0017f87..fc8f979545b 100644 --- a/src/components/EnergyConsumptionChart/index.tsx +++ b/src/components/EnergyConsumptionChart/index.tsx @@ -36,7 +36,7 @@ ChartJS.register( ) const EnergyConsumptionChart = () => { - const { t } = useTranslation("page-what-is-ethereum") + const { t } = useTranslation("page-energy-consumption") const locale = useLocale() const isClient = useIsClient() const isRtl = isLangRightToLeft(locale as Lang) @@ -247,7 +247,7 @@ const EnergyConsumptionChart = () => {

- {t("page-what-is-ethereum-energy-consumption-chart-legend")} + {t("energy-consumption-chart-legend")}

) diff --git a/src/intl/en/page-energy-consumption.json b/src/intl/en/page-energy-consumption.json new file mode 100644 index 00000000000..dacef9f0a3e --- /dev/null +++ b/src/intl/en/page-energy-consumption.json @@ -0,0 +1,21 @@ +{ + "adoption-chart-artists-label": "Artists", + "adoption-chart-column-now-label": "Now", + "adoption-chart-companies-label": "Companies", + "adoption-chart-developers-label": "Developers", + "adoption-chart-gamers-label": "Gamers", + "adoption-chart-investors-label": "Investors", + "adoption-chart-musicians-label": "Musicians", + "adoption-chart-refugees-label": "Refugees", + "adoption-chart-writers-label": "Writers", + "energy-consumption-chart-airbnb-label": "AirBnB", + "energy-consumption-chart-btc-pow-label": "BTC PoW", + "energy-consumption-chart-eth-pos-label": "ETH PoS", + "energy-consumption-chart-eth-pow-label": "ETH PoW", + "energy-consumption-chart-gaming-us-label": "Gaming in the US", + "energy-consumption-chart-global-data-centers-label": "Global data centers", + "energy-consumption-chart-netflix-label": "Netflix", + "energy-consumption-chart-paypal-label": "PayPal", + "energy-consumption-gold-mining-cbeci-label": "Gold mining", + "energy-consumption-chart-legend": "Annual Energy Consumption in TWh/yr" +} diff --git a/src/lib/utils/translations.ts b/src/lib/utils/translations.ts index 027a814f7d0..89bb14f0f33 100644 --- a/src/lib/utils/translations.ts +++ b/src/lib/utils/translations.ts @@ -91,7 +91,7 @@ const getRequiredNamespacesForPath = (relativePath: string) => { } if (path.startsWith("/energy-consumption/")) { - primaryNamespace = "page-what-is-ethereum" + primaryNamespace = "page-energy-consumption" requiredNamespaces = [...requiredNamespaces, "page-about"] } From b8b404e4f288e9f9e9468646b45ed19a7b6d4c3d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 14 Aug 2025 08:45:44 -0700 Subject: [PATCH 25/98] fix: ToC active/hover styling Use font color indication instead of bold to avoid layout shifting --- app/[locale]/what-is-ethereum/page.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 80552022216..9f36b118f6e 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -172,13 +172,14 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
a]:inline [&_li]:list-item [&_ul]:list-inside [&_ul]:ps-0", - "[&_[data-label='marker']]:!hidden [&_li:has([data-state-active='false'])]:me-4 [&_li:has([data-state-active='true'])]:font-bold", // me-4 added to prevent layout shift when active turns bold + "[&_li:hover]:text-primary-hover [&_li:hover_[data-label='label']]:text-primary-hover", + "[&_[data-label='marker']]:!hidden [&_li:has([data-state-active='true'])]:text-primary", // `aside` targets desktop version "[&_aside]:sticky [&_aside]:top-[7.25rem]", "[&_aside]:h-fit [&_aside]:shrink-0 [&_aside]:gap-0 [&_aside]:space-y-2.5 [&_aside]:rounded-2xl [&_aside]:bg-accent-a/10 [&_aside]:px-3 [&_aside]:py-2", - "[&_aside]:min-w-80 [&_aside]:max-w-72 [&_aside]:p-8 [&_aside]:pe-4 [&_aside]:text-body-medium", // [&_aside]:pe-4 reduced to account for above me-4 on inactive items + "[&_aside]:min-w-80 [&_aside]:max-w-72 [&_aside]:p-8 [&_aside]:text-body-medium", "[&_[data-label='label']]:font-bold [&_[data-label='label']]:normal-case [&_aside_[data-label='label']]:text-lg", // `button` targets mobile version "[&_button>span]:flex-none [&_button]:mb-16 [&_button]:justify-center [&_button]:rounded-lg [&_button]:border-border [&_button]:bg-accent-a/10 [&_button]:text-lg [&_button]:font-bold" From bfacdfa9cce5272b16cd57d3353f7d0874637af2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 14 Aug 2025 08:46:13 -0700 Subject: [PATCH 26/98] patch: adjust mobile section scroll-mt --- src/components/ui/section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ui/section.tsx b/src/components/ui/section.tsx index 565d22c86c1..f8ec474cf9a 100644 --- a/src/components/ui/section.tsx +++ b/src/components/ui/section.tsx @@ -4,7 +4,7 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils/cn" // TODO: Add to design system -const variants = cva("w-full scroll-mt-24", { +const variants = cva("w-full scroll-mt-24 lg:scroll-mt-28", { variants: { variant: { responsiveFlex: "flex flex-col gap-8 md:flex-row lg:gap-16", From f2b7c08774073524f344c3e74cf06cd68adc8730 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 14 Aug 2025 08:56:25 -0700 Subject: [PATCH 27/98] temp: hide not-yet-available links --- app/[locale]/what-is-ethereum/page.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 9f36b118f6e..ef186fb1387 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -677,9 +677,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { - + {/* // TODO: Re-enable when page ready */} + {/* {t("page-what-is-ethereum-what-learn-more")} - + */}
@@ -919,9 +920,10 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { - + {/* // TODO: Re-enable when page ready */} + {/* {t("page-what-is-ethereum-bitcoin-learn-more")} - + */}
From 36de227f486dc6c30343b809d2aa60f2ea014ada Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 14 Aug 2025 10:51:28 -0600 Subject: [PATCH 28/98] /10year translations --- .../10years/_components/NFTMintCard/index.tsx | 17 +++++--- app/[locale]/10years/page.tsx | 42 ++++++++----------- src/intl/en/page-10-year-anniversary.json | 15 ++++++- 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/app/[locale]/10years/_components/NFTMintCard/index.tsx b/app/[locale]/10years/_components/NFTMintCard/index.tsx index 9368b8a2246..72a881597d6 100644 --- a/app/[locale]/10years/_components/NFTMintCard/index.tsx +++ b/app/[locale]/10years/_components/NFTMintCard/index.tsx @@ -1,3 +1,5 @@ +import { useTranslations } from "next-intl" + import { Alert, AlertContent, AlertTitle } from "@/components/ui/alert" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" @@ -10,6 +12,8 @@ interface NFTMintCardProps { } const NFTMintCard = ({ className }: NFTMintCardProps) => { + const t = useTranslations("page-10-year-anniversary") + return ( {