diff --git a/app/[locale]/founders/page.tsx b/app/[locale]/founders/page.tsx index a14f6c26418..25e1f441d3c 100644 --- a/app/[locale]/founders/page.tsx +++ b/app/[locale]/founders/page.tsx @@ -4,6 +4,7 @@ import { getTranslations } from "next-intl/server" import type { CommitHistory, Lang, SectionNavDetails } from "@/lib/types" +import CommentCard from "@/components/CommentCard" import ContentHero from "@/components/Hero/ContentHero" import { CheckCircle } from "@/components/icons/CheckCircle" import MainArticle from "@/components/MainArticle" @@ -509,27 +510,16 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
{stories.map(({ name, affiliation, content, className }) => ( - -
{content}
-
-
- {name[0].toUpperCase()} -
-
-

{name}

-

{affiliation}

-
-
-
+ /> ))}
diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index 207777bdcc9..0b1028e983d 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -1,5 +1,4 @@ import { - ArrowRight, Castle, Landmark, LockKeyhole, @@ -7,7 +6,7 @@ import { SquareCode, User, } from "lucide-react" -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import type { CommitHistory, Lang, ToCItem } from "@/lib/types" @@ -22,13 +21,12 @@ import MainArticle from "@/components/MainArticle" import TableOfContents from "@/components/TableOfContents" import { ButtonLink } from "@/components/ui/buttons/Button" import { Card, CardContent, CardTitle } from "@/components/ui/card" -import Link, { LinkProps } from "@/components/ui/Link" +import Link, { LinkWithArrow } from "@/components/ui/Link" import { ListItem, OrderedList, UnorderedList } from "@/components/ui/list" 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" @@ -86,21 +84,6 @@ 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: { locale: Lang } }) => { const { locale } = params const t = await getTranslations({ @@ -353,7 +336,7 @@ const Page = async ({ params }: { params: { locale: Lang } }) => {
- + {t("page-what-is-ethereum-network-learn-more")} diff --git a/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx b/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx new file mode 100644 index 00000000000..4fda7c13109 --- /dev/null +++ b/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx @@ -0,0 +1,125 @@ +import { getTranslations } from "next-intl/server" + +import { FileContributor, Lang } from "@/lib/types" + +import PageJsonLD from "@/components/PageJsonLD" + +import { normalizeUrlForJsonLd } from "@/lib/utils/url" + +export default async function WhatIsTheEthereumNetworkPageJsonLD({ + locale, + lastEditLocaleTimestamp, + contributors, +}: { + locale: Lang | undefined + lastEditLocaleTimestamp: string + contributors: FileContributor[] +}) { + const t = await getTranslations({ + namespace: "page-what-is-the-ethereum-network", + }) + + const url = normalizeUrlForJsonLd(locale, `/what-is-the-ethereum-network/`) + + const contributorList = contributors.map((contributor) => ({ + "@type": "Person", + name: contributor.login, + url: contributor.html_url, + })) + + // JSON-LD structured data for the What is the Ethereum Network page + const webPageJsonLd = { + "@context": "https://schema.org", + "@type": "WebPage", + "@id": url, + name: t("page-what-is-ethereum-network-meta-title"), + description: t("page-what-is-ethereum-network-meta-description"), + url: url, + inLanguage: locale, + contributor: contributorList, + author: [ + { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + }, + ], + breadcrumb: { + "@type": "BreadcrumbList", + itemListElement: [ + { + "@type": "ListItem", + position: 1, + name: "Home", + item: normalizeUrlForJsonLd(locale, "/"), + }, + { + "@type": "ListItem", + position: 2, + name: "Learn", + item: normalizeUrlForJsonLd(locale, "/learn/"), + }, + { + "@type": "ListItem", + position: 3, + name: t("page-what-is-ethereum-network-meta-title"), + item: url, + }, + ], + }, + publisher: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + }, + reviewedBy: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + logo: { + "@type": "ImageObject", + url: "https://ethereum.org/images/eth-home-icon.png", + }, + }, + } + + // JSON-LD for the ethereum network article content + const articleJsonLd = { + "@context": "https://schema.org", + "@type": "Article", + headline: t("page-what-is-ethereum-network-title"), + description: t("page-what-is-ethereum-network-meta-description"), + image: "https://ethereum.org/images/what-is-ethereum-network.png", + author: [ + { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + }, + ], + publisher: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + }, + contributor: contributorList, + reviewedBy: { + "@type": "Organization", + name: "ethereum.org", + url: "https://ethereum.org", + logo: { + "@type": "ImageObject", + url: "https://ethereum.org/images/eth-home-icon.png", + }, + }, + about: { + "@type": "Thing", + name: "Ethereum Network", + description: + "Comprehensive guide to the Ethereum network, including fees, staking, layer 2 solutions, and live network data", + }, + dateModified: lastEditLocaleTimestamp, + } + + return +} diff --git a/app/[locale]/what-is-the-ethereum-network/page.tsx b/app/[locale]/what-is-the-ethereum-network/page.tsx new file mode 100644 index 00000000000..06816125fcc --- /dev/null +++ b/app/[locale]/what-is-the-ethereum-network/page.tsx @@ -0,0 +1,730 @@ +import { getTranslations } from "next-intl/server" + +import type { CommitHistory, Lang, ToCItem } from "@/lib/types" + +import CommentCard from "@/components/CommentCard" +import DocLink from "@/components/DocLink" +import FileContributors from "@/components/FileContributors" +import ContentHero, { ContentHeroProps } from "@/components/Hero/ContentHero" +import { Image } from "@/components/Image" +import { Strong } from "@/components/IntlStringElements" +import MainArticle from "@/components/MainArticle" +import TableOfContents from "@/components/TableOfContents" +import Link, { LinkWithArrow } from "@/components/ui/Link" +import { ListItem, UnorderedList } 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 WhatIsTheEthereumNetworkPageJsonLD from "./page-jsonld" + +import developersHubImg from "@/public/images/heroes/developers-hub-hero.png" +import layer2HubImg from "@/public/images/heroes/layer-2-hub-hero.png" +import layer2LearnHeroImg from "@/public/images/layer-2/learn-hero.png" +import manDogPlayingImg from "@/public/images/man-and-dog-playing.png" +import computerImg from "@/public/images/what-is-ethereum-network/computer_alone.png" +import heroImg from "@/public/images/what-is-ethereum-network/what-is-ethereum-network.png" + +const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { + const { locale } = await params + + const t = await getTranslations({ + namespace: "page-what-is-the-ethereum-network", + }) + + const commitHistoryCache: CommitHistory = {} + const { contributors, lastEditLocaleTimestamp } = + await getAppPageContributorInfo( + "what-is-ethereum-network", + locale as Lang, + commitHistoryCache + ) + + const heroProps: ContentHeroProps = { + breadcrumbs: { slug: "learn/what-is-the-ethereum-network", startDepth: 1 }, + heroImg, + title: t("page-what-is-ethereum-network-title"), + description: ( + <> +

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

+

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

+ + ), + } + + const tocItems: ToCItem[] = [ + { + title: t("page-what-is-ethereum-network-title"), + url: "#ethereum-network", + }, + { + title: t("page-what-is-ethereum-network-section-network-fees-title"), + url: "#network-fees", + }, + { + title: t("page-what-is-ethereum-network-section-staking-title"), + url: "#staking", + }, + { + title: t("page-what-is-ethereum-network-section-layer-2s-title"), + url: "#layer-2s", + }, + { + title: t("page-what-is-ethereum-network-section-live-network-data-title"), + url: "#live-network-data", + }, + ] + + const getId = (input: string) => { + const parts = input.split("#") + return parts.length > 1 ? parts[1] : "" + } + + return ( + <> + + + + +
+ +
+ +
+ + +
+ +
+
+

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

+

+ {t.rich("page-what-is-ethereum-network-section-description-2", { + strong: Strong, + })} +

+

+ {t.rich("page-what-is-ethereum-network-section-description-3", { + strong: Strong, + })} +

+ Computer +

{t("page-what-is-ethereum-network-section-description-4")}

+ + + {t("page-what-is-ethereum-network-section-description-5")} + + + {t("page-what-is-ethereum-network-section-description-6")} + + + {t("page-what-is-ethereum-network-section-description-7")} + + + {t("page-what-is-ethereum-network-section-description-8")} + + +

{t("page-what-is-ethereum-network-section-description-9")}

+

+ {t.rich("page-what-is-ethereum-network-section-description-10", { + a: (chunks) => {chunks}, + strong: Strong, + })} +

+

{t("page-what-is-ethereum-network-section-description-11")}

+

+ {t.rich("page-what-is-ethereum-network-section-description-12", { + strong: Strong, + })} +

+

{t("page-what-is-ethereum-network-section-description-13")}

+

{t("page-what-is-ethereum-network-section-description-14")}

+ + + {t("page-what-is-ethereum-network-section-description-15")} + + + {t("page-what-is-ethereum-network-section-description-16")} + + + {t("page-what-is-ethereum-network-section-description-17")} + + +

{t("page-what-is-ethereum-network-section-description-18")}

+

+ {t.rich("page-what-is-ethereum-network-section-description-19", { + strong: Strong, + })} +

+
+ +
+ Developers Hub +
+

+ {tocItems[1].title} +

+

+ {t("page-what-is-ethereum-network-gas-section-description-1")} +

+

+ {t.rich( + "page-what-is-ethereum-network-gas-section-description-2", + { + strong: Strong, + } + )} +

+ +

+ {t.rich( + "page-what-is-ethereum-network-gas-section-description-4", + { + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-gas-section-description-5", + { + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-gas-section-description-6", + { + blog: (chunks) => ( + + {chunks} + + ), + beaconchain: (chunks) => ( + {chunks} + ), + ultrasound: (chunks) => ( + {chunks} + ), + strong: Strong, + } + )} +

+

+ {t("page-what-is-ethereum-network-gas-section-description-7")} +

+

+ {t.rich( + "page-what-is-ethereum-network-gas-section-description-8", + { + strong: Strong, + } + )} +

+

+ {t("page-what-is-ethereum-network-gas-section-description-9")} +

+ + {t("page-what-is-ethereum-network-gas-section-description-10")} + +
+
+ +
+ Man and Dog Playing +
+

+ {tocItems[2].title} +

+

+ {t.rich( + "page-what-is-ethereum-network-staking-section-description-1", + { + strong: Strong, + } + )} +

+

+ {t( + "page-what-is-ethereum-network-staking-section-description-2" + )} +

+

+ {t( + "page-what-is-ethereum-network-staking-section-description-3" + )} +

+

+ {t( + "page-what-is-ethereum-network-staking-section-description-4" + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-staking-section-description-5", + { + strong: Strong, + } + )} +

+ +

+ {t.rich( + "page-what-is-ethereum-network-staking-section-description-7", + { + validators: (chunks) => ( + + {chunks} + + ), + stakedEther: (chunks) => ( + + {chunks} + + ), + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-staking-section-description-8", + { + strong: Strong, + } + )} +

+

+ {t( + "page-what-is-ethereum-network-staking-section-description-9" + )} +

+

+ {t( + "page-what-is-ethereum-network-staking-section-description-10" + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-staking-section-description-11", + { + lido: (chunks) => ( + {chunks} + ), + rocketpool: (chunks) => ( + {chunks} + ), + strong: Strong, + } + )} +

+
+ + {t( + "page-what-is-ethereum-network-staking-section-description-12" + )} + + + {t( + "page-what-is-ethereum-network-staking-section-description-13" + )} + +
+
+
+ +
+ Layer 2 Hub +
+

+ {tocItems[3].title} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-1", + { + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-2", + { + strong: Strong, + } + )} +

+

+ {t( + "page-what-is-ethereum-network-layer-2s-section-description-3" + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-4", + { + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-5", + { + l2fees: (chunks) => ( + {chunks} + ), + strong: Strong, + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-6", + { + l2beat: (chunks) => ( + + {chunks} + + ), + } + )} +

+

+ {t( + "page-what-is-ethereum-network-layer-2s-section-description-7" + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-8", + { + robinhood: (chunks) => ( + + {chunks} + + ), + paypal: (chunks) => ( + + {chunks} + + ), + shopify: (chunks) => ( + + {chunks} + + ), + } + )} +

+

+ {t.rich( + "page-what-is-ethereum-network-layer-2s-section-description-9", + { + superbridge: (chunks) => ( + {chunks} + ), + portal: (chunks) => ( + + {chunks} + + ), + hop: (chunks) => ( + {chunks} + ), + across: (chunks) => ( + {chunks} + ), + } + )} +

+ + {t( + "page-what-is-ethereum-network-layer-2s-section-description-10" + )} + +
+
+ +
+ Layer 2 Learn Hero +
+

+ {tocItems[4].title} +

+

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-1" + )} +

+

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-2" + )} +

+ + + {t( + "page-what-is-ethereum-network-live-network-data-section-description-3" + )} + + + {t( + "page-what-is-ethereum-network-live-network-data-section-description-4" + )} + + + {t( + "page-what-is-ethereum-network-live-network-data-section-description-5" + )} + + +

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-6" + )} +

+

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-7" + )} +

+

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-8" + )} +

+ + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-9", + { + etherscan: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-10", + { + beaconcha: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-11", + { + ultrasound: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-12", + { + l2fees: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-13", + { + l2beat: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-14", + { + growthepie: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-15", + { + dune: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-16", + { + tokenterminal: (chunks) => ( + {chunks} + ), + } + )} + + + {t.rich( + "page-what-is-ethereum-network-live-network-data-section-description-17", + { + nansen: (chunks) => ( + {chunks} + ), + } + )} + + +

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-18" + )} +

+

+ {t( + "page-what-is-ethereum-network-live-network-data-section-description-19" + )} +

+ + {t( + "page-what-is-ethereum-network-live-network-data-section-description-20" + )} + +
+
+ +
+
+

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

+ + + + {t("page-what-is-ethereum-network-read-next-item-1")} + + + + + {t("page-what-is-ethereum-network-read-next-item-2")} + + + + + {t("page-what-is-ethereum-network-read-next-item-3")} + + + + + {t("page-what-is-ethereum-network-read-next-item-4")} + + + +
+
+
+
+ + ) +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string }> +}) { + const { locale } = await params + + const t = await getTranslations({ + locale, + namespace: "page-what-is-the-ethereum-network", + }) + + return await getMetadata({ + locale, + slug: ["what-is-ethereum-network"], + title: t("page-what-is-ethereum-network-meta-title"), + description: t("page-what-is-ethereum-network-meta-description"), + twitterDescription: t( + "page-what-is-ethereum-network-twitter-meta-description" + ), + image: "/images/what-is-ethereum-network.png", + }) +} + +export default Page diff --git a/public/images/man-and-dog-playing.png b/public/images/man-and-dog-playing.png index 14e75d2156e..aa966b93b15 100644 Binary files a/public/images/man-and-dog-playing.png and b/public/images/man-and-dog-playing.png differ diff --git a/public/images/what-is-ethereum-network/computer_alone.png b/public/images/what-is-ethereum-network/computer_alone.png new file mode 100644 index 00000000000..c5097e1c766 Binary files /dev/null and b/public/images/what-is-ethereum-network/computer_alone.png differ diff --git a/public/images/what-is-ethereum-network/what-is-ethereum-network.png b/public/images/what-is-ethereum-network/what-is-ethereum-network.png new file mode 100644 index 00000000000..9eba947f905 Binary files /dev/null and b/public/images/what-is-ethereum-network/what-is-ethereum-network.png differ diff --git a/src/components/Banners/BugBountyBanner/index.tsx b/src/components/Banners/BugBountyBanner/index.tsx index bb1dba2fd14..886fe9aeb2c 100644 --- a/src/components/Banners/BugBountyBanner/index.tsx +++ b/src/components/Banners/BugBountyBanner/index.tsx @@ -9,7 +9,8 @@ const BugBountyBanner = () => (

- The Fusaka Contest is currently running on Sherlock with up to 2M USD in rewards! + The Fusaka Contest is currently running on Sherlock with up to 2M USD in + rewards!

diff --git a/src/components/CommentCard/index.tsx b/src/components/CommentCard/index.tsx new file mode 100644 index 00000000000..4c2bbbd0f68 --- /dev/null +++ b/src/components/CommentCard/index.tsx @@ -0,0 +1,44 @@ +import { ReactNode } from "react" + +import { Card } from "@/components/ui/card" + +import { cn } from "@/lib/utils/cn" + +const CommentCard = ({ + description, + name, + title, + className, +}: { + description: string | ReactNode + name: string + title: string + className?: string +}) => { + return ( + +
+

{description}

+
+
+
+ {name.charAt(0)} +
+
+

{name}

+

{title}

+
+
+
+ ) +} + +export default CommentCard diff --git a/src/components/ui/Link.tsx b/src/components/ui/Link.tsx index 4477f74e19b..b284db06acf 100644 --- a/src/components/ui/Link.tsx +++ b/src/components/ui/Link.tsx @@ -1,7 +1,7 @@ "use client" import { AnchorHTMLAttributes, ComponentProps, forwardRef } from "react" -import { ExternalLink, Mail } from "lucide-react" +import { ArrowRight, ExternalLink, Mail } from "lucide-react" import NextLink from "next/link" import { VisuallyHidden } from "@radix-ui/react-visually-hidden" @@ -197,6 +197,27 @@ export const BaseLink = forwardRef(function Link( }) BaseLink.displayName = "BaseLink" +export const LinkWithArrow = forwardRef( + ({ children, className, ...props }: LinkProps, ref) => { + const { twFlipForRtl } = useRtlFlip() + return ( + + +   + {children} + + ) + } +) +LinkWithArrow.displayName = "LinkWithArrow" + const InlineLink = forwardRef( (props: LinkProps, ref) => { return ( diff --git a/src/intl/en/common.json b/src/intl/en/common.json index a0e784f4624..9d66d72b5ad 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -364,6 +364,7 @@ "nav-use-cases-label": "Use cases", "nav-what-is-ether-description": "The currency of Ethereum apps", "nav-what-is-ethereum-description": "Understand what makes Ethereum special", + "nav-what-is-ethereum-network-description": "Understand what the Ethereum network is", "nav-what-is-web3-description": "An alternative to centralized monopolies dictating the rules", "nav-what-is-web3-label": "What is Web3?", "nav-whitepaper-description": "The original Ethereum whitepaper written by Vitalik Buterin in 2014", @@ -472,6 +473,7 @@ "what-are-apps": "What are apps?", "what-is-ether": "What is ether (ETH)?", "what-is-ethereum": "What is Ethereum?", + "what-is-the-ethereum-network": "What is the Ethereum network?", "withdrawals": "Staking withdrawals", "wrapped-ether": "Wrapped Ether", "yes": "Yes", diff --git a/src/intl/en/page-what-is-the-ethereum-network.json b/src/intl/en/page-what-is-the-ethereum-network.json new file mode 100644 index 00000000000..1b69d05c970 --- /dev/null +++ b/src/intl/en/page-what-is-the-ethereum-network.json @@ -0,0 +1,89 @@ +{ + "page-what-is-ethereum-network-meta-title": "What is the Ethereum network? | ethereum.org", + "page-what-is-ethereum-network-meta-description": "Understand what the Ethereum network is, staking and security, network fees (aka gas), layer 2 scaling networks and how to explore live network data.", + "page-what-is-ethereum-network-twitter-meta-description": "Understand what the Ethereum network is, staking and security, network fees, layer 2 scaling networks and how to explore live network data.", + "page-what-is-ethereum-network-title": "What is the Ethereum network?", + "page-what-is-ethereum-network-description-1": "The Ethereum network is the physical and digital infrastructure that underpins Ethereum.", + "page-what-is-ethereum-network-description-2": "This includes nodes that store data, validators that process transactions, software that executes smart contracts, and Layer 2 networks that scale Ethereum beyond the main chain.", + "page-what-is-ethereum-network-section-network-fees-title": "What are Ethereum network fees (aka gas fees)?", + "page-what-is-ethereum-network-section-staking-title": "What is staking and how does it secure the network?", + "page-what-is-ethereum-network-section-layer-2s-title": "What are Ethereum Layer 2s and how do they scale the network?", + "page-what-is-ethereum-network-section-live-network-data-title": "How to explore live Ethereum network data", + "page-what-is-ethereum-network-read-next-title": "Read next", + "page-what-is-ethereum-network-read-next-item-1": "What are wallets?", + "page-what-is-ethereum-network-read-next-item-2": "What is ether (ETH)?", + "page-what-is-ethereum-network-read-next-item-3": "What is web3?", + "page-what-is-ethereum-network-read-next-item-4": "Learn more about the Ethereum network", + "page-what-is-ethereum-network-section-description-1": "When people talk about Ethereum, they're usually talking about a few different things. There's the ecosystem of apps and digital assets, the open-source software platform, and the native currency ether (ETH).", + "page-what-is-ethereum-network-section-description-2": "But underneath it all is the Ethereum network; the physical and digital foundation that ties everything together.", + "page-what-is-ethereum-network-section-description-3": "At its core, the Ethereum network is a collection of thousands of independent computers called nodes. These nodes are run by people all over the world. They work together to store data, execute smart contracts, and record every transaction on an open, public ledger.", + "page-what-is-ethereum-network-section-description-4": "The Ethereum network handles several key tasks, like:", + "page-what-is-ethereum-network-section-description-5": "updating user accounts and balances", + "page-what-is-ethereum-network-section-description-6": "executing smart contracts (programs running apps)", + "page-what-is-ethereum-network-section-description-7": "tracking ownership of digital assets (like stablecoins and NFTs)", + "page-what-is-ethereum-network-section-description-8": "processing all transactions that flow through Ethereum every day", + "page-what-is-ethereum-network-section-description-9": "Fortunately, you don't need to understand how the network works to use it.", + "page-what-is-ethereum-network-section-description-10": "Most people simply use the network via a digital wallet. A wallet is usually a web or mobile app that lets you send and receive ETH, manage your assets, and use apps.", + "page-what-is-ethereum-network-section-description-11": "Other types of users like developers and businesses building on Ethereum might use APIs, node software, or deploy smart contracts.", + "page-what-is-ethereum-network-section-description-12": "The Ethereum network is different from traditional systems because of how it's designed. Ethereum's code and data is stored on decentralized nodes around the world, so no one can block your access or shut down your app.", + "page-what-is-ethereum-network-section-description-13": "And because anyone can join, it opens the door to global access and innovation.", + "page-what-is-ethereum-network-section-description-14": "These qualities enable things that weren't possible before, like:", + "page-what-is-ethereum-network-section-description-15": "data ownership", + "page-what-is-ethereum-network-section-description-16": "social media without de-platforming", + "page-what-is-ethereum-network-section-description-17": "open and transparent financial systems", + "page-what-is-ethereum-network-section-description-18": "At its core, the Ethereum network is a foundation for digital ownership and open participation.", + "page-what-is-ethereum-network-section-description-19": "You may hear people refer to Ethereum Mainnet. This is the same Ethereum network millions use every day, where real assets are exchanged and real apps live. But “Mainnet” helps to distinguish it from Ethereum layer 2 networks, and test networks (testnets) which developers use to try out new features before going live.", + "page-what-is-ethereum-network-gas-section-description-1": "Every transaction on Ethereum costs a small fee called a gas fee. Whether you send ETH, swap tokens, or use an app, you pay a small amount of gas each time you write data to the blockchain.", + "page-what-is-ethereum-network-gas-section-description-2": "Gas fees keep Ethereum running smoothly. Without it, bad actors could spam the network with empty transactions and make it impossible to use through heavy congestion, since there'd be no way to prioritize transactions by the fee users are willing to pay.", + "page-what-is-ethereum-network-gas-section-description-3": "Ethereum gas fees cover the cost of the many different resources a transaction can consume, such as compute, bandwidth, or storage. All of this gets abstracted into a single value for users, but extensive R&D goes into determining how much each operation should cost relative to the others.", + "page-what-is-ethereum-network-gas-section-description-4": "So, what happens when you pay gas? A part of it is paid to the validator who adds your transaction to a “block” of transactions. Another part gets “burned”, removing it from the supply.", + "page-what-is-ethereum-network-gas-section-description-5": "This helps balance supply and demand, because when the network is busy, fees go up. When things are quieter, fees go down.", + "page-what-is-ethereum-network-gas-section-description-6": "Since the network introduced fee burning in August 2021, millions of ETH have been been burned. You can explore the latest numbers using network dashboards and explorers built by the Ethereum community.", + "page-what-is-ethereum-network-gas-section-description-7": "So, how much does a transaction cost?", + "page-what-is-ethereum-network-gas-section-description-8": "Well, fees vary depending on what you're doing. Simply sending ETH might cost less than a dollar. Swapping tokens on a decentralized exchange (DEX) can be a few dollars or more, especially if the network is busy. The more complex the transaction the more gas it costs.", + "page-what-is-ethereum-network-gas-section-description-9": "Gas fees are one of the most visible parts of using Ethereum, especially for new users, but it all goes toward making the network more reliable and secure.", + "page-what-is-ethereum-network-gas-section-description-10": "Learn more about Ethereum network fees", + "page-what-is-ethereum-network-staking-section-description-1": "The Ethereum network is secured by a system called staking. This is how Ethereum verifies transactions, adds new blocks, and keeps the network safe from attacks.", + "page-what-is-ethereum-network-staking-section-description-2": "When Ethereum started out, it used a consensus mechanism (a way to agree on who owns what) called proof-of-work. This is the same mechanism Bitcoin uses today.", + "page-what-is-ethereum-network-staking-section-description-3": "In September 2022, Ethereum upgraded to a more secure and energy-efficient proof-of-stake consensus mechanism.", + "page-what-is-ethereum-network-staking-section-description-4": "So, how does it work?", + "page-what-is-ethereum-network-staking-section-description-5": "In simple terms, people lock up some ETH (put their ETH at stake), as a deposit so that they can help secure the network. These people are called validators. When you stake ETH, your validator gets chosen to check and add new transactions. If you do it honestly, you earn rewards. If you try to cheat, you lose part of your stake.", + "page-what-is-ethereum-network-staking-section-description-6": "Staking is how Ethereum credibly commits to its service quality. All of this money at stake has the best interest for Ethereum to remain secure—would you bet against it?", + "page-what-is-ethereum-network-staking-section-description-7": "Just two years after launching proof-of-stake, Ethereum attracted over a million validators who stake millions of ETH to secure Ethereum. This makes Ethereum extremely expensive and difficult to attack. This is because, to attack the network, an entity needs at least 1/3 of all staked ETH to begin attacking the network. Today, that amounts to tens of billions of dollars, and even then, the attack would likely fail because more than 1/3 disagreeing with the rest of the network would prevent finalization, but the chain would keep growing with the other version considered the source-of-truth. More than 1/2 changes which version is considered truth, and more than 2/3 would allow finalizing something the rest don't agree with.", + "page-what-is-ethereum-network-staking-section-description-8": "This is what gives Ethereum “economic security”. It's not just about having the right technology. It's about making attacks too costly to even try.", + "page-what-is-ethereum-network-staking-section-description-9": "To help secure the Ethereum network, you can do this in two main ways.", + "page-what-is-ethereum-network-staking-section-description-10": "The first way is running a node. Nodes store the entire history of the blockchain, including all transactions and smart contract data. By syncing with other nodes, they can agree on the state of the network, making sure transactions are legit and smart contract data is available.", + "page-what-is-ethereum-network-staking-section-description-11": "The second way is staking your ETH. The easiest way is through a staking provider like Lido or Rocketpool. but if you have the know-how, try running validator software at home.", + "page-what-is-ethereum-network-staking-section-description-12": "Learn more about staking and how to do it", + "page-what-is-ethereum-network-staking-section-description-13": "Learn how to run a node", + "page-what-is-ethereum-network-layer-2s-section-description-1": "As Ethereum gets more popular, the network gets busier. When demand is high, gas fees go up and transactions take longer. To fix this, developers have built a series of companion networks called layer 2s.", + "page-what-is-ethereum-network-layer-2s-section-description-2": "Layer 2s, also referred to as L2s, are other networks that run on top of Ethereum. They process transactions separately, then send a summary to be stored on Ethereum.", + "page-what-is-ethereum-network-layer-2s-section-description-3": "You can think of them like express lanes on a highway. Instead of every single transaction going through Ethereum Mainnet, many of them use these faster, cheaper roads.", + "page-what-is-ethereum-network-layer-2s-section-description-4": "Some of the most popular L2s include Base, Arbitrum, Optimism, zkSync and Starknet. Each of them work slightly differently, but the idea is the same—scale Ethereum without compromising on security.", + "page-what-is-ethereum-network-layer-2s-section-description-5": "A simple ETH transfer on Optimism or zkSync can cost as little as $0.04, compared to $0.3-$1 on Ethereum Mainnet. Other transactions like swapping tokens can be as little as $0.20. For users, this means faster transactions at a fraction of the price.", + "page-what-is-ethereum-network-layer-2s-section-description-6": "As a result, L2s are growing fast. Together, they hold billions of dollars in digital assets.", + "page-what-is-ethereum-network-layer-2s-section-description-7": "Since L2s benefit from Ethereum's security, companies looking to create global payments and applications started building on top of Ethereum.", + "page-what-is-ethereum-network-layer-2s-section-description-8": "For example, Robinhood recently launched its own L2 to explore faster settlement for stocks. PayPal moved its stablecoin PYUSD to Ethereum L2 Arbitrum. Shopify now lets merchants accept stablecoin USDC on Base.", + "page-what-is-ethereum-network-layer-2s-section-description-9": "For users, moving assets between Ethereum and L2s is straightforward. You can use bridges, built by L2s like Superbridge by Optimism or Portal by ZKsync to move ETH and other assets. You can even use third-party tools like Hop and Across that are built by independent teams.", + "page-what-is-ethereum-network-layer-2s-section-description-10": "Learn more about Ethereum Layer 2 networks", + "page-what-is-ethereum-network-live-network-data-section-description-1": "Ethereum is transparent by design. Every action on the network, from sending ETH to running a validator, is recorded on an open, public ledger that anyone can access.", + "page-what-is-ethereum-network-live-network-data-section-description-2": "This is a sharp contrast to how most systems work today:", + "page-what-is-ethereum-network-live-network-data-section-description-3": "banks and institutions publish their internal numbers", + "page-what-is-ethereum-network-live-network-data-section-description-4": "app usage figures are closely guarded by tech companies", + "page-what-is-ethereum-network-live-network-data-section-description-5": "economic data often arrives late and gets revised later", + "page-what-is-ethereum-network-live-network-data-section-description-6": "With Ethereum, you don't have to trust. You can verify.", + "page-what-is-ethereum-network-live-network-data-section-description-7": "You don't need to understand any of this to use Ethereum. But if you're curious about how many transactions were settled in 2024, or how many new Ethereum addresses were created in the last six months, there are tools that let anyone explore the network in real time.", + "page-what-is-ethereum-network-live-network-data-section-description-8": "Here are a few of the most useful data sources, and what you might use them for:", + "page-what-is-ethereum-network-live-network-data-section-description-9": "Etherscan: Check transactions, wallet activity, and smart contracts", + "page-what-is-ethereum-network-live-network-data-section-description-10": "beaconcha.in: View validator stats, staking levels, and network health", + "page-what-is-ethereum-network-live-network-data-section-description-11": "ultrasound.money: Track ETH supply, issuance, and burn in real-time", + "page-what-is-ethereum-network-live-network-data-section-description-12": "l2fees.info: Compare current transaction costs on Ethereum and L2s", + "page-what-is-ethereum-network-live-network-data-section-description-13": "L2Beat: See value secured and security models across all major L2s", + "page-what-is-ethereum-network-live-network-data-section-description-14": "growthepie: See all onchain activity and growth across Ethereum", + "page-what-is-ethereum-network-live-network-data-section-description-15": "Dune: Explore custom dashboards on all digital assets across Ethereum", + "page-what-is-ethereum-network-live-network-data-section-description-16": "Token Terminal: Compare dapp revenue, usage, and protocol performance", + "page-what-is-ethereum-network-live-network-data-section-description-17": "Nansen: Follow wallet flows, stablecoin movements, and smart money trends.", + "page-what-is-ethereum-network-live-network-data-section-description-18": "All of these tools are there if you need them.", + "page-what-is-ethereum-network-live-network-data-section-description-19": "Whether you're a developer, researcher, investor, or just someone who wants to check a transaction, Ethereum's open network gives you the data—live, permissionless, and verifiable.", + "page-what-is-ethereum-network-live-network-data-section-description-20": "Browse Ethereum network dashboards and block explorers" +} \ No newline at end of file diff --git a/src/lib/nav/buildNavigation.ts b/src/lib/nav/buildNavigation.ts index edd279ab126..8bd53fb8bd4 100644 --- a/src/lib/nav/buildNavigation.ts +++ b/src/lib/nav/buildNavigation.ts @@ -24,6 +24,11 @@ export const buildNavigation = (t: TranslateFn): NavSections => { description: t("nav-what-is-ethereum-description"), href: "/what-is-ethereum/", }, + { + label: t("what-is-the-ethereum-network"), + description: t("nav-what-is-ethereum-network-description"), + href: "/what-is-the-ethereum-network/", + }, { label: t("what-is-ether"), description: t("nav-what-is-ether-description"), diff --git a/src/lib/utils/contributors.ts b/src/lib/utils/contributors.ts index 6222e0d887a..ba2ddd66fe8 100644 --- a/src/lib/utils/contributors.ts +++ b/src/lib/utils/contributors.ts @@ -92,11 +92,14 @@ export const getAppPageContributorInfo = async ( const latestCommitDate = getAppPageLastCommitDate(gitHubContributors) const lastEditLocaleTimestamp = getLocaleTimestamp(locale, latestCommitDate) - if (!uniqueGitHubContributors.length || !lastEditLocaleTimestamp) { - throw new Error( - `No contributors found, path: ${pagePath}, locale: ${locale}` - ) - } + // if ( + // (!uniqueGitHubContributors.length || !lastEditLocaleTimestamp) && + // process.env.NODE_ENV === "production" + // ) { + // throw new Error( + // `No contributors found, path: ${pagePath}, locale: ${locale}` + // ) + // } return { contributors: uniqueGitHubContributors, lastEditLocaleTimestamp } } diff --git a/src/lib/utils/metadata.ts b/src/lib/utils/metadata.ts index 5c3002c8c15..13ea37cf538 100644 --- a/src/lib/utils/metadata.ts +++ b/src/lib/utils/metadata.ts @@ -39,6 +39,7 @@ export const getMetadata = async ({ slug, title, description: descriptionProp, + twitterDescription, image, author, }: { @@ -46,6 +47,7 @@ export const getMetadata = async ({ slug: string[] title: string description?: string + twitterDescription?: string image?: string author?: string }): Promise => { @@ -94,7 +96,7 @@ export const getMetadata = async ({ }, twitter: { title, - description, + description: twitterDescription || description, card: "summary_large_image", creator: author || siteTitle, site: author || siteTitle,