diff --git a/app/[locale]/wallets/page.tsx b/app/[locale]/wallets/page.tsx
index c83a90cf3bc..b4187b8dc98 100644
--- a/app/[locale]/wallets/page.tsx
+++ b/app/[locale]/wallets/page.tsx
@@ -5,10 +5,11 @@ import {
setRequestLocale,
} from "next-intl/server"
-import { Lang } from "@/lib/types"
+import type { CommitHistory, Lang } from "@/lib/types"
import I18nProvider from "@/components/I18nProvider"
+import { getAppPageContributorInfo } from "@/lib/utils/contributors"
import { getMetadata } from "@/lib/utils/metadata"
import { getRequiredNamespacesForPage } from "@/lib/utils/translations"
@@ -24,9 +25,20 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
const requiredNamespaces = getRequiredNamespacesForPage("/wallets")
const messages = pick(allMessages, requiredNamespaces)
+ const commitHistoryCache: CommitHistory = {}
+ const { contributors, lastEditLocaleTimestamp } =
+ await getAppPageContributorInfo(
+ "wallets",
+ locale as Lang,
+ commitHistoryCache
+ )
+
return (
-
+
)
}
diff --git a/app/[locale]/what-is-ethereum/_components/what-is-ethereum.tsx b/app/[locale]/what-is-ethereum/_components/what-is-ethereum.tsx
index e50d251ac0c..cf81c8f7ec4 100644
--- a/app/[locale]/what-is-ethereum/_components/what-is-ethereum.tsx
+++ b/app/[locale]/what-is-ethereum/_components/what-is-ethereum.tsx
@@ -5,7 +5,12 @@ import { useLocale } from "next-intl"
import type { HTMLAttributes } from "react"
import { MdInfoOutline } from "react-icons/md"
-import type { ChildOnlyProp, Lang, MetricReturnData } from "@/lib/types"
+import type {
+ ChildOnlyProp,
+ Lang,
+ MetricReturnData,
+ PageWithContributorsProps,
+} from "@/lib/types"
import AdoptionChart from "@/components/AdoptionChart"
import {
@@ -19,6 +24,7 @@ import Callout from "@/components/Callout"
import Card from "@/components/Card"
import EnergyConsumptionChart from "@/components/EnergyConsumptionChart"
import FeedbackCard from "@/components/FeedbackCard"
+import FileContributors from "@/components/FileContributors"
import { Image } from "@/components/Image"
import ListenToPlayer from "@/components/ListenToPlayer"
import MainArticle from "@/components/MainArticle"
@@ -160,11 +166,15 @@ const Image400 = ({ src }: Pick) => (
)
-type Props = {
+type Props = PageWithContributorsProps & {
data: MetricReturnData
}
-const WhatIsEthereumPage = ({ data }: Props) => {
+const WhatIsEthereumPage = ({
+ data,
+ contributors,
+ lastEditLocaleTimestamp,
+}: Props) => {
const { t } = useTranslation(["page-what-is-ethereum", "learn-quizzes"])
const pathname = usePathname()
const locale = useLocale()
@@ -835,6 +845,11 @@ const WhatIsEthereumPage = ({ data }: Props) => {
+
diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx
index 41adad5a2f6..dc9a31746fd 100644
--- a/app/[locale]/what-is-ethereum/page.tsx
+++ b/app/[locale]/what-is-ethereum/page.tsx
@@ -5,10 +5,11 @@ import {
setRequestLocale,
} from "next-intl/server"
-import { Lang } from "@/lib/types"
+import type { CommitHistory, Lang } from "@/lib/types"
import I18nProvider from "@/components/I18nProvider"
+import { getAppPageContributorInfo } from "@/lib/utils/contributors"
import { dataLoader } from "@/lib/utils/data/dataLoader"
import { getMetadata } from "@/lib/utils/metadata"
import { getRequiredNamespacesForPage } from "@/lib/utils/translations"
@@ -29,12 +30,24 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => {
const requiredNamespaces = getRequiredNamespacesForPage("/what-is-ethereum")
const messages = pick(allMessages, requiredNamespaces)
+ const commitHistoryCache: CommitHistory = {}
+ const { contributors, lastEditLocaleTimestamp } =
+ await getAppPageContributorInfo(
+ "what-is-ethereum",
+ locale as Lang,
+ commitHistoryCache
+ )
+
// Load data
const [data] = await loadData()
return (
-
+
)
}
diff --git a/i18n.config.json b/i18n.config.json
index 0edc23ef50e..25708fe362d 100644
--- a/i18n.config.json
+++ b/i18n.config.json
@@ -5,7 +5,8 @@
"name": "English",
"localName": "English",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "am",
@@ -13,7 +14,8 @@
"name": "Amharic",
"localName": "አማርኛ",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ar",
@@ -21,7 +23,8 @@
"name": "Arabic",
"localName": "العربية",
"langDir": "rtl",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "az",
@@ -29,7 +32,8 @@
"name": "Azerbaijani",
"localName": "Azərbaycan",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "be",
@@ -37,7 +41,8 @@
"name": "Belarusian",
"localName": "беларускі",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "bg",
@@ -45,7 +50,8 @@
"name": "Bulgarian",
"localName": "български",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "bn",
@@ -53,7 +59,8 @@
"name": "Bengali",
"localName": "বাংলা",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "bs",
@@ -61,7 +68,8 @@
"name": "Bosnian",
"localName": "босански",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ca",
@@ -69,7 +77,8 @@
"name": "Catalan",
"localName": "Català",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "cs",
@@ -77,7 +86,8 @@
"name": "Czech",
"localName": "Čeština",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "da",
@@ -85,7 +95,8 @@
"name": "Danish",
"localName": "Dansk",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "de",
@@ -93,7 +104,8 @@
"name": "German",
"localName": "Deutsch",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": true
},
{
"code": "el",
@@ -101,7 +113,8 @@
"name": "Greek",
"localName": "Ελληνικά",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "es",
@@ -109,7 +122,8 @@
"name": "Spanish",
"localName": "Español",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": true
},
{
"code": "fa",
@@ -117,7 +131,8 @@
"name": "Farsi",
"localName": "فارسی",
"langDir": "rtl",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "fi",
@@ -125,7 +140,8 @@
"name": "Finnish",
"localName": "Suomi",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "fr",
@@ -133,7 +149,8 @@
"name": "French",
"localName": "Français",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": true
},
{
"code": "ga",
@@ -141,7 +158,8 @@
"name": "Irish",
"localName": "Gaeilge",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": true
},
{
"code": "gl",
@@ -149,7 +167,8 @@
"name": "Galician",
"localName": "Galego",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "gu",
@@ -157,7 +176,8 @@
"name": "Gujarati",
"localName": "ગુજરાતી",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ha",
@@ -165,7 +185,8 @@
"name": "Hausa",
"localName": "Hausa",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "he",
@@ -173,7 +194,8 @@
"name": "Hebrew",
"localName": "עִבְרִית",
"langDir": "rtl",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "hi",
@@ -181,7 +203,8 @@
"name": "Hindi",
"localName": "हिन्दी",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "hr",
@@ -189,7 +212,8 @@
"name": "Croatian",
"localName": "Hrvatski",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "hu",
@@ -197,7 +221,8 @@
"name": "Hungarian",
"localName": "Magyar",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "hy-am",
@@ -205,7 +230,8 @@
"name": "Armenian",
"localName": "հայերեն",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "id",
@@ -213,7 +239,8 @@
"name": "Indonesian",
"localName": "Bahasa Indonesia",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ig",
@@ -221,7 +248,8 @@
"name": "Igbo",
"localName": "Ibo",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "it",
@@ -229,7 +257,8 @@
"name": "Italian",
"localName": "Italiano",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": true
},
{
"code": "ja",
@@ -237,7 +266,8 @@
"name": "Japanese",
"localName": "日本語",
"langDir": "ltr",
- "dateFormat": "YYYY/MM/DD"
+ "dateFormat": "YYYY/MM/DD",
+ "validISO639_1": true
},
{
"code": "ka",
@@ -245,7 +275,8 @@
"name": "Georgian",
"localName": "ქართული",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "kk",
@@ -253,7 +284,8 @@
"name": "Kazakh",
"localName": "қазақ",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "km",
@@ -261,7 +293,8 @@
"name": "Khmer",
"localName": "ចក្រភពខ្មែរ",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "kn",
@@ -269,7 +302,8 @@
"name": "Kannada",
"localName": "ಕನ್ನಡ",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ko",
@@ -277,7 +311,8 @@
"name": "Korean",
"localName": "한국어",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "lt",
@@ -285,7 +320,8 @@
"name": "Lithuanian",
"localName": "Lietuvis",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ml",
@@ -293,7 +329,8 @@
"name": "Malayalam",
"localName": "മലയാളം",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "mr",
@@ -301,7 +338,8 @@
"name": "Marathi",
"localName": "मराठी",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ms",
@@ -309,7 +347,8 @@
"name": "Malay",
"localName": "Melayu",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ne-np",
@@ -317,7 +356,8 @@
"name": "Nepali",
"localName": "नेपाली",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "nl",
@@ -325,7 +365,8 @@
"name": "Dutch",
"localName": "Nederlands",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "nb",
@@ -333,7 +374,8 @@
"name": "Norwegian",
"localName": "Norsk",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "pcm",
@@ -341,7 +383,8 @@
"name": "Nigerian Pidgin",
"localName": "Nigerian Pidgin",
"langDir": "ltr",
- "dateFormat": "DD/MM/YYYY"
+ "dateFormat": "DD/MM/YYYY",
+ "validISO639_1": false
},
{
"code": "fil",
@@ -349,7 +392,8 @@
"name": "Filipino",
"localName": "Filipino",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": false
},
{
"code": "pl",
@@ -357,7 +401,8 @@
"name": "Polish",
"localName": "Polski",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "pt-br",
@@ -365,7 +410,8 @@
"name": "Portuguese (Brazilian)",
"localName": "Português",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "pt",
@@ -373,7 +419,8 @@
"name": "Portuguese",
"localName": "Português",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ro",
@@ -381,7 +428,8 @@
"name": "Romanian",
"localName": "Română",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ru",
@@ -389,7 +437,8 @@
"name": "Russian",
"localName": "Pусский",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "se",
@@ -397,7 +446,8 @@
"name": "Swedish",
"localName": "Svenska",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "sk",
@@ -405,7 +455,8 @@
"name": "Slovak",
"localName": "Slovenský",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "sl",
@@ -413,7 +464,8 @@
"name": "Slovenian",
"localName": "Slovenščina",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "sn",
@@ -421,7 +473,8 @@
"name": "Shona",
"localName": "Shona",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "sr",
@@ -429,7 +482,8 @@
"name": "Serbian",
"localName": "Српски",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "sw",
@@ -437,7 +491,8 @@
"name": "Swahili",
"localName": "Kiswahili",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ta",
@@ -445,7 +500,8 @@
"name": "Tamil",
"localName": "தமிழ்",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "te",
@@ -453,7 +509,8 @@
"name": "Telugu",
"localName": "తెలుగు",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "tk",
@@ -461,7 +518,8 @@
"name": "Turkmen",
"localName": "türkmen",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "th",
@@ -469,7 +527,8 @@
"name": "Thai",
"localName": "ภาษาไทย",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "tl",
@@ -477,7 +536,8 @@
"name": "Tagalog",
"localName": "Tagalog",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "tr",
@@ -485,7 +545,8 @@
"name": "Turkish",
"localName": "Türkçe",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "tw",
@@ -493,7 +554,8 @@
"name": "Akan, Twi",
"localName": "Twi",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "uk",
@@ -501,7 +563,8 @@
"name": "Ukrainian",
"localName": "Українська",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "ur",
@@ -509,7 +572,8 @@
"name": "Urdu",
"localName": "اردو",
"langDir": "rtl",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "uz",
@@ -517,7 +581,8 @@
"name": "Uzbek",
"localName": "O'zbekcha",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "vi",
@@ -525,7 +590,8 @@
"name": "Vietnamese",
"localName": "Tiếng Việt",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "yo",
@@ -533,7 +599,8 @@
"name": "Yoruba",
"localName": "Yorùbá",
"langDir": "ltr",
- "dateFormat": "MM/DD/YYYY"
+ "dateFormat": "MM/DD/YYYY",
+ "validISO639_1": true
},
{
"code": "zh-tw",
@@ -541,7 +608,8 @@
"name": "Chinese Traditional",
"localName": "繁體中文",
"langDir": "ltr",
- "dateFormat": "YYYY-MM-DD"
+ "dateFormat": "YYYY-MM-DD",
+ "validISO639_1": true
},
{
"code": "zh",
@@ -549,6 +617,7 @@
"name": "Chinese Simplified",
"localName": "简体中文",
"langDir": "ltr",
- "dateFormat": "YYYY-MM-DD"
+ "dateFormat": "YYYY-MM-DD",
+ "validISO639_1": true
}
]
diff --git a/package.json b/package.json
index d91a847e531..d8a72cd73c1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ethereum-org-website",
- "version": "10.3.0",
+ "version": "10.4.0",
"license": "MIT",
"private": true,
"scripts": {
diff --git a/public/content/ai-agents/index.md b/public/content/ai-agents/index.md
index eb8e8a4100b..1fdc637e6cf 100644
--- a/public/content/ai-agents/index.md
+++ b/public/content/ai-agents/index.md
@@ -19,7 +19,7 @@ buttons:
isSecondary: false
---
-Imagine navigating Ethereum with an AI assistant that studies on-chain market trends 24/7, answers questions, and even executes transactions on your behalf. Welcome to the world of AI Agents—intelligent systems designed to simplify your digital life.
+Imagine navigating Ethereum with an AI assistant that studies onchain market trends 24/7, answers questions, and even executes transactions on your behalf. Welcome to the world of AI Agents—intelligent systems designed to simplify your digital life.
On Ethereum, we’re seeing innovations of AI agents ranging from virtual influencers and autonomous content creators to real-time market analysis platforms, empowering users by delivering insights, entertainment, and operational efficiency.
@@ -39,7 +39,7 @@ In contrast, Ethereum's decentralized ecosystem offers several key advantages:
These factors transform AI agents from simple bots into dynamic, self-improving systems that offer significant value across multiple sectors:
-
+
diff --git a/public/content/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/developers/docs/data-structures-and-encoding/rlp/index.md
index 04bc25d3032..890c86d8cc4 100644
--- a/public/content/developers/docs/data-structures-and-encoding/rlp/index.md
+++ b/public/content/developers/docs/data-structures-and-encoding/rlp/index.md
@@ -62,7 +62,7 @@ def encode_length(L, offset):
elif L < 256**8:
BL = to_binary(L)
return chr(len(BL) + offset + 55) + BL
- raise Exception("input too long")
+ raise Exception("input too long")
def to_binary(x):
if x == 0:
diff --git a/public/content/developers/docs/programming-languages/javascript/index.md b/public/content/developers/docs/programming-languages/javascript/index.md
index 5813464e560..27842c5e67c 100644
--- a/public/content/developers/docs/programming-languages/javascript/index.md
+++ b/public/content/developers/docs/programming-languages/javascript/index.md
@@ -46,17 +46,15 @@ This will help you understand things like "what's the data structure of an accou
If you prefer to read code, this JavaScript could be a great alternative to reading through our docs.
-**Check out the monorepo**
-[`ethereumjs`](https://github.com/ethereumjs/ethereumjs-vm)
+**Check out the EVM**
+[`@ethereumjs/evm`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm)
### Nodes and clients {#nodes-and-clients}
An Ethereumjs client is in active development that lets you dig into how Ethereum clients work in a language you understand; JavaScript!
-It used to be housed in a standalone [`repository`](https://github.com/ethereumjs/ethereumjs-client), however, was later merged into the EthereumVM monorepo as a package.
-
**Check out the client**
-[`ethereumjs-client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client)
+[`@ethereumjs/client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client)
## Other projects {#other-projects}
diff --git a/public/content/developers/docs/programming-languages/python/index.md b/public/content/developers/docs/programming-languages/python/index.md
index 82b42ebc123..6d3aa1f9c86 100644
--- a/public/content/developers/docs/programming-languages/python/index.md
+++ b/public/content/developers/docs/programming-languages/python/index.md
@@ -84,7 +84,7 @@ Looking for more resources? Check out [ethereum.org/developers](/developers/).
The following Ethereum-based projects use tools mentioned on this page. The related open-source repositories serve as a good reference for example code and best practices.
- [Yearn Finance](https://yearn.finance/) and [Yearn Vault Contracts repository](https://github.com/yearn/yearn-vaults)
-- [Curve](https://curve.fi/) and [Curve smart contracts repository](https://github.com/curvefi/curve-contract)
+- [Curve](https://www.curve.finance/) and [Curve smart contracts repository](https://github.com/curvefi/curve-contract)
- [BadgerDAO](https://badger.com/) and [smart contracts using Brownie toolchain](https://github.com/Badger-Finance/badger-system)
- [Sushi](https://sushi.com/) uses [Python in managing and deploying their vesting contracts](https://github.com/sushiswap/sushi-vesting-protocols)
- [Alpha Finance](https://alphafinance.io/), of Alpha Homora fame, uses [Brownie to test and deploy smart contracts](https://github.com/AlphaFinanceLab/alpha-staking-contract)
diff --git a/public/content/developers/docs/storage/index.md b/public/content/developers/docs/storage/index.md
index 4e57b3f297e..ded3aaebe68 100644
--- a/public/content/developers/docs/storage/index.md
+++ b/public/content/developers/docs/storage/index.md
@@ -43,7 +43,7 @@ In most cases, instead of storing all data onchain, the hash of where the data i
Platforms with contract-based persistence:
- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/)
-- [Skynet](https://siasky.net/)
+- [Skynet](https://sia.tech/)
- [Storj](https://storj.io/)
- [Züs](https://zus.network/)
- [Crust Network](https://crust.network)
@@ -126,11 +126,11 @@ Proof-of-stake based:
- [Documentation](https://docs.storj.io/)
- [GitHub](https://github.com/storj/storj)
-**Skynet - _Skynet is a decentralized PoW chain dedicated to a decentralized web._**
+**Sia - _Harnesseses cryptography to create a trustless cloud storage marketplace, allowing buyers and sellers to transact directly._**
-- [Skynet.net](https://siasky.net/)
-- [Documentation](https://siasky.net/docs/)
-- [GitHub](https://github.com/SkynetLabs/)
+- [Skynet.net](https://sia.tech/)
+- [Documentation](https://docs.sia.tech/)
+- [GitHub](https://github.com/SiaFoundation/)
**Filecoin - _Filecoin was created from the same team behind IPFS. It is an incentive layer on top of the IPFS ideals._**
diff --git a/public/content/developers/tutorials/the-graph-fixing-web3-data-querying/index.md b/public/content/developers/tutorials/the-graph-fixing-web3-data-querying/index.md
index 6f9e0e95a55..277da463a7b 100644
--- a/public/content/developers/tutorials/the-graph-fixing-web3-data-querying/index.md
+++ b/public/content/developers/tutorials/the-graph-fixing-web3-data-querying/index.md
@@ -3,14 +3,7 @@ title: "The Graph: Fixing Web3 data querying"
description: Blockchain is like a database but without SQL. All the data is there, but no way to access it. Let me show you how to fix this with The Graph and GraphQL.
author: Markus Waas
lang: en
-tags:
- [
- "solidity",
- "smart contracts",
- "querying",
- "the graph",
- "react",
- ]
+tags: ["solidity", "smart contracts", "querying", "the graph", "react"]
skill: intermediate
published: 2020-09-06
source: soliditydeveloper.com
@@ -90,7 +83,7 @@ First let's talk about GraphQL, originally designed and implemented by Facebook.

-
+
The two images pretty much capture the essence of GraphQL. With the query on the right we can define exactly what data we want, so there we get everything in one request and nothing more than exactly what we need. A GraphQL server handles the fetching of all data required, so it is incredibly easy for the frontend consumer side to use. [This is a nice explanation](https://www.apollographql.com/blog/graphql-explained-5844742f195e/) of how exactly the server handles a query if you're interested.
diff --git a/public/content/enterprise/index.md b/public/content/enterprise/index.md
index b04cdf02805..605f69e2d96 100644
--- a/public/content/enterprise/index.md
+++ b/public/content/enterprise/index.md
@@ -86,7 +86,7 @@ Here are some of the enterprise applications that have been built on top of the
- [ABN AMRO](https://tokeny.com/tokeny-fuels-abn-amro-bank-in-tokenizing-green-bonds-on-polygon/) - _with Tokeny, tokenized green bonds_
- [Anvil](https://anvil.xyz/) - _a system of Ethereum-based smart contracts that manages collateral and issues fully secured credit_
- [Mata Capital](https://consensys.io/blockchain-use-cases/finance/mata-capital) - _real estate investment tokenization_
-- [Obligate](https://www.obligate.com/) - _regulated and KYC'd on-chain bonds and commercial paper_
+- [Obligate](https://www.obligate.com/) - _regulated and KYC'd onchain bonds and commercial paper_
- [Siemens](https://press.siemens.com/global/en/pressrelease/siemens-remains-pioneer-another-digital-bond-successfully-issued-blockchain) - _bond issuance_
- [Sila](https://silamoney.com/) - _banking and ACH payments infrastructure-as-a-service, using a stablecoin_
- [Societe Generale FORGE](https://www.sgforge.com/product/bonds/) - _bond issuance_
diff --git a/public/content/guides/how-to-swap-tokens/index.md b/public/content/guides/how-to-swap-tokens/index.md
index 16045a62ef0..44a8b36d119 100644
--- a/public/content/guides/how-to-swap-tokens/index.md
+++ b/public/content/guides/how-to-swap-tokens/index.md
@@ -22,7 +22,7 @@ Some popular exchanges are:
- [Uniswap](https://app.uniswap.org/#/swap)
- [Sushiswap](https://www.sushi.com/swap)
- [1Inch](https://app.1inch.io/#/1/unified/swap/ETH/DAI)
-- [Curve](https://curve.fi/#/ethereum/swap)
+- [Curve](https://www.curve.finance/dex/ethereum/swap/)
Interesting? Learn more about what [decentralised finance (DeFi)](/defi/) is and how these new kinds of exchanges work.
diff --git a/public/content/guides/index.md b/public/content/guides/index.md
index 79c5f6f5d1c..e5d7f33d7b1 100644
--- a/public/content/guides/index.md
+++ b/public/content/guides/index.md
@@ -18,7 +18,7 @@ Do you want to start your Ethereum journey? Our practical guides lead you step-b
1. [How to revoke smart contract access to your crypto funds](/guides/how-to-revoke-token-access/) - If you suddenly see a transaction in your wallet that you did not initiate, this guide will teach you how to prevent that from happening again.
-2. [How to identify scam tokens](/guides/how-to-id-scam-tokens/) - What are scam tokens, how do they make themselves look legitimate, and how to identify them to protect yourself and avoid being scammed.
+2. [How to identify scam tokens](/guides/how-to-id-scam-tokens/) - What are scam tokens? How do they make themselves look legitimate, and how do you identify them to protect yourself and avoid being scammed?
## Using Ethereum
diff --git a/public/content/payments/index.md b/public/content/payments/index.md
index 88d93f2af25..72569c2908c 100644
--- a/public/content/payments/index.md
+++ b/public/content/payments/index.md
@@ -27,7 +27,7 @@ This isn't a far-off dream – it's happening today on Ethereum. While tradition
For millions of people working abroad, sending money back home is a regular necessity. Traditional remittance services often come with high fees and slow processing times. Ethereum offers a compelling alternative.
-
+
diff --git a/public/content/prediction-markets/index.md b/public/content/prediction-markets/index.md
index d1d0d79c49d..bfd97221f07 100644
--- a/public/content/prediction-markets/index.md
+++ b/public/content/prediction-markets/index.md
@@ -30,7 +30,7 @@ In theory, because bettors stand to profit from being correct, prediction market
Unlike traditional forecasting, blockchain-based prediction markets are:
-
+
diff --git a/public/content/real-world-assets/index.md b/public/content/real-world-assets/index.md
new file mode 100644
index 00000000000..00e72bfde6f
--- /dev/null
+++ b/public/content/real-world-assets/index.md
@@ -0,0 +1,95 @@
+---
+title: Real-world assets (RWAs)
+metaTitle: What are RWAs? | Benefits and Use of Real-world assets
+description: An overview of Real-world assets on Ethereum
+lang: en
+template: use-cases
+emoji: ":house_buildings:"
+image: /images/man-and-dog-playing.png
+alt: Man and dog playing.
+sidebarDepth: 2
+summaryPoint1: A method for turning valuable commodities into digital tokens.
+summaryPoint2: You can now own portions of real-life objects or assets, rather than having to buy an entire property or item.
+summaryPoint3: Connects traditional finance with the blockchain ecosystem.
+---
+
+Real-world assets (RWAs) are tokens representing existing forms of wealth, such as real estate, gold, stocks, art, machinery or collectibles. Tokenizing these items translates them into digital form, allowing them to be divided between multiple owners and making it easier to trade them.
+
+## What are RWAs? {#what-are-rwas}
+
+Some RWAs are tangible—items you can see and touch, such as gold bars or commercial buildings. Others are intangible, such as government debt, intellectual property, or equity in a company.
+
+When tokenized, these assets are turned into units of value. Tokenized gold is a good example of how this works. The company [Paxos](https://www.paxos.com/) translates 400-ounce gold bars into 400 tokens on the Ethereum blockchain, each backed by one ounce of gold. Token-holders can redeem their tokens for gold at any point. That’s also the case for tokens purchased from another RWA company, [Tether Gold](https://gold.tether.to/).
+
+Each token can be divided into even smaller fractions. Tether Gold tokens, for instance, can be split into parts as small as 0.000001.
+
+RWA tokens don’t have any intrinsic value. Rather, they reflect the value of the item that they represent, and so the token’s value changes along with the item’s value.
+
+## What are the benefits of RWAs? {#rwas-benifits}
+
+
+
+
+
+
+
+
+
+
+## How do RWAs work? {#how-rwas-work}
+
+Let’s look at a few examples from across the RWA ecosystem: real estate, traditional financial products, and fine art.
+
+### Investing in real estate {#investing-in-real-estate}
+
+Say that you’d like to invest in real estate, but purchasing an entire property is out of reach. Instead, you could buy RWAs through a project such as [RealT](https://realt.co/). Its tokens represent shares in a limited liability company (LLC) created to hold a property’s deed. Token-holders receive rental income in the form of stablecoins according to the fraction they hold; RealT says it has so far returned $15 million USD in net rental income to investors.
+
+Another project along the same lines, [LABS Group](https://x.com/labsgroupio), allows people to buy into tokenized real estate with amounts as small as $100 USD.
+
+### Investing in financial products {#investing-in-financial-products}
+
+Several projects bridge the world of traditional finance and decentralized finance (DeFi) by bringing securities, stocks, bonds and other financial instruments onto the blockchain.
+
+For example, the Ethereum-based company [Securitize](https://securitize.io/) specializes in tokenizing traditional financial products. In 2024, it partnered with BlackRock to launch a RWA fund. BlackRock says it plans to eventually tokenize $10 trillion USD of its assets: its CEO, Larry Fink, called tokenization “the next generation for markets”.
+
+### Investing in fine art {#investing-in-fine-art}
+
+There are a few different mechanisms for fine-art investment. [Masterworks](https://www.masterworks.com/) buys artwork, securitizes each piece, and sells shares in the form of tokens. It plans to later sell the artwork and distribute the profits to token-holders.
+
+Art owners looking to capitalize on their collection can sell up to 49 per cent of an artwork’s value on the platform [Maecenas](https://www.maecenas.co/), provided the piece is valued at more than $1 million USD.
+
+In both cases, token-holders don’t control the storage or future sale of the artwork. Rather, they’re in charge of how long they hold onto their tokens, which rise and fall with the value of the art.
+
+Meanwhile, the blockchain-based digital art registry [Artory](https://www.artory.com/) verifies the authenticity of artworks and records past ownership.
+
+### Investing in collectibles {#investing-in-collectibles}
+
+So far, most of these examples demonstrate how tokenization allows partial ownership of various types of wealth. Another benefit of tokenization is that it enables the trade of valuable items, such as collectibles, on the global market.
+
+One example of this is [Courtyard](https://courtyard.io/), which tokenizes trading cards–think of baseball cards, football cards or Pokemon cards. Card owners ship their cards to a secure storage facility in the USA. The cards are minted as digital tokens and added to the owners’ wallets for trading on Courtyard’s marketplace. Courtyard only accepts graded cards: that’s where a third party has certified a card’s authenticity and awarded it a score based on its condition, whether dilapidated or pristine.
+
+Courtyard also offers a type of royalty scheme. Each time a card is sold, the person who tokenized it receives one percent of the revenue. Only card originators are rewarded in this way. At any point, an owner can swap their digital cards for physical cards, no matter where they are located in the world.
+
+## What are the limitations of RWAs? {#rwas-limitations}
+
+One of the challenges of RWAs, at this early stage, involves ensuring the connection between real-life objects and their digital representations.
+
+A green flag is when RWA projects supply investors with proof of reserves–the guarantee that they are the legal owners of the physical objects backing digital tokens. Think of Paxos, Tether Gold, or Courtyard, mentioned earlier, all of which hold their assets in secure storage and offer owners the option of swapping a token for its physical equivalent at any point.
+
+Another limitation is whether token ownership is recognised by legal systems around the world. In other words, are smart contracts enforceable in a court of law, or can the holder of a RWA token claim ownership of the real-life item?
+
+Some of the frontrunners in terms of setting up legal frameworks specifically to recognise tokenization include Singapore, the United Arab Emirates, Hong Kong, and Switzerland, which introduced legislation in 2021 nicknamed the ‘Blockchain Act’ to regulate technologies such as tokenization. The European Union has begun the process of regulating RWAs, while in the United States, the Securities and Exchange Commission is expected to issue guidance on RWAs at some point.
+
+## Learn more {#learn-more}
+
+Dive into [smart contracts](/smart-contracts/) or find out more about a different token class, [non-fungible tokens (NFT)](/nft/).
+
+## Further reading {#further-reading}
+
+- [What is asset tokenization?](https://www.britannica.com/money/real-world-asset-tokenization) on Britannica
+- [How tokenization is transforming global finance and investment](https://www.weforum.org/stories/2024/12/tokenization-blockchain-assets-finance/) on the World Economic Forum
+- [What crypto investors need to know about tokenizing real-world assets](https://www.forbes.com/sites/irinaheaver/2024/03/14/what-crypto-investors-need-to-know-about-tokenizing-real-world-assets/) on Forbes
+- [How smart contracts work with blockchain](https://www.britannica.com/money/how-smart-contracts-work) on Britannica
+- [How tokenized real-world assets are transforming DeFi](https://medium.com/coinmonks/how-tokenized-real-world-assets-are-transforming-defi-4e040f28732a) on Medium
+- [What is RWA in crypto? Its blockchain role explained](https://www.bitdegree.org/crypto/tutorials/what-is-rwa-in-crypto) on BitDegree
+- [Top real-world assets (RWAs) coins today by market cap](https://www.forbes.com/digital-assets/categories/real-world-assets-rwa/) on Forbes
\ No newline at end of file
diff --git a/public/content/roadmap/pectra/7702/index.md b/public/content/roadmap/pectra/7702/index.md
index e03838a19ce..f6d04c7601e 100644
--- a/public/content/roadmap/pectra/7702/index.md
+++ b/public/content/roadmap/pectra/7702/index.md
@@ -57,7 +57,7 @@ For more information:
**Avoiding Vendor Lock-In**: In line with the above, a good implementation is vendor-neutral and interoperable. This often means adhering to emerging standards for smart accounts. For instance, [Alchemy’s Modular Account](https://github.com/alchemyplatform/modular-account) uses the ERC-6900 standard for modular smart accounts and is designed with “permissionless interoperable usage” in mind.
-**Privacy Preservation**: While on-chain privacy is limited, a delegation contract should strive to minimize data exposure and linkability. This can be achieved by supporting features like gas payments in ERC-20 tokens (so users need not maintain a public ETH balance, which improves privacy and UX) and one-time session keys (which reduce reliance on a single long-term key). For example, EIP-7702 enables paying gas in tokens via sponsored transactions, and a good implementation will make it easy to integrate such paymasters without leaking more information than necessary. Additionally, off-chain delegation of certain approvals (using signatures that are verified on-chain) means fewer on-chain transactions with the user’s primary key, aiding privacy. Accounts that require using a relayer force users to reveal their IP addresses. PublicMempools improves this, when a transaction/UserOp propagates through the mempool you can't tell whether it originated from the IP that sent it, or just relayed through it via the p2p protocol.
+**Privacy Preservation**: While onchain privacy is limited, a delegation contract should strive to minimize data exposure and linkability. This can be achieved by supporting features like gas payments in ERC-20 tokens (so users need not maintain a public ETH balance, which improves privacy and UX) and one-time session keys (which reduce reliance on a single long-term key). For example, EIP-7702 enables paying gas in tokens via sponsored transactions, and a good implementation will make it easy to integrate such paymasters without leaking more information than necessary. Additionally, off-chain delegation of certain approvals (using signatures that are verified onchain) means fewer onchain transactions with the user’s primary key, aiding privacy. Accounts that require using a relayer force users to reveal their IP addresses. PublicMempools improves this, when a transaction/UserOp propagates through the mempool you can't tell whether it originated from the IP that sent it, or just relayed through it via the p2p protocol.
**Extensibility and Modular Security**: Account implementations should be extensible so they can evolve with new features and security improvements. Upgradability is inherently possible with EIP-7702 (since an EOA can always delegate to a new contract in the future to upgrade its logic). Beyond upgradability, a good design allows modularity – e.g. plug-in modules for different signature schemes or spending policies – without needing to redeploy entirely. Alchemy’s Account Kit is a prime example, allowing developers to install validation modules (for different signature types like ECDSA, BLS, etc.) and execution modules for custom logic. To achieve greater flexibility and security in EIP-7702-enabled accounts, developers are encouraged to delegate to a proxy contract rather than directly to a specific implementation. This approach allows for seamless upgrades and modularity without requiring additional EIP-7702 authorizations for each change.
@@ -108,7 +108,7 @@ By adopting these solutions, developers can enhance the security of EIP-7702 del
When users perform delegated signatures, the target contract receiving the delegation should be clearly and prominently displayed to help mitigate phishing risks.
-**Minimal Trusted Surface & Security**: While offering flexibility, a delegation contract should keep its core logic minimal and auditable. The contract is effectively an extension of the user’s EOA, so any flaw can be catastrophic. Implementations should follow best practices from the smart contract security community. For instance, constructor or initializer functions must be carefully secured – as highlighted by Alchemy, if using a proxy pattern under 7702, an unprotected initializer could let an attacker take over the account. Teams should aim to keep the on-chain code simple: Ambire’s 7702 contract is only ~200 lines of Solidity, deliberately minimizing complexity to reduce bugs. A balance must be struck between feature-rich logic and the simplicity that eases auditing.
+**Minimal Trusted Surface & Security**: While offering flexibility, a delegation contract should keep its core logic minimal and auditable. The contract is effectively an extension of the user’s EOA, so any flaw can be catastrophic. Implementations should follow best practices from the smart contract security community. For instance, constructor or initializer functions must be carefully secured – as highlighted by Alchemy, if using a proxy pattern under 7702, an unprotected initializer could let an attacker take over the account. Teams should aim to keep the onchain code simple: Ambire’s 7702 contract is only ~200 lines of Solidity, deliberately minimizing complexity to reduce bugs. A balance must be struck between feature-rich logic and the simplicity that eases auditing.
### Known implementations {#known-implementations}
diff --git a/public/content/roadmap/pectra/maxeb/index.md b/public/content/roadmap/pectra/maxeb/index.md
index ee9f2de25e0..a623a7fe529 100644
--- a/public/content/roadmap/pectra/maxeb/index.md
+++ b/public/content/roadmap/pectra/maxeb/index.md
@@ -129,17 +129,28 @@ Note: The signing is done by the withdrawal address, not the validator key.
Validators with **Type 1** credentials get automatic, gasless sweeps of their excess balance (anything over 32 ETH) to their withdrawal address. Because **Type 2** allows a validator to compound balances in 1 ETH increments, it will not automatically sweep balances until it reaches 2048 ETH. Partial withdrawals on **Type 2** validators must be manually triggered and will cost gas.
+## Consolidation tooling {#consolidation-tooling}
+
+There are several tools available to manage consolidations. The official tool, created by the Ethereum Foundation, is the [Launchpad](https://launchpad.ethereum.org/en/validator-actions). There are also third-party tools created by entities from the staking community that may offer features not provided by the Launchpad. While the tools here are not audited or endorsed by the Ethereum Foundation, the following are open source tools by known members of the community.
+
+| Tool | Website | Open source | Creator | Audited | Interface | Notable features |
+| --- | --- | --- | --- | --- | --- | --- |
+| Pectra Staking Manager | pectrastaking.com | Yes, Apache 2.0 | [Pier Two](https://piertwo.com/) | No | Web UI | Wallet Connect, works with SAFE |
+| Pectra Validator Ops CLI Tool | [GitHub](https://github.com/Luganodes/Pectra-Batch-Contract) | Yes, MIT | [Luganodes](https://www.luganodes.com/) | Yes, Quantstamp [May 2025](https://certificate.quantstamp.com/full/luganodes-pectra-batch-contract/23f0765f-969a-4798-9edd-188d276c4a2b/index.html) | Command line | Batching, for many validators at once |
+| Ethereal | [GitHub](https://github.com/wealdtech/ethereal) | Yes, Apache 2.0 | [Jim McDonald](https://www.attestant.io/team/) | No | Command line | Full feature set for validator and node management |
+| Siren | [GitHub](https://github.com/sigp/siren) | Yes, Apache 2.0 | [Sigma Prime](https://sigmaprime.io/) | No | Some command line, but primarily web UI | Only works if you're using the Lighthouse consensus client |
+
## FAQ {#FAQ}
-### **Does opting-in change my proposal luck or rewards?**
+### Does opting-in change my proposal luck or rewards?
No. Opting in does not decrease your change of proposal - your duties and proposal selection remain the same. For example, if you have two 32 ETH validators vs one 64 ETH validator, you will have the same total chances of being selected to propose a block and earn rewards.
-### **Does opting in change my slashing risk?**
+### Does opting in change my slashing risk?
For smaller or unprofessional operators, the short answer is no. The longer answer is that, for professional operators running many validators per node with fast alerting, consolidating into fewer validators may reduce their ability to react to a slashing and prevent cascade events. The initial slashing *penalty* for all validators has been dramatically reduced from 1 ETH (per 32 ETH) to 0.0078125 ETH (per 32 ETH) to offset this risk.
-### **Do I have to exit my validator to convert?**
+### Do I have to exit my validator to convert?
No. You can convert in place without exiting.
@@ -175,13 +186,17 @@ Automatic sweeps will only happen with excess balances over 2048. For all other
No. Converting to **Type 2** is irreversible.
+### If I want to consolidate multiple validators, do I have convert each one to Type 2 first?
+
+Nope! Convert one validator to Type 2 then use that as the target. All other validators consolidated into that Type 2 target can be Type 1 or Type 2
+
### My validator is offline or below 32 ETH - can I still convert it?
Yes. As long as it's active (not exited) and you can sign with its withdrawal address, you can convert it.
## Resources {#resources}
-- [Electra consensus specs](https://github.com/ethereum/consensus-specs/blob/dev/specs/electra/beacon-chain.md): This is the ‘truest' version that you should rely on. When in doubt, read the specs
+- [Electra consensus specs](https://github.com/ethereum/consensus-specs/blob/dev/specs/electra/beacon-chain.md): This is the 'truest' version that you should rely on. When in doubt, read the specs
- Not everybody is comfortable wading through code, so [this maxEB-GPT](https://chatgpt.com/g/g-67f1650fb48081918f555e0c8d1c2ae9-maxeb-gpt) can help interpret the specs. *Disclaimer: The specs, not the AI, should be relied on as truth, as the AI may misinterpret information or hallucinate answers*
- [pectrified.com](https://pectrified.com/): View the state of consolidations, deposits, and queue waiting times
- [Ethereal](https://github.com/wealdtech/ethereal): Community-created CLI tool for managing common validator tasks
diff --git a/public/content/translations/pt-br/whitepaper/index.md b/public/content/translations/pt-br/whitepaper/index.md
index eb28d22bece..9d6c8cabfd9 100644
--- a/public/content/translations/pt-br/whitepaper/index.md
+++ b/public/content/translations/pt-br/whitepaper/index.md
@@ -405,7 +405,7 @@ Conforme descrito na seção de transição de estado, nossa solução funciona
- Um invasor vê um contrato com um código como `send(A,contract.storage[A]); contract.storage[A] = 0`, e envia uma transação com gas o suficiente para executar a primeira etapa, mas não a segunda (ou seja, fazendo uma retirada mas sem deixar diminuir o saldo). O autor do contrato não precisa se preocupar em se proteger contra ataques assim porque, se a execução parar no meio do caminho, as mudanças são revertidas.
- Um contrato financeiro funciona tomando a mediana de nove feeds de dados proprietários para minimizar o risco. Um invasor controla um dos feed de dados, que é projetado para ser modificável por meio do mecanismo de chamada por endereço-variável descrito na seção sobre DAOs, e o converte para rodar um loop infinito, forçando assim qualquer tentativa de reivindicar fundos do contrato financeiro a ficar sem gas. Porém, o contrato financeiro pode definir um limite de gas na mensagem para prevenir este problema.
-A alternativa para completude de Turing é a incompletude de Turing, em que `JUMP` e `JUMPI` não existem e apenas uma cópia de cada contrato pode existir no stack de chamadas em dado momento. Com esse sistema, o sistema de taxas descrito e as incertezas em torno da eficácia de nossa solução podem não ser necessárias, pois o custo de executar um contrato seria limitado por seu tamanho. Alpem disso, a incompletude deTuring não é uma limitação tão grande. De todos os exemplos de contrato que concebemos internamente, até agora apenas um precisou de um loop, e mesmo esse loop poderia ser removido fazendo 26 repetições de um pedaço de linha de código. Dadas as sérias implicações da completude de Turing e o benefício limitado, por que não simplesmente ter uma linguagem Turing incompleta? Na verdade, porém, a incompletude de Turing está longe de ser uma solução perfeita para o problema. Para entender o porquê, considere os seguintes contratos:
+A alternativa para completude de Turing é a incompletude de Turing, em que `JUMP` e `JUMPI` não existem e apenas uma cópia de cada contrato pode existir no stack de chamadas em dado momento. Com esse sistema, o sistema de taxas descrito e as incertezas em torno da eficácia de nossa solução podem não ser necessárias, pois o custo de executar um contrato seria limitado por seu tamanho. Além disso, a incompletude de Turing não é uma limitação tão grande. De todos os exemplos de contrato que concebemos internamente, até agora apenas um precisou de um loop, e mesmo esse loop poderia ser removido fazendo 26 repetições de um pedaço de linha de código. Dadas as sérias implicações da completude de Turing e o benefício limitado, por que não simplesmente ter uma linguagem Turing incompleta? Na verdade, porém, a incompletude de Turing está longe de ser uma solução perfeita para o problema. Para entender o porquê, considere os seguintes contratos:
```sh
C0: call(C1); call(C1);
@@ -450,7 +450,7 @@ O modelo de emissão será o seguinte:
_Apesar da emissão linear da moeda, assim como com o Bitcoin, ao longo do tempo a taxa de crescimento da oferta tende a zero._
-As duas principais opções no modelo acima são (1) a existência e o tamanho de um pool de doações e (2) a existência de uma oferta de crescimento linear permanente, em vez de uma oferta limitada como no Bitcoin. A justificativa do pool de doações é a seguinte. se o pool de doações não existisse e a emissão linear fosse reduzida a 0,217x para fornecer a mesma taxa de inflação, então a quantidade total de ether seria 16,5% menor e então cada unidade seria 19,8% mais valiosa. Assim, no equilíbrio de 19,8%, mais ether seria comprado na venda, então cada unidade voltaria a ter exatamente o mesmo valor de antes. A organização teria então também 1,198% mais BTC, que provavelmente será dividido em duas fatias: o BTC original e o adicional de 0,198x. Assim, a situação equivale _exatamente_ à doação, mas com uma importante diferença: a organização possui apenas BTC, e portanto, não é incentivada a apoiar o valor da unidade ether.
+As duas principais opções no modelo acima são (1) a existência e o tamanho de um pool de doações e (2) a existência de uma oferta de crescimento linear permanente, em vez de uma oferta limitada como no Bitcoin. A justificativa do pool de doações é a seguinte. Se o pool de doações não existisse e a emissão linear fosse reduzida a 0,217x para fornecer a mesma taxa de inflação, então a quantidade total de ether seria 16,5% menor e então cada unidade seria 19,8% mais valiosa. Assim, no equilíbrio de 19,8%, mais ether seria comprado na venda, então cada unidade voltaria a ter exatamente o mesmo valor de antes. A organização teria então também 1,198% mais BTC, que provavelmente será dividido em duas fatias: o BTC original e o adicional de 0,198x. Assim, a situação equivale _exatamente_ à doação, mas com uma importante diferença: a organização possui apenas BTC, e portanto, não é incentivada a apoiar o valor da unidade ether.
O modelo linear permanente de crescimento da oferta (de moeda) reduz o risco do que alguns veem como uma excessiva concentração de riqueza em Bitcoin, e dá aos indivíduos, agora e no futuro, uma chance justa de adquirir unidades da moeda, enquanto mantém um forte incentivo para obter e manter ether, porque a "taxa de crescimento da oferta" como porcentagem ainda tende a zero ao longo do tempo. Também teorizamos isso porque as moedas sempre se perdem ao longo do tempo devido a descuidos, morte etc, e a perda de moedas pode ser modelada como uma porcentagem da oferta total por ano, que a oferta total de moedas em circulação acabará por estabilizar num valor igual à emissão anual dividida pela taxa de perda (por exemplo, a uma taxa de perda de 1%, quando a oferta atingir 26x então 0,26x será minerado e 0,26x perdido todo ano, criando um equilíbrio).
diff --git a/public/images/resources/beaconcha-in.png b/public/images/resources/beaconcha-in.png
index 58cb0f5e3cf..93ea40b0c30 100644
Binary files a/public/images/resources/beaconcha-in.png and b/public/images/resources/beaconcha-in.png differ
diff --git a/public/images/resources/blobsguru.png b/public/images/resources/blobsguru.png
index 19ce09eb8c8..b5133b1f3a4 100644
Binary files a/public/images/resources/blobsguru.png and b/public/images/resources/blobsguru.png differ
diff --git a/public/images/resources/blocknative.png b/public/images/resources/blocknative.png
index 3c91bce7722..8f08c5909ed 100644
Binary files a/public/images/resources/blocknative.png and b/public/images/resources/blocknative.png differ
diff --git a/public/images/resources/bundlebear.png b/public/images/resources/bundlebear.png
new file mode 100644
index 00000000000..5faef4b348a
Binary files /dev/null and b/public/images/resources/bundlebear.png differ
diff --git a/public/images/resources/cryptowerk.png b/public/images/resources/cryptowerk.png
index efc0405bb9a..09af7a68e30 100644
Binary files a/public/images/resources/cryptowerk.png and b/public/images/resources/cryptowerk.png differ
diff --git a/public/images/resources/defi-llama.png b/public/images/resources/defi-llama.png
index c0f44698920..87b01828f69 100644
Binary files a/public/images/resources/defi-llama.png and b/public/images/resources/defi-llama.png differ
diff --git a/public/images/resources/defi-market-cap.png b/public/images/resources/defi-market-cap.png
deleted file mode 100644
index 64371a8c8ef..00000000000
Binary files a/public/images/resources/defi-market-cap.png and /dev/null differ
diff --git a/public/images/resources/defi-scan.png b/public/images/resources/defi-scan.png
index c10eca423be..58c0ffd9ac4 100644
Binary files a/public/images/resources/defi-scan.png and b/public/images/resources/defi-scan.png differ
diff --git a/public/images/resources/eas.png b/public/images/resources/eas.png
index f6d4b65cb45..1819852baa7 100644
Binary files a/public/images/resources/eas.png and b/public/images/resources/eas.png differ
diff --git a/public/images/resources/eigenphi.png b/public/images/resources/eigenphi.png
index 8cfa8873cff..f31d14e4bba 100644
Binary files a/public/images/resources/eigenphi.png and b/public/images/resources/eigenphi.png differ
diff --git a/public/images/resources/eth-glyph-black.png b/public/images/resources/eth-glyph-black.png
index 991c4d27aa5..5bdaca42509 100644
Binary files a/public/images/resources/eth-glyph-black.png and b/public/images/resources/eth-glyph-black.png differ
diff --git a/public/images/resources/eth-glyph-blue-circle.png b/public/images/resources/eth-glyph-blue-circle.png
index b811169710d..821a185c265 100644
Binary files a/public/images/resources/eth-glyph-blue-circle.png and b/public/images/resources/eth-glyph-blue-circle.png differ
diff --git a/public/images/resources/eth-glyph-e-org.png b/public/images/resources/eth-glyph-e-org.png
index dfe97a1db86..e56351c10cf 100644
Binary files a/public/images/resources/eth-glyph-e-org.png and b/public/images/resources/eth-glyph-e-org.png differ
diff --git a/public/images/resources/eth-glyph-rainbow-frame.png b/public/images/resources/eth-glyph-rainbow-frame.png
new file mode 100644
index 00000000000..fa4ff4db843
Binary files /dev/null and b/public/images/resources/eth-glyph-rainbow-frame.png differ
diff --git a/public/images/resources/eth-glyph-rainbow.frame.png b/public/images/resources/eth-glyph-rainbow.frame.png
deleted file mode 100644
index ff150fe28e4..00000000000
Binary files a/public/images/resources/eth-glyph-rainbow.frame.png and /dev/null differ
diff --git a/public/images/resources/etherscan.png b/public/images/resources/etherscan.png
index 77cba5c68c8..1d8a982bc80 100644
Binary files a/public/images/resources/etherscan.png and b/public/images/resources/etherscan.png differ
diff --git a/public/images/resources/ethproofs.png b/public/images/resources/ethproofs.png
index d40c4730fff..f2a724f188d 100644
Binary files a/public/images/resources/ethproofs.png and b/public/images/resources/ethproofs.png differ
diff --git a/public/images/resources/ethstaker.png b/public/images/resources/ethstaker.png
deleted file mode 100644
index ad100752a55..00000000000
Binary files a/public/images/resources/ethstaker.png and /dev/null differ
diff --git a/public/images/resources/farcaster.png b/public/images/resources/farcaster.png
index e063ce20dc6..c07d58ef015 100644
Binary files a/public/images/resources/farcaster.png and b/public/images/resources/farcaster.png differ
diff --git a/public/images/resources/growthepie.png b/public/images/resources/growthepie.png
index 1a633a3b216..fc759f38419 100644
Binary files a/public/images/resources/growthepie.png and b/public/images/resources/growthepie.png differ
diff --git a/public/images/resources/l2beat.png b/public/images/resources/l2beat.png
index 66d6a7ab17e..7cedb97556a 100644
Binary files a/public/images/resources/l2beat.png and b/public/images/resources/l2beat.png differ
diff --git a/public/images/resources/lucky-staker.png b/public/images/resources/lucky-staker.png
new file mode 100644
index 00000000000..60e0cfbb36b
Binary files /dev/null and b/public/images/resources/lucky-staker.png differ
diff --git a/public/images/resources/mev-watch.png b/public/images/resources/mev-watch.png
deleted file mode 100644
index ae7257c4cc0..00000000000
Binary files a/public/images/resources/mev-watch.png and /dev/null differ
diff --git a/public/images/resources/nftgo.png b/public/images/resources/nftgo.png
index d2deb18179c..45e12bfeabf 100644
Binary files a/public/images/resources/nftgo.png and b/public/images/resources/nftgo.png differ
diff --git a/public/images/resources/nodewatch.png b/public/images/resources/nodewatch.png
index 3c7927d38a6..6f7d8cc254a 100644
Binary files a/public/images/resources/nodewatch.png and b/public/images/resources/nodewatch.png differ
diff --git a/public/images/resources/panda.png b/public/images/resources/panda.png
new file mode 100644
index 00000000000..e8755ed76df
Binary files /dev/null and b/public/images/resources/panda.png differ
diff --git a/public/images/resources/pectrified.png b/public/images/resources/pectrified.png
new file mode 100644
index 00000000000..dfe5837e9d5
Binary files /dev/null and b/public/images/resources/pectrified.png differ
diff --git a/public/images/resources/rated-network.png b/public/images/resources/rated-network.png
index 606e084ce40..1f8a3036b57 100644
Binary files a/public/images/resources/rated-network.png and b/public/images/resources/rated-network.png differ
diff --git a/public/images/resources/relayscan.png b/public/images/resources/relayscan.png
index b8eb5155749..d0636ec4b2c 100644
Binary files a/public/images/resources/relayscan.png and b/public/images/resources/relayscan.png differ
diff --git a/public/images/resources/reserves.png b/public/images/resources/reserves.png
new file mode 100644
index 00000000000..13a5e5e1ee0
Binary files /dev/null and b/public/images/resources/reserves.png differ
diff --git a/public/images/resources/rwa.png b/public/images/resources/rwa.png
index 85d737daf0c..1fcbca6f028 100644
Binary files a/public/images/resources/rwa.png and b/public/images/resources/rwa.png differ
diff --git a/public/images/resources/stablecoins-wtf.png b/public/images/resources/stablecoins-wtf.png
index 32c7b8e92db..99dbbfb5ebc 100644
Binary files a/public/images/resources/stablecoins-wtf.png and b/public/images/resources/stablecoins-wtf.png differ
diff --git a/public/images/resources/supermajority.png b/public/images/resources/supermajority.png
index dfaf8f9262d..c76b2b45358 100644
Binary files a/public/images/resources/supermajority.png and b/public/images/resources/supermajority.png differ
diff --git a/public/images/resources/visa-onchain-analytcs.png b/public/images/resources/visa-onchain-analytcs.png
index 06454e4fb26..8ebebdb5205 100644
Binary files a/public/images/resources/visa-onchain-analytcs.png and b/public/images/resources/visa-onchain-analytcs.png differ
diff --git a/public/images/resources/walletbeat.png b/public/images/resources/walletbeat.png
new file mode 100644
index 00000000000..6555e8724c3
Binary files /dev/null and b/public/images/resources/walletbeat.png differ
diff --git a/public/images/roadmap/roadmap-fusaka.png b/public/images/roadmap/roadmap-fusaka.png
new file mode 100644
index 00000000000..abc542709e4
Binary files /dev/null and b/public/images/roadmap/roadmap-fusaka.png differ
diff --git a/public/images/roadmap/roadmap-pectra.png b/public/images/roadmap/roadmap-pectra.png
index 82a3d2a2c3f..00db6e5a20f 100644
Binary files a/public/images/roadmap/roadmap-pectra.png and b/public/images/roadmap/roadmap-pectra.png differ
diff --git a/src/components/ActionCard.tsx b/src/components/ActionCard.tsx
index b54d79aa26a..c6c8e4d3cef 100644
--- a/src/components/ActionCard.tsx
+++ b/src/components/ActionCard.tsx
@@ -41,7 +41,7 @@ const ActionCard = ({
return (
{
- // TODO: LOGOS
+ // TODO: LOGOS, extract intl strings
const productListSets = {
"ai-agents": [
{
@@ -40,7 +40,7 @@ const AiAgentProductLists = ({ list }: { list: string }) => {
Luna engages with users constantly through own X account and live
stream. You might receive an X reply if you tag her handle or a
voice message if you comment on her stream and own her token! Luna
- controls own on-chain wallet.
+ controls own onchain wallet.
,