diff --git a/.all-contributorsrc b/.all-contributorsrc index 15d31afc36a..414e0b25446 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -12677,7 +12677,8 @@ "contributions": [ "content", "bug", - "code" + "code", + "translation" ] }, { @@ -12832,7 +12833,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/72797635?v=4", "profile": "https://github.com/Savio-Sou", "contributions": [ - "maintenance" + "maintenance", + "code" ] }, { @@ -13124,6 +13126,96 @@ "contributions": [ "bug" ] + }, + { + "login": "kalidiagne", + "name": "Kalidou Diagne", + "avatar_url": "https://avatars.githubusercontent.com/u/20865711?v=4", + "profile": "https://kalidou.dev", + "contributions": [ + "content" + ] + }, + { + "login": "chainide-agent-bob", + "name": "Bob", + "avatar_url": "https://avatars.githubusercontent.com/u/203082506?v=4", + "profile": "https://chainide.com", + "contributions": [ + "content" + ] + }, + { + "login": "Jorgerl02", + "name": "Jorge Rodriguez", + "avatar_url": "https://avatars.githubusercontent.com/u/131685800?v=4", + "profile": "https://smithii.io", + "contributions": [ + "ideas" + ] + }, + { + "login": "clarus", + "name": "Guillaume Claret", + "avatar_url": "https://avatars.githubusercontent.com/u/316665?v=4", + "profile": "https://formal.land/", + "contributions": [ + "maintenance" + ] + }, + { + "login": "eeemmmmmm", + "name": "emmmm", + "avatar_url": "https://avatars.githubusercontent.com/u/155267286?v=4", + "profile": "https://github.com/eeemmmmmm", + "contributions": [ + "maintenance" + ] + }, + { + "login": "vibhorkashyap", + "name": "Vibhor Kashyap", + "avatar_url": "https://avatars.githubusercontent.com/u/1714110?v=4", + "profile": "https://github.com/vibhorkashyap", + "contributions": [ + "maintenance" + ] + }, + { + "login": "meetrick", + "name": "Hwangjae Lee", + "avatar_url": "https://avatars.githubusercontent.com/u/19239345?v=4", + "profile": "https://github.com/meetrick", + "contributions": [ + "translation" + ] + }, + { + "login": "shynur", + "name": "shynur", + "avatar_url": "https://avatars.githubusercontent.com/u/98227472?v=4", + "profile": "http://shynur.fun", + "contributions": [ + "translation" + ] + }, + { + "login": "David7877", + "name": "David7877", + "avatar_url": "https://avatars.githubusercontent.com/u/203911861?v=4", + "profile": "https://github.com/David7877", + "contributions": [ + "tool" + ] + }, + { + "login": "EnesKeremAYDIN", + "name": "Enes Kerem AYDIN", + "avatar_url": "https://avatars.githubusercontent.com/u/46195766?v=4", + "profile": "https://eneskeremaydin.com.tr", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, diff --git a/.github/ISSUE_TEMPLATE/suggest_dapp.yaml b/.github/ISSUE_TEMPLATE/suggest_dapp.yaml index 8e0df30c748..960b3df2137 100644 --- a/.github/ISSUE_TEMPLATE/suggest_dapp.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_dapp.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a dapp, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). + Before suggesting a dapp, make sure you've read [our listing policy](https://www.ethereum.org/contributing/adding-products/). - type: markdown attributes: value: Only continue with the issue if your dapp meets the criteria listed there. diff --git a/.github/ISSUE_TEMPLATE/suggest_dev_tool.yaml b/.github/ISSUE_TEMPLATE/suggest_dev_tool.yaml index a566cf17055..5c2e6bb1658 100644 --- a/.github/ISSUE_TEMPLATE/suggest_dev_tool.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_dev_tool.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before submitting this suggestion, be sure to read our [listing policy for dev tools](https://ethereum.org/en/contributing/adding-developer-tools/) + Before submitting this suggestion, be sure to read our [listing policy for dev tools](https://ethereum.org/contributing/adding-developer-tools/) - type: markdown id: project_info attributes: diff --git a/.github/ISSUE_TEMPLATE/suggest_exchange.yaml b/.github/ISSUE_TEMPLATE/suggest_exchange.yaml index 60e4e670c6c..9b38b858c3d 100644 --- a/.github/ISSUE_TEMPLATE/suggest_exchange.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_exchange.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting an exchange, make sure you've read [our exchange listing policy](https://ethereum.org/en/contributing/adding-exchanges/). If it's a decentralized exchange (DEX) you'd like to list, please take a look at our [policy for listing dapps](https://ethereum.org/en/contributing/adding-products/). + Before suggesting an exchange, make sure you've read [our exchange listing policy](https://ethereum.org/contributing/adding-exchanges/). If it's a decentralized exchange (DEX) you'd like to list, please take a look at our [policy for listing dapps](https://ethereum.org/contributing/adding-products/). - type: markdown attributes: value: | diff --git a/.github/ISSUE_TEMPLATE/suggest_layer2.yaml b/.github/ISSUE_TEMPLATE/suggest_layer2.yaml index 23e0c6afffc..46dd1c259b2 100644 --- a/.github/ISSUE_TEMPLATE/suggest_layer2.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_layer2.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a layer 2, make sure you've read [our listing policy](https://ethereum.org/en/contributing/adding-layer-2s/). + Before suggesting a layer 2, make sure you've read [our listing policy](https://ethereum.org/contributing/adding-layer-2s/). - type: markdown attributes: value: | diff --git a/.github/ISSUE_TEMPLATE/suggest_quiz.yaml b/.github/ISSUE_TEMPLATE/suggest_quiz.yaml index af037b47770..51583f91849 100644 --- a/.github/ISSUE_TEMPLATE/suggest_quiz.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_quiz.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting additions, updates, or deletions of quiz content, make sure you've read our [contributing guidelines for quizzes](https://ethereum.org/en/contributing/quizzes/). + Before suggesting additions, updates, or deletions of quiz content, make sure you've read our [contributing guidelines for quizzes](https://ethereum.org/contributing/quizzes/). - type: input id: page attributes: diff --git a/.github/ISSUE_TEMPLATE/suggest_resource.yaml b/.github/ISSUE_TEMPLATE/suggest_resource.yaml index 6df8803f163..6fab6bd9b74 100644 --- a/.github/ISSUE_TEMPLATE/suggest_resource.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_resource.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a resource, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-resources/). + Before suggesting a resource, make sure you've read [our listing policy](https://www.ethereum.org/contributing/adding-resources/). - type: markdown attributes: value: Only continue with the issue if your resource meets the criteria listed there. diff --git a/.github/ISSUE_TEMPLATE/suggest_staking_product.yaml b/.github/ISSUE_TEMPLATE/suggest_staking_product.yaml index 2cf09f2ba93..b8dd89cb28d 100644 --- a/.github/ISSUE_TEMPLATE/suggest_staking_product.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_staking_product.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a staking product or service, make sure you've read [our listing policy](https://ethereum.org/en/contributing/adding-staking-products/). + Before suggesting a staking product or service, make sure you've read [our listing policy](https://ethereum.org/contributing/adding-staking-products/). - type: markdown attributes: value: | diff --git a/.github/ISSUE_TEMPLATE/suggest_tutorial.yaml b/.github/ISSUE_TEMPLATE/suggest_tutorial.yaml index 43c3a3174fc..7877a4d6864 100644 --- a/.github/ISSUE_TEMPLATE/suggest_tutorial.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_tutorial.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - We'll consider [our content resources policy](https://ethereum.org/en/contributing/content-resources/) when reviewing the tutorial, so please take a look there first. + We'll consider [our content resources policy](https://ethereum.org/contributing/content-resources/) when reviewing the tutorial, so please take a look there first. - type: markdown id: tutorial_info attributes: @@ -29,7 +29,7 @@ body: id: tutorial_tags attributes: label: Tutorial tags - description: What topics are covered in your tutorial? Check out the current tags on https://ethereum.org/en/developers/tutorials/ but feel free to add new ones + description: What topics are covered in your tutorial? Check out the current tags on https://ethereum.org/developers/tutorials/ but feel free to add new ones validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 1f356b336e1..a96fd28b810 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-wallets/). Only continue with the issue if the wallet meets the criteria listed there. For any required questions, please answer N/A for any questions not applicable to your wallet. This form is very comprehensive, and if you feel like you can't answer all the questions, please reach out to the wallet provider to fill out this template. + Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/contributing/adding-wallets/). Only continue with the issue if the wallet meets the criteria listed there. For any required questions, please answer N/A for any questions not applicable to your wallet. This form is very comprehensive, and if you feel like you can't answer all the questions, please reach out to the wallet provider to fill out this template. - type: markdown id: project_info attributes: diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index fd061c16e16..93914a58472 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -32,7 +32,7 @@ jobs: with: version: 10 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: "pnpm" diff --git a/.github/workflows/crowdin-ci.yml b/.github/workflows/crowdin-ci.yml index ea7b333e53d..29a7e66e445 100644 --- a/.github/workflows/crowdin-ci.yml +++ b/.github/workflows/crowdin-ci.yml @@ -24,7 +24,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/generate-review-report.yml b/.github/workflows/generate-review-report.yml index fe0b6075b1d..dffaf59215b 100644 --- a/.github/workflows/generate-review-report.yml +++ b/.github/workflows/generate-review-report.yml @@ -16,7 +16,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/get-crowdin-contributors.yml b/.github/workflows/get-crowdin-contributors.yml index ef02c809ba7..4c0600d9dd6 100644 --- a/.github/workflows/get-crowdin-contributors.yml +++ b/.github/workflows/get-crowdin-contributors.yml @@ -18,7 +18,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/get-leaderboard-reports.yml b/.github/workflows/get-leaderboard-reports.yml index a6a78ecb678..9f72dca61a0 100644 --- a/.github/workflows/get-leaderboard-reports.yml +++ b/.github/workflows/get-leaderboard-reports.yml @@ -18,7 +18,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/get-translation-progress.yml b/.github/workflows/get-translation-progress.yml index 2d879b8b793..79c58555110 100644 --- a/.github/workflows/get-translation-progress.yml +++ b/.github/workflows/get-translation-progress.yml @@ -18,7 +18,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/import-community-events.yml b/.github/workflows/import-community-events.yml index 289b150a2c8..76abaecdf3d 100644 --- a/.github/workflows/import-community-events.yml +++ b/.github/workflows/import-community-events.yml @@ -18,7 +18,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/update-chains.yml b/.github/workflows/update-chains.yml index f253e819061..a3571c39992 100644 --- a/.github/workflows/update-chains.yml +++ b/.github/workflows/update-chains.yml @@ -19,7 +19,7 @@ jobs: version: 10 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8fed45a889b..87a57e13fe3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,4 +5,4 @@ ### Thank you for your interest in contributing! -Please see [our contributing guide on ethereum.org](https://ethereum.org/en/contributing/) and [our GitHub repo homepage](https://github.com/ethereum/ethereum-org-website#how-to-contribute) for the latest information on how to contribute! +Please see [our contributing guide on ethereum.org](https://ethereum.org/contributing/) and [our GitHub repo homepage](https://github.com/ethereum/ethereum-org-website#how-to-contribute) for the latest information on how to contribute! diff --git a/README.md b/README.md index f5bd332ee7d..be53dcd9edb 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@

👋 Welcome to ethereum.org!

-This is the repo for the [ethereum.org](https://ethereum.org) website, a resource for the Ethereum community. The site's purpose is to _“Be the best portal to Ethereum for our growing global community"_ - read more about what this means [here](https://ethereum.org/en/about/). +This is the repo for the [ethereum.org](https://ethereum.org) website, a resource for the Ethereum community. The site's purpose is to _“Be the best portal to Ethereum for our growing global community"_ - read more about what this means [here](https://ethereum.org/about/). -[ethereum.org](https://ethereum.org) is being improved and changed over time through the contributions of community members who submit content, give feedback, or volunteer their time to manage its evolution. If you’re interested in helping to improve [ethereum.org](https://ethereum.org), find out [how to contribute](https://ethereum.org/en/contributing/). +[ethereum.org](https://ethereum.org) is being improved and changed over time through the contributions of community members who submit content, give feedback, or volunteer their time to manage its evolution. If you’re interested in helping to improve [ethereum.org](https://ethereum.org), find out [how to contribute](https://ethereum.org/contributing/). ## Looking for the Ethereum blockchain's code? -If you're looking for the Ethereum blockchain itself, there is no single repo. Instead, Ethereum has multiple implementations of the protocol written in different programming languages for security and diversity. [Check out the different implementations](https://ethereum.org/en/developers/docs/nodes-and-clients/#execution-clients) +If you're looking for the Ethereum blockchain itself, there is no single repo. Instead, Ethereum has multiple implementations of the protocol written in different programming languages for security and diversity. [Check out the different implementations](https://ethereum.org/developers/docs/nodes-and-clients/#execution-clients)
@@ -163,7 +163,7 @@ git push ### 6. Wait for review - The website team reviews every PR -- See [how decisions are made on content changes](https://ethereum.org/en/contributing/#how-decisions-about-the-site-are-made) +- See [how decisions are made on content changes](https://ethereum.org/contributing/#how-decisions-about-the-site-are-made) - Acceptable PRs will be approved & merged into the `dev` branch Learn more about how we review pull requests [here](docs/review-process.md). @@ -206,7 +206,7 @@ Learn more about how we review pull requests [here](docs/review-process.md). - To help with verification we request GitHub contributors connect their GitHub account with their Discord account (Discord > Settings > Connections > GitHub). Crowdin contributors will be verified directly through Crowdin by our team. -If you haven't contributed yet and would like to earn a POAP/OATs to show your loyalty to the Ethereum space, head over to the [issues](https://github.com/ethereum/ethereum-org-website/issues/) tab to get started! If you would like to contribute to translations check out our [Translation Program](https://ethereum.org/en/contributing/translation-program/). +If you haven't contributed yet and would like to earn a POAP/OATs to show your loyalty to the Ethereum space, head over to the [issues](https://github.com/ethereum/ethereum-org-website/issues/) tab to get started! If you would like to contribute to translations check out our [Translation Program](https://ethereum.org/contributing/translation-program/).
@@ -1976,7 +1976,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Matthias Seidl
Matthias Seidl

💻 - JoeChenJ
JoeChenJ

🖋 🐛 💻 + JoeChenJ
JoeChenJ

🖋 🐛 💻 🌍 Varshitha
Varshitha

🚧 Alexandria Roberts
Alexandria Roberts

💻 colin
colin

🖋 @@ -1997,7 +1997,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Antoine-Sparenberg
Antoine-Sparenberg

🚧 Kendra Karol Sevilla
Kendra Karol Sevilla

🚧 otc group
otc group

🚧 - Savio
Savio

🚧 + Savio
Savio

🚧 💻 fuder.eth
fuder.eth

🚧 @karelxfi
@karelxfi

🔧 @@ -2040,6 +2040,18 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Abel Derderian
Abel Derderian

🚧 haouvw
haouvw

🐛 + Kalidou Diagne
Kalidou Diagne

🖋 + Bob
Bob

🖋 + Jorge Rodriguez
Jorge Rodriguez

🤔 + Guillaume Claret
Guillaume Claret

🚧 + emmmm
emmmm

🚧 + + + Vibhor Kashyap
Vibhor Kashyap

🚧 + Hwangjae Lee
Hwangjae Lee

🌍 + shynur
shynur

🌍 + David7877
David7877

🔧 + Enes Kerem AYDIN
Enes Kerem AYDIN

🚧 diff --git a/app/[locale]/10years/_components/NFTMintCard/views/MintAlreadyMinted.tsx b/app/[locale]/10years/_components/NFTMintCard/views/MintAlreadyMinted.tsx index 8de1889d247..243a546637e 100644 --- a/app/[locale]/10years/_components/NFTMintCard/views/MintAlreadyMinted.tsx +++ b/app/[locale]/10years/_components/NFTMintCard/views/MintAlreadyMinted.tsx @@ -3,7 +3,7 @@ import { BaseLink } from "@/components/ui/Link" export default function MintAlreadyMinted() { const tweetText = encodeURIComponent( - "🎉 I have my free 10th-Anniversary collectible NFT from ethereum.org 🔷 Celebrating a decade of open, decentralized innovation. Join me 👉 https://ethereum.org/en/10years/ #Ethereum10" + "🎉 I have my free 10th-Anniversary collectible NFT from ethereum.org 🔷 Celebrating a decade of open, decentralized innovation. Join me 👉 https://ethereum.org/10years/ #Ethereum10" ) const tweetUrl = `https://twitter.com/intent/tweet?text=${tweetText}` diff --git a/app/[locale]/10years/_components/NFTMintCard/views/MintSuccess.tsx b/app/[locale]/10years/_components/NFTMintCard/views/MintSuccess.tsx index dde859367f0..9cb1dbb5115 100644 --- a/app/[locale]/10years/_components/NFTMintCard/views/MintSuccess.tsx +++ b/app/[locale]/10years/_components/NFTMintCard/views/MintSuccess.tsx @@ -13,7 +13,7 @@ import { getTxEtherscanUrl } from "@/lib/torch" export default function MintSuccess({ txHash }: { txHash?: string }) { const tweetText = encodeURIComponent( - "🎉 I just claimed my free 10th-Anniversary collectible NFT from ethereum.org 🔷 Celebrating a decade of open, decentralized innovation. Join me 👉 https://ethereum.org/en/10years/ #Ethereum10" + "🎉 I just claimed my free 10th-Anniversary collectible NFT from ethereum.org 🔷 Celebrating a decade of open, decentralized innovation. Join me 👉 https://ethereum.org/10years/ #Ethereum10" ) const tweetUrl = `https://twitter.com/intent/tweet?text=${tweetText}` diff --git a/app/[locale]/apps/categories/[catetgoryName]/page.tsx b/app/[locale]/apps/categories/[catetgoryName]/page.tsx index 03f6fd7ed3b..50fe1e84593 100644 --- a/app/[locale]/apps/categories/[catetgoryName]/page.tsx +++ b/app/[locale]/apps/categories/[catetgoryName]/page.tsx @@ -96,7 +96,9 @@ const Page = async ({ - ALL APPS + + {t("page-apps-all-apps")} + / diff --git a/app/[locale]/developers/page.tsx b/app/[locale]/developers/page.tsx index d7ea6cde9d4..dcc5ba1f458 100644 --- a/app/[locale]/developers/page.tsx +++ b/app/[locale]/developers/page.tsx @@ -1,10 +1,8 @@ -import { Fragment } from "react" import { getTranslations } from "next-intl/server" import type { Lang } from "@/lib/types" import { ChildOnlyProp } from "@/lib/types" -import ABTestWrapper from "@/components/AB/TestWrapper" import BigNumber from "@/components/BigNumber" import { CopyButton } from "@/components/CopyToClipboard" import FeedbackCard from "@/components/FeedbackCard" @@ -166,67 +164,39 @@ const DevelopersPage = async ({ - , -
-
-

Create the internet you want to live in

-

- Ethereum is where you turn ideas into un-censorable systems - that run anywhere, forever. Build apps, money, and communities - that answer to no one but their users. -

-
- -
, -
-
-

Get paid well. Stay remote. Build the future.

-

- Over half of blockchain careers are remote-first with some - estimates putting the number as high as 70%. -

-
- - Avg developer salary - - - Avg salary in blockchain industry - -
-
- -
, - ]} - /> +
+
+

{t("page-developers-why-title")}

+

{t("page-developers-why-subtitle")}

+
+ + {t("page-developers-why-avg-salary-dev")} + + + {t("page-developers-why-avg-salary-blockchain")} + +
+
+ +
{ const signals: StatsBoxMetric[] = [ { - label: "Years", + label: t("page-enterprise-why-metric-years"), state: { value: "10" }, // TODO: Calculate to future-proof, avoid hard-coding }, { - label: "Upgrades", + label: t("page-enterprise-why-metric-upgrades"), state: { value: "16" }, // TODO: Calculate from upgrades list }, { - label: "Downtime", + label: t("page-enterprise-why-metric-downtime"), state: { value: "0" }, }, ] diff --git a/app/[locale]/roadmap/page.tsx b/app/[locale]/roadmap/page.tsx index 7bc113e023a..629930264e5 100644 --- a/app/[locale]/roadmap/page.tsx +++ b/app/[locale]/roadmap/page.tsx @@ -1,5 +1,9 @@ import { pick } from "lodash" -import { getTranslations } from "next-intl/server" +import { + getMessages, + getTranslations, + setRequestLocale, +} from "next-intl/server" import { Lang } from "@/lib/types" @@ -10,13 +14,13 @@ import { getRequiredNamespacesForPage } from "@/lib/utils/translations" import RoadmapPage from "./_components/roadmap" -import { loadMessages } from "@/i18n/loadMessages" - const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params + setRequestLocale(locale) + // Get i18n messages - const allMessages = await loadMessages(locale) + const allMessages = await getMessages({ locale }) const requiredNamespaces = getRequiredNamespacesForPage("/roadmap") const messages = pick(allMessages, requiredNamespaces) diff --git a/app/api/gfi-issues-webhook/route.ts b/app/api/gfi-issues-webhook/route.ts index 149a11d761d..b4f1737983a 100644 --- a/app/api/gfi-issues-webhook/route.ts +++ b/app/api/gfi-issues-webhook/route.ts @@ -13,12 +13,7 @@ const LABELS_TO_EMOJI = { const GFI_LABEL = "good first issue" -export async function GET(req: Request) { - const { method } = req - - if (method !== "POST") { - return NextResponse.json({ message: "Method not allowed" }, { status: 405 }) - } +export async function POST(req: Request) { const { action, label, issue } = await req.json() diff --git a/docs/header-ids.md b/docs/header-ids.md index f8462ea3ff6..9aaf273fd5a 100644 --- a/docs/header-ids.md +++ b/docs/header-ids.md @@ -30,7 +30,7 @@ When these headers are rendered, they come with a link icon attached to it that Extending the above example, if we wanted to link to the `A subheading` section of the above document (for example living at path `/docs`), you could use the link`/docs#a-subheading` to link directly to that section. -See a live example on ethereum.org: [https://ethereum.org/en/developers/docs/blocks/#block-anatomy](https://ethereum.org/en/developers/docs/blocks/#block-anatomy) +See a live example on ethereum.org: [https://ethereum.org/developers/docs/blocks/#block-anatomy](https://ethereum.org/developers/docs/blocks/#block-anatomy) ## When to use custom header IDs @@ -44,7 +44,7 @@ English files are uploaded to Crowdin for translation. Header ID's should be _in This is to ensure that the translated content can be linked to from other documents and external links, without breaking the path. This is similar to why path and filenames are not translated, but remain in English to simplify linking and referencing. -See a live example on ethereum.org: [https://ethereum.org/es/developers/docs/blocks/#block-anatomy](https://ethereum.org/en/developers/docs/blocks/#block-anatomy) +See a live example on ethereum.org: [https://ethereum.org/es/developers/docs/blocks/#block-anatomy](https://ethereum.org/developers/docs/blocks/#block-anatomy) Notice the header ID is still in English (`#block-anatomy`), but links to the Spanish (`/es/`) version of the site, at the correct section. diff --git a/docs/stack.md b/docs/stack.md index fee94af11e4..6d3b4107490 100644 --- a/docs/stack.md +++ b/docs/stack.md @@ -25,7 +25,7 @@ | `/src` | Main source folder for development. | | `/public/assets` | Image assets. | | `/src/components` | React components that do not function as standalone pages. | -| `/public/content` | Markdown/MDX files for site content stored here.
For example: `ethereum.org/en/about/` is built from `public/content/about/index.md`
The markdown files are parsed by `[...slug].tsx` and rendered using the proper layout in `ContentPage.getLayout` method. | +| `/public/content` | Markdown/MDX files for site content stored here.
For example: `ethereum.org/about/` is built from `public/content/about/index.md`
The markdown files are parsed by `[...slug].tsx` and rendered using the proper layout in `ContentPage.getLayout` method. | | `/public/content/developers/docs` | \*Markdown files in here use the Docs layout: `src/layouts/Docs.tsx` | | `/public/content/developers/tutorials` | \*Markdown files in here use the Tutorial layout: `src/layouts/Tutorial.tsx` | | `/src/data` | General data files importable by components. | diff --git a/docs/translation-program.md b/docs/translation-program.md index 880be48e90c..8e8e47a1143 100644 --- a/docs/translation-program.md +++ b/docs/translation-program.md @@ -4,4 +4,4 @@ _The Translation Program is an initiative to translate ethereum.org into differe If you are looking to get involved as a translator, you can [join our project in Crowdin](https://crowdin.com/project/ethereum-org/) and start translating the website into your language immediately. -To get more information about the program, learn how to use Crowdin, check on the progress or find some useful tools for translators, please visit the [Translation Program page](https://ethereum.org/en/contributing/translation-program/). +To get more information about the program, learn how to use Crowdin, check on the progress or find some useful tools for translators, please visit the [Translation Program page](https://ethereum.org/contributing/translation-program/). diff --git a/package.json b/package.json index f750539a101..0a549528985 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-org-website", - "version": "10.12.0", + "version": "10.13.0", "license": "MIT", "private": true, "scripts": { @@ -76,7 +76,7 @@ "htmr": "^1.0.2", "lodash": "^4.17.21", "lucide-react": "^0.516.0", - "next": "^14.2.30", + "next": "^14.2.32", "next-intl": "^3.26.3", "next-mdx-remote": "^5.0.0", "next-sitemap": "^4.2.3", diff --git a/playwright.config.ts b/playwright.config.ts index 863e2009c9c..93f679fd493 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : 3, reporter: [ - ["html", { outputFolder: "./tests/e2e/__report__" }], + ["html", { outputFolder: "./tests/e2e/__report__", open: "never" }], ["line"], process.env.CI ? ["github"] : ["list"], ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4804aa54230..2a9b972d16a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,10 +85,10 @@ importers: version: 2.2.5(@tanstack/react-query@5.80.2(react@18.3.1))(@types/react@18.2.57)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4))(wagmi@2.15.4(@tanstack/query-core@5.80.2)(@tanstack/react-query@5.80.2(react@18.3.1))(@types/react@18.2.57)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)) '@sentry/nextjs': specifier: ^10.5.0 - version: 10.5.0(@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5)) + version: 10.5.0(@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5)) '@socialgouv/matomo-next': specifier: ^1.8.0 - version: 1.9.2(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.9.2(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@tanstack/react-query': specifier: ^5.66.7 version: 5.80.2(react@18.3.1) @@ -147,17 +147,17 @@ importers: specifier: ^0.516.0 version: 0.516.0(react@18.3.1) next: - specifier: ^14.2.30 - version: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^14.2.32 + version: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-intl: specifier: ^3.26.3 - version: 3.26.5(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.26.5(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) next-mdx-remote: specifier: ^5.0.0 version: 5.0.0(@types/react@18.2.57)(acorn@8.14.1)(react@18.3.1) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -263,7 +263,7 @@ importers: version: 8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: ^8.6.14 - version: 8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) + version: 8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5)) '@storybook/react': specifier: 8.6.14 version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) @@ -380,7 +380,7 @@ importers: version: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) storybook-next-intl: specifier: ^1.2.5 - version: 1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)) + version: 1.2.6(next-intl@3.26.5(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)) tailwindcss: specifier: ^3.4.4 version: 3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) @@ -1881,62 +1881,62 @@ packages: '@next/env@13.5.11': resolution: {integrity: sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg==} - '@next/env@14.2.30': - resolution: {integrity: sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug==} + '@next/env@14.2.32': + resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==} '@next/eslint-plugin-next@14.2.29': resolution: {integrity: sha512-qpxSYiPNJTr9RzqjGi5yom8AIC8Kgdtw4oNIXAB/gDYMDctmfMEv452FRUhT06cWPgcmSsbZiEPYhbFiQtCWTg==} - '@next/swc-darwin-arm64@14.2.30': - resolution: {integrity: sha512-EAqfOTb3bTGh9+ewpO/jC59uACadRHM6TSA9DdxJB/6gxOpyV+zrbqeXiFTDy9uV6bmipFDkfpAskeaDcO+7/g==} + '@next/swc-darwin-arm64@14.2.32': + resolution: {integrity: sha512-osHXveM70zC+ilfuFa/2W6a1XQxJTvEhzEycnjUaVE8kpUS09lDpiDDX2YLdyFCzoUbvbo5r0X1Kp4MllIOShw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.30': - resolution: {integrity: sha512-TyO7Wz1IKE2kGv8dwQ0bmPL3s44EKVencOqwIY69myoS3rdpO1NPg5xPM5ymKu7nfX4oYJrpMxv8G9iqLsnL4A==} + '@next/swc-darwin-x64@14.2.32': + resolution: {integrity: sha512-P9NpCAJuOiaHHpqtrCNncjqtSBi1f6QUdHK/+dNabBIXB2RUFWL19TY1Hkhu74OvyNQEYEzzMJCMQk5agjw1Qg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.30': - resolution: {integrity: sha512-I5lg1fgPJ7I5dk6mr3qCH1hJYKJu1FsfKSiTKoYwcuUf53HWTrEkwmMI0t5ojFKeA6Vu+SfT2zVy5NS0QLXV4Q==} + '@next/swc-linux-arm64-gnu@14.2.32': + resolution: {integrity: sha512-v7JaO0oXXt6d+cFjrrKqYnR2ubrD+JYP7nQVRZgeo5uNE5hkCpWnHmXm9vy3g6foMO8SPwL0P3MPw1c+BjbAzA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.30': - resolution: {integrity: sha512-8GkNA+sLclQyxgzCDs2/2GSwBc92QLMrmYAmoP2xehe5MUKBLB2cgo34Yu242L1siSkwQkiV4YLdCnjwc/Micw==} + '@next/swc-linux-arm64-musl@14.2.32': + resolution: {integrity: sha512-tA6sIKShXtSJBTH88i0DRd6I9n3ZTirmwpwAqH5zdJoQF7/wlJXR8DkPmKwYl5mFWhEKr5IIa3LfpMW9RRwKmQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.30': - resolution: {integrity: sha512-8Ly7okjssLuBoe8qaRCcjGtcMsv79hwzn/63wNeIkzJVFVX06h5S737XNr7DZwlsbTBDOyI6qbL2BJB5n6TV/w==} + '@next/swc-linux-x64-gnu@14.2.32': + resolution: {integrity: sha512-7S1GY4TdnlGVIdeXXKQdDkfDysoIVFMD0lJuVVMeb3eoVjrknQ0JNN7wFlhCvea0hEk0Sd4D1hedVChDKfV2jw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.30': - resolution: {integrity: sha512-dBmV1lLNeX4mR7uI7KNVHsGQU+OgTG5RGFPi3tBJpsKPvOPtg9poyav/BYWrB3GPQL4dW5YGGgalwZ79WukbKQ==} + '@next/swc-linux-x64-musl@14.2.32': + resolution: {integrity: sha512-OHHC81P4tirVa6Awk6eCQ6RBfWl8HpFsZtfEkMpJ5GjPsJ3nhPe6wKAJUZ/piC8sszUkAgv3fLflgzPStIwfWg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.30': - resolution: {integrity: sha512-6MMHi2Qc1Gkq+4YLXAgbYslE1f9zMGBikKMdmQRHXjkGPot1JY3n5/Qrbg40Uvbi8//wYnydPnyvNhI1DMUW1g==} + '@next/swc-win32-arm64-msvc@14.2.32': + resolution: {integrity: sha512-rORQjXsAFeX6TLYJrCG5yoIDj+NKq31Rqwn8Wpn/bkPNy5rTHvOXkW8mLFonItS7QC6M+1JIIcLe+vOCTOYpvg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.30': - resolution: {integrity: sha512-pVZMnFok5qEX4RT59mK2hEVtJX+XFfak+/rjHpyFh7juiT52r177bfFKhnlafm0UOSldhXjj32b+LZIOdswGTg==} + '@next/swc-win32-ia32-msvc@14.2.32': + resolution: {integrity: sha512-jHUeDPVHrgFltqoAqDB6g6OStNnFxnc7Aks3p0KE0FbwAvRg6qWKYF5mSTdCTxA3axoSAUwxYdILzXJfUwlHhA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.30': - resolution: {integrity: sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg==} + '@next/swc-win32-x64-msvc@14.2.32': + resolution: {integrity: sha512-2N0lSoU4GjfLSO50wvKpMQgKd4HdI2UHEhQPPPnlgfBJlOgJxkjpkYBqzk08f1gItBB6xF/n+ykso2hgxuydsA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4783,8 +4783,8 @@ packages: caniuse-lite@1.0.30001720: resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} - caniuse-lite@1.0.30001723: - resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==} + caniuse-lite@1.0.30001739: + resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} canvas-confetti@1.9.3: resolution: {integrity: sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==} @@ -7080,8 +7080,8 @@ packages: react: ^16.8 || ^17 || ^18 react-dom: ^16.8 || ^17 || ^18 - next@14.2.30: - resolution: {integrity: sha512-+COdu6HQrHHFQ1S/8BBsCag61jZacmvbuL2avHvQFbWa2Ox7bE+d8FyNgxRLjXQ5wtPyQwEmk85js/AuaG2Sbg==} + next@14.2.32: + resolution: {integrity: sha512-fg5g0GZ7/nFc09X8wLe6pNSU8cLWbLRG3TZzPJ1BJvi2s9m7eF991se67wliM9kR5yLHRkyGKU49MMx58s3LJg==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -7563,11 +7563,8 @@ packages: preact@10.26.8: resolution: {integrity: sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ==} - preact@10.26.9: - resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} - - preact@10.27.0: - resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} + preact@10.27.1: + resolution: {integrity: sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -10550,7 +10547,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.27.0 + preact: 10.27.1 sha.js: 2.4.12 transitivePeerDependencies: - supports-color @@ -11293,37 +11290,37 @@ snapshots: '@next/env@13.5.11': {} - '@next/env@14.2.30': {} + '@next/env@14.2.32': {} '@next/eslint-plugin-next@14.2.29': dependencies: glob: 10.3.10 - '@next/swc-darwin-arm64@14.2.30': + '@next/swc-darwin-arm64@14.2.32': optional: true - '@next/swc-darwin-x64@14.2.30': + '@next/swc-darwin-x64@14.2.32': optional: true - '@next/swc-linux-arm64-gnu@14.2.30': + '@next/swc-linux-arm64-gnu@14.2.32': optional: true - '@next/swc-linux-arm64-musl@14.2.30': + '@next/swc-linux-arm64-musl@14.2.32': optional: true - '@next/swc-linux-x64-gnu@14.2.30': + '@next/swc-linux-x64-gnu@14.2.32': optional: true - '@next/swc-linux-x64-musl@14.2.30': + '@next/swc-linux-x64-musl@14.2.32': optional: true - '@next/swc-win32-arm64-msvc@14.2.30': + '@next/swc-win32-arm64-msvc@14.2.32': optional: true - '@next/swc-win32-ia32-msvc@14.2.30': + '@next/swc-win32-ia32-msvc@14.2.32': optional: true - '@next/swc-win32-x64-msvc@14.2.30': + '@next/swc-win32-x64-msvc@14.2.32': optional: true '@noble/ciphers@1.2.1': {} @@ -12678,7 +12675,7 @@ snapshots: '@sentry/core@10.5.0': {} - '@sentry/nextjs@10.5.0(@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))': + '@sentry/nextjs@10.5.0(@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0))(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.36.0 @@ -12691,7 +12688,7 @@ snapshots: '@sentry/vercel-edge': 10.5.0 '@sentry/webpack-plugin': 4.1.0(webpack@5.99.9(esbuild@0.25.5)) chalk: 3.0.0 - next: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 rollup: 4.46.2 stacktrace-parser: 0.1.11 @@ -13064,9 +13061,9 @@ snapshots: '@smithy/types': 4.3.1 tslib: 2.8.1 - '@socialgouv/matomo-next@1.9.2(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@socialgouv/matomo-next@1.9.2(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: - next: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@socket.io/component-emitter@3.1.2': {} @@ -13441,7 +13438,7 @@ snapshots: dependencies: storybook: 8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': + '@storybook/nextjs@8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.5)(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@2.19.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.5))': dependencies: '@babel/core': 7.27.4 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) @@ -13467,7 +13464,7 @@ snapshots: find-up: 5.0.0 image-size: 1.2.1 loader-utils: 3.3.1 - next: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.5)) pnp-webpack-plugin: 1.7.0(typescript@5.8.3) postcss: 8.5.4 @@ -15460,7 +15457,7 @@ snapshots: caniuse-lite@1.0.30001720: {} - caniuse-lite@1.0.30001723: {} + caniuse-lite@1.0.30001739: {} canvas-confetti@1.9.3: {} @@ -16693,7 +16690,7 @@ snapshots: extension-port-stream@3.0.0: dependencies: - readable-stream: 3.6.2 + readable-stream: 4.7.0 webextension-polyfill: 0.10.0 fast-deep-equal@3.1.3: {} @@ -16798,7 +16795,7 @@ snapshots: dependencies: d3-selection: 3.0.0 kapsule: 1.16.3 - preact: 10.26.9 + preact: 10.27.1 follow-redirects@1.15.9: {} @@ -18227,11 +18224,11 @@ snapshots: neo-async@2.6.2: {} - next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + next-intl@3.26.5(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@formatjs/intl-localematcher': 0.5.10 negotiator: 1.0.0 - next: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 use-intl: 3.26.5(react@18.3.1) @@ -18249,40 +18246,40 @@ snapshots: - acorn - supports-color - next-sitemap@4.2.3(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.11 fast-glob: 3.3.3 minimist: 1.2.8 - next: 14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.30 + '@next/env': 14.2.32 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001723 + caniuse-lite: 1.0.30001739 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.30 - '@next/swc-darwin-x64': 14.2.30 - '@next/swc-linux-arm64-gnu': 14.2.30 - '@next/swc-linux-arm64-musl': 14.2.30 - '@next/swc-linux-x64-gnu': 14.2.30 - '@next/swc-linux-x64-musl': 14.2.30 - '@next/swc-win32-arm64-msvc': 14.2.30 - '@next/swc-win32-ia32-msvc': 14.2.30 - '@next/swc-win32-x64-msvc': 14.2.30 + '@next/swc-darwin-arm64': 14.2.32 + '@next/swc-darwin-x64': 14.2.32 + '@next/swc-linux-arm64-gnu': 14.2.32 + '@next/swc-linux-arm64-musl': 14.2.32 + '@next/swc-linux-x64-gnu': 14.2.32 + '@next/swc-linux-x64-musl': 14.2.32 + '@next/swc-win32-arm64-msvc': 14.2.32 + '@next/swc-win32-ia32-msvc': 14.2.32 + '@next/swc-win32-x64-msvc': 14.2.32 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.53.1 transitivePeerDependencies: @@ -18775,9 +18772,7 @@ snapshots: preact@10.26.8: {} - preact@10.26.9: {} - - preact@10.27.0: {} + preact@10.27.1: {} prelude-ls@1.2.1: {} @@ -19643,9 +19638,9 @@ snapshots: storybook-i18n@3.1.1: {} - storybook-next-intl@1.2.6(next-intl@3.26.5(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)): + storybook-next-intl@1.2.6(next-intl@3.26.5(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)): dependencies: - next-intl: 3.26.5(next@14.2.30(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + next-intl: 3.26.5(next@14.2.32(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) storybook-i18n: 3.1.1 storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): diff --git a/public/.well-known/security.txt b/public/.well-known/security.txt index f5633e95685..739dcbea17f 100644 --- a/public/.well-known/security.txt +++ b/public/.well-known/security.txt @@ -8,7 +8,7 @@ Acknowledgments: https://bounty.ethereum.org Preferred-Languages: en Canonical: https://ethereum.org/.well-known/security.txt Policy: https://bounty.ethereum.org -Hiring: https://ethereum.org/en/community/get-involved/#ethereum-jobs +Hiring: https://ethereum.org/community/get-involved/#ethereum-jobs -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEErpbtlp5HmwCE8+F/6I0zNPpfagoFAmXYslMACgkQ6I0zNPpf diff --git a/public/content/community/events/organizing/index.md b/public/content/community/events/organizing/index.md index aaee9ef1055..e0b05d4e94f 100644 --- a/public/content/community/events/organizing/index.md +++ b/public/content/community/events/organizing/index.md @@ -16,8 +16,8 @@ A successful Ethereum conference is built on an active and engaged community. If **Your first steps should be:** - Explore local startups and companies — having strong, active companies in your city or country is often the most critical prerequisite for building a community. -- Check if there are already some meetups — ethereum.org [events page](https://ethereum.org/en/community/events/) -- [The ethereum.org website](https://ethereum.org/en/community/events/) and ethereum.org Discord — to check if there are local Ethereum events, developers, and contributors. +- Check if there are already some meetups — ethereum.org [events page](https://ethereum.org/community/events/) +- [The ethereum.org website](https://ethereum.org/community/events/) and ethereum.org Discord — to check if there are local Ethereum events, developers, and contributors. - Luma and Meetup.com — to see if there are Ethereum-related events or broader web3 events happening in your area. - X — Try to find local advocates or influencers in the space. @@ -82,7 +82,7 @@ Another important step before starting to build a program or reaching out to spo ### How to assemble a team {#how-to-assemble-a-team} -Choose people who share your vision and complement your skills. Some teams work as collectives, while others have defined roles — find what works best for you. Regular communication and clear expectations are essential. Although it's tempting to rely on communication platforms for event planning, we suggest picking a task management platform (such as Notion, Basecamp, Trello, Asana, or even the good old Google Sheets) for organizing and tracking what needs to be done. It’s crucial to have a well-functioning and well–organized team. +Choose people who share your vision and complement your skills. Some teams work as collectives, while others have defined roles — find what works best for you. Regular communication and clear expectations are essential. Although it's tempting to rely on communication platforms for event planning, we suggest picking a task management platform (such as Notion, Basecamp, Trello, Asana, or even the good old Google Sheets) for organizing and tracking what needs to be done. It’s crucial to have a well-functioning and well-organized team. Different Ethereum organizer teams have different roles in their teams, but they all have in common people who are working on logistics, budgeting, marketing, program, design, and partnerships. @@ -114,7 +114,7 @@ Once you’ve tapped into local support, expand your outreach to global players #### Alternative forms of funding your event {#alternative-forms-of-funding-your-event} -Grants are another potential funding source that many organizers overlook. Programs like the Ethereum Foundation’s [Ecosystem Support Program](https://esp.ethereum.foundation/) (ESP) and [other grant initiatives](https://ethereum.org/en/community/grants/#ethereum-grants) exist to support community-driven events. +Grants are another potential funding source that many organizers overlook. Programs like the Ethereum Foundation’s [Ecosystem Support Program](https://esp.ethereum.foundation/) (ESP) and [other grant initiatives](https://ethereum.org/community/grants/#ethereum-grants) exist to support community-driven events. Beyond financial sponsorships, consider in-kind partnerships, especially for food and beverages. Brands that align with the local culture or tech community can be great partners for your event. Coffee brands, beverage companies, or even local pizzerias might be willing to provide products in exchange for visibility at the event. These collaborations can help reduce costs while enhancing the attendee experience. diff --git a/public/content/contributing/style-guide/content-standardization/index.md b/public/content/contributing/style-guide/content-standardization/index.md index de3a5c329c6..aed58de1856 100644 --- a/public/content/contributing/style-guide/content-standardization/index.md +++ b/public/content/contributing/style-guide/content-standardization/index.md @@ -184,7 +184,7 @@ Read more about [smart contracts](/docs/developers/smart-contracts/) Read more about [smart contracts](/en/docs/developers/smart-contracts) -Read more about [smart contracts](https://ethereum.org/en/docs/developers/smart-contracts) +Read more about [smart contracts](/docs/developers/smart-contracts) ``` Please also add a trailing slash to all links. This keeps links consistent and avoids redirects, which hurts site performance. diff --git a/public/content/contributing/translation-program/playbook/index.md b/public/content/contributing/translation-program/playbook/index.md index 9867675b09a..f5f878404d3 100644 --- a/public/content/contributing/translation-program/playbook/index.md +++ b/public/content/contributing/translation-program/playbook/index.md @@ -304,7 +304,7 @@ If you have a Discord server or Telegram channel, it is easy to use that for out Platforms like Twitter can also be helpful for onboarding new community members and publicly acknowledging your contributors. -The Linux Foundation has created an extensive report on the [2020 FOSS open-source contributor survey](https://www.linuxfoundation.org/wp-content/uploads/2020FOSSContributorSurveyReport_121020.pdf), analyzing open-source contributors and their motivations. +The Linux Foundation has created an extensive [Report on the 2020 FOSS contributor survey](https://www.linuxfoundation.org/wp-content/uploads/2020FOSSContributorSurveyReport_121020.pdf), analyzing open-source contributors and their motivations. ## Conclusion {#conclusion} diff --git a/public/content/dao/index.md b/public/content/dao/index.md index a8d1dfab701..8ca86fc9475 100644 --- a/public/content/dao/index.md +++ b/public/content/dao/index.md @@ -135,6 +135,7 @@ _Typically used for decentralized development and governance of protocols and [d - [Ethereum community DAOs](/community/get-involved/#decentralized-autonomous-organizations-daos) - [DAOHaus's list of DAOs](https://app.daohaus.club/explore) - [Tally.xyz list of DAOs](https://www.tally.xyz) +- [DeGov.AI list of DAOs](https://apps.degov.ai/) ### Start a DAO {#start-a-dao} @@ -143,6 +144,7 @@ _Typically used for decentralized development and governance of protocols and [d - [Create an Aragon-powered DAO](https://aragon.org/product) - [Start a colony](https://colony.io/) - [Create a DAO with DAOstack's holographic consensus](https://alchemy.daostack.io/daos/create) +- [Launch a DAO with the DeGov Launcher](https://docs.degov.ai/integration/deploy) ## Further reading {#further-reading} diff --git a/public/content/developers/docs/consensus-mechanisms/pos/index.md b/public/content/developers/docs/consensus-mechanisms/pos/index.md index bb495045c8a..fe2e8e51b19 100644 --- a/public/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/public/content/developers/docs/consensus-mechanisms/pos/index.md @@ -91,7 +91,7 @@ Ethereum originally used proof-of-work but switched to proof-of-stake in Septemb - [Proof of Stake: How I Learned to Love Weak Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ - [Proof-of-stake Ethereum attack and defense](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) - [A Proof of Stake Design Philosophy](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ -- [Video: Vitalik buterin explains proof-of-stake to Lex Fridman](https://www.youtube.com/watch?v=3yrqBG-7EVE) +- [Video: Vitalik Buterin explains proof-of-stake to Lex Fridman](https://www.youtube.com/watch?v=3yrqBG-7EVE) ## Related topics {#related-topics} diff --git a/public/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/developers/docs/consensus-mechanisms/pos/keys/index.md index fd6b8f9a96b..4c23036aa30 100644 --- a/public/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -56,7 +56,7 @@ Separating the validator keys from the Ethereum account keys enables multiple va ![validator key schematic](validator-key-schematic.png) -**Note**: Exiting from staking duties and withdrawing a validator's balance currently requires signing a [voluntary exit message (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) with the validator key. However, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) is a proposal that will allow a user to trigger a validator's exit and withdrawals its balance by signing exit messages with the withdrawal key in the future. This will reduce trust assumptions by enabling stakers who delegate ETH to [staking-as-a-service providers](https://ethereum.org/en/staking/saas/#what-is-staking-as-a-service) to remain in control of their funds. +**Note**: Exiting from staking duties and withdrawing a validator's balance currently requires signing a [voluntary exit message (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) with the validator key. However, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) is a proposal that will allow a user to trigger a validator's exit and withdrawals its balance by signing exit messages with the withdrawal key in the future. This will reduce trust assumptions by enabling stakers who delegate ETH to [staking-as-a-service providers](/staking/saas/#what-is-staking-as-a-service) to remain in control of their funds. ## Deriving keys from a seed phrase {#deriving-keys-from-seed} diff --git a/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 2f40d17cc14..9f053f63f88 100644 --- a/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ Ethereum's data structure is a 'modified Merkle-Patricia Trie', named so because A Merkle-Patricia trie is deterministic and cryptographically verifiable: The only way to generate a state root is by computing it from each individual piece of the state, and two states that are identical can be easily proven so by comparing the root hash and the hashes that led to it (_a Merkle proof_). Conversely, there is no way to create two different states with the same root hash, and any attempt to modify state with different values will result in a different state root hash. Theoretically, this structure provides the 'holy grail' of `O(log(n))` efficiency for inserts, lookups and deletes. -In the near future, Ethereum plans to migrate to a [Verkle Tree](https://ethereum.org/en/roadmap/verkle-trees) structure, which will open up many new possibilities for future protocol improvements. +In the near future, Ethereum plans to migrate to a [Verkle Tree](/roadmap/verkle-trees) structure, which will open up many new possibilities for future protocol improvements. ## Prerequisites {#prerequisites} diff --git a/public/content/developers/docs/intro-to-ethereum/index.md b/public/content/developers/docs/intro-to-ethereum/index.md index a2158773077..749d63feab6 100644 --- a/public/content/developers/docs/intro-to-ethereum/index.md +++ b/public/content/developers/docs/intro-to-ethereum/index.md @@ -44,7 +44,7 @@ ETH is also used to provide crypto-economic security to the network in three mai ## What are smart contracts? {#what-are-smart-contracts} -In practice, participants don't write new code every time they want to request a computation on the EVM. Rather, application developers upload programs (reusable snippets of code) into EVM state, and users make requests to execute these code snippets with varying parameters. We call the programs uploaded to and executed by the network smart contracts. +In practice, participants don't write new code every time they want to request a computation on the EVM. Rather, application developers upload programs (reusable snippets of code) into EVM state, and users make requests to execute these code snippets with varying parameters. We call the programs uploaded to and executed by the network "smart contracts". At a very basic level, you can think of a smart contract like a sort of vending machine: a script that, when called with certain parameters, performs some actions or computation if certain conditions are satisfied. For example, a simple vendor smart contract could create and assign ownership of a digital asset if the caller sends ETH to a specific recipient. diff --git a/public/content/developers/docs/networks/index.md b/public/content/developers/docs/networks/index.md index 47aceba81c1..9de56c53e84 100644 --- a/public/content/developers/docs/networks/index.md +++ b/public/content/developers/docs/networks/index.md @@ -50,14 +50,15 @@ The two public testnets that client developers are currently maintaining are Sep ##### Faucets -- [QuickNode Sepolia Faucet](https://faucet.quicknode.com/ethereum/sepolia) +- [Alchemy Sepolia Faucet](https://www.alchemy.com/faucets/ethereum-sepolia) +- [Chain Platform Sepolia Faucet](https://faucet.chainplatform.co/faucets/ethereum-sepolia/) +- [Chainstack Sepolia Faucet](https://faucet.chainstack.com/sepolia-testnet-faucet) +- [Ethereum Ecosystem Faucet](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) +- [Google Cloud Web3 Sepolia Faucet](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) - [Grabteeth](https://grabteeth.xyz/) -- [PoW faucet](https://sepolia-faucet.pk910.de/) -- [Alchemy Sepolia faucet](https://www.alchemy.com/faucets/ethereum-sepolia) -- [Infura Sepolia faucet](https://www.infura.io/faucet) -- [Chainstack Sepolia faucet](https://faucet.chainstack.com/sepolia-testnet-faucet) -- [Ethereum Ecosystem faucet](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) -- [Google Cloud Web3 Sepolia faucet](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) +- [Infura Sepolia Faucet](https://www.infura.io/faucet) +- [PoW Faucet](https://sepolia-faucet.pk910.de/) +- [QuickNode Sepolia Faucet](https://faucet.quicknode.com/ethereum/sepolia) #### Hoodi {#hoodi} @@ -78,12 +79,13 @@ Hoodi is a testnet for testing validating and staking. The Hoodi network is open ##### Faucets +- [Chain Platform Hoodi Faucet](https://faucet.chainplatform.co/faucets/ethereum-hoodi/) - [Hoodi Faucet](https://hoodi.ethpandaops.io/) -- [PoW faucet](https://hoodi-faucet.pk910.de/) +- [PoW Faucet](https://hoodi-faucet.pk910.de/) #### Ephemery {#ephemery} -Ephemery is a unique kind of testnet that fully resets every month. The execution and consensus state reverts back to genesis every 28 days, which means anything that happens on the testnet is ephemeral. This makes it ideal for a short term testing, fast node bootstrap and 'hello world' kind of applications that don't need permanence. +Ephemery is a unique kind of testnet that fully resets every month. The execution and consensus state reverts back to genesis every 28 days, which means anything that happens on the testnet is ephemeral. This makes it ideal for a short term testing, fast node bootstrap and 'hello world' kind of applications that don't need permanence. - Always fresh state, short term testing of validators and apps - Includes only basic set of contracts @@ -93,13 +95,13 @@ Ephemery is a unique kind of testnet that fully resets every month. The executio ##### Resources - [Website](https://ephemery.dev/) -- [Github]( https://github.com/ephemery-testnet/ephemery-resources) +- [Github](https://github.com/ephemery-testnet/ephemery-resources) - [Community chat](https://matrix.to/#/#staker-testnet:matrix.org) - [Blockscout](https://explorer.ephemery.dev/) - [Otterscan](https://otter.bordel.wtf/) - [Beacon explorer](https://beaconlight.ephemery.dev/) - [Checkpoint Sync](https://checkpoint-sync.ephemery.ethpandaops.io) -- [Launchpad]( https://launchpad.ephemery.dev/) +- [Launchpad](https://launchpad.ephemery.dev/) #### Faucets @@ -108,26 +110,10 @@ Ephemery is a unique kind of testnet that fully resets every month. The executio #### Holesky {#holesky} -The Holesky testnet will be [deprecated in September 2025](https://blog.ethereum.org/en/2025/03/18/hoodi-holesky). Staking operators and infrastructure providers should use Hoodi for validator testing instead. - -##### Resources - -- [Website](https://holesky.ethpandaops.io/) -- [GitHub](https://github.com/eth-clients/holesky) -- [Otterscan](https://holesky.otterscan.io/) -- [Etherscan](https://holesky.etherscan.io/) -- [Blockscout](https://eth-holesky.blockscout.com/) +The Holesky testnet is deprecated as of September 2025. Staking operators and infrastructure providers should use Hoodi for validator testing instead. -##### Faucets - -- [QuickNode Holesky Faucet](https://faucet.quicknode.com/ethereum/holesky) -- [PoW faucet](https://holesky-faucet.pk910.de/) -- [Alchemy Holesky Faucet](https://www.alchemy.com/faucets/ethereum-holesky) -- [Chainstack Holesky faucet](https://faucet.chainstack.com/holesky-testnet-faucet) -- [Ethereum Ecosystem faucet](https://www.ethereum-ecosystem.com/faucets/ethereum-holesky) -- [Google Cloud Web3 Holesky faucet](https://cloud.google.com/application/web3/faucet/ethereum/holesky) - -To launch a Validator on Hoodi testnet, use [Hoodi launchpad](https://hoodi.launchpad.ethereum.org/en/). +- [Holesky Testnet Shutdown Announcement](https://blog.ethereum.org/2025/09/01/holesky-shutdown-announcement) - _EF Blog, 1-September-2025_ +- [Holesky and Hoodi Testnet Updates](https://blog.ethereum.org/en/2025/03/18/hoodi-holesky) - _EF Blog, 18-March-2025_ ### Layer 2 testnets {#layer-2-testnets} @@ -144,11 +130,9 @@ A testnet for [Arbitrum](https://arbitrum.io/). ##### Faucets -- [Chainlink faucet](https://faucets.chain.link/arbitrum-sepolia) -- [Alchemy faucet](https://www.alchemy.com/faucets/arbitrum-sepolia) -- [QuickNode Arbitrum Sepolia Faucet](https://faucet.quicknode.com/arbitrum/sepolia) - [Alchemy Arbitrum Sepolia Faucet](https://www.alchemy.com/faucets/arbitrum-sepolia) - [Chainlink Arbitrum Sepolia faucet](https://faucets.chain.link/arbitrum-sepolia) +- [QuickNode Arbitrum Sepolia Faucet](https://faucet.quicknode.com/arbitrum/sepolia) #### Optimistic Sepolia {#optimistic-sepolia} @@ -161,9 +145,9 @@ A testnet for [Optimism](https://www.optimism.io/). ##### Faucets -- [Chainlink faucet](https://faucets.chain.link/optimism-sepolia) -- [Alchemy faucet](https://www.alchemy.com/faucets/optimism-sepolia) -- [Testnet faucets](https://docs.optimism.io/builders/tools/build/faucets) +- [Alchemy Faucet](https://www.alchemy.com/faucets/optimism-sepolia) +- [Chainlink Faucet](https://faucets.chain.link/optimism-sepolia) +- [Testnet Faucet](https://docs.optimism.io/builders/tools/build/faucets) #### Starknet Sepolia {#starknet-sepolia} @@ -175,9 +159,9 @@ A testnet for [Starknet](https://www.starknet.io). ##### Faucets -- [Alchemy faucet](https://www.alchemy.com/faucets/starknet-sepolia) -- [Starknet faucet](https://starknet-faucet.vercel.app/) -- [Blast Starknet Sepolia faucet](https://blastapi.io/faucets/starknet-sepolia-eth) +- [Alchemy Faucet](https://www.alchemy.com/faucets/starknet-sepolia) +- [Blast Starknet Sepolia Faucet](https://blastapi.io/faucets/starknet-sepolia-eth) +- [Starknet Faucet](https://starknet-faucet.vercel.app/) ## Private networks {#private-networks} diff --git a/public/content/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/developers/docs/nodes-and-clients/client-diversity/index.md index cfa0a3da8d3..32f2f1d0f4c 100644 --- a/public/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -80,7 +80,7 @@ Addressing client diversity requires more than individual users to choose minori [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/developers/docs/nodes-and-clients/index.md b/public/content/developers/docs/nodes-and-clients/index.md index fe95fc21430..c81abc2b473 100644 --- a/public/content/developers/docs/nodes-and-clients/index.md +++ b/public/content/developers/docs/nodes-and-clients/index.md @@ -200,7 +200,7 @@ There are multiple consensus clients (previously known as 'Eth2' clients) to sup | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Pyrmont, Sepolia, and more | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, and more | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, and more | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia, and more | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia, and more | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Sepolia, and more | | [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, and more | @@ -226,7 +226,7 @@ Learn more in [Nimbus docs](https://nimbus.guide/) Prysm is a full-featured, open source consensus client written in Go under the GPL-3.0 license. It features an optional webapp UI and prioritizes user experience, documentation, and configurability for both stake-at-home and institutional users. -Visit [Prysm docs](https://docs.prylabs.network/docs/getting-started/) to learn more. +Visit [Prysm docs](https://prysm.offchainlabs.com/docs/) to learn more. ### Teku {#teku} diff --git a/public/content/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/developers/docs/nodes-and-clients/run-a-node/index.md index aa30e028c52..98e4440081f 100644 --- a/public/content/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/developers/docs/nodes-and-clients/run-a-node/index.md @@ -368,7 +368,7 @@ nimbus_beacon_node \ ##### Running Prysm -Prysm comes with script which allows easy automatic installation. Details can be found in the [Prysm docs](https://docs.prylabs.network/docs/install/install-with-script). +Prysm comes with script which allows easy automatic installation. Details can be found in the [Prysm docs](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/developers/docs/smart-contracts/formal-verification/index.md b/public/content/developers/docs/smart-contracts/formal-verification/index.md index 30b66d6c763..dfcf7d6d719 100644 --- a/public/content/developers/docs/smart-contracts/formal-verification/index.md +++ b/public/content/developers/docs/smart-contracts/formal-verification/index.md @@ -252,10 +252,10 @@ Also, it is not always possible for program verifiers to determine if a property - [GitHub](https://github.com/isabelle-prover) - [Documentation](https://isabelle.in.tum.de/documentation.html) -**Coq** - _Coq is an interactive theorem prover that lets you define programs using theorems and interactively generate machine-checked proofs of correctness._ +**Rocq** - _Rocq is an interactive theorem prover that lets you define programs using theorems and interactively generate machine-checked proofs of correctness._ -- [GitHub](https://github.com/coq/coq) -- [Documentation](https://coq.github.io/doc/v8.13/refman/index.html) +- [GitHub](https://github.com/rocq-prover/rocq) +- [Documentation](https://rocq-prover.org/docs) ### Symbolic execution-based tools for detecting vulnerable patterns in smart contracts {#symbolic-execution-tools} diff --git a/public/content/developers/docs/smart-contracts/naming/index.md b/public/content/developers/docs/smart-contracts/naming/index.md new file mode 100644 index 00000000000..fa1f4520a11 --- /dev/null +++ b/public/content/developers/docs/smart-contracts/naming/index.md @@ -0,0 +1,101 @@ +--- +title: Naming smart contracts +description: Best practices for naming Ethereum smart contracts with ENS +lang: en +--- + +Smart contracts are a cornerstone of Ethereum's decentralized infrastructure, enabling autonomous applications and protocols. But even as contract capabilities evolve, users and developers still rely on raw hexadecimal addresses to identify and reference these contracts. + +Naming smart contracts with [Ethereum Name Service (ENS)](https://ens.domains/) improves user experience by eliminating hexadecimal contract addresses and reduces risk from attacks such as address poisoning and spoofing attacks. This guide explains why naming smart contracts matters, how it can be implemented, and tools available such as [Enscribe](https://www.enscribe.xyz) to simplify the process and help developers adopt the practice. + +## Why name smart contracts? {#why-name-contracts} + +### Human-readable identifiers {#human-readable-identifiers} + +Instead of interacting with opaque contract addresses like `0x8f8e...f9e3`, developers and users can use human-readable names like `v2.myapp.eth`. This simplifies smart contract interactions. + +This is made possible by the [Ethereum Name Service](https://ens.domains/) which provides a decentralized naming service for Ethereum addresses. This is analogous to how the Domain Name Service (DNS) enables users of the internet to access network addresses using a name such as ethereum.org instead of via an IP address such as `104.18.176.152`. + +### Improved security and trust {#improved-security-and-trust} + +Named contracts help reduce accidental transactions to the wrong address. They also help users identify contracts tied to specific apps or brands. This adds a layer of reputational trust, especially when names are attached to well-known parent domains like `uniswap.eth`. + +Due to the 42-character length of Ethereum address, it's very hard for users to identify small changes in addresses, where a couple of characters have been modified. For instance an address such as `0x58068646C148E313CB414E85d2Fe89dDc3426870` would normally be truncated to `0x580...870` by user-facing applications such as wallets. A user is unlikely to notice a malicious address where a couple of characters have been altered. + +This type of technique is employed by address spoofing and poisoning attacks where users are led to believe they are interacting with or sending funds to the correct address, when in fact the address simply resembles the correct address, but isn't the same. + +ENS names for wallets and contracts protect against these types of attacks. Like DNS spoofing attacks, ENS spoofing attacks can also be harboured, however, a user is more likely to notice a misspelling in an ENS name than a small modification to a hexadecimal address. + +### Better UX for wallets and explorers {#better-ux} + +When a smart contract has been configured with an ENS name, it is possible for apps such as wallets and blockchain explorers to display ENS names for smart contracts, instead of hexadecimal addresses. This provides a significant user experience (UX) uplift for users. + +For instance, when interacting with an app such as Uniswap, users will typically see that the app they are interacting with is hosted on the website `uniswap.org`, but they would be presented with a hexadecimal contract address if Uniswap has not named their smart contracts with ENS. If the contract is named, instead they could see `v4.contracts.uniswap.eth` which is far more useful. + +## Naming at deployment vs. post-deployment {#when-to-name} + +There are two points at which smart contracts can be named: + +- **At deployment time**: assigning an ENS name to the contract as it is deployed. +- **After deployment**: mapping an existing contract address to a new ENS name. + +Both approaches rely on having owner or manager access to an ENS domain so they can create and set ENS records. + +## How ENS naming works for contracts {#how-ens-naming-works} + +ENS names are stored onchain and resolve to Ethereum addresses via ENS resolvers. To name a smart contract: + +1. Register or control a parent ENS domain (e.g. `myapp.eth`) +2. Create a subdomain (e.g. `v1.myapp.eth`) +3. Set the `address` record of the subdomain to the contract address +4. Set the contract's reverse record to the ENS to allow the name to be found via its address + +ENS names are hierarchical and support unlimited sub-names. Setting these records typically involves interacting with the ENS registry and public resolver contracts. + +## Tools for naming contracts {#tools} + +There are two approaches to naming smart contracts. Either using the [ENS App](https://app.ens.domains) with some manual steps, or using [Enscribe](https://www.enscribe.xyz). These are outlined below. + +### Manual ENS setup {#manual-ens-setup} + +Using the [ENS App](https://app.ens.domains/), developers can manually create sub-names and set forward address records. However, they cannot set a primary name for a smart contract by setting the reverse record for the name via the ENS app. Manual steps must be taken which are covered in the [ENS docs](https://docs.ens.domains/web/naming-contracts/). + +### Enscribe {#enscribe} + +[Enscribe](https://www.enscribe.xyz) simplifies smart contract naming with ENS, and enhances user trust in smart contracts. It provides: + +- **Atomic deployment and naming**: Assign an ENS name when deploying a new contract +- **Post-deployment naming**: Attach names to already-deployed contracts +- **Multi-chain support**: Works across Ethereum and L2 networks where ENS is supported +- **Contract verification data**: Includes contract verification data pulled from multiple sources to increase trust for users + +Enscribe supports ENS names provided by users, or its own domains if the user doesn't have an ENS name. + +You can access the [Enscribe App](https://app.enscribe.xyz) to start naming and viewing smart contracts. + +## Best practices {#best-practices} + +- **Use clear, versioned names** like `v1.myapp.eth` to make contract upgrades transparent +- **Set reverse records** to link contracts to ENS names for visibility in apps such as wallets and blockchain explorers. +- **Monitor expiries closely** if you want to prevent accidental changes in ownership +- **Verify contract source** so users can trust that the named contract behaves as expected + +## Risks {#risks} + +Naming smart contracts provides significant benefits for users of Ethereum, however, owners of ENS domains must be vigilant with respect to their management. Notable risks include: + +- **Expiry**: Just like DNS names, ENS names registrations are of finite duration. Hence it is vital that owners monitor their domains expiry dates and renew them well in advance of their expiry. Both the ENS App and Enscribe provide visual indicators for domain owners when expiry is coming up. +- **Change in ownership**: ENS records are represented as NFTs on Ethereum, where the owner of a specific `.eth` domain has the associated NFT in their possession. Hence should a different account take ownership of this NFT, the new owner can modify any ENS records as they see fit. + +To mitigate against such risks, the owner account for the `.eth` 2nd level domains (2LD) should be secured via a multi-sig wallet with subdomains being created to manage contract naming. That way in the event of any accidental or malicious changes in ownership at the subdomain level, they can be overridden by the 2LD owner. + +## Future of contract naming {#future} + +Contract naming is becoming a best practice for dapp development, similar to how domain names replaced IP addresses on the web. As more infrastructure such as wallets, explorers and dashboards integrate ENS resolution for contracts, named contracts will improve safety and reduce errors across the ecosystem. + +By making smart contracts easier to recognize and reason about, naming helps bridge the gap between users and apps on Ethereum, improving both safety and UX for users. + +## Further reading {#further-reading} + +- [Naming Smart Contracts with ENS](https://docs.ens.domains/web/naming-contracts/) +- [Naming Smart Contracts with Enscribe](https://www.enscribe.xyz/docs). diff --git a/public/content/developers/docs/smart-contracts/testing/index.md b/public/content/developers/docs/smart-contracts/testing/index.md index d0b9756be00..43a7449a815 100644 --- a/public/content/developers/docs/smart-contracts/testing/index.md +++ b/public/content/developers/docs/smart-contracts/testing/index.md @@ -279,6 +279,8 @@ The major difference is that bug bounty programs are open to the wider developer - **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _Python-based static analysis framework with vulnerability and code quality detectors, printers for extracting useful information from code and support for writing custom submodules._ +- **[Slippy](https://github.com/fvictorio/slippy)** - _A simple and powerful linter for Solidity._ + #### Dynamic analysis tools {#dynamic-analysis-tools} - **[Echidna](https://github.com/crytic/echidna/)** - _Fast contract fuzzer for detecting vulnerabilities in smart contracts through property-based testing._ diff --git a/public/content/developers/docs/standards/tokens/erc-223/index.md b/public/content/developers/docs/standards/tokens/erc-223/index.md index a5f61c63e8e..5955f3f84ae 100644 --- a/public/content/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/developers/docs/standards/tokens/erc-223/index.md @@ -178,7 +178,7 @@ contract RecipientContract is IERC223Recipient { } ``` -When the `RecipientContract` will receive a ERC-223 token the contract will execute a function encoded as `_data` parameter of the token transaction, identical to how ether transactions encode function calls as transaction `data`. Read [the data field](https://ethereum.org/en/developers/docs/transactions/#the-data-field) for more information. +When the `RecipientContract` will receive a ERC-223 token the contract will execute a function encoded as `_data` parameter of the token transaction, identical to how ether transactions encode function calls as transaction `data`. Read [the data field](/developers/docs/transactions/#the-data-field) for more information. In the above example an ERC-223 token must be transferred to the address of the `RecipientContract` with the `transfer(address,uin256,bytes calldata _data)` function. If the data parameter will be `0xc2985578` (the signature of a `foo()` function) then the function foo() will be invoked after the token deposit is received and the event Foo() will be fired. diff --git a/public/content/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md b/public/content/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md index 9d36beed9cb..96cd2d20dfe 100644 --- a/public/content/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md +++ b/public/content/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md @@ -501,7 +501,7 @@ export { chains } ### Adding another blockchain {#add-blockchain} -These days there are a lot of [L2 scaling solution](https://ethereum.org/en/layer-2/), and you might want to support some that viem does not support yet. To do it, you modify `src/wagmi.ts`. These instructions explain how to add [Redstone Holesky](https://redstone.xyz/docs/network-info). +These days there are a lot of [L2 scaling solution](/layer-2/), and you might want to support some that viem does not support yet. To do it, you modify `src/wagmi.ts`. These instructions explain how to add [Redstone Holesky](https://redstone.xyz/docs/network-info). 1. Import the `defineChain` type from viem. diff --git a/public/content/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/developers/tutorials/optimism-std-bridge-annotated-code/index.md index 056501f2213..060dc5804dd 100644 --- a/public/content/developers/tutorials/optimism-std-bridge-annotated-code/index.md +++ b/public/content/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -572,7 +572,7 @@ Only cells that are set to a different value are written to storage. ``` To want to be able to upgrade this contract without having to copy all the variables in the storage. -To do that we use a [`Proxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy), a contract that uses [`delegatecall`](https://solidity-by-example.org/delegatecall/) to transfer calls to a separate contact whose address is stored by the proxy contract (when you upgrade you tell the proxy to change that address). +To do that we use a [`Proxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy), a contract that uses [`delegatecall`](https://solidity-by-example.org/delegatecall/) to transfer calls to a separate contract whose address is stored by the proxy contract (when you upgrade you tell the proxy to change that address). When you use `delegatecall` the storage remains the storage of the _calling_ contract, so the values of all the contract state variables are unaffected. One effect of this pattern is that the storage of the contract that is the _called_ of `delegatecall` is not used and therefore the constructor values passed to it do not matter. diff --git a/public/content/developers/tutorials/secret-state/index.md b/public/content/developers/tutorials/secret-state/index.md index d9fec00d08f..f9a5ae7c0b4 100644 --- a/public/content/developers/tutorials/secret-state/index.md +++ b/public/content/developers/tutorials/secret-state/index.md @@ -585,7 +585,7 @@ It still fails, but now it fails without a reason because it happens during the ### How can a user verify the zero trust code? {#user-verify-zero-trust} -Smart contracts are relatively easy to verify. Typically, the developer publishes the source code to a block explorer, and the block explorer verifies that the source code does compile to the code in the [contract deployment transaction](https://ethereum.org/en/developers/docs/smart-contracts/deploying/). In the case of MUD `System`s this is [slightly more complicated](https://mud.dev/cli/verify), but not by much. +Smart contracts are relatively easy to verify. Typically, the developer publishes the source code to a block explorer, and the block explorer verifies that the source code does compile to the code in the [contract deployment transaction](/developers/docs/smart-contracts/deploying/). In the case of MUD `System`s this is [slightly more complicated](https://mud.dev/cli/verify), but not by much. This is harder with zero-knowledge. The verifier includes some constants and runs some calculations on them. This doesn't tell you what is being proved. diff --git a/public/content/developers/tutorials/server-components/index.md b/public/content/developers/tutorials/server-components/index.md index ed673ffabf1..9ec25727f92 100644 --- a/public/content/developers/tutorials/server-components/index.md +++ b/public/content/developers/tutorials/server-components/index.md @@ -21,7 +21,7 @@ However, there are some cases where an application would benefit from having a s There are several possible tasks for such a server could fulfill. -- Holder of secret state. In gaming it is often useful not to have all the information that the game knows available to the players. However, *there are no secrets on the blockchain*, any information that is in the blockchain is easy for anybody to figure out. Therefore, if part of the game state is to be kept secret, it has to be stored elsewhere (and possibly have the effects of that state verified using [zero-knowledge proofs](/zero-knowledge-proofs)). +- Holder of secret state. In gaming it is often useful not to have all the information that the game knows available to the players. However, _there are no secrets on the blockchain_, any information that is in the blockchain is easy for anybody to figure out. Therefore, if part of the game state is to be kept secret, it has to be stored elsewhere (and possibly have the effects of that state verified using [zero-knowledge proofs](/zero-knowledge-proofs)). - Centralized oracle. If the stakes are sufficiently low, an external server that reads some information online and then posts it to the chain may be good enough to use as an [oracle](/developers/docs/oracles/). @@ -68,37 +68,42 @@ The easiest way to understand how to write a server component is to go over the The vast majority of the program is contained in [`src/app.ts`](https://github.com/qbzzt/20240715-server-component/blob/main/src/app.ts). - ##### Creating the prerequisite objects ```typescript -import { createPublicClient, createWalletClient, getContract, http, Address } from 'viem' +import { + createPublicClient, + createWalletClient, + getContract, + http, + Address, +} from "viem" ``` These are the [Viem](https://viem.sh/) entities we need, functions and [the `Address` type](https://viem.sh/docs/glossary/types#address). This server is written in [TypeScript](https://www.typescriptlang.org/), which is an extension to JavaScript that makes it [strongly typed](https://en.wikipedia.org/wiki/Strong_and_weak_typing). ```typescript -import { privateKeyToAccount } from 'viem/accounts' +import { privateKeyToAccount } from "viem/accounts" ``` [This function](https://viem.sh/docs/accounts/privateKey) lets us generate the wallet information, including address, corresponding to a private key. ```typescript -import { holesky } from 'viem/chains' +import { holesky } from "viem/chains" ``` To use a blockchain in Viem you need to import its definition. In this case, we want to connect to the [Holesky](https://github.com/eth-clients/holesky) test blockchain. ```typescript // This is how we add the definitions in .env to process.env. -import * as dotenv from "dotenv"; +import * as dotenv from "dotenv" dotenv.config() ``` This is how we read `.env` into the environment. We need it for the private key (see later). ```typescript -const greeterAddress : Address = "0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6" +const greeterAddress : Address = "0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6" const greeterABI = [ { "inputs": [ @@ -132,12 +137,12 @@ const greeterABI = [ To use a contract we need its address and the [ABI](/glossary/#abi) for it. We provide both here. -In JavaScript (and therefore TypeScript) you can't assign a new value to a constant, but you *can* modify the object that is stored in it. By using the suffix `as const` we are telling TypeScript that the list itself is constant and may not be changed. +In JavaScript (and therefore TypeScript) you can't assign a new value to a constant, but you _can_ modify the object that is stored in it. By using the suffix `as const` we are telling TypeScript that the list itself is constant and may not be changed. ```typescript -const publicClient = createPublicClient({ - chain: holesky, - transport: http(), +const publicClient = createPublicClient({ + chain: holesky, + transport: http(), }) ``` @@ -147,31 +152,30 @@ Create a Viem [public client](https://viem.sh/docs/clients/public.html). Public const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) ``` -The environment variables are available in [`process.env`](https://www.totaltypescript.com/how-to-strongly-type-process-env). However, TypeScript is strongly typed. An environment variable can be be any string, or empty, so the type for an environment variable is `string | undefined`. However, a key is defined in Viem as `0x${string}` (`0x` followed by a string). Here we tell TypeScript that the `PRIVATE_KEY` environment variable will be of that type. If it isn't, we'll get a runtime error. +The environment variables are available in [`process.env`](https://www.totaltypescript.com/how-to-strongly-type-process-env). However, TypeScript is strongly typed. An environment variable can be be any string, or empty, so the type for an environment variable is `string | undefined`. However, a key is defined in Viem as `0x${string}` (`0x` followed by a string). Here we tell TypeScript that the `PRIVATE_KEY` environment variable will be of that type. If it isn't, we'll get a runtime error. The [`privateKeyToAccount`](https://viem.sh/docs/accounts/privateKey) function then uses this private key to create a full account object. ```typescript -const walletClient = createWalletClient({ - account, - chain: holesky, - transport: http(), -}) +const walletClient = createWalletClient({ + account, + chain: holesky, + transport: http(), +}) ``` Next, we use the account object to create a [wallet client](https://viem.sh/docs/clients/wallet). This client has a private key and an address, so it can be used to send transactions. ```typescript const greeter = getContract({ - address: greeterAddress, - abi: greeterABI, - client: { public: publicClient, wallet: walletClient } + address: greeterAddress, + abi: greeterABI, + client: { public: publicClient, wallet: walletClient }, }) ``` Now that we have all the prerequisites, we can finally create a [contract instance](https://viem.sh/docs/contract/getContract). We will use this contract instance to communicate with the onchain contract. - ##### Reading from the blockchain ```typescript @@ -182,8 +186,7 @@ The contract functions that are read only ([`view`](https://www.tutorialspoint.c JavaScript is single-threaded, so when we fire off a long running process we need to [specify we do it asynchronously](https://eloquentjavascript.net/11_async.html#h-XvLsfAhtsE). Calling the blockchain, even for a read only operation, requires a round-trip between the computer and a blockchain node. That is the reason we specify here the code needs to `await` for the result. -If you are interested in how this work you can [read about it here](https://www.w3schools.com/js/js_promise.asp), but in practical terms all you need to know is that you `await` the results if you start an operation that takes a long time, and that any function that does this has to be declared as `async`. - +If you are interested in how this work you can [read about it here](https://www.w3schools.com/js/js_promise.asp), but in practical terms all you need to know is that you `await` the results if you start an operation that takes a long time, and that any function that does this has to be declared as `async`. ##### Issuing transactions @@ -194,10 +197,10 @@ const setGreeting = async (greeting: string): Promise => { This is the function you call to issue a transaction that changes the greeting. As this is a long operation, the function is declared as `async`. Because of the internal implementation, any `async` function needs to return a `Promise` object. In this case, `Promise` means that we don't specify what exactly will be returned in the `Promise`. ```typescript - const txHash = await greeter.write.setGreeting([greeting]); +const txHash = await greeter.write.setGreeting([greeting]) ``` -The `write` field of the contract instance has all the functions that write to the blockchain state (those that require sending a transaction), such as [`setGreeting`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract#a4136862). The parameters, if any, are provided as a list, and the function returns the hash of the transaction. +The `write` field of the contract instance has all the functions that write to the blockchain state (those that require sending a transaction), such as [`setGreeting`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract#a4136862). The parameters, if any, are provided as a list, and the function returns the hash of the transaction. ```typescript console.log(`Working on a fix, see https://eth-holesky.blockscout.com/tx/${txHash}`) @@ -208,7 +211,6 @@ The `write` field of the contract instance has all the functions that write to t Report the hash of the transaction (as part of a URL to the block explorer to view it) and return it. - ##### Responding to events ```typescript @@ -217,7 +219,6 @@ greeter.watchEvent.SetGreeting({ [The `watchEvent` function](https://viem.sh/docs/actions/public/watchEvent) lets you specify that a function is to run when an event is emitted. If you only care about one type of event (in this case, `SetGreeting`), you can use this syntax to limit yourself to that event type. - ```typescript onLogs: logs => { ``` @@ -225,7 +226,9 @@ greeter.watchEvent.SetGreeting({ The `onLogs` function is called when there are log entries. In Ethereum "log" and "event" are usually interchangeable. ```typescript - console.log(`Address ${logs[0].args.sender} changed the greeting to ${logs[0].args.greeting}`) +console.log( + `Address ${logs[0].args.sender} changed the greeting to ${logs[0].args.greeting}` +) ``` There could be multiple events, but foir simplicity we only care about the first one. `logs[0].args` are the arguments of the event, in this case `sender` and `greeting`. @@ -233,11 +236,11 @@ There could be multiple events, but foir simplicity we only care about the first ```typescript if (logs[0].args.sender != account.address) setGreeting(`${account.address} insists on it being Hello!`) - } + } }) ``` -If the sender is *not* this server, use `setGreeting` to change the greeting. +If the sender is _not_ this server, use `setGreeting` to change the greeting. #### `package.json` {#package-json} @@ -271,7 +274,7 @@ There are multiple types of JavaScript node applications. The `module` type lets }, ``` -These are packages that are only required for development. Here we need `typescript` and the because we are using it with Node.js, we are also getting the types for node variables and objects, such as `process`. [The `^` notation](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) means that version or a higher version that doesn't have breaking changes. See [here](https://semver.org) for more information about the meaning of version numbers. +These are packages that are only required for development. Here we need `typescript` and because we are using it with Node.js, we are also getting the types for node variables and objects, such as `process`. [The `^` notation](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) means that version or a higher version that doesn't have breaking changes. See [here](https://semver.org) for more information about the meaning of version numbers. ```json "dependencies": { @@ -285,7 +288,7 @@ These are packages that are required at runtime, when running `dist/app.js`. ## Conclusion {#conclusion} -The centralized server we created here does its job, which is to act as an agent for a user. Anybody else who wants the dapp to continue functioning and is willing to spend the gas can run a new instance of the server with their own address. +The centralized server we created here does its job, which is to act as an agent for a user. Anybody else who wants the dapp to continue functioning and is willing to spend the gas can run a new instance of the server with their own address. However, this only works when the centralized server's actions can be easily verified. If the centralized server has any secret state information, or runs difficult calculations, it is a centralized entity that you need trust to use the application, which is exactly what blockchains try to avoid. In a future article I plan to show how to use [zero-knowledge proofs](/zero-knowledge-proofs) to get around this problem. diff --git a/public/content/glossary/index.md b/public/content/glossary/index.md index a13e06b5e06..8c8588e6d84 100644 --- a/public/content/glossary/index.md +++ b/public/content/glossary/index.md @@ -440,6 +440,8 @@ lang: en + + diff --git a/public/content/privacy/index.md b/public/content/privacy/index.md new file mode 100644 index 00000000000..aa81fde926f --- /dev/null +++ b/public/content/privacy/index.md @@ -0,0 +1,97 @@ +--- +title: Privacy on Ethereum +description: Tools and techniques for protecting your privacy on Ethereum +lang: en +--- + +# Privacy on Ethereum {#introduction} + +Privacy is not only essential for personal safety, it's a cornerstone of freedom and a key [guarantor for decentralization](https://vitalik.eth.limo/general/2025/04/14/privacy.html). Privacy gives people the ability to express themselves, transact with others, and organize communities freely. But like all blockchains, Ethereum's public ledger makes privacy challenging. + +Ethereum is transparent by design. Every onchain action is visible to anyone who looks. While Ethereum offers pseudonymity by linking your activity to a [public key](/decentralized-identity/#public-key-cryptography) instead of a real-world identity, patterns of activity could be analyzed to reveal sensitive information and identify users. + +Building privacy-preserving tools into Ethereum can help people, organizations, and institutions interact securely while limiting unnecessary exposure. This makes the ecosystem safer and more practical for a wider range of use cases. + +## Privacy for writes {#privacy-of-writes} + +By default, every transaction written on Ethereum is public and permanent. This includes not only sending ETH, but also registering ENS names, collecting POAPs, or trading NFTs. Everyday actions like payments, voting, or identity verification can reveal your information to unintended parties. There are several tools and techniques that can help make these more private: + +### Mixing protocols (or "mixers") {#mixing-protocols} + +Mixers break the link between senders and recipients by putting many users' transactions into a shared "pool" and then letting people withdraw later to a fresh address. Since deposits and withdrawals are jumbled together, it's much harder for observers to connect them. + +_Examples: [PrivacyPools](https://docs.privacypools.com/), [Tornado Cash](https://tornado.cash/)_ + +### Shielded Pools {#shielded-pools} + +Shielded pools are similar to mixers but they allow users to hold and transfer funds privately inside the pool itself. Instead of just obscuring the link between deposit and withdrawal, shielded pools maintain an ongoing private state, often secured with zero-knowledge proofs. This makes it possible to build private transfers, private balances, and more. + +_Examples: [Railgun](https://www.railgun.org/), [Aztec](https://aztec.network/), Nightfall_ + +### Stealth addresses {#stealth-addresses} + +A [stealth address](https://vitalik.eth.limo/general/2023/01/20/stealth.html) is like giving each sender a unique, one-time P.O. box that only you can open. Every time someone sends you crypto, it goes to a fresh address, so no one else can see that all those payments belong to you. This keeps your payment history private and harder to track. + +_Examples: [UmbraCash](https://app.umbra.cash/faq), [FluidKey](https://www.fluidkey.com/)_ + +### Other use cases {#other-use-cases} + +Other projects exploring private writes include [PlasmaFold](https://pse.dev/projects/plasma-fold) (private payments) and systems like [MACI](https://pse.dev/projects/maci) and [Semaphore](https://pse.dev/projects/semaphore) (private voting). + +These tools expand options for writing privately on Ethereum, but each comes with tradeoffs. Some approaches are still experimental, some increase costs or complexity, and some tools like mixers may face legal or regulatory scrutiny depending on how they're used. + +## Privacy for reads {#privacy-of-reads} + +Reading or checking any information on Ethereum (e.g. your wallet balance) usually goes through a service such as your wallet provider, a node provider, or a block explorer. Because you're relying on them to read the blockchain for you, they can also see your requests along with metadata like your IP address or location. If you keep checking the same account, this information can be pieced together to link your identity to your activity. + +Running your own Ethereum node would prevent this, but storing and syncing the full blockchain remains costly and impractical for most users, especially on mobile devices. + +Some projects exploring private reads include [Private Information Retrieval](https://hackmd.io/@brech1/ethereum-privacy-pir?utm_source=preview-mode&utm_medium=rec) (PIR, fetch data without revealing what you're looking up), [zkID](https://hackmd.io/@brech1/ethereum-privacy-pir?utm_source=preview-mode&utm_medium=rec) (private identity checks with zero-knowledge proofs), [vOPRF](https://pse.dev/projects/voprf) (use Web2 accounts pseudonymously in Web3), [vFHE](https://pse.dev/blog/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1) (compute on encrypted data), and [MachinaIO](https://pse.dev/projects/machina-io) (hide program details while keeping functionality). + +## Privacy for proving {#privacy-of-proving} + +Privacy-preserving proofs are tools you can use on Ethereum to show that something is true without revealing unnecessary details. For example, you could: + +- Prove you're over 18 without sharing your full birthdate +- Prove ownership of an NFT or token without revealing your entire wallet +- Prove eligibility for a membership, reward, or vote without exposing other personal data + +Most tools for these rely on cryptographic techniques like zero-knowledge proofs, but the challenge is making them efficient enough to run on everyday devices, portable to any platform, and secure. + +Some projects exploring privacy for proving include [Client Side Proving](https://pse.dev/projects/client-side-proving) (ZK proving systems), [TLSNotary](https://tlsnotary.org/), (proofs of authenticity for any data on the web), [Mopro](https://pse.dev/projects/mopro) (mobile client-side proving), [Private Proof Delegation](https://pse.dev/projects/private-proof-delegation) (delegation frameworks that avoid trust assumptions), and [Noir](https://noir-lang.org/) (language for private and verifiable computing). + +## Privacy Glossary {#privacy-glossary} + +**Anonymous**: Interacting with all identifiers permanently removed from your data, making it impossible to trace information back to an individual + +**Encryption**: A process that scrambles data so that only someone with the correct key can read it + +**[Fully Homomorphic Encryption](https://pse.dev/blog/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1) (FHE)**: A way to perform computations directly on encrypted data, without ever decrypting it + +**[Indistinguishable Obfuscation](https://pse.dev/projects/machina-io) (iO)**: Privacy techniques that make programs or data unintelligible while still usable + +**[Multi-Party Computation](https://pse.dev/blog/secure-multi-party-computation) (MPC)**: Methods that allow multiple parties to compute a result together without exposing their private inputs + +**Programmable Cryptography**: Flexible, rule-driven cryptography that can be customized in software to control how and when data is shared, verified, or revealed + +**Pseudonymous**: Using unique codes or numbers (like an Ethereum address) in place of personal identifiers + +**Selective Disclosure**: The ability to share only what's needed (e.g. proving you own an NFT without revealing your entire wallet history) + +**Unlinkability**: Making sure separate actions on the blockchain cannot be tied back to the same address + +**Verifiability**: Ensuring others can confirm a claim is true, such as validating a transaction or proof on Ethereum + +**Verifiable Delegation**: Assigning a task—like generating a proof—to another party (e.g. a mobile wallet using a server for heavy cryptography) while still being able to verify it was done correctly + +**[Zero-Knowledge Proofs](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) (ZKPs)**: Cryptographic protocols that let someone prove information is true without revealing the underlying data + +**ZK Rollup**: A scalability system that batches transactions off-chain and submit a validity proof onchain—not private by default, but they enable efficient privacy systems (like shielded pools) by reducing costs + +## Resources {#resources} + +- [Privacy Stewards of Ethereum](https://pse.dev/) (PSE), an Ethereum Foundation research and development lab focused on privacy for the ecosystem +- [Web3PrivacyNow](https://web3privacy.info/), a network of people, projects, and aligned organizations who protect and advance human rights online +- [WalletBeat](https://beta.walletbeat.eth.limo/wallet/summary/), an Ethereum wallet rating site aiming to provide a comprehensive list of wallets, their functionality, practices, and support for certain standards. +- [Zk-kit](https://zkkit.pse.dev/): A set of libraries (algorithms, utility functions, and data structures) that can be reused in different projects and zero-knowledge protocols. +- [Privacy Apps](/apps/categories/privacy/) - Discover a list of curated Privacy applications that run on Ethereum. diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 88e3835e1e9..196b3855b0b 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -4,9 +4,9 @@ description: Learn about the Fusaka protocol upgrade lang: en --- -# Fusaka {#fusaka} +# Fusaka {#fusaka} -The Fusaka network upgrade follows [Pectra](/roadmap/pectra/) and brings more new features and improves the experience for every Ethereum user and developer. The name consists of the execution layer upgrade Osaka and the consensus layer version named after the Fulu star. Both parts of Ethereum receive an upgrade that pushes Ethereum scaling, security and user experience to the future. +The Fusaka network upgrade follows [Pectra](/roadmap/pectra/) and brings more new features and improves the experience for every Ethereum user and developer. The name consists of the execution layer upgrade Osaka and the consensus layer version named after the Fulu star. Both parts of Ethereum receive an upgrade that pushes Ethereum scaling, security and user experience to the future. This upgrade is planned for Q4 2025. @@ -24,9 +24,9 @@ Specification: https://eips.ethereum.org/EIPS/eip-7594 Resources: https://youtu.be/bONWd1x2TjQ?t=328 (dapplion on PeerDAS) -This is the *headliner* of the Fusaka fork, the main feature added in this upgrade. Layer 2s currently post their data to Ethereum in blobs, the ephemeral data type created specifically for layer 2s. Pre-Fusaka, every full node has to store every blob to ensure that the data exists. As blob throughput rises, having to download all of this data becomes untenably resource-intensive. +This is the _headliner_ of the Fusaka fork, the main feature added in this upgrade. Layer 2s currently post their data to Ethereum in blobs, the ephemeral data type created specifically for layer 2s. Pre-Fusaka, every full node has to store every blob to ensure that the data exists. As blob throughput rises, having to download all of this data becomes untenably resource-intensive. -With [data availability sampling](https://notes.ethereum.org/@fradamt/das-fork-choice) , instead of having to store all of the blob data, each node will be responsible for a subset of the blob data. Blobs are uniformly randomly distributed across nodes in the network with each full node holding only 1/8th of the data, therefore enabling theoretical scale up to 8x. To ensure availability of the data, any portion of the data can be reconstructed from any existing 50% of the whole with methods that drive down the probability of wrong or missing data to a cryptographically negligible level (~one in 10²⁰ to one in 10²⁴). +With [data availability sampling](https://notes.ethereum.org/@fradamt/das-fork-choice) , instead of having to store all of the blob data, each node will be responsible for a subset of the blob data. Blobs are uniformly randomly distributed across nodes in the network with each full node holding only 1/8th of the data, therefore enabling theoretical scale up to 8x. To ensure availability of the data, any portion of the data can be reconstructed from any existing 50% of the whole with methods that drive down the probability of wrong or missing data to a cryptographically negligible level (~one in 10²⁰ to one in 10²⁴). This keeps hardware and bandwidth requirements for nodes tenable while enabling blob scaling resulting in more scale with smaller fees for layer 2s. @@ -36,7 +36,7 @@ In-depth: https://eprint.iacr.org/2024/1362.pdf Specification: https://eips.ethereum.org/EIPS/eip-7892 -Layer 2s scale Ethereum - as their networks grow, they need to post more data to Ethereum. This means that Ethereum will need to increase the number of blobs available to them as time goes on. Although PeerDAS enables scaling blob data, it needs to be done gradually and safely. +Layer 2s scale Ethereum - as their networks grow, they need to post more data to Ethereum. This means that Ethereum will need to increase the number of blobs available to them as time goes on. Although PeerDAS enables scaling blob data, it needs to be done gradually and safely. Because Ethereum is code running on thousands of independent nodes that require agreement on same rules, we cannot simply introduces changes like increasing blob count the way you deploy a website update. Any rule change must be a coordinated upgrade where every node, client and validator software upgrades before the same predetermined block. @@ -72,7 +72,7 @@ Specification: https://eips.ethereum.org/EIPS/eip-7825 EIP-[7825](https://eips.ethereum.org/EIPS/eip-7825) adds a cap of 16,777,216 (2^24) gas per transaction. It’s proactive DoS hardening by bounding the worst-case cost of any single transaction as we raise the block gas limit. It makes validation and propagation easier to model to allow us to tackle scaling via raising the gas limit. -Why exactly 2^24 gas? It’s comfortably smaller than today’s gas limit, is large enough for real contract deployments & heavy precompiles, and a power of 2 makes it easy to implement across clients. This new maximum transaction size is a similar to pre-Pectra average block size, making it a reasonable limit for any operation on Ethereum. +Why exactly 2^24 gas? It’s comfortably smaller than today’s gas limit, is large enough for real contract deployments & heavy precompiles, and a power of 2 makes it easy to implement across clients. This new maximum transaction size is a similar to pre-Pectra average block size, making it a reasonable limit for any operation on Ethereum. #### MODEXP Gas Cost Increase {#modexp-gas-cost-increase} @@ -112,7 +112,7 @@ Devnet planning targets ~60M stress (full blocks with synthetic load) and iterat Specification: https://eips.ethereum.org/EIPS/eip-7917 -With EIP-7917, Beacon Chain will become aware of upcoming block proposers for the next epoch. Having a deterministic view on which validators will be proposing future blocks can enable [preconfirmations](https://ethresear.ch/t/based-preconfirmations/17353) - a commitment with the upcoming proposer that guarantees the user transaction will be included in their block without waiting for the actual block. +With EIP-7917, Beacon Chain will become aware of upcoming block proposers for the next epoch. Having a deterministic view on which validators will be proposing future blocks can enable [preconfirmations](https://ethresear.ch/t/based-preconfirmations/17353) - a commitment with the upcoming proposer that guarantees the user transaction will be included in their block without waiting for the actual block. This feature benefits client implementations and security of the network as it prevents edge cases where validators could manipulate the proposer schedule. The lookahead also allows for less complexity of the implementation. @@ -124,6 +124,17 @@ Specification: https://eips.ethereum.org/EIPS/eip-7939 EIP-7939 adds a small EVM instruction, CLZ (“count leading zeros”). Given a 256-bit value, it returns how many zero bits are at the front — and returns 256 if the value is entirely zero. This is a common feature in many instruction set architectures as it enables more efficient arithmetic operations. In practice this collapses today’s hand-rolled bit scans into one step, so finding the first set bit, scanning bytes, or parsing bitfields becomes simpler and cheaper. The opcode is low, fixed-cost and has been benchmarked to be on par with a basic add, which trims bytecode and saves gas for the same work. +### Precompile for secp256r1 Curve Support {#secp256r1-precompile} + +Specification: https://eips.ethereum.org/EIPS/eip-7951 + +Introduces a built-in, passkey-style secp256r1 (P-256) signature checker at the fixed address `0x100` using the same call format already adopted by many L2s and fixing edge cases, so contracts written for those environments work on L1 without changes. + +UX upgrade! For users, this unlocks device-native signing and passkeys. Wallets can tap into Apple Secure Enclave, Android Keystore, hardware security modules (HSMs), and FIDO2/WebAuthn directly - no seed phrase, smoother onboarding, and multi-factor flows that feel like modern apps. This results in better UX, easier recovery, and account abstraction patterns that match what billions of devices do already. + +For developers, it takes a 160-byte input and returns a 32-byte output, making it easy to port existing libraries and L2 contracts. Under the hood, it includes point-at-infinity and modular-comparison checks to eliminate tricky edge cases without breaking valid callers. + +[More about RIP-7212](https://www.alchemy.com/blog/what-is-rip-7212) _(Note that EIP-7951 superseded RIP-7212)_ ## Does this upgrade affect all Ethereum nodes and validators? {#does-this-upgrade-affect-all-ethereum-nodes-and-validators} diff --git a/public/content/smart-contracts/index.md b/public/content/smart-contracts/index.md index 38607e51a30..25202805521 100644 --- a/public/content/smart-contracts/index.md +++ b/public/content/smart-contracts/index.md @@ -1,6 +1,6 @@ --- title: Smart contracts -metaTitle: "Smart contracts: What are the and benefits" +metaTitle: "Smart contracts: What are they and their benefits" description: A non-technical introduction to smart contracts lang: en --- @@ -87,4 +87,4 @@ They can perform computations, create currency, store data, mint [NFTs](/glossar - \ No newline at end of file + diff --git a/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md index 5b5282d394d..4e951c30925 100644 --- a/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Um die Client-Vielfalt zu verbessern, müssen nicht nur einzelne Nutzer Minderhe [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) Technisch versierte Nutzer können dazu beitragen, diesen Prozess zu beschleunigen, indem sie mehr Anleitungen und Dokumentationen für Minderheitenclients schreiben und ihre Kollegen, die Knoten betreiben, ermutigen, von den dominanten Clients wegzugehen. Anleitungen für den Wechsel zu einem Minderheitskonsensclient finden Sie auf [clientdiversity.org](https://clientdiversity.org/). diff --git a/public/content/translations/de/developers/docs/nodes-and-clients/index.md b/public/content/translations/de/developers/docs/nodes-and-clients/index.md index d1d5f3bb661..8a6e3b32b1c 100644 --- a/public/content/translations/de/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/de/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ Es gibt mehrere Konsensclients (früher als „Eth2“-Clients bekannt), die daz | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, MacOS | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten und weitere | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, MacOS | Beacon Chain, Goerli, Sepolia, Ropsten und weitere | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, MacOS | Beacon Chain, Goerli, Sepolia, Ropsten und weitere | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Los | Linux, Windows, MacOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten und weitere | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Los | Linux, Windows, MacOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten und weitere | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, MacOS | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten und weitere | | [Grandine](https://docs.grandine.io/) (Beta) | Rust | Linux, Windows, MacOS | Beacon Chain, Goerli, Sepolia und mehr | @@ -222,7 +222,7 @@ Erfahren Sie mehr in den [Nimbus-Docs](https://nimbus.guide/) Prysm ist ein vollwertiger, open-source Konsensclient, der in Go unter der GPL-3.0-Lizenz geschrieben wurde. Er verfügt über eine optionale Webapp-UI und legt großen Wert auf Benutzerfreundlichkeit, Dokumentation und Konfigurierbarkeit sowohl für Stake-at-Home- als auch für institutionelle Benutzer. -Besuchen Sie die [Prysm-Docs](https://docs.prylabs.network/docs/getting-started/), um mehr zu erfahren. +Besuchen Sie die [Prysm-Docs](https://prysm.offchainlabs.com/docs/), um mehr zu erfahren. ### Teku {#teku} diff --git a/public/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md index 1683dacbe28..27fd748bf51 100644 --- a/public/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Ausführen von Prysm -Prysm wird mit einem Skript geliefert, das eine einfache automatische Installation ermöglicht. Einzelheiten sind in den [Prysm-Dokumenten](https://docs.prylabs.network/docs/install/install-with-script) zu finden. +Prysm wird mit einem Skript geliefert, das eine einfache automatische Installation ermöglicht. Einzelheiten sind in den [Prysm-Dokumenten](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) zu finden. ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/de/developers/docs/oracles/index.md b/public/content/translations/de/developers/docs/oracles/index.md index eddcdee54f9..3c0e168f684 100644 --- a/public/content/translations/de/developers/docs/oracles/index.md +++ b/public/content/translations/de/developers/docs/oracles/index.md @@ -2,337 +2,108 @@ title: Oracles description: Oracles helfen dabei, Daten aus der realen Welt in Ihre Ethereum-Anwendung zu bringen, da Smart Contracts die realen Daten nicht allein abfragen können. lang: de -incomplete: true --- -Oracles sind Datenleitungen, die Ethereum mit Offchain-Informationen in der realen Welt verbinden, so dass Sie Daten in Ihren Smart Contracts abfragen können. Zum Beispiel nutzen Vorhersagemarkt-dApps Oracles zur Begleichung von Zahlungen auf der Grundlage von Events. Ein Vorhersagemarkt könnte Sie fragen, Ihre ETH auf den nächsten Präsidenten der Vereinigten Staaten zu wetten. Sie werden ein Oracle verwenden, um das Ergebnis zu bestätigen und entsprechend an die Gewinner zu zahlen. +Oracles sind Anwendungen, die Datenfeeds bereitstellen und Offchain-Datenquellen für die Blockchain und Smart Contracts verfügbar machen. Das ist notwendig, weil Ethereum-basierte Smart Contracts standardmäßig keinen Zugriff auf Informationen außerhalb des Blockchain-Netzwerks haben. -## Voraussetzungen {#prerequisites} - -Stellen Sie sicher, dass Sie mit [Knotenpunkten](/developers/docs/nodes-and-clients/), [Konsensmechanismen](/developers/docs/consensus-mechanisms/)und [Smart Contract-Anatomie](/developers/docs/smart-contracts/anatomy/)vertraut sind, im speziellen Smart Contract-Events. - -## Was ist ein Oracle {#what-is-an-oracle} - -Ein Oracle ist eine Brücke zwischen der Blockchain und der realen Welt. Sie fungieren als on-chain APIs, die Sie abfragen können, um Informationen für Ihre Smart Contracts zu bekommen. Dies könnte theoretisch alles sein, von Preisinformationen bis hin zu Wetterberichten. Oracles können auch bidirektional sein, um Daten in die reale Welt zu „senden". - -Schauen Sie sich an, wie Patrick Oracles erklärt: - - - -## Warum werden sie benötigt? {#why-are-they-needed} - -Bei einer Blockchain wie Ethereum muss jeder Knotenpunkt im Netzwerk jede Transaktion wiederholen und am Ende garantiert das gleiche Ergebnis erzielen. APIs führen potenziell variable Daten ein. Wenn Sie ETH auf Basis eines vereinbarten $USD-Werts über eine Preis-API senden würden, würde die Abfrage von einem Tag auf den anderen ein anderes Ergebnis liefern. Nicht zu vergessen, die API könnte gehackt oder veraltet sein. Wenn dies geschieht, könnten sich die Knotenpunkte im Netzwerk nicht auf den aktuellen Zustand von Ethereum einigen und damit den [Konsens](/developers/docs/consensus-mechanisms/) brechen. - -Oracles lösen dieses Problem, indem die Daten auf der Blockchain veröffentlicht werden. Jeder Knotenpunkt, der die Transaktion wiedergibt, verwendet also die gleichen unveränderlichen Daten, die für alle sichtbar sind. Dazu besteht ein Oracle in der Regel aus einem Smart Contract und einigen Off-Chain-Komponenten, die APIs abfragen können. Es werden regelmäßig Transaktionen gesendet, um die Daten des Smart Contract zu aktualisieren. - -### Das Oracle-Problem {#oracle-problem} - -Wie wir bereits erwähnt haben, können Ethereum-Transaktionen nicht direkt auf Off-Chain-Daten zugreifen. Gleichzeitig ist es unsicher, sich bei der Bereitstellung von Daten auf eine einzige Quelle der Wahrheit zu verlassen, und es macht die Dezentralisierung eines Smart Contract zunichte. Dies ist als Oracle-Problem bekannt. - -Wir können das Oracle-Problem vermeiden, indem wir ein dezentrales Oracle verwenden, das Daten aus mehreren Quellen schöpft. Wenn eine Datenquelle gehackt wird oder ausfällt, funktioniert der Smart Contract trotzdem wie vorgesehen. - -### Sicherheit {#security} - -Ein Oracle ist nur so sicher wie seine Datenquelle(n). Wenn ein dApp Uniswap als Oracle für seinen ETH/DAI-Preis-Feed verwendet, kann ein Angreifer den Preis auf Uniswap verschieben, um das Verständnis des dApps für den aktuellen Preis zu manipulieren. Ein Beispiel dafür, wie man dem entgegenwirken kann, ist ein [Feed-System](https://developer.makerdao.com/feeds/) wie das von MakerDAO, das Preisdaten aus vielen externen Preis-Feeds zusammenführt, anstatt sich nur auf eine einzige Quelle zu verlassen. - -### Architektur {#architecture} - -Dies ist ein Beispiel für eine einfache Oracle-Architektur, aber es gibt noch mehr Möglichkeiten, um Berechnungen außerhalb der Kette auszulösen. - -1. Senden Sie ein Protokoll mit Ihrem [Smart-Contract-Event](/developers/docs/smart-contracts/anatomy/#events-and-logs) aus -2. Ein Off-Chain-Dienst hat diese spezifischen Logs abonniert (normalerweise mit dem JSON-RPC `eth_subscribe` Befehl). -3. Der Off-Chain-Dienst führt einige Aufgaben aus, die im Protokoll festgelegt sind. -4. Der Off-Chain-Dienst gibt mit den angeforderten Daten in einer Sekundärtransaktion eine Antwort an den Smart Contract. - -Auf diese Weise erhalten Sie die Daten 1 zu 1. Um die Sicherheit zu erhöhen, sollten Sie jedoch dezentralisieren, wie Sie Ihre Off-Chain-Daten sammeln. - -Der nächste Schritt könnte ein Netzwerk mit diesen Knotenpunkten sein, die diese Aufrufe an verschiedene APIs und Quellen tätigen und die Daten in der Kette zusammenführen. - -[Chainlink Off-Chain Reporting](https://blog.chain.link/off-chain-reporting-live-on-mainnet/) (Chainlink OCR) hat diese Methode verbessert, indem die Off-Chain-Oracles des Netzwerks miteinander kommunizieren, ihre Antworten kryptographisch signieren, ihre Antworten off-chain zusammenfassen und nur eine Transaktion mit dem Ergebnis on-chain senden. Auf diese Weise wird weniger Gas verbraucht, aber Sie erhalten trotzdem die Garantie dezentraler Daten, da jeder Knotenpunkt seinen Teil der Transaktion signiert hat, so dass er von dem Knotenpunkt, der die Transaktion sendet, nicht mehr geändert werden kann. Die Eskalationsrichtlinie tritt in Kraft, wenn der Knotenpunkt keine Transaktion durchführt, und der nächste Knotenpunkt eine Transaktion sendet. - -## Verwendung {#usage} - -Mit Diensten wie Chainlink können Sie dezentrale Daten auf der Kette referenzieren, die bereits aus der realen Welt gezogen und aggregiert wurden. Eine Art öffentliches Gemeingut, aber für dezentralisierte Daten. Sie können auch Ihre eigenen modularen Oracle Netzwerke aufbauen, um alle gewünschten Daten zu erhalten. Darüber hinaus können Sie auch Berechnungen außerhalb der Blockchain durchführen und Informationen an die reale Welt senden. Chainlink verfügt über die nötige Infrastruktur: - -- [Erhalten Sie Krypto-Preis-Feeds in Ihrem Vertrag](https://chain.link/solutions/defi) -- [Generieren Sie überprüfbare zufällige Zahlen (nützlich zum Spielen)](https://chain.link/solutions/chainlink-vrf) -- [Aufruf externer APIs](https://docs.chain.link/docs/request-and-receive-data) – Eine neuartige Anwendung dieser Methode ist die [Überprüfung der wBTC-Reserven](https://cointelegraph.com/news/1b-in-wrapped-bitcoin-now-being-audited-using-chainlink-s-proof-of-reserve) - -Hier ist ein Beispiel dafür, wie Sie den neuesten ETH-Preis in Ihrem Smart Contract mithilfe eines Chainlink-Preis-Feeds erhalten: - -### Chainlink-Datenleitungen {#chainlink-data-feeds} - -```solidity -pragma solidity ^0.6.7; - -import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; - -contract PriceConsumerV3 { - - AggregatorV3Interface internal priceFeed; - - /** - * Network: Kovan - * Aggregator: ETH/USD - * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331 - */ - constructor() public { - priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); - } - - /** - * Returns the latest price - */ - function getLatestPrice() public view returns (int) { - ( - uint80 roundID, - int price, - uint startedAt, - uint timeStamp, - uint80 answeredInRound - ) = priceFeed.latestRoundData(); - return price; - } -} -``` +Indem Smart Contracts die Möglichkeit erhalten, mit Offchain-Daten zu arbeiten, wird der Nutzen und Wert dezentraler Anwendungen erheblich gesteigert. Beispielsweise verlassen sich Onchain-Vorhersagemärkte auf Oracles, um Informationen über Ereignisse zu liefern, die zur Validierung von Nutzerprognosen verwendet werden. Wenn Alice zum Beispiel 20 ETH darauf wettet, wer der nächste US-Präsident wird, benötigt die Vorhersagemarkt-dApp ein Oracle, um das Wahlergebnis zu bestätigen und zu bestimmen, ob Alice eine Auszahlung erhält. -[Sie können dies in Remix mit diesem Link testen](https://remix.ethereum.org/#version=soljson-v0.6.7+commit.b8d736ae.js&optimize=false&evmVersion=null&gist=0c5928a00094810d2ba01fd8d1083581) - -[Dokumentation ansehen](https://docs.chain.link/docs/get-the-latest-price) - -### Chainlink-VRF {#chainlink-vrf} - -Chainlink-VRF (Verifiable Random Function) ist eine nachweislich faire und überprüfbare Zufallsquelle, die für Smart Contracts entwickelt wurde. Entwickler von Smart Contracts können Chainlink-VRF als manipulationssichere Zufallszahlengenerierung (RNG) verwenden, um zuverlässige Smart Contracts für alle Anwendungen zu erstellen, die auf unvorhersehbare Ergebnisse angewiesen sind: - -- Blockchain-Spiele und NFTs -- Zufällige Zuweisung von Aufgaben und Ressourcen (z. B. zufällige Zuweisung von Richtern zu Fällen) -- Auswahl einer repräsentativen Stichprobe für Konsensmechanismen - -Zufallszahlen sind schwierig, weil Blockchains deterministisch sind. - -Die Arbeit mit Chainlink Oracles außerhalb von Datenleitungen folgt dem [Anfrage- und Empfangszyklus](https://docs.chain.link/docs/architecture-request-model) der Arbeit mit Chainlink. Sie verwenden den LINK-Token, um Oracle-Anbietern Oracle-Gas für Antworten zu senden. Der LINK-Token wurde speziell für die Arbeit mit Oracles entwickelt und basiert auf dem aktualisierten ERC-677 Token, der mit [ERC-20](/developers/docs/standards/tokens/erc-20/) rückwärts kompatibel ist. Der folgende Code, falls er im Kovan-Testnet eingesetzt wird, wird eine kryptographisch erwiesene Zufallsnummer abrufen. Um den Antrag zu stellen, finanzieren Sie den Vertrag mit einem Testnet LINK-Token, den Sie über den [Kovan LINK Faucet](https://kovan.chain.link/) erhalten können. - -```javascript - -pragma solidity 0.6.6; - -import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol"; - -contract RandomNumberConsumer is VRFConsumerBase { - - bytes32 internal keyHash; - uint256 internal fee; - - uint256 public randomResult; - - /** - * Constructor inherits VRFConsumerBase - * - * Network: Kovan - * Chainlink VRF Coordinator address: 0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9 - * LINK token address: 0xa36085F69e2889c224210F603D836748e7dC0088 - * Key Hash: 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4 - */ - constructor() - VRFConsumerBase( - 0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9, // VRF Coordinator - 0xa36085F69e2889c224210F603D836748e7dC0088 // LINK Token - ) public - { - keyHash = 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4; - fee = 0.1 * 10 ** 18; // 0.1 LINK (varies by network) - } - - /** - * Requests randomness from a user-provided seed - */ - function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) { - require(LINK.balanceOf(address(this)) >= fee, "Not enough LINK - fill contract with faucet"); - return requestRandomness(keyHash, fee, userProvidedSeed); - } - - /** - * Callback function used by VRF Coordinator - */ - function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { - randomResult = randomness; - } -} -``` - -### Chainlink Keeper {#chainlink-keepers} - -Smart Contracts können ihre eigenen Funktionen nicht zu beliebigen Zeiten oder unter beliebigen Bedingungen auslösen oder initiieren. Zustandsänderungen treten nur auf, wenn ein anderes Konto eine Transaktion initiiert (z. B. ein Benutzer, ein Oracle oder ein Vertrag). Das [Chainlink Keeper Netzwerk](https://docs.chain.link/docs/chainlink-keepers/introduction/) bietet Optionen für Smart Contracts, um regelmäßige Wartungsaufgaben auf eine vertrauensminimierte und dezentralisierte Weise auszulagern. - -Um Chainlink Keeper zu verwenden, muss ein Smart Contract das [Keeper-Compatible Interface](https://docs.chain.link/docs/chainlink-keepers/compatible-contracts/) implementieren, das aus zwei Funktionen besteht: +## Voraussetzungen {#prerequisites} -- `checkUpkeep` - Prüft, ob der Vertrag Arbeiten erfordert. -- `performUpkeep` - Führt die Arbeit an dem Vertrag aus, wenn er von checkUpkeep angewiesen wurde. +Diese Seite setzt voraus, dass Sie mit den Grundlagen von Ethereum vertraut sind, einschließlich [Nodes](/developers/docs/nodes-and-clients/), [Konsensmechanismen](/developers/docs/consensus-mechanisms/) und der [EVM](/developers/docs/evm/). Sie sollten außerdem ein gutes Verständnis von [Smart Contracts](/developers/docs/smart-contracts/) und [Smart Contract Anatomie](/developers/docs/smart-contracts/anatomy/), insbesondere von [Events](/glossary/#events), haben. -Das folgende Beispiel ist ein einfacher Gegenvertrag. Die Variable `Counter` wird bei jeder Abfrage von `performUpkeep` um eins erhöht. Sie können den folgenden Code [mit Remix](https://remix.ethereum.org/#url=https://docs.chain.link/samples/Keepers/KeepersCounter.sol) ausprobieren +## Was ist ein Blockchain-Oracle? {#what-is-a-blockchain-oracle} -```javascript -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; +Oracles sind Anwendungen, die externe Informationen (d.h. Offchain-Daten) beschaffen, verifizieren und an Smart Contracts auf der Blockchain übermitteln. Neben dem "Abrufen" von Offchain-Daten und deren Veröffentlichung auf Ethereum können Oracles auch Informationen von der Blockchain an externe Systeme "senden", z. B. das Öffnen eines Smart Locks, nachdem ein Nutzer eine Gebühr per Ethereum-Transaktion bezahlt hat. -// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and -// ./interfaces/KeeperCompatibleInterface.sol -import "@chainlink/contracts/src/v0.7/KeeperCompatible.sol"; +Ohne ein Oracle wären Smart Contracts ausschließlich auf Onchain-Daten beschränkt. -contract Counter is KeeperCompatibleInterface { - /** - * Public counter variable - */ - uint public counter; +Oracles unterscheiden sich je nach Datenquelle (einzelne oder mehrere Quellen), Vertrauensmodell (zentralisiert oder dezentralisiert) und Systemarchitektur (Sofortabfrage, Publish-Subscribe, Request-Response). Außerdem kann man zwischen Oracles unterscheiden, die externe Daten für Onchain-Verträge bereitstellen (Input-Oracles), Informationen von der Blockchain an Offchain-Anwendungen senden (Output-Oracles) oder Offchain-Berechnungen durchführen (Computational Oracles). - /** - * Use an interval in seconds and a timestamp to slow execution of Upkeep - */ - uint public immutable interval; - uint public lastTimeStamp; +## Warum brauchen Smart Contracts Oracles? {#why-do-smart-contracts-need-oracles} - constructor(uint updateInterval) { - interval = updateInterval; - lastTimeStamp = block.timestamp; +Viele Entwickler sehen Smart Contracts als Code, der an bestimmten Adressen auf der Blockchain läuft. Allgemeiner betrachtet sind Smart Contracts jedoch [selbstausführende Softwareprogramme](/smart-contracts/), die Vereinbarungen zwischen Parteien automatisch durchsetzen, sobald bestimmte Bedingungen erfüllt sind – daher der Begriff "Smart Contract". - counter = 0; - } +Die Nutzung von Smart Contracts zur Durchsetzung von Vereinbarungen ist jedoch nicht trivial, da Ethereum deterministisch ist. Ein [deterministisches System](https://en.wikipedia.org/wiki/Deterministic_algorithm) liefert bei gleichem Anfangszustand und gleicher Eingabe immer das gleiche Ergebnis – es gibt keine Zufälligkeit oder Variation im Prozess der Berechnung von Ausgaben aus Eingaben. - function checkUpkeep(bytes calldata /* checkData */) external override returns (bool upkeepNeeded, bytes memory /* performData */) { - upkeepNeeded = (block.timestamp - lastTimeStamp) > interval; - // We don't use the checkData in this example. Die checkData werden bei der Registrierung des Upkeep definiert. - } +Um deterministische Ausführung zu gewährleisten, beschränken Blockchains die Nodes darauf, Konsens nur auf Basis von Onchain-Daten über einfache Ja/Nein-Fragen zu erzielen. Beispiele: - function performUpkeep(bytes calldata /* performData */) external override { - lastTimeStamp = block.timestamp; - counter = counter + 1; - // We don't use the performData in this example. Das performData wird durch die Abfrage der Funktion checkUpkeep durch den Keeper erzeugt - } -} -``` +- "Hat der Kontoinhaber (identifiziert durch einen Public Key) diese Transaktion mit dem zugehörigen Private Key signiert?" +- "Hat dieses Konto genügend Guthaben für die Transaktion?" +- "Ist diese Transaktion im Kontext dieses Smart Contracts gültig?" -Nachdem Sie einen Keeper-kompatiblen Vertrag eingerichtet haben, müssen Sie den Vertrag für [Upkeep](https://docs.chain.link/docs/chainlink-keepers/register-upkeep/) registrieren und mit LINK finanzieren, um das Keeper-Netzwerk über Ihren Vertrag zu informieren, damit Ihre Arbeit kontinuierlich ausgeführt wird. +Wenn Blockchains Informationen aus externen Quellen beziehen würden, wäre Determinismus nicht mehr möglich, und die Nodes könnten sich nicht mehr auf die Gültigkeit von Statusänderungen einigen. Ein Beispiel: Ein Smart Contract, der eine Transaktion auf Basis des aktuellen ETH-USD-Kurses aus einer traditionellen Preis-API ausführt. Dieser Wert ändert sich häufig (und die API könnte veraltet oder kompromittiert werden), sodass Nodes, die denselben Contract-Code ausführen, zu unterschiedlichen Ergebnissen kommen könnten. -### Keeper-Projekte {#keepers} +Für eine öffentliche Blockchain wie Ethereum, mit Tausenden von Nodes weltweit, ist Determinismus entscheidend. Ohne zentrale Autorität als Wahrheitsquelle benötigen die Nodes Mechanismen, um nach denselben Transaktionen zum gleichen Status zu gelangen. Wenn Node A den Code eines Smart Contracts ausführt und "3" erhält, während Node B "7" erhält, würde der Konsens zusammenbrechen und Ethereum seinen Wert als dezentrale Plattform verlieren. -- [Chainlink Keeper](https://keepers.chain.link/) -- [Keep3r Netzwerk](https://docs.keep3r.network/) +Dieses Szenario zeigt auch das Problem, wenn Blockchains selbstständig Informationen aus externen Quellen abrufen würden. Oracles lösen dieses Problem, indem sie Informationen aus Offchain-Quellen nehmen und auf der Blockchain speichern, sodass Smart Contracts sie nutzen können. Da Onchain-Daten unveränderlich und öffentlich sind, können Ethereum-Nodes die von Oracles importierten Offchain-Daten sicher verwenden, ohne den Konsens zu gefährden. -### Chainlink API Aufruf {#chainlink-api-call} +Dazu besteht ein Oracle typischerweise aus einem Onchain-Smart-Contract und einigen Offchain-Komponenten. Der Onchain-Contract erhält Datenanfragen von anderen Smart Contracts und leitet sie an die Offchain-Komponente (das Oracle-Node) weiter. Dieses kann Datenquellen abfragen (z. B. per API) und Transaktionen senden, um die angeforderten Daten im Smart Contract zu speichern. -[Chainlink API Calls](https://docs.chain.link/docs/make-a-http-get-request) sind der einfachste Weg, um Daten aus der Off-Chain-Welt auf die traditionelle Art und Weise zu erhalten, wie das Web funktioniert: API-Aufrufe. Da es nur eine einzige Instanz und nur ein Oracle gibt, ist es von Natur aus zentralisiert. Um wirklich dezentralisiert zu sein, müsste eine Smart-Contract-Plattform zahlreiche Knotenpunkte in einem [externen Datenmarkt](https://market.link/) verwenden. +Im Wesentlichen überbrückt ein Blockchain-Oracle die Informationslücke zwischen Blockchain und externer Welt und ermöglicht sogenannte "hybride Smart Contracts", die sowohl Onchain-Code als auch Offchain-Infrastruktur nutzen. Dezentrale Vorhersagemärkte sind ein gutes Beispiel für hybride Smart Contracts. Weitere Beispiele sind etwa Versicherungsverträge, die bei bestimmten Wetterereignissen automatisch auszahlen. -[Setzen Sie den folgenden Code in Remix auf dem Kovan-Netzwerk ein, um ihn zu testen](https://remix.ethereum.org/#version=soljson-v0.6.7+commit.b8d736ae.js&optimize=false&evmVersion=null&gist=8a173a65099261582a652ba18b7d96c1) +## Das Oracle-Problem {#the-oracle-problem} -Auch dies folgt dem Anfrage- und Empfangszyklus von Oracles und setzt voraus, dass der Vertrag mit Kovan LINK (dem Oracle-Gas) finanziert wird, um zu funktionieren. +Oracles lösen ein wichtiges Problem, bringen aber auch neue Herausforderungen mit sich, z. B.: -```javascript -pragma solidity ^0.6.0; +- Wie kann man sicherstellen, dass die eingefügten Informationen aus der richtigen Quelle stammen und nicht manipuliert wurden? +- Wie kann man gewährleisten, dass diese Daten immer verfügbar und regelmäßig aktualisiert werden? -import "@chainlink/contracts/src/v0.6/ChainlinkClient.sol"; +Das sogenannte "Oracle-Problem" beschreibt die Schwierigkeiten, die mit der Nutzung von Oracles für Smart Contracts einhergehen. Die von einem Oracle gelieferten Daten müssen korrekt sein, damit ein Smart Contract korrekt ausgeführt wird. Zudem untergräbt das Vertrauen in Oracle-Betreiber das "Trustless"-Prinzip von Smart Contracts. -contract APIConsumer is ChainlinkClient { +Verschiedene Oracles bieten unterschiedliche Lösungen für das Oracle-Problem, die wir später betrachten. Oracles werden typischerweise danach bewertet, wie gut sie folgende Herausforderungen meistern: - uint256 public volume; +1. **Korrektheit**: Ein Oracle sollte keine Statusänderungen auf Basis ungültiger Offchain-Daten auslösen. Es muss die _Authentizität_ und _Integrität_ der Daten garantieren. Authentizität bedeutet, dass die Daten aus der richtigen Quelle stammen, Integrität, dass sie vor der Onchain-Übertragung nicht verändert wurden. +2. **Verfügbarkeit**: Ein Oracle sollte Smart Contracts nicht daran hindern, Aktionen auszuführen. Die Daten müssen _auf Anfrage_ ohne Unterbrechung verfügbar sein. +3. **Anreizkompatibilität**: Ein Oracle sollte Offchain-Datenanbieter dazu motivieren, korrekte Informationen zu liefern. Dazu gehören _Zurechenbarkeit_ und _Verantwortlichkeit_. - address private oracle; - bytes32 private jobId; - uint256 private fee; +## Wie funktioniert ein Blockchain-Oracle-Service? {#how-does-a-blockchain-oracle-service-work} - /** - * Network: Kovan - * Oracle: 0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e - * Job ID: 29fa9aa13bf1468788b7cc4a500a45b8 - * Fee: 0.1 LINK - */ - constructor() public { - setPublicChainlinkToken(); - oracle = 0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e; - jobId = "29fa9aa13bf1468788b7cc4a500a45b8"; - fee = 0.1 * 10 ** 18; // 0.1 LINK - } +### Nutzer (Users) {#users} - /** - * Create a Chainlink request to retrieve API response, find the target - * data, then multiply by 1000000000000000000 (to remove decimal places from data). - */ - function requestVolumeData() public returns (bytes32 requestId) - { - Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector); - - // Set the URL to perform the GET request on - request.add("get", "https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD"); - - // Set the path to find the desired data in the API response, where the response format is: - // {"RAW": - // {"ETH": - // {"USD": - // { - // "VOLUME24HOUR": xxx.xxx, - // } - // } - // } - // } - request.add("path", "RAW.ETH.USD.VOLUME24HOUR"); - - // Multiply the result by 1000000000000000000 to remove decimals - int timesAmount = 10**18; - request.addInt("times", timesAmount); - - // Sends the request - return sendChainlinkRequestTo(oracle, request, fee); - } - - /** - * Receive the response in the form of uint256 - */ - function fulfill(bytes32 _requestId, uint256 _volume) public recordChainlinkFulfillment(_requestId) - { - volume = _volume; - } -} -``` +Nutzer sind Entitäten (z. B. Smart Contracts), die externe Informationen benötigen, um bestimmte Aktionen auszuführen. Der grundlegende Ablauf eines Oracle-Services beginnt damit, dass der Nutzer eine Datenanfrage an den Oracle-Contract sendet. Datenanfragen beantworten meist folgende Fragen: -Sie können mehr über die Anwendungen von Chainlink erfahren, indem Sie den [Chainlink-Entwickler-Blog](https://blog.chain.link/tag/developers/) lesen. +1. Welche Quellen können Offchain-Nodes für die angeforderten Informationen konsultieren? +2. Wie verarbeiten Reporter die Informationen aus den Datenquellen und extrahieren relevante Datenpunkte? +3. Wie viele Oracle-Nodes können an der Datenbeschaffung teilnehmen? +4. Wie werden Abweichungen in den Oracle-Berichten gehandhabt? +5. Welche Methode wird zur Filterung und Aggregation der Berichte verwendet? -## Oracle-Dienste {#other-services} +### Oracle-Contract {#oracle-contract} -- [Chainlink](https://chain.link/) -- [Witnet](https://witnet.io/) -- [Provable](https://provable.xyz/) -- [Dos.Netzwerk](https://dos.network/) +Der Oracle-Contract ist die Onchain-Komponente des Oracle-Services. Er hört auf Datenanfragen anderer Contracts, leitet Datenanfragen an Oracle-Nodes weiter und gibt die zurückgegebenen Daten an die Client-Contracts weiter. Der Contract kann auch Berechnungen an den zurückgegebenen Daten durchführen, um einen aggregierten Wert zu liefern. -### Erstellen Sie einen Oracle-Smart-Contract {#build-an-oracle-smart-contract} +Der Oracle-Contract stellt Funktionen bereit, die von Client-Contracts bei einer Datenanfrage aufgerufen werden. Nach Eingang einer neuen Anfrage löst der Smart Contract ein [Log-Event](/developers/docs/smart-contracts/anatomy/#events-and-logs) aus, das Offchain-Nodes benachrichtigt (meist per JSON-RPC `eth_subscribe`), die dann die im Log-Event definierten Daten abrufen. -Hier ist ein Oracle-Beispielvertrag von Pedro Costa. Weitere Anmerkungen finden Sie in seinem Artikel: [Implementierung eines Blockchain Oracles auf Ethereum](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e). +Hier ist ein [Beispiel-Oracle-Contract](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) von Pedro Costa. Dies ist ein einfacher Oracle-Service, der auf Anfrage anderer Smart Contracts Offchain-APIs abfragen und die angeforderten Informationen auf der Blockchain speichern kann: ```solidity pragma solidity >=0.4.21 <0.6.0; contract Oracle { - Request[] requests; //list of requests made to the contract - uint currentId = 0; //increasing request id - uint minQuorum = 2; //minimum number of responses to receive before declaring final result - uint totalOracleCount = 3; // Hardcoded oracle count + Request[] requests; //Liste der an den Contract gestellten Anfragen + uint currentId = 0; //steigende Anfrage-ID + uint minQuorum = 2; //minimale Anzahl von Antworten, die empfangen werden müssen, bevor das Endergebnis festgelegt wird + uint totalOracleCount = 3; //Fest codierte Anzahl der Oracles - // defines a general api request + //definiert eine allgemeine API-Anfrage struct Request { - uint id; //request id - string urlToQuery; //API url - string attributeToFetch; //json attribute (key) to retrieve in the response - string agreedValue; //value from key - mapping(uint => string) anwers; //answers provided by the oracles - mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted) + uint id; //Anfrage-ID + string urlToQuery; //API-URL + string attributeToFetch; //JSON-Attribut (Schlüssel), das in der Antwort abgerufen werden soll + string agreedValue; //Wert aus dem Schlüssel + mapping(uint => string) answers; //von den Oracles bereitgestellte Antworten + mapping(address => uint) quorum; //Oracles, die die Antwort abfragen werden (1=Oracle hat nicht abgestimmt, 2=Oracle hat abgestimmt) } - //event that triggers oracle outside of the blockchain + //Event, das das Oracle außerhalb der Blockchain auslöst event NewRequest ( uint id, string urlToQuery, string attributeToFetch ); - //triggered when there's a consensus on the final result + //wird ausgelöst, wenn ein Konsens über das Endergebnis besteht event UpdatedRequest ( uint id, string urlToQuery, @@ -349,23 +120,23 @@ contract Oracle { uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); Request storage r = requests[length-1]; - // Hardcoded oracles address + //Fest codierte Oracle-Adressen r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; - // launch an event to be detected by oracle outside of blockchain + //Event auslösen, das vom Oracle außerhalb der Blockchain erkannt wird emit NewRequest ( currentId, _urlToQuery, _attributeToFetch ); - // increase request id + //Anfrage-ID erhöhen currentId++; } - //called by the oracle to record its answer + //wird vom Oracle aufgerufen, um seine Antwort zu registrieren function updateRequest ( uint _id, string memory _valueRetrieved @@ -373,31 +144,31 @@ contract Oracle { Request storage currRequest = requests[_id]; - //check if oracle is in the list of trusted oracles - //and if the oracle hasn't voted yet + //prüfen, ob das Oracle in der Liste der vertrauenswürdigen Oracles ist + //und ob das Oracle noch nicht abgestimmt hat if(currRequest.quorum[address(msg.sender)] == 1){ - //marking that this address has voted + //markieren, dass diese Adresse abgestimmt hat currRequest.quorum[msg.sender] = 2; - //iterate through "array" of answers until a position if free and save the retrieved value + //durch das "Array" der Antworten iterieren, bis eine Position frei ist, und den abgerufenen Wert speichern uint tmpI = 0; bool found = false; while(!found) { - //find first empty slot - if(bytes(currRequest.anwers[tmpI]).length == 0){ + //erste leere Position finden + if(bytes(currRequest.answers[tmpI]).length == 0){ found = true; - currRequest.anwers[tmpI] = _valueRetrieved; + currRequest.answers[tmpI] = _valueRetrieved; } tmpI++; } uint currentQuorum = 0; - //iterate through oracle list and check if enough oracles(minimum quorum) - //have voted the same answer has the current one + //durch die Oracle-Liste iterieren und prüfen, ob genügend Oracles (minimales Quorum) + //für die gleiche Antwort wie die aktuelle gestimmt haben for(uint i = 0; i < totalOracleCount; i++){ - bytes memory a = bytes(currRequest.anwers[i]); + bytes memory a = bytes(currRequest.answers[i]); bytes memory b = bytes(_valueRetrieved); if(keccak256(a) == keccak256(b)){ @@ -418,7 +189,217 @@ contract Oracle { } ``` -_Wir würden gerne mehr Dokumentation über die Erstellung eines Oracle-Smart-Contract erhalten. Wenn Sie helfen können, erstellen Sie bitte eine PR!_ +### Oracle-Nodes {#oracle-nodes} + +Das Oracle-Node ist die Offchain-Komponente des Oracle-Services. Es extrahiert Informationen aus externen Quellen (z. B. APIs von Drittanbietern) und bringt sie Onchain, damit Smart Contracts sie nutzen können. Oracle-Nodes hören auf Events des Onchain-Oracle-Contracts und führen die im Log beschriebenen Aufgaben aus. + +Eine typische Aufgabe für Oracle-Nodes ist das Senden einer [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp)-Anfrage an einen API-Service, das Parsen der Antwort, das Formatieren in ein blockchain-lesbares Format und das Onchain-Senden per Transaktion an den Oracle-Contract. Das Oracle-Node kann auch verpflichtet sein, die Gültigkeit und Integrität der eingereichten Informationen durch "Authentizitätsnachweise" zu belegen. + +Computational Oracles verlassen sich ebenfalls auf Offchain-Nodes, um Berechnungen durchzuführen, die Onchain zu teuer oder zu aufwendig wären (z. B. die Generierung verifizierbarer Zufallszahlen für Blockchain-Spiele). + +## Oracle-Designmuster {#oracle-design-patterns} + +Es gibt drei Haupttypen von Oracles: Sofortabfrage, Publish-Subscribe und Request-Response. Die letzten beiden werden am häufigsten in Ethereum-Smart-Contracts verwendet. + +### Veröffentlichungs-Abonnement-Oracles {#publish-subscribe-oracles} + +Diese Art von Oracle bietet "Datenfeeds" an, die von anderen Contracts regelmäßig gelesen werden können. Die Daten ändern sich häufig, und Client-Contracts müssen auf Datenaktualisierungen hören. Ein Beispiel ist ein ETH-USD-Preis-Oracle. + +### Anfrage-Antwort-Oracles {#request-response-oracles} + +Ein Anfrage-Antwort-Setup ermöglicht es dem Client-Contract, beliebige Daten anzufordern, die nicht von einem Veröffentlichungs-Abonnement-Oracle bereitgestellt werden. Anfrage-Antwort-Oracles sind ideal, wenn der Datensatz zu groß ist, um im Speicher eines Smart Contracts gespeichert zu werden, und/oder Benutzer zu jedem Zeitpunkt nur einen kleinen Teil der Daten benötigen. + +Obwohl komplexer als Veröffentlichungs-Abonnement-Modelle, sind Anfrage-Antwort-Oracles im Wesentlichen das, was wir im vorherigen Abschnitt beschrieben haben. Das Oracle hat eine Onchain-Komponente, die eine Datenanfrage empfängt und an einen Offchain-Node zur Verarbeitung weiterleitet. + +Benutzer, die Datenabfragen initiieren, müssen die Kosten für das Abrufen von Informationen aus der Offchain-Quelle tragen. Der Client-Contract muss auch Mittel bereitstellen, um die Gas-Kosten zu decken, die durch den Oracle-Contract bei der Rückgabe der Antwort über die in der Anfrage angegebene Callback-Funktion entstehen. + +## Zentralisierte und dezentralisierte Oracles {#types-of-oracles} + +### Zentralisierte Oracles {#centralized-oracles} + +Werden von einer einzelnen Entität kontrolliert, die für die Aggregation von Offchain-Informationen und die Aktualisierung der Onchain-Daten verantwortlich ist. Zentralisierte Oracles sind effizient, da sie sich auf eine einzige Wahrheitsquelle verlassen. Sie funktionieren möglicherweise besser in Fällen, in denen proprietäre Datensätze direkt vom Eigentümer mit einer allgemein akzeptierten Signatur veröffentlicht werden. Es gibt jedoch auch Nachteile: + +#### Geringe Korrektheitsgarantien {#low-correctness-guarantees} + +Bei zentralisierten Oracles gibt es keine Möglichkeit zu überprüfen, ob die bereitgestellten Informationen korrekt sind oder nicht. Selbst "renommierte" Anbieter können sich ändern oder gehackt werden. Wenn das Oracle korrupt wird, werden Smart Contracts auf Basis falscher Daten ausgeführt. + +#### Schlechte Verfügbarkeit {#poor-availability} + +Zentralisierte Oracles garantieren nicht, dass Offchain-Daten immer für andere Smart Contracts verfügbar sind. Wenn der Anbieter beschließt, den Service abzuschalten oder ein Hacker die Offchain-Komponente des Oracles übernimmt, ist Ihr Smart Contract einem Denial-of-Service (DoS)-Angriff ausgesetzt. + +#### Schlechte Anreizkompatibilität {#poor-incentive-compatibility} + +Zentralisierte Oracles haben oft schlecht gestaltete oder nicht existierende Anreize für den Datenanbieter, genaue/unveränderte Informationen zu senden. Die Bezahlung eines Oracles für Korrektheit garantiert keine Ehrlichkeit. Dieses Problem wird größer, je mehr Wert von Smart Contracts kontrolliert wird. + +### Dezentralisierte Oracles {#decentralized-oracles} + +Dezentralisierte Oracles sind so konzipiert, dass sie die Einschränkungen zentralisierter Oracles überwinden, indem sie Single Points of Failure eliminieren. Ein dezentralisierter Oracle-Dienst besteht aus mehreren Teilnehmern in einem Peer-to-Peer-Netzwerk, die einen Konsens über Offchain-Daten bilden, bevor diese an einen Smart Contract gesendet werden. + +Ein dezentralisiertes Oracle sollte (im Idealfall) erlaubnisfrei, vertrauenslos und frei von Verwaltung durch eine zentrale Partei sein; in der Realität liegt die Dezentralisierung bei Oracles auf einem Spektrum. Es gibt halb-dezentralisierte Oracle-Netzwerke, an denen jeder teilnehmen kann, aber mit einem "Eigentümer", der Nodes basierend auf ihrer historischen Leistung genehmigt und entfernt. Es existieren auch vollständig dezentralisierte Oracle-Netzwerke: Diese laufen in der Regel als eigenständige Blockchains und haben definierte Konsensmechanismen für die Koordination von Nodes und die Bestrafung von Fehlverhalten. + +Die Verwendung dezentralisierter Oracles bietet folgende Vorteile: + +### Hohe Korrektheitsgarantien {#high-correctness-guarantees} + +Dezentralisierte Oracles versuchen, die Korrektheit der Daten durch verschiedene Ansätze zu gewährleisten. Dazu gehören der Einsatz von Nachweisen, die die Authentizität und Integrität der zurückgegebenen Informationen belegen, sowie die Anforderung, dass mehrere Entitäten gemeinsam über die Gültigkeit von Offchain-Daten entscheiden. + +#### Authentizitätsnachweise {#authenticity-proofs} + +Authentizitätsnachweise sind kryptographische Mechanismen, die eine unabhängige Überprüfung von Informationen aus externen Quellen ermöglichen. Diese Nachweise können die Quelle der Informationen validieren und mögliche Änderungen an den Daten nach dem Abruf erkennen. + +Beispiele für Authentizitätsnachweise sind: + +**Transport Layer Security (TLS)-Nachweise**: Oracle-Nodes rufen häufig Daten aus externen Quellen über eine sichere HTTP-Verbindung ab, die auf dem Transport Layer Security (TLS)-Protokoll basiert. Einige dezentralisierte Oracles verwenden Authentizitätsnachweise, um TLS-Sitzungen zu verifizieren (d.h. den Informationsaustausch zwischen einem Node und einem bestimmten Server zu bestätigen) und zu bestätigen, dass die Inhalte der Sitzung nicht verändert wurden. + +**Trusted Execution Environment (TEE)-Nachweise**: Ein [Trusted Execution Environment](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE) ist eine abgeschottete Rechenumgebung, die von den Betriebsprozessen des Host-Systems isoliert ist. TEEs stellen sicher, dass Anwendungscode oder Daten, die in der Rechenumgebung gespeichert/verwendet werden, ihre Integrität, Vertraulichkeit und Unveränderlichkeit behalten. Benutzer können auch einen Nachweis generieren, um zu beweisen, dass eine Anwendungsinstanz innerhalb der vertrauenswürdigen Ausführungsumgebung läuft. + +Bestimmte Klassen von dezentralisierten Oracles erfordern von Oracle-Node-Betreibern die Bereitstellung von TEE-Nachweisen. Dies bestätigt einem Benutzer, dass der Node-Betreiber eine Instanz des Oracle-Clients in einer vertrauenswürdigen Ausführungsumgebung betreibt. TEEs verhindern, dass externe Prozesse den Code und die Daten einer Anwendung verändern oder lesen können. Daher beweisen diese Nachweise, dass der Oracle-Node die Informationen intakt und vertraulich gehalten hat. + +#### Konsensbasierte Validierung von Informationen {#consensus-based-validation-of-information} + +Zentralisierte Oracles verlassen sich bei der Bereitstellung von Daten für Smart Contracts auf eine einzige Wahrheitsquelle, was die Möglichkeit der Veröffentlichung ungenauer Informationen mit sich bringt. Dezentralisierte Oracles lösen dieses Problem, indem sie sich auf mehrere Oracle-Nodes verlassen, um Offchain-Informationen abzufragen. Durch den Vergleich von Daten aus mehreren Quellen reduzieren dezentralisierte Oracles das Risiko, ungültige Informationen an Onchain-Contracts weiterzugeben. + +Dezentralisierte Oracles müssen jedoch mit Diskrepanzen in den Informationen umgehen, die aus mehreren Offchain-Quellen abgerufen werden. Um Unterschiede in den Informationen zu minimieren und sicherzustellen, dass die an den Oracle-Contract übergebenen Daten die kollektive Meinung der Oracle-Nodes widerspiegeln, verwenden dezentralisierte Oracles die folgenden Mechanismen: + +##### Abstimmung/Staking über die Genauigkeit von Daten + +Einige dezentralisierte Oracle-Netzwerke erfordern von den Teilnehmern, über die Genauigkeit von Antworten auf Datenanfragen (z.B. "Wer hat die US-Wahl 2020 gewonnen?") unter Verwendung des nativen Tokens des Netzwerks abzustimmen oder zu staken. Ein Aggregationsprotokoll sammelt dann die Stimmen und Stakes und nimmt die von der Mehrheit unterstützte Antwort als gültige an. + +Nodes, deren Antworten von der Mehrheitsantwort abweichen, werden bestraft, indem ihre Tokens an andere verteilt werden, die korrektere Werte liefern. Die Verpflichtung der Nodes, eine Sicherheit zu hinterlegen, bevor sie Daten bereitstellen, motiviert zu ehrlichen Antworten, da sie als rationale wirtschaftliche Akteure angenommen werden, die ihre Rendite maximieren wollen. + +Staking/Abstimmung schützt dezentralisierte Oracles auch vor [Sybil-Angriffen](/glossary/#sybil-attack), bei denen böswillige Akteure mehrere Identitäten erstellen, um das Konsenssystem zu manipulieren. Staking kann jedoch "Trittbrettfahren" (Oracle-Nodes kopieren Informationen von anderen) und "faules Validieren" (Oracle-Nodes folgen der Mehrheit ohne eigene Überprüfung der Informationen) nicht verhindern. + +##### Schelling-Punkt-Mechanismen + +Der [Schelling-Punkt]() ist ein spieltheoretisches Konzept, das davon ausgeht, dass mehrere Entitäten in Abwesenheit jeglicher Kommunikation immer zu einer gemeinsamen Lösung eines Problems tendieren. Schelling-Punkt-Mechanismen werden häufig in dezentralisierten Oracle-Netzwerken verwendet, um Nodes zu ermöglichen, einen Konsens über Antworten auf Datenanfragen zu erreichen. + +Eine frühe Idee dafür war [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/), ein vorgeschlagener Datenfeed, bei dem Teilnehmer Antworten auf "skalare" Fragen (Fragen, deren Antworten durch Größe beschrieben werden, z.B. "Was ist der Preis von ETH?") zusammen mit einer Einlage einreichen. Benutzer, die Werte zwischen dem 25. und 75. [Perzentil](https://en.wikipedia.org/wiki/Percentile) liefern, werden belohnt, während diejenigen, deren Werte stark vom Medianwert abweichen, bestraft werden. + +Obwohl SchellingCoin heute nicht existiert, verwenden eine Reihe von dezentralisierten Oracles—insbesondere [Maker Protocol's Oracles](https://docs.makerdao.com/smart-contract-modules/oracle-module)—den Schelling-Punkt-Mechanismus, um die Genauigkeit der Oracle-Daten zu verbessern. Jedes Maker Oracle besteht aus einem Offchain-P2P-Netzwerk von Nodes ("Relayers" und "Feeds"), die Marktpreise für Sicherheiten-Assets einreichen, und einem Onchain-"Medianizer"-Contract, der den Median aller bereitgestellten Werte berechnet. Sobald die festgelegte Verzögerungszeit abgelaufen ist, wird dieser Medianwert zum neuen Referenzpreis für das zugehörige Asset. + +Andere Beispiele für Oracles, die Schelling-Punkt-Mechanismen verwenden, sind [Chainlink Offchain Reporting](https://docs.chain.link/docs/offchain-reporting/) und [Witnet](https://witnet.io/). In beiden Systemen werden Antworten von Oracle-Nodes im Peer-to-Peer-Netzwerk zu einem einzigen Aggregatwert zusammengefasst, wie z.B. einem Mittelwert oder Median. Nodes werden je nachdem belohnt oder bestraft, inwieweit ihre Antworten mit dem Aggregatwert übereinstimmen oder davon abweichen. + +Schelling-Punkt-Mechanismen sind attraktiv, weil sie den Onchain-Fußabdruck minimieren (nur eine Transaktion muss gesendet werden), während sie gleichzeitig Dezentralisierung garantieren. Letzteres ist möglich, weil Nodes die Liste der eingereichten Antworten unterzeichnen müssen, bevor sie in den Algorithmus eingespeist wird, der den Mittelwert/Medianwert erzeugt. + +### Verfügbarkeit {#availability} + +Dezentralisierte Oracle-Dienste gewährleisten eine hohe Verfügbarkeit von Offchain-Daten für Smart Contracts. Dies wird durch die Dezentralisierung sowohl der Quelle der Offchain-Informationen als auch der Nodes erreicht, die für die Übertragung der Informationen Onchain verantwortlich sind. + +Dies gewährleistet Fehlertoleranz, da der Oracle-Contract sich auf mehrere Nodes verlassen kann (die sich auch auf mehrere Datenquellen verlassen), um Abfragen von anderen Contracts auszuführen. Dezentralisierung auf der Quellen- _und_ Node-Betreiber-Ebene ist entscheidend—ein Netzwerk von Oracle-Nodes, das Informationen aus derselben Quelle bereitstellt, wird auf das gleiche Problem stoßen wie ein zentralisiertes Oracle. + +Es ist auch möglich, dass Stake-basierte Oracles Node-Betreiber bestrafen, die nicht schnell genug auf Datenanfragen reagieren. Dies motiviert Oracle-Nodes erheblich, in fehlertolerante Infrastruktur zu investieren und Daten zeitnah bereitzustellen. + +### Gute Anreizkompatibilität {#good-incentive-compatibility} + +Dezentralisierte Oracles implementieren verschiedene Anreizdesigns, um [byzantinisches](https://en.wikipedia.org/wiki/Byzantine_fault) Verhalten unter Oracle-Nodes zu verhindern. Konkret erreichen sie _Zurechenbarkeit_ und _Verantwortlichkeit_: + +1. Dezentralisierte Oracle-Nodes müssen oft die Daten signieren, die sie als Antwort auf Datenanfragen bereitstellen. Diese Informationen helfen bei der Bewertung der historischen Leistung von Oracle-Nodes, sodass Benutzer unzuverlässige Oracle-Nodes bei Datenanfragen herausfiltern können. Ein Beispiel ist Witnets [Algorithmisches Reputationssystem](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system). + +2. Dezentralisierte Oracles—wie bereits erklärt—können von Nodes verlangen, dass sie einen Stake auf ihre Überzeugung von der Richtigkeit der von ihnen eingereichten Daten setzen. Wenn sich die Behauptung als richtig erweist, kann dieser Stake zusammen mit Belohnungen für ehrlichen Service zurückgegeben werden. Er kann aber auch gekürzt werden, falls die Informationen falsch sind, was ein gewisses Maß an Verantwortlichkeit bietet. + +## Anwendungen von Oracles in Smart Contracts {#applications-of-oracles-in-smart-contracts} + +Die folgenden sind häufige Anwendungsfälle für Oracles in Ethereum: + +### Finanzdaten abrufen {#retrieving-financial-data} + +[Dezentralisierte Finanzanwendungen](/defi/) (DeFi) ermöglichen Peer-to-Peer-Kredite, Kreditaufnahme und Handel mit Assets. Dies erfordert oft den Zugriff auf verschiedene Finanzinformationen, einschließlich Wechselkursdaten (zur Berechnung des Fiat-Werts von Kryptowährungen oder zum Vergleich von Token-Preisen) und Kapitalmarktdaten (zur Berechnung des Werts von tokenisierten Assets wie Gold oder US-Dollar). + +Ein DeFi-Kreditprotokoll muss beispielsweise aktuelle Marktpreise für als Sicherheit hinterlegte Assets (z.B. ETH) abfragen. Dies ermöglicht es dem Contract, den Wert der Sicherheiten-Assets zu bestimmen und festzulegen, wie viel aus dem System geliehen werden kann. + +Beliebte "Preis-Oracles" (wie sie oft genannt werden) in DeFi sind Chainlink Price Feeds, Compound Protocol's [Open Price Feed](https://compound.finance/docs/prices), Uniswap's [Time-Weighted Average Prices (TWAPs)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) und [Maker Oracles](https://docs.makerdao.com/smart-contract-modules/oracle-module). + +Entwickler sollten die Einschränkungen dieser Preis-Oracles verstehen, bevor sie sie in ihr Projekt integrieren. Dieser [Artikel](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/) bietet eine detaillierte Analyse dessen, was bei der Planung der Verwendung eines der genannten Preis-Oracles zu beachten ist. + +Hier ist ein Beispiel, wie Sie den neuesten ETH-Preis in Ihrem Smart Contract mit einem Chainlink-Preis-Feed abrufen können: + +```solidity +pragma solidity ^0.6.7; + +import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; + +contract PriceConsumerV3 { + + AggregatorV3Interface internal priceFeed; + + /** + * Network: Kovan + * Aggregator: ETH/USD + * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331 + */ + constructor() public { + priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); + } + + /** + * Returns the latest price + */ + function getLatestPrice() public view returns (int) { + ( + uint80 roundID, + int price, + uint startedAt, + uint timeStamp, + uint80 answeredInRound + ) = priceFeed.latestRoundData(); + return price; + } +} +``` + +### Verifizierbare Zufallszahlen generieren {#generating-verifiable-randomness} + +Bestimmte Blockchain-Anwendungen, wie Blockchain-basierte Spiele oder Lotteriesysteme, benötigen ein hohes Maß an Unvorhersehbarkeit und Zufälligkeit, um effektiv zu funktionieren. Die deterministische Ausführung von Blockchains eliminiert jedoch die Zufälligkeit. + +Der ursprüngliche Ansatz war die Verwendung pseudozufälliger kryptographischer Funktionen wie `blockhash`, aber diese konnten von [Miner manipuliert werden](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.), die den Proof-of-Work-Algorithmus lösen. Außerdem bedeutet Ethereums [Umstellung auf Proof-of-Stake](/roadmap/merge/), dass Entwickler sich nicht mehr auf `blockhash` für Onchain-Zufälligkeit verlassen können. Der [RANDAO-Mechanismus](https://eth2book.info/altair/part2/building_blocks/randomness) der Beacon Chain bietet stattdessen eine alternative Quelle für Zufälligkeit. + +Es ist möglich, den Zufallswert Offchain zu generieren und Onchain zu senden, aber dies erfordert ein hohes Maß an Vertrauen von den Benutzern. Sie müssen glauben, dass der Wert wirklich durch unvorhersehbare Mechanismen generiert wurde und nicht während der Übertragung verändert wurde. + +Oracles, die für Offchain-Berechnungen konzipiert sind, lösen dieses Problem, indem sie Zufallsergebnisse Offchain sicher generieren und diese Onchain zusammen mit kryptographischen Nachweisen senden, die die Unvorhersehbarkeit des Prozesses belegen. Ein Beispiel ist [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/) (Verifiable Random Function), ein nachweislich faires und manipulationssicheres Zufallszahlengeneratorsystem (RNG), das nützlich ist für den Aufbau zuverlässiger Smart Contracts für Anwendungen, die auf unvorhersehbare Ergebnisse angewiesen sind. Ein weiteres Beispiel ist [API3 QRNG](https://docs.api3.org/explore/qrng/), das Quanten-Zufallszahlengenerierung (QRNG) als öffentliche Methode der Web3-Zufallszahlengenerierung basierend auf Quantenphänomenen anbietet, bereitgestellt mit freundlicher Genehmigung der Australian National University (ANU). + +### Ereignisergebnisse abrufen {#getting-outcomes-for-events} + +Mit Oracles ist es einfach, Smart Contracts zu erstellen, die auf Ereignisse in der realen Welt reagieren. Oracle-Dienste machen dies möglich, indem sie Contracts erlauben, über Offchain-Komponenten mit externen APIs zu verbinden und Informationen aus diesen Datenquellen zu konsumieren. Zum Beispiel könnte die zuvor erwähnte Vorhersage-dApp ein Oracle anfordern, Wahlergebnisse aus einer vertrauenswürdigen Offchain-Quelle (z.B. Associated Press) zurückzugeben. + +Die Verwendung von Oracles zum Abrufen von Daten basierend auf Ergebnissen aus der realen Welt ermöglicht andere neuartige Anwendungsfälle; zum Beispiel benötigt ein dezentralisiertes Versicherungsprodukt genaue Informationen über Wetter, Katastrophen usw., um effektiv zu funktionieren. + +### Automatisierung von Smart Contracts {#automating-smart-contracts} + +Smart Contracts laufen nicht automatisch; vielmehr muss ein externes Konto (EOA) oder ein anderer Contract-Account die richtigen Funktionen auslösen, um den Contract-Code auszuführen. In den meisten Fällen sind die meisten Funktionen des Contracts öffentlich und können von EOAs und anderen Contracts aufgerufen werden. + +Es gibt aber auch _private Funktionen_ innerhalb eines Contracts, die für andere unzugänglich sind, aber für die Gesamtfunktionalität einer dApp kritisch sind. Beispiele sind eine `mintERC721Token()`-Funktion, die periodisch neue NFTs für Benutzer prägt, eine Funktion für die Auszahlung in einem Vorhersagemarkt oder eine Funktion zum Entsperren gestaketer Tokens in einer DEX. + +Entwickler müssen solche Funktionen in regelmäßigen Abständen auslösen, um die Anwendung reibungslos laufen zu lassen. Dies kann jedoch zu mehr verlorenen Stunden für routinemäßige Aufgaben führen, weshalb die Automatisierung der Ausführung von Smart Contracts attraktiv ist. + +Einige dezentralisierte Oracle-Netzwerke bieten Automatisierungsdienste an, die es Offchain-Oracle-Nodes ermöglichen, Smart-Contract-Funktionen gemäß den vom Benutzer definierten Parametern auszulösen. Typischerweise erfordert dies die "Registrierung" des Ziel-Contracts beim Oracle-Dienst, die Bereitstellung von Mitteln zur Bezahlung des Oracle-Betreibers und die Angabe der Bedingungen oder Zeiten für die Auslösung des Contracts. + +Chainlinks [Keeper Network](https://chain.link/keepers) bietet Optionen für Smart Contracts, regelmäßige Wartungsaufgaben auf vertrauensminimierte und dezentralisierte Weise auszulagern. Lesen Sie die offizielle [Keeper-Dokumentation](https://docs.chain.link/docs/chainlink-keepers/introduction/), um Informationen darüber zu erhalten, wie Sie Ihren Contract Keeper-kompatibel machen und den Upkeep-Dienst nutzen können. + +## Wie man Blockchain-Oracles verwendet {#use-blockchain-oracles} + +Im Ethereum-Ökosystem stehen verschiedene Oracle-Dienste zur Integration zur Verfügung: + +**[Chainlink](https://chain.link/)** - _Chainlink dezentralisierte Oracle-Netzwerke bieten manipulationssichere Eingaben, Ausgaben und Berechnungen zur Unterstützung fortgeschrittener Smart Contracts auf jeder Blockchain._ + +**[RedStone Oracles](https://redstone.finance/)** - _RedStone ist ein dezentralisiertes modulares Oracle, das gas-optimierte Datenfeeds bereitstellt. Es spezialisiert sich auf die Bereitstellung von Preis-Feeds für aufstrebende Assets wie Liquid Staking Tokens (LSTs), Liquid Restaking Tokens (LRTs) und Bitcoin Staking-Derivate._ + +**[Chronicle](https://chroniclelabs.org/)** - _Chronicle überwindet die aktuellen Einschränkungen bei der Übertragung von Daten Onchain durch die Entwicklung wirklich skalierbarer, kosteneffizienter, dezentralisierter und verifizierbarer Oracles._ + +**[Witnet](https://witnet.io/)** - _Witnet ist ein erlaubnisfreies, dezentralisiertes und zensurresistentes Oracle, das Smart Contracts hilft, auf Ereignisse in der realen Welt mit starken kryptoökonomischen Garantien zu reagieren._ + +**[UMA Oracle](https://uma.xyz)** - _UMAs optimistisches Oracle ermöglicht es Smart Contracts, schnell jede Art von Daten für verschiedene Anwendungen zu erhalten, einschließlich Versicherungen, Finanzderivate und Vorhersagemärkte._ + +**[Tellor](https://tellor.io/)** - _Tellor ist ein transparentes und erlaubnisfreies Oracle-Protokoll, mit dem Ihr Smart Contract jederzeit leicht auf Daten zugreifen kann._ + +**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol ist eine Cross-Chain-Datenoracle-Plattform, die reale Daten und APIs mit Smart Contracts aggregiert und verbindet._ + +**[Paralink](https://paralink.network/)** - _Paralink bietet eine Open-Source- und dezentralisierte Oracle-Plattform für Smart Contracts, die auf Ethereum und anderen beliebten Blockchains laufen._ + +**[Pyth Network](https://pyth.network/)** - _Das Pyth-Netzwerk ist ein First-Party-Finanzoracle-Netzwerk, das darauf ausgelegt ist, kontinuierliche Daten aus der realen Welt in einer manipulationssicheren, dezentralisierten und selbsttragenden Umgebung Onchain zu veröffentlichen._ + +**[API3 DAO](https://www.api3.org/)** - _API3 DAO liefert First-Party-Oracle-Lösungen, die in einer dezentralisierten Lösung für Smart Contracts größere Quellentransparenz, Sicherheit und Skalierbarkeit bieten._ + +**[Supra](https://supra.com/)** - Ein vertikal integriertes Toolkit von Cross-Chain-Lösungen, das alle Blockchains, öffentliche (L1s und L2s) oder private (Unternehmen), miteinander verbindet und dezentralisierte Oracle-Preis-Feeds bereitstellt, die für Onchain- und Offchain-Anwendungsfälle verwendet werden können. ## Weiterführende Informationen {#further-reading} @@ -433,8 +414,14 @@ _Wir würden gerne mehr Dokumentation über die Erstellung eines Oracle-Smart-Co **Videos** -- [Oracle und die Ausweitung der Blockchain-Nutzung](https://youtu.be/BVUZpWa8vpw) - _Real Vision Finance_ +- [Oracles und die Erweiterung der Blockchain-Nützlichkeit](https://youtu.be/BVUZpWa8vpw) — Real Vision Finance +- [Der Unterschied zwischen First-Party- und Third-Party-Oracles](https://blockchainoraclesummit.io/first-party-vs-third-party-oracles/) - Blockchain Oracle Summit + +**Tutorials** + +- [Wie man den aktuellen Ethereum-Preis in Solidity abruft](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — Chainlink +- [Oracle-Daten konsumieren](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — Chronicle -**Lernprogramme** +**Beispielprojekte** -- [Wie man den aktuellen Preis von Ethereum in Solidity abrufen kann](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) - _Chainlink_ +- [Chainlink Ethereum Full-Stack-Starter-Projekt](https://github.com/hackbg/chainlink-fullstack) — HackBG diff --git a/public/content/translations/el/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/el/developers/docs/consensus-mechanisms/pos/keys/index.md index b6400b3d73f..bc470be6799 100644 --- a/public/content/translations/el/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/translations/el/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -56,7 +56,7 @@ lang: el ![σχήμα κλειδιού επικυρωτή](validator-key-schematic.png) -**Σημείωση**: Η έξοδος από τα καθήκοντα δέσμευσης κεφαλαίου και η απόσυρση του υπολοίπου ενός επικυρωτή προϋποθέτει προς το παρόν την υπογραφή ενός [μηνύματος εθελοντικής εξόδου (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) με το κλειδί επικύρωσης. Ωστόσο, το [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) είναι μια πρόταση που θα επιτρέψει σε έναν χρήστη να ενεργοποιήσει την έξοδο ενός εργαλείου επικύρωσης και να αποσύρει το υπόλοιπό του υπογράφοντας μηνύματα εξόδου με το κλειδί ανάληψης στο μέλλον. Αυτό θα μειώσει τις υποθέσεις εμπιστοσύνης επιτρέποντας στους συμμετέχοντες που εκχωρούν ETH στους [παρόχους δέσμευσης κεφαλαίου ως υπηρεσία](https://ethereum.org/en/staking/saas/#what-is-staking-as-a-service) να διατηρήσουν τον έλεγχο των κεφαλαίων τους. +**Σημείωση**: Η έξοδος από τα καθήκοντα δέσμευσης κεφαλαίου και η απόσυρση του υπολοίπου ενός επικυρωτή προϋποθέτει προς το παρόν την υπογραφή ενός [μηνύματος εθελοντικής εξόδου (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) με το κλειδί επικύρωσης. Ωστόσο, το [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) είναι μια πρόταση που θα επιτρέψει σε έναν χρήστη να ενεργοποιήσει την έξοδο ενός εργαλείου επικύρωσης και να αποσύρει το υπόλοιπό του υπογράφοντας μηνύματα εξόδου με το κλειδί ανάληψης στο μέλλον. Αυτό θα μειώσει τις υποθέσεις εμπιστοσύνης επιτρέποντας στους συμμετέχοντες που εκχωρούν ETH στους [παρόχους δέσμευσης κεφαλαίου ως υπηρεσία](/staking/saas/#what-is-staking-as-a-service) να διατηρήσουν τον έλεγχο των κεφαλαίων τους. ## Παράγωγη Κλειδιών από Μυστική Φράση {#deriving-keys-from-seed} diff --git a/public/content/translations/el/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/el/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 38da506fb89..b2a845c19c0 100644 --- a/public/content/translations/el/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/el/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ sidebarDepth: 2 A Merkle-Patricia trie is deterministic and cryptographically verifiable: The only way to generate a state root is by computing it from each individual piece of the state, and two states that are identical can be easily proven so by comparing the root hash and the hashes that led to it (_a Merkle proof_). Αντίθετα, δεν υπάρχει τρόπος να δημιουργηθούν δύο διαφορετικές καταστάσεις με το ίδιο hash ρίζας, και οποιαδήποτε προσπάθεια τροποποίησης της κατάστασης με διαφορετικές τιμές θα οδηγήσει σε διαφορετικό hash ρίζας κατάστασης. Θεωρητικά, αυτή η δομή παρέχει το 'ιερό δισκοπότηρο' της απόδοσης `O(log(n))` για εισαγωγές, αναζητήσεις και διαγραφές. -Στο κοντινό μέλλον, το Ethereum σχεδιάζει να μεταφερθεί σε μια δομή [Verkle Tree](https://ethereum.org/en/roadmap/verkle-trees), η οποία θα ανοίξει πολλές νέες δυνατότητες για μελλοντικές βελτιώσεις του πρωτοκόλλου. +Στο κοντινό μέλλον, το Ethereum σχεδιάζει να μεταφερθεί σε μια δομή [Verkle Tree](/roadmap/verkle-trees), η οποία θα ανοίξει πολλές νέες δυνατότητες για μελλοντικές βελτιώσεις του πρωτοκόλλου. ## Προαπαιτούμενα {#prerequisites} diff --git a/public/content/translations/el/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/el/developers/docs/nodes-and-clients/client-diversity/index.md index 54f41b20e70..0c26266b49b 100644 --- a/public/content/translations/el/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/el/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/el/developers/docs/nodes-and-clients/index.md b/public/content/translations/el/developers/docs/nodes-and-clients/index.md index 81b4e4f871d..cb8bad67e3d 100644 --- a/public/content/translations/el/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/el/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ sidebarDepth: 2 | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Pyrmont, Sepolia κτλ | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia κτλ | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia κτλ | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Μετάβαση | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia κτλ | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Μετάβαση | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia κτλ | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Sepolia κτλ | | [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia κτλ | @@ -222,7 +222,7 @@ sidebarDepth: 2 Το Prysm είναι ένας πλήρως εξοπλισμένος, ανοιχτού κώδικα πελάτης συναίνεσης γραμμένος σε Go υπό την άδεια GPL-3.0. Διαθέτει προαιρετική διεπαφή χρήστη webapp και δίνει προτεραιότητα στην εμπειρία χρήστη, την τεκμηρίωση και τη δυνατότητα διαμόρφωσης τόσο για τους χρήστες stake-at-home όσο και για τους θεσμικούς χρήστες. -Επισκεφτείτε τα [αρχεία Prysm](https://docs.prylabs.network/docs/getting-started/) για να μάθετε περισσότερα. +Επισκεφτείτε τα [αρχεία Prysm](https://prysm.offchainlabs.com/docs/) για να μάθετε περισσότερα. ### Teku {#teku} diff --git a/public/content/translations/el/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/el/developers/docs/nodes-and-clients/run-a-node/index.md index 8ec91824e19..1618f926876 100644 --- a/public/content/translations/el/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/el/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Εκτέλεση Prysm -Το Prysm διαθέτει σενάριο που επιτρέπει την εύκολη αυτόματη εγκατάσταση. Λεπτομέρειες μπορείτε να βρείτε στο αρχείο του [Prysm docs](https://docs.prylabs.network/docs/install/install-with-script). +Το Prysm διαθέτει σενάριο που επιτρέπει την εύκολη αυτόματη εγκατάσταση. Λεπτομέρειες μπορείτε να βρείτε στο αρχείο του [Prysm docs](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/el/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/el/developers/docs/standards/tokens/erc-223/index.md index 84051c7580d..5f74977605d 100644 --- a/public/content/translations/el/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/el/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Όταν το `RecipientContract` λάβει ένα ψηφιακό στοιχείο ERC-223, το συμβόλαιο θα εκτελέσει μια συνάρτηση κωδικοποιημένη ως παράμετρος `_data` της συναλλαγής ψηφιακού στοιχείου, πανομοιότυπη με τον τρόπο με τον οποίο οι συναλλαγές ether κωδικοποιούν τις κλήσεις συναρτήσεων ως `δεδομένα` συναλλαγών. Διαβάστε το [πεδίο δεδομένων](https://ethereum.org/en/developers/docs/transactions/#the-data-field) για περισσότερες πληροφορίες. +Όταν το `RecipientContract` λάβει ένα ψηφιακό στοιχείο ERC-223, το συμβόλαιο θα εκτελέσει μια συνάρτηση κωδικοποιημένη ως παράμετρος `_data` της συναλλαγής ψηφιακού στοιχείου, πανομοιότυπη με τον τρόπο με τον οποίο οι συναλλαγές ether κωδικοποιούν τις κλήσεις συναρτήσεων ως `δεδομένα` συναλλαγών. Διαβάστε το [πεδίο δεδομένων](/developers/docs/transactions/#the-data-field) για περισσότερες πληροφορίες. Στο παραπάνω παράδειγμα, ένα ψηφιακό στοιχείο ERC-223 πρέπει να μεταφερθεί στη διεύθυνση του `RecipientContract` με τη συνάρτηση `transfer(address,uin256,bytes calldata _data)`. Εάν η παράμετρος δεδομένων είναι `0xc2985578` (η υπογραφή μιας συνάρτησης `foo()`), τότε η συνάρτηση foo() θα κληθεί μετά τη λήψη της κατάθεσης ψηφιακού στοιχείου και το συμβάν Foo() θα ενεργοποιηθεί. diff --git a/public/content/translations/es/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/es/developers/docs/consensus-mechanisms/pos/keys/index.md index a48751e78a4..bf573e04f89 100644 --- a/public/content/translations/es/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/translations/es/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -56,7 +56,7 @@ La separación de las claves del validador de las claves de la cuenta de Ethereu ![esquema de la clave del validador](validator-key-schematic.png) -**Nota**: Salir de las funciones de participación y retirar el balance del validador actualmente requiere firmar un [mensaje de salida voluntaria (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) con la clave de validador. Sin embargo, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) es una propuesta que permitirá a un usuario activar la salida de un validador y retirar su balance firmando mensajes de salida con la clave de retirada en el futuro. Esto reducirá las suposiciones de confianza al permitir que los participantes que delegan ETH a [proveedores de participación como servicio](https://ethereum.org/en/staking/saas/#what-is-staking-as-a-service) mantengan el control de sus fondos. +**Nota**: Salir de las funciones de participación y retirar el balance del validador actualmente requiere firmar un [mensaje de salida voluntaria (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) con la clave de validador. Sin embargo, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) es una propuesta que permitirá a un usuario activar la salida de un validador y retirar su balance firmando mensajes de salida con la clave de retirada en el futuro. Esto reducirá las suposiciones de confianza al permitir que los participantes que delegan ETH a [proveedores de participación como servicio](/staking/saas/#what-is-staking-as-a-service) mantengan el control de sus fondos. ## Derivar claves de una frase semilla {#deriving-keys-from-seed} diff --git a/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index c6c33c141c6..1cfd124f3ea 100644 --- a/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ La estructura de datos de Ethereum es un «trie Merkle-Patricia modificado», ll Un trie de Merkle-Patricia es determinista y criptográficamente verificable: la única manera de generar una raíz de estado es calculándola a partir de cada pieza individual del estado, y dos estados que son idénticos se pueden probar fácilmente comparando el hash raíz y los hashes que lo llevaron a él (_una prueba de Merkle_). Por el contrario, no hay forma de crear dos estados diferentes con el mismo hash raíz, y cualquier intento de modificar el estado con diferentes valores dará como resultado un hash raíz de estado diferente. En teoría, esta estructura proporciona el «santo grial» de `O(log(n))` eficiencia para inserciones, búsquedas y eliminaciones. -En un futuro próximo, Ethereum planea migrar a una estructura de [árbol Verkle](https://ethereum.org/en/roadmap/verkle-trees), lo que abrirá muchas y nuevas posibilidades para futuras mejoras del protocolo. +En un futuro próximo, Ethereum planea migrar a una estructura de [árbol Verkle](/roadmap/verkle-trees), lo que abrirá muchas y nuevas posibilidades para futuras mejoras del protocolo. ## Requisitos previos {#prerequisites} diff --git a/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md index 13bbefad3d6..2886d6df786 100644 --- a/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Para abordar la diversidad de clientes y escoger un cliente minoritario no solo [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) Los usuarios técnicos pueden acelerar este proceso con tutoriales y documentación relacionada a clientes minoritarios, invitando a otros operadores de nodos a migrar alejándose de los clientes dominantes. Las guías para migrar a un cliente de consenso minoritario están disponibles en [clientdiversity.org](https://clientdiversity.org/). diff --git a/public/content/translations/es/developers/docs/nodes-and-clients/index.md b/public/content/translations/es/developers/docs/nodes-and-clients/index.md index 78ad10a9dd7..0393c27c13c 100644 --- a/public/content/translations/es/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/es/developers/docs/nodes-and-clients/index.md @@ -195,7 +195,7 @@ Existen múltiples clientes de consenso (antes conocidos como clientes Eth2) que | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Cadena de baliza, Goerli, Pyrmont, Sepolia, Ropsten y más | ### Lighthouse {#lighthouse} @@ -220,7 +220,7 @@ Encontrará más información en el [manual de Nimbus](https://nimbus.guide/) Prysm es un cliente de consenso de código abierto completamente escrito en Go bajo la licencia GPL-3.0. Cuenta con una interfaz de usuario opcional de la aplicación web y prioriza la experiencia del usuario, la documentación y la configurabilidad tanto para usuarios interesados como institucionales. -Visite [documentos de Prysm](https://docs.prylabs.network/docs/getting-started/) para obtener más información. +Visite [documentos de Prysm](https://prysm.offchainlabs.com/docs/) para obtener más información. ### Teku {#teku} diff --git a/public/content/translations/es/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/es/developers/docs/nodes-and-clients/run-a-node/index.md index 779b29a83d4..3926ecee3c0 100644 --- a/public/content/translations/es/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/es/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Cómo ejecutar Prysm -Prysm viene con un script que permite una fácil instalación automática. Los detalles pueden encontrarse en el [manual de Prysm](https://docs.prylabs.network/docs/install/install-with-script). +Prysm viene con un script que permite una fácil instalación automática. Los detalles pueden encontrarse en el [manual de Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/es/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/es/developers/docs/standards/tokens/erc-223/index.md index 4cfa09fc1e9..631473def1f 100644 --- a/public/content/translations/es/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/es/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Cuando el `RecipientContract` recibe un token ERC-223, el contrato ejecutará una función codificada con el parámetro `_data` que corresponde a la transacción del token. Esto es idéntico al modo en que las transacciones de Ether codifican las llamadas a funciones como `data` de transacción. Lea [el campo de datos](https://ethereum.org/en/developers/docs/transactions/#the-data-field) para obtener más información. +Cuando el `RecipientContract` recibe un token ERC-223, el contrato ejecutará una función codificada con el parámetro `_data` que corresponde a la transacción del token. Esto es idéntico al modo en que las transacciones de Ether codifican las llamadas a funciones como `data` de transacción. Lea [el campo de datos](/developers/docs/transactions/#the-data-field) para obtener más información. En el ejemplo anterior, se debe transferir un token ERC-223 a la dirección del `RecipientContract` con la función `transfer(address,uin256,bytes calldata _data)`. Si el parámetro de los datos será `0xc2985578` (la firma de una función `foo()`), la función foo() será invocada luego de que se reciba el depósito y se disparará el evento Foo(). diff --git a/public/content/translations/fa/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/fa/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 42a5716204f..b4c62fd0fb3 100644 --- a/public/content/translations/fa/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/fa/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ sidebarDepth: 2 درخت مرکل-پاتریشیا متغیر قطعی و از نظر رمزنگاری قابل تأیید است: تنها راه برای تولید ریشه حالت، محاسبه آن از تک تک تکه های حالت است، و دو حالت یکسان را می توان به راحتی با مقایسه هش ریشه و هش هایی که منجر به آن شده‌اند ثابت کرد (_اثبات مرکل_). برعکس، هیچ راهی برای ایجاد دو حالت مختلف با هش ریشه یکسان وجود ندارد، و هر تلاشی برای تغییر حالت با مقادیر مختلف منجر به یک هش ریشه متفاوت خواهد شد. از نظر تئوری، این ساختار «جام مقدس» کارایی `O(log(n))` را برای درج‌ها، جستجوها و حذف‌ها فراهم می‌کند. -در آینده نزدیک، اتریوم قصد دارد به ساختار [Verkle Tree](https://ethereum.org/en/roadmap/verkle-trees) مهاجرت کند، که بسیاری از فرصت‌های جدید را برای بهبود پروتکل‌های آینده باز خواهد کرد. +در آینده نزدیک، اتریوم قصد دارد به ساختار [Verkle Tree](/roadmap/verkle-trees) مهاجرت کند، که بسیاری از فرصت‌های جدید را برای بهبود پروتکل‌های آینده باز خواهد کرد. ## موارد مورد نیاز {#prerequisites} diff --git a/public/content/translations/fa/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/fa/developers/docs/nodes-and-clients/client-diversity/index.md index 86aed0cd0c2..904b6dd708d 100644 --- a/public/content/translations/fa/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/fa/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) کاربران فنی می‌توانند با نوشتن آموزش‌ها و مستندات بیشتر برای کلاینت‌های اقلیت و تشویق همتایان گره‌گردان خود به مهاجرت کردن دور از کلاینت‌های غالب، به تسریع این فرایند کمک کنند. راهنماهای تغییر به کلاینت اجماع اقلیت در [clientdiversity.org](https://clientdiversity.org/) موجود است. diff --git a/public/content/translations/fa/developers/docs/nodes-and-clients/index.md b/public/content/translations/fa/developers/docs/nodes-and-clients/index.md index 97ad557b24c..196ba2d1b91 100644 --- a/public/content/translations/fa/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/fa/developers/docs/nodes-and-clients/index.md @@ -195,7 +195,7 @@ Reth آماده تولید است و برای استفاده در محیط‌ه | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten، و غیره | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Goerli, Sepolia, Ropsten، و غیره | | [Nimbus](https://nimbus.team/) | Nim | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Goerli, Sepolia, Ropsten، و غیره | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten، و غیره | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten، و غیره | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | جاوا | لینوکس، ویندوز، مک‌اواس | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten، و غیره | ### Lighthouse {#lighthouse} @@ -220,7 +220,7 @@ Nimbus یک زیرساخت کلاینت اجماع است که با زبان Nim Prysm یک کلاینت اجماع با امکانات کامل و منبع باز است که با زبان Go تحت مجوز GPL-3.0 نوشته شده است. دارای یک رابط کاربری وب اپلیکیشن اختیاری است و تجربه کاربر، اسناد و قابلیت پیکربندی را هم برای کاربران شرکتی و هم برای کاربران سازمانی در اولویت قرار می دهد. -برای اطلاعات بیشتر به [اسناد Prysm](https://docs.prylabs.network/docs/getting-started/) مراجعه کنید. +برای اطلاعات بیشتر به [اسناد Prysm](https://prysm.offchainlabs.com/docs/) مراجعه کنید. ### Teku {#teku} diff --git a/public/content/translations/fa/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/fa/developers/docs/nodes-and-clients/run-a-node/index.md index 048e7c333cd..40f31de2e76 100644 --- a/public/content/translations/fa/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/fa/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### اجرای Prysm -Prysm همراه با اسکریپت است که امکان نصب خودکار آسان را فراهم می کند. جزئیات را می توان در [اسناد Prysm](https://docs.prylabs.network/docs/install/install-with-script) پیدا کرد. +Prysm همراه با اسکریپت است که امکان نصب خودکار آسان را فراهم می کند. جزئیات را می توان در [اسناد Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) پیدا کرد. ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/fa/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/fa/developers/docs/standards/tokens/erc-223/index.md index ff0172e93a7..1fa19255ce4 100644 --- a/public/content/translations/fa/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/fa/developers/docs/standards/tokens/erc-223/index.md @@ -186,7 +186,7 @@ contract RecipientContract is IERC223Recipient { } ``` -هنگامی که `RecipientContract` یک توکن ERC-223 را دریافت می‌کند، درست همانطور که تراکنش‌های ارسال اتر فراخوانی توابع را بعنوان `data` در تراکنش کدنگاری می‌کنند، قرارداد نیز تابعی را که به عنوان متغیر `_data` در تراکنش توکن کدنگاری شده است اجرا خواهد کرد. برای اطلاعات بیشتر [دیتا فیلد](https://ethereum.org/en/developers/docs/transactions/#the-data-field) را مطالعه فرمائید. +هنگامی که `RecipientContract` یک توکن ERC-223 را دریافت می‌کند، درست همانطور که تراکنش‌های ارسال اتر فراخوانی توابع را بعنوان `data` در تراکنش کدنگاری می‌کنند، قرارداد نیز تابعی را که به عنوان متغیر `_data` در تراکنش توکن کدنگاری شده است اجرا خواهد کرد. برای اطلاعات بیشتر [دیتا فیلد](/developers/docs/transactions/#the-data-field) را مطالعه فرمائید. در مثال بالا، توکن ERC-223 باید با استفاده از تابع `transfer(address,uin256,bytes calldata _data)` به آدرس `RecipientContract` انتقال یابد. اگر مقدار پارامتر دیتا `0xc2985578` باشد (معادل امضاء تابع `foo()`)، بعد از دریافت توکن واریزی و اجراء رویداد Foo()، تابع foo() اجرا خواهد شد. diff --git a/public/content/translations/fa/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/fa/developers/docs/standards/tokens/erc-777/index.md new file mode 100644 index 00000000000..29d0905eaa0 --- /dev/null +++ b/public/content/translations/fa/developers/docs/standards/tokens/erc-777/index.md @@ -0,0 +1,45 @@ +--- +title: استاندارد توکن ERC-777 +description: یاد بگیرید ERC-777 چیست؛ یک استاندارد توکن قابل معاوضه با قابلیت قلاب‌ها که نسبت به ERC-20 بهبود یافته است، هرچند به دلایل امنیتی استفاده از ERC-20 توصیه می‌شود. +lang: fa +--- + +## هشدار {#warning} + +**پیاده‌سازی صحیح ERC-777 به دلیل [آسیب‌پذیری در برابر انواع مختلف حملات](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620) دشوار است. به جای آن استفاده از [ERC-20](/developers/docs/standards/tokens/erc-20/) توصیه می‌شود.** این صفحه به عنوان یک آرشیو تاریخی باقی می‌ماند. + +## مقدمه {#introduction} + +ERC-777 یک استاندارد توکن قابل معاوضه است که استاندارد موجود [ERC-20](/developers/docs/standards/tokens/erc-20/) را بهبود می‌بخشد. + +## پیش‌نیازها {#prerequisites} + +برای درک بهتر این صفحه، توصیه می‌کنیم ابتدا درباره [ERC-20](/developers/docs/standards/tokens/erc-20/) مطالعه کنید. + +## ERC-777 چه بهبودهایی را نسبت به ERC-20 ارائه می‌دهد؟ {#-erc-777-vs-erc-20} + +ERC-777 بهبودهای زیر را نسبت به ERC-20 ارائه می‌دهد. + +### قلاب‌ها {#hooks} + +قلاب‌ها توابعی هستند که در کد قرارداد هوشمند توصیف شده‌اند. هنگامی که توکن‌ها از طریق قرارداد ارسال یا دریافت می‌شوند، قلاب‌ها فراخوانی می‌شوند. این به قرارداد هوشمند اجازه می‌دهد تا به توکن‌های ورودی یا خروجی واکنش نشان دهد. + +قلاب‌ها با استفاده از استاندارد [ERC-1820](https://eips.ethereum.org/EIPS/eip-1820) ثبت و کشف می‌شوند. + +#### چرا قلاب‌ها عالی هستند؟ {#why-are-hooks-great} + +1. قلاب‌ها امکان ارسال توکن‌ها به یک قرارداد و اطلاع‌رسانی به قرارداد را در یک تراکنش واحد فراهم می‌کنند، برخلاف [ERC-20](https://eips.ethereum.org/EIPS/eip-20) که برای این کار نیاز به فراخوانی دوگانه (`approve`/`transferFrom`) دارد. +2. قراردادهایی که قلاب ثبت نکرده‌اند با ERC-777 ناسازگار هستند. قرارداد فرستنده در صورتی که قرارداد گیرنده قلابی ثبت نکرده باشد، تراکنش را لغو می‌کند. این از انتقال‌های تصادفی به قراردادهای هوشمند غیر ERC-777 جلوگیری می‌کند. +3. قلاب‌ها می‌توانند تراکنش‌ها را رد کنند. + +### اعشار {#decimals} + +این استاندارد همچنین سردرگمی مربوط به `decimals` در ERC-20 را برطرف می‌کند. این شفاف‌سازی تجربه توسعه‌دهندگان را بهبود می‌بخشد. + +### سازگاری با ERC-20 {#backwards-compatibility-with-erc-20} + +با قراردادهای ERC-777 می‌توان همانند قراردادهای ERC-20 تعامل کرد. + +## مطالعه بیشتر {#further-reading} + +[EIP-777: استاندارد توکن](https://eips.ethereum.org/EIPS/eip-777) diff --git a/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 4628119a47c..fe93186638a 100644 --- a/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ La structure de données d'Ethereum est un arbre de Patricia Merkle modifié, no Un arbre de Patricia Merkle est déterministe et cryptographiquement vérifiable : la seule façon de générer une racine d'état est de la calculer à partir de chaque morceau individuel de l'état, et deux états qui sont identiques peuvent être facilement prouvés en comparant le hash de racine et les hashes qui y ont conduit (_a Merkle proof_). Inversement, il n'est pas possible de créer deux états différents avec le même hachage de racine, et toute tentative de modifier l'état avec différentes valeurs donnera lieu à un hachage de racine d'état différent. Théoriquement, cette structure fournit le sacré Graal de l'efficacité `O(log(n))` pour les inserts, les recherches et les suppressions. -Dans un avenir proche, Ethereum prévoit de migrer vers une structure en [arbre de Verkle](https://ethereum.org/en/roadmap/verkle-trees), ce qui ouvrira de nombreuses possibilités d'amélioration du protocole. +Dans un avenir proche, Ethereum prévoit de migrer vers une structure en [arbre de Verkle](/roadmap/verkle-trees), ce qui ouvrira de nombreuses possibilités d'amélioration du protocole. ## Prérequis {#prerequisites} diff --git a/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md index b72aea62735..2aecc50369b 100644 --- a/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Pour résoudre le problème de la diversité des clients, il ne suffit pas que l [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/fr/developers/docs/nodes-and-clients/index.md b/public/content/translations/fr/developers/docs/nodes-and-clients/index.md index 18fe3099291..a54d97860be 100644 --- a/public/content/translations/fr/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/fr/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ De nombreux clients de consensus (précédemment connus sous le nom de clients ' | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Pyrmont, Sepolia, et plus encore | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, et plus encore | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, et plus encore | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia, et plus encore | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Pyrmont, Sepolia, et plus encore | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Holesky, Sepolia, et plus encore | | [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Sepolia, et plus encore | @@ -222,7 +222,7 @@ En savoir plus avec la [Documentation de Nimbus](https://nimbus.guide/) Prysm est un client de consensus open source complet écrit en Go sous la licence GPL-3.0. Il dispose d'une interface utilisateur optionnelle et donne la priorité à l'expérience utilisateur, à la documentation et à la configurabilité, tant pour les utilisateurs particuliers qu'institutionnels. -Consultez [la documentation Prysm](https://docs.prylabs.network/docs/getting-started/) pour en savoir plus. +Consultez [la documentation Prysm](https://prysm.offchainlabs.com/docs/) pour en savoir plus. ### Teku {#teku} diff --git a/public/content/translations/fr/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/fr/developers/docs/nodes-and-clients/run-a-node/index.md index 21aaa27082d..837c97f1b2b 100644 --- a/public/content/translations/fr/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/fr/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Exécuter Prysm -Prysm est livré avec un script qui permet une installation automatique facile. Les détails peuvent être trouvés dans [la documentation Prysm](https://docs.prylabs.network/docs/install/install-with-script). +Prysm est livré avec un script qui permet une installation automatique facile. Les détails peuvent être trouvés dans [la documentation Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/fr/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/fr/developers/docs/standards/tokens/erc-223/index.md index 460ea011df7..a44a4377320 100644 --- a/public/content/translations/fr/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/fr/developers/docs/standards/tokens/erc-223/index.md @@ -178,7 +178,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Lorsque le 'RecipientContract' recevra un token ERC-223, le contrat exécutera une fonction encodée sous forme de paramètre '_data' de la transaction du jeton, de la même manière que les transactions d'ether encodent les appels de fonction en tant que 'data' de transaction. Consultez [le champ de données](https://ethereum.org/en/developers/docs/transactions/#the-data-field) pour plus d'informations. +Lorsque le 'RecipientContract' recevra un token ERC-223, le contrat exécutera une fonction encodée sous forme de paramètre '_data' de la transaction du jeton, de la même manière que les transactions d'ether encodent les appels de fonction en tant que 'data' de transaction. Consultez [le champ de données](/developers/docs/transactions/#the-data-field) pour plus d'informations. Dans l'exemple ci-dessus, un jeton ERC-223 doit être transféré à l'adresse du `RecipientContract` avec la fonction `transfer(address,uint256,bytes calldata _data)`. Si le paramètre de données est `0xc2985578` (la signature de la fonction `faut()`), alors la fonction `foo()` sera invoquée après la réception du dépôt de jetons, et l'événement `Foo()` sera déclenché. diff --git a/public/content/translations/ga/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/ga/developers/docs/nodes-and-clients/client-diversity/index.md index c9904064ff6..4b3b02e65ac 100644 --- a/public/content/translations/ga/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/ga/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Le tabhairt faoi éagsúlacht na gcliant bíonn níos mó ná úsáideoirí aona [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/ga/developers/docs/nodes-and-clients/index.md b/public/content/translations/ga/developers/docs/nodes-and-clients/index.md index e4eb9603e35..23ed5b31038 100644 --- a/public/content/translations/ga/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/ga/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ Tá go leor cliant comhdhearcaidh (cliaint 'Eth2' mar a tugadh orthu roimhe seo) | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Pyrmont, Sepolia agus níos mó | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Holesky, Seplia agus níos mó | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Holesky, Seplia agus níos mó | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Téigh | Linux, Windows, macOS | Beacon Slabhra, Gnosis, Holesky, Pyrmont, Seplia agus níos mó | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Téigh | Linux, Windows, macOS | Beacon Slabhra, Gnosis, Holesky, Pyrmont, Seplia agus níos mó | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Slabhra, Gnosis, Holesky, Seplia agus níos mó | | [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Holesky, Seplia agus níos mó | @@ -222,7 +222,7 @@ Foghlaim tuilleadh in [doiciméid Nimbus](https://nimbus.guide/) Is cliant comhdhearcaidh foinse oscailte lán-tréithe é Prysm atá scríofa in Go faoin gceadúnas GPL-3.0. Tá UI roghnach webapp aige agus tugann sé tosaíocht d’eispéireas úsáideora, do dhoiciméadú agus do chumraíocht d’úsáideoirí geall sa bhaile agus d’úsáideoirí institiúideacha. -Tabhair cuairt ar [Prysm docs](https://docs.prylabs.network/docs/getting-started/) chun tuilleadh a fhoghlaim. +Tabhair cuairt ar [Prysm docs](https://prysm.offchainlabs.com/docs/) chun tuilleadh a fhoghlaim. ### Teku {#teku} diff --git a/public/content/translations/ga/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/ga/developers/docs/nodes-and-clients/run-a-node/index.md index 30e30ce4eab..f5d948f99d6 100644 --- a/public/content/translations/ga/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/ga/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Ag rith Prysm -Tagann Prysm le script a cheadaíonn suiteáil uathoibríoch éasca. Is féidir sonraí a fháil sna [doiciméid Prysm](https://docs.prylabs.network/docs/install/install-with-script). +Tagann Prysm le script a cheadaíonn suiteáil uathoibríoch éasca. Is féidir sonraí a fháil sna [doiciméid Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/ga/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/ga/developers/docs/standards/tokens/erc-223/index.md index e2109aa5174..901971f8787 100644 --- a/public/content/translations/ga/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/ga/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Nuair a gheobhaidh an `RecipientContract` chomhartha ERC-223 déanfaidh an conradh feidhm atá ionchódaithe mar pharaiméadar `_data` an idirbhirt chomharthaí, comhionann leis an gcaoi a n-ionchódaíonn idirbhearta éitear glaonna mar `data` idirbhirt. Léigh [an réimse sonraí] (https://ethereum.org/en/developers/docs/transactions/#the-data-field) le haghaidh tuilleadh faisnéise. +Nuair a gheobhaidh an `RecipientContract` chomhartha ERC-223 déanfaidh an conradh feidhm atá ionchódaithe mar pharaiméadar `_data` an idirbhirt chomharthaí, comhionann leis an gcaoi a n-ionchódaíonn idirbhearta éitear glaonna mar `data` idirbhirt. Léigh [an réimse sonraí] (/developers/docs/transactions/#the-data-field) le haghaidh tuilleadh faisnéise. Sa sampla thuas ní mór comhartha ERC-223 a aistriú chuig seoladh an `RecipientContract` leis an bhfeidhm `transfer(address,uin256,bytes calldata _data)`. Más é `0xc2985578` (síniú feidhm `foo()`) an paraiméadar sonraí, déanfar an foo feidhme () a agairt tar éis an taisce chomhartha a fháil agus déanfar an t-imeacht Foo() a bhácáil. diff --git a/public/content/translations/hi/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/hi/developers/docs/nodes-and-clients/client-diversity/index.md index 7d9d35c6b07..b209d51ab1d 100644 --- a/public/content/translations/hi/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/hi/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [लोडस्टार](https://github.com/ChainSafe/lodestar) -[प्रिज़्म](https://docs.prylabs.network/docs/getting-started) +[प्रिज़्म](https://prysm.offchainlabs.com/docs/) तकनीकी यूज़र अल्पसंख्यक क्लाइंट के लिए अधिक ट्यूटोरियल और प्रलेखन लिखकर और अपने नोड-ऑपरेटिंग साथियों को प्रमुख क्लाइंट से दूर माइग्रेट करने के लिए प्रोत्साहित करके इस प्रक्रिया को तेज करने में मदद कर सकते हैं। अल्पसंख्यक सहमति क्लाइंट पर स्विच करने के लिए गाइड [clientdiversity.org](https://clientdiversity.org/) पर उपलब्ध हैं। diff --git a/public/content/translations/hi/developers/docs/nodes-and-clients/index.md b/public/content/translations/hi/developers/docs/nodes-and-clients/index.md index c4799dba16e..f8e1949d55c 100644 --- a/public/content/translations/hi/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/hi/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ EthereumJS निष्पादन क्लाइंट (EthereumJS) TypeScrip | [लाइटहाउस](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | बीकन चेन, गोएर्ली, पिरमोंट, सेपोलिया, रोपस्टेन और बहुत कुछ | | [लोडस्टार](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | बीकन चेन, गोएर्ली, सेपोलिया, रोपस्टेन और बहुत कुछ | | [निंबस](https://nimbus.team/) | Nim | Linux, Windows, macOS | बीकन चेन, गोएर्ली, सेपोलिया, रोपस्टेन और बहुत कुछ | -| [प्रिज़्म](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | बीकन चेन, ग्नोसिस, गोएर्ली, पिरमोंट, सेपोलिया, रोपस्टेन और बहुत कुछ | +| [प्रिज़्म](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | बीकन चेन, ग्नोसिस, गोएर्ली, पिरमोंट, सेपोलिया, रोपस्टेन और बहुत कुछ | | [टेकु](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | बीकन चेन, ग्नोसिस, गोएर्ली, सेपोलिया, रोपस्टेन और बहुत कुछ | | [ग्रांडाइन](https://docs.grandine.io/) (बीटा) | Rust | Linux, Windows, macOS | बीकन चेन, गोएर्ली, सेपोलिया और बहुत कुछ | @@ -222,7 +222,7 @@ Nimbus, Apache-2.0 लाइसेंस के तहत Nim में लि प्रिज़्म GPL-3.0 लाइसेंस के तहत गो में लिखा गया एक पूर्ण विशेषताओं वाला, ओपन सोर्स सर्वसम्मति वाला क्लाइंट है। इसमें एक वैकल्पिक वेबपैप UI है और यह स्टेक-एट-होम और संस्थागत उपयोगकर्ताओं दोनों के लिए यूज़र अनुभव, प्रलेखन और विन्यास को प्राथमिकता देता है। -अधिक जानने के लिए [प्रिज़्म डॉक्स](https://docs.prylabs.network/docs/getting-started/) पर जाएं। +अधिक जानने के लिए [प्रिज़्म डॉक्स](https://prysm.offchainlabs.com/docs/) पर जाएं। ### टेकु {#teku} diff --git a/public/content/translations/hi/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/hi/developers/docs/nodes-and-clients/run-a-node/index.md index ea447443dd0..418b94e710f 100644 --- a/public/content/translations/hi/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/hi/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### प्रिज़्म चलाना -Prysm स्क्रिप्ट के साथ आता है जो आसान स्वचालित स्थापना की अनुमति देता है। विवरण [प्रिज़्म डॉक्स](https://docs.prylabs.network/docs/install/install-with-script) में पाए जा सकते हैं। +Prysm स्क्रिप्ट के साथ आता है जो आसान स्वचालित स्थापना की अनुमति देता है। विवरण [प्रिज़्म डॉक्स](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) में पाए जा सकते हैं। ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/hu/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/hu/developers/docs/consensus-mechanisms/pos/keys/index.md index f91afa32a91..70e2a185b2c 100644 --- a/public/content/translations/hu/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/translations/hu/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -56,7 +56,7 @@ A validátorkulcsok és az Ethereum-számlakulcsok szétválasztása lehetővé ![validátorkulcs ábrája](validator-key-schematic.png) -**Megjegyzés**: A letétbe helyezésből való kilépéshez és a validátor egyenlegének visszavonásához jelenleg egy [önkéntes kilépési üzenet (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) aláírása szükséges a validátorkulccsal. Az [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) azonban egy olyan javaslat, amely lehetővé teszi a felhasználó számára, hogy a jövőben a kilépési üzeneteknek a kivételi kulccsal történő aláírásával elindítsa a validátor kilépését és kivegye az egyenlegét. Ez csökkenti a bizalomigényt, mivel azok a letétesek, akik az ETH-t [letétbe helyezési szolgáltatóknak](https://ethereum.org/en/staking/saas/#what-is-staking-as-a-service) delegálják, továbbra is ellenőrzésük alatt tarthatják pénzeszközeiket. +**Megjegyzés**: A letétbe helyezésből való kilépéshez és a validátor egyenlegének visszavonásához jelenleg egy [önkéntes kilépési üzenet (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) aláírása szükséges a validátorkulccsal. Az [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) azonban egy olyan javaslat, amely lehetővé teszi a felhasználó számára, hogy a jövőben a kilépési üzeneteknek a kivételi kulccsal történő aláírásával elindítsa a validátor kilépését és kivegye az egyenlegét. Ez csökkenti a bizalomigényt, mivel azok a letétesek, akik az ETH-t [letétbe helyezési szolgáltatóknak](/staking/saas/#what-is-staking-as-a-service) delegálják, továbbra is ellenőrzésük alatt tarthatják pénzeszközeiket. ## Kulcsok származtatása egy kulcsmondatból {#deriving-keys-from-seed} diff --git a/public/content/translations/hu/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/hu/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 36fbac640a3..4917125f51b 100644 --- a/public/content/translations/hu/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/hu/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ Az Ethereum adatszerkezete egy „módosított Merkle-Patricia-fa (trie)”, ame A Merkle-Patricia-fa determinisztikus és kriptográfiailag ellenőrizhető: a státusz gyökerét csak úgy lehet előállítani, ha azt a státusz minden egyes darabjából kiszámítjuk, és két azonos státusz könnyen bizonyítható a gyökér-hash és az ahhoz vezető hash-ek az összehasonlításával (_Merkle-bizonyíték_). Ezzel szemben nem lehet két különböző státuszt létrehozni ugyanazzal a gyökér-hash-értékkel, és minden olyan kísérlet, hogy a státuszt különböző értékekkel módosítsák, más státusz gyökér-hash-t eredményez. Elméletileg ez a struktúra biztosítja a `O(log(n))` hatékonyság „szent grálját” a beleírások, keresések és törlések esetében. -A közeljövőben az Ethereum tervezi, hogy áttér a [Verkle-fastruktúrára](https://ethereum.org/en/roadmap/verkle-trees), amely új lehetőségeket nyit a jövőbeli protokollfejlesztések előtt. +A közeljövőben az Ethereum tervezi, hogy áttér a [Verkle-fastruktúrára](/roadmap/verkle-trees), amely új lehetőségeket nyit a jövőbeli protokollfejlesztések előtt. ## Előfeltételek {#prerequisites} diff --git a/public/content/translations/hu/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/hu/developers/docs/nodes-and-clients/client-diversity/index.md index 0f95a7f6f76..3b3ea41108a 100644 --- a/public/content/translations/hu/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/hu/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ A kliensdiverzitás eléréséhez nem elég, hogy az egyéni felhasználók kise [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/hu/developers/docs/nodes-and-clients/index.md b/public/content/translations/hu/developers/docs/nodes-and-clients/index.md index 75e122c78c1..0ad37f6cdaf 100644 --- a/public/content/translations/hu/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/hu/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ Többféle konszenzusos kliens (korábbi nevén „Eth2” kliens) is létezik, | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon lánc, Holesky, Pyrmont, Sepolia stb. | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon lánc, Holesky, Sepolia stb. | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon lánc, Holesky, Sepolia stb. | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon lánc, Gnosis, Holesky, Pyrmont, Sepolia stb. | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon lánc, Gnosis, Holesky, Pyrmont, Sepolia stb. | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon lánc, Gnosis, Holesky, Sepolia stb. | | [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon lánc, Holesky, Sepolia stb. | @@ -222,7 +222,7 @@ További információ a [Nimbus-dokumentációban](https://nimbus.guide/) talál A Prysm egy teljes körű funkciókat kínáló, nyílt forráskódú konszenzusos kliens, amelyet Go nyelven írtak, és a GPL-3.0 licenc alatt adták ki. Opcionális webalkalmazási felhasználói felületet kínál, előtérbe helyezi a felhasználói élményt, a dokumentációt és a konfigurálhatóságot az otthoni letétbe helyezők és az intézményi felhasználók számára is. -További információkért tekintse meg a [Prysm-dokumentációt](https://docs.prylabs.network/docs/getting-started/). +További információkért tekintse meg a [Prysm-dokumentációt](https://prysm.offchainlabs.com/docs/). ### Teku {#teku} diff --git a/public/content/translations/hu/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/hu/developers/docs/nodes-and-clients/run-a-node/index.md index 5a9e89f796e..e0129345433 100644 --- a/public/content/translations/hu/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/hu/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### A Prysm futtatása -A Prysm egy szkripttel együtt elérhető, amely egyszerű, automatikus telepítést tesz lehetővé. A részleteket a [Prysm dokumentációban](https://docs.prylabs.network/docs/install/install-with-script) találja. +A Prysm egy szkripttel együtt elérhető, amely egyszerű, automatikus telepítést tesz lehetővé. A részleteket a [Prysm dokumentációban](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) találja. ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/hu/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/hu/developers/docs/standards/tokens/erc-223/index.md index 18750200db6..7b9e55ebae8 100644 --- a/public/content/translations/hu/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/hu/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Amikor a „RecipientContract” kap egy ERC-223 tokent, a szerződés a token tranzakció „_data” paramétereként kódolt függvényt hajt végre ugyanúgy, ahogy az ether-tranzakciók kódolják a függvényhívásokat a tranzakció „data” paramétereként. Tekintse meg [az adatmezőt](https://ethereum.org/en/developers/docs/transactions/#the-data-field) további információért. +Amikor a „RecipientContract” kap egy ERC-223 tokent, a szerződés a token tranzakció „_data” paramétereként kódolt függvényt hajt végre ugyanúgy, ahogy az ether-tranzakciók kódolják a függvényhívásokat a tranzakció „data” paramétereként. Tekintse meg [az adatmezőt](/developers/docs/transactions/#the-data-field) további információért. A fenti példában az ERC-223 tokent a „RecipientContract” címre a „transfer(address,uin256,bytes calldata _data)” függvénnyel kell küldeni. Ha az adatparaméter „0xc2985578” (ami a „foo()” függvény jele), akkor a foo() függvény indul el a token letétbe helyezése után, és a Foo() eseményt adja. diff --git a/public/content/translations/id/developers/docs/nodes-and-clients/index.md b/public/content/translations/id/developers/docs/nodes-and-clients/index.md index 106829990ef..4ce972cf6aa 100644 --- a/public/content/translations/id/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/id/developers/docs/nodes-and-clients/index.md @@ -247,7 +247,7 @@ Ada beberapa klien konsensus (sebelumnya dikenal sebagai klien 'Eth2') untuk men | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Rantai Suar, Goerli | | [Lighthouse](https://lighthouse-book.sigmaprime.io/) | Rust | Linux, Windows, macOS | Rantai Suar, Goerli, Pyrmont | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Rantai Suar, Goerli | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Rantai Suar, Gnosis, Goerli, Pyrmont | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Rantai Suar, Gnosis, Goerli, Pyrmont | ## Perangkat keras {#hardware} diff --git a/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 47aac178592..1c7ad65d411 100644 --- a/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ La struttura dei dati di Ethereum è un 'Trie di Merkle-Patricia modificato', co Un trie di Merkle-Patricia è deterministico e verificabile crittograficamente: il solo modo per generare una radice di stato è calcolandola da ogni singola parte dello stato, e due stati identici sono facilmente dimostrabili confrontando l'hash di radice e gli hash che hanno portato a esso (_una prova di Merkle_). Per contro, non esiste alcun modo per creare due stati differenti con lo stesso hash di radice, e qualsiasi tentativo di modificare lo stato con valori differenti risulterà in un hash della radice di stato differente. Teoricamente, questa struttura rappresenta il 'Sacro Graal' dell'efficienza di `O(log(n))` per inserimenti, ricerche ed eliminazioni. -Nel prossimo futuro, Ethereum prevede di migrare a una struttura ad [Albero di Verkle](https://ethereum.org/en/roadmap/verkle-trees), che aprirà le porte a molte nuove possibilità per le future migliorie al protocollo. +Nel prossimo futuro, Ethereum prevede di migrare a una struttura ad [Albero di Verkle](/roadmap/verkle-trees), che aprirà le porte a molte nuove possibilità per le future migliorie al protocollo. ## Prerequisiti {#prerequisites} diff --git a/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md index b4caecc0e52..06dc895256d 100644 --- a/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Per "indirizzare" la diversità dei client non basta che i singoli utenti scelga [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/it/developers/docs/nodes-and-clients/index.md b/public/content/translations/it/developers/docs/nodes-and-clients/index.md index 43bab744abd..7c3e16337cc 100644 --- a/public/content/translations/it/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/it/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ Esistono diversi client di consenso (precedentemente noti come client di "Eth2") | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten e altre | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten e altre | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten e altre | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten e altre | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten e altre | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten e altre | | [Grandine](https://docs.grandine.io/) (beta) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia e altre | @@ -222,7 +222,7 @@ Scopri di più nella [documentazione di Nimbus](https://nimbus.guide/) Prysm è un client di consenso completo e open source scritto in Go sotto la licenza GPL-3.0. Dispone di un'UI webapp facoltativa e da' priorità all'esperienza dell'utente, alla documentazione e alla configurabilità sia per gli utenti di staking domestico che per quelli istituzionali. -Visita la [documentazione di Prysm](https://docs.prylabs.network/docs/getting-started/) per maggiori informazioni. +Visita la [documentazione di Prysm](https://prysm.offchainlabs.com/docs/) per maggiori informazioni. ### Teku {#teku} diff --git a/public/content/translations/it/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/it/developers/docs/nodes-and-clients/run-a-node/index.md index a2ccd70dfa4..7a073f3d972 100644 --- a/public/content/translations/it/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/it/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Eseguire Prysm -Prysm è dotato di uno script che consente una facile installazione automatica. I dettagli sono riportati nella [documentazione di Prysm](https://docs.prylabs.network/docs/install/install-with-script). +Prysm è dotato di uno script che consente una facile installazione automatica. I dettagli sono riportati nella [documentazione di Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/it/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/it/developers/docs/standards/tokens/erc-223/index.md index fe9ce8e6cf0..a18b66de118 100644 --- a/public/content/translations/it/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/it/developers/docs/standards/tokens/erc-223/index.md @@ -178,7 +178,7 @@ contract RecipientContract is IERC223Recipient { } ``` -Quando il `RecipientContract` riceverà un token ERC-223 il contratto eseguirà una funzione codificata come parametro `_data` della transazione del token, in modo identico a come le transazioni di Ether codificano le chiamate di funzioni come transazioni `data`. Leggi [il campo dati](https://ethereum.org/en/developers/docs/transactions/#the-data-field) per maggiori informazioni. +Quando il `RecipientContract` riceverà un token ERC-223 il contratto eseguirà una funzione codificata come parametro `_data` della transazione del token, in modo identico a come le transazioni di Ether codificano le chiamate di funzioni come transazioni `data`. Leggi [il campo dati](/developers/docs/transactions/#the-data-field) per maggiori informazioni. Nell'esempio precedente un token ERC-223 deve essere trasferito all'indirizzo del `RecipientContract` con la funzione `transfer(address,uin256,bytes calldata _data)`. Se il parametro dei dati sarà `0xc2985578` (la firma di una funzione `foo()`) allora la funzione foo() sarà invocata dopo che il deposito del token è stato ricevuto e l'evento Foo() è stato attivato. diff --git a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 4b695d490b8..cda2c97883b 100644 --- a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ sidebarDepth: 2 マークル・パトリシア・ツリーは、決定論的で暗号的に検証可能です。状態ルートを生成する唯一の方法は、状態のそれぞれの部分で計算することです。2つの状態が同一であることは、ルートハッシュとその計算から導かれたハッシュを比較することで簡単に証明できます (_マークルプルーフ_) 。 反対に、同じルートハッシュで2つの異なる状態を生成することはあり得ません。また、異なる値で状態を変更しようとすると、異なる状態のルートハッシュになります。 理論的には、この構造により、挿入、検索、削除で`O(log(n))`による効率の「ホーリー・グレイル」を提供します。 -今後、イーサリアムでは[バークルツリー](https://ethereum.org/en/roadmap/verkle-trees)構造への移行を計画しています。これにより、将来のプロトコルの改善において、さまざまな新しい可能性が開かれます。 +今後、イーサリアムでは[バークルツリー](/roadmap/verkle-trees)構造への移行を計画しています。これにより、将来のプロトコルの改善において、さまざまな新しい可能性が開かれます。 ## 前提知識 {#prerequisites} diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md index e81e3b0de6b..8d8bc573504 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [ロードスター](https://github.com/ChainSafe/lodestar) -[プリズム](https://docs.prylabs.network/docs/getting-started) +[プリズム](https://prysm.offchainlabs.com/docs/) ノードオペレーターを大多数を占めるクライアントからの移行を奨励し、移行プロセスを加速できるよう、技術系のユーザーはマイノリティクライアント向けのチュートリアルやドキュメントの作成にご協力ください。 マイノリティコンセンサスクライアントへの移行に関するガイドは、 [clientdiversity.org](https://clientdiversity.org/)から入手できます。 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/index.md index a0edab3bc8d..b1065c33531 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/index.md @@ -195,7 +195,7 @@ EthereumJS実行クライアント(EthereumJS)は、TypeScriptで書かれ、い | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux、Windows、macOS | ビーコンチェーン、Goerli、Pyrmont、Sepolia、Ropstenなど | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux、Windows、macOS | ビーコンチェーン、Goerli、Sepolia、Ropstenなど | | [Nimbus](https://nimbus.team/) | Nim | Linux、Windows、macOS | ビーコンチェーン、Goerli、Sepolia、Ropstenなど | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux、Windows、macOS | ビーコンチェーン、Gnosis、Goerli、Pyrmont、Sepolia、Ropstenなど | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux、Windows、macOS | ビーコンチェーン、Gnosis、Goerli、Pyrmont、Sepolia、Ropstenなど | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux、Windows、macOS | ビーコンチェーン、Gnosis、Goerli、Sepolia、Ropstenなど | ### Lighthouse {#lighthouse} @@ -220,7 +220,7 @@ Nimbusは、Apache-2.0ライセンスの下、Nimで書かれたコンセンサ Prysmは、GPL-3.0ライセンスの下、Goで書かれたフル機能のオープンソースのコンセンサスクライアントです。 オプションのWebアプリのUIを備え、自宅でステーキングするユーザーと機関ユーザーの両方に向けて、ユーザーエクスペリエンス、ドキュメント、設定可能性を優先しているのが特徴です。 -詳しくは、[Prysmのドキュメント](https://docs.prylabs.network/docs/getting-started/)をご覧ください。 +詳しくは、[Prysmのドキュメント](https://prysm.offchainlabs.com/docs/)をご覧ください。 ### Teku {#teku} diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md index 3cab5717aab..9e25f288d30 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Prysmの実行 -Prysmには、簡単に自動インストールできるスクリプトがあります。 詳細については、[Prysmドキュメント](https://docs.prylabs.network/docs/install/install-with-script)を参照してください。 +Prysmには、簡単に自動インストールできるスクリプトがあります。 詳細については、[Prysmドキュメント](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/)を参照してください。 ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-223/index.md index 2b666764336..499ea17ea2e 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -`RecipientContract` がERC-223トークンを受け取ると、そのコントラクトはトークントランザクションの `_data` パラメータにエンコードされた関数を実行します。これはイーサのトランザクションが関数呼び出しをトランザクションの `data` としてエンコードするのと同じです。 詳細については [dataフィールド](https://ethereum.org/en/developers/docs/transactions/#the-data-field) を参照してください。 +`RecipientContract` がERC-223トークンを受け取ると、そのコントラクトはトークントランザクションの `_data` パラメータにエンコードされた関数を実行します。これはイーサのトランザクションが関数呼び出しをトランザクションの `data` としてエンコードするのと同じです。 詳細については [dataフィールド](/developers/docs/transactions/#the-data-field) を参照してください。 上記の例では、ERC-223トークンは `transfer(address,uin256,bytes calldata _data)` 関数を使用して `RecipientContract` のアドレスに転送される必要があります。 dataパラメータが `0xc2985578` ( `foo()` 関数のシグネチャ)である場合、トークンデポジットが完了した後にfoo()関数が呼び出され、Foo()イベントが発行されます。 diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md new file mode 100644 index 00000000000..3045cc8bd47 --- /dev/null +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md @@ -0,0 +1,45 @@ +--- +title: ERC-777 トークン規格 +description: ERC-777について学びましょう。フック機能を備えた改良型の代替可能トークン規格ですが、セキュリティの観点からはERC-20の使用が推奨されています。 +lang: ja +--- + +## 警告 {#warning} + +**ERC-777は[様々な形式の攻撃に対して脆弱](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620)であるため、正しく実装することが困難です。代わりに[ERC-20](/developers/docs/standards/tokens/erc-20/)の使用を推奨します。** このページは歴史的なアーカイブとして残されています。 + +## はじめに {#introduction} + +ERC-777は、既存の[ERC-20](/developers/docs/standards/tokens/erc-20/)規格を改善した代替可能トークン規格です。 + +## 前提条件 {#prerequisites} + +このページをより良く理解するために、まず[ERC-20](/developers/docs/standards/tokens/erc-20/)について読むことをお勧めします。 + +## ERC-777はERC-20に対してどのような改善を提案していますか? {#-erc-777-vs-erc-20} + +ERC-777はERC-20に対して以下の改善を提供します。 + +### フック {#hooks} + +フックは、スマートコントラクトのコードで記述された関数です。フックは、コントラクトを通じてトークンが送信または受信されるときに呼び出されます。これにより、スマートコントラクトは入出金されるトークンに反応することができます。 + +フックは[ERC-1820](https://eips.ethereum.org/EIPS/eip-1820)規格を使用して登録および検出されます。 + +#### フックが優れている理由 {#why-are-hooks-great} + +1. フックを使用すると、トークンをコントラクトに送信し、1回のトランザクションでコントラクトに通知することができます。一方、[ERC-20](https://eips.ethereum.org/EIPS/eip-20)では、これを実現するために二重呼び出し(`approve`/`transferFrom`)が必要です。 +2. フックを登録していないコントラクトは、ERC-777と互換性がありません。受信コントラクトがフックを登録していない場合、送信コントラクトはトランザクションを中止します。これにより、非ERC-777スマートコントラクトへの誤送信を防ぐことができます。 +3. フックはトランザクションを拒否することができます。 + +### 小数点 {#decimals} + +この規格は、ERC-20で生じた`decimals`に関する混乱も解決します。この明確化により、開発者の体験が向上します。 + +### ERC-20との後方互換性 {#backwards-compatibility-with-erc-20} + +ERC-777コントラクトは、ERC-20コントラクトであるかのように操作することができます。 + +## 参考文献 {#further-reading} + +[EIP-777:トークン規格](https://eips.ethereum.org/EIPS/eip-777) diff --git a/public/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/keys/index.md index 488f647241a..aa9c8249c3b 100644 --- a/public/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/public/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -56,7 +56,7 @@ Separar as chaves de validação das chaves da conta Ethereum permite que vário ![esquema da chave de validação](validator-key-schematic.png) -**Nota**: Sair das funções de staking e sacar o saldo de um validador atualmente requer a assinatura de uma [mensagem de saída voluntária (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) com a chave do validador. No entanto, o [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) é uma proposta que permitirá que um usuário acione a saída de um validador e saque seu saldo assinando mensagens de saída com a chave de saque no futuro. Isso reduzirá as suposições de confiança ao permitir que os participantes que delegam ETH a [provedores de staking como serviço](https://ethereum.org/en/staking/saas/#what-is-staking-as-a-service) mantenham o controle de seus fundos. +**Nota**: Sair das funções de staking e sacar o saldo de um validador atualmente requer a assinatura de uma [mensagem de saída voluntária (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) com a chave do validador. No entanto, o [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) é uma proposta que permitirá que um usuário acione a saída de um validador e saque seu saldo assinando mensagens de saída com a chave de saque no futuro. Isso reduzirá as suposições de confiança ao permitir que os participantes que delegam ETH a [provedores de staking como serviço](/staking/saas/#what-is-staking-as-a-service) mantenham o controle de seus fundos. ## Obtendo chaves de uma frase semente {#deriving-keys-from-seed} diff --git a/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 519db935633..bfc38a3162f 100644 --- a/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ A estrutura de dados do Ethereum é uma 'Merkle-Patricia Trie modificada', assim Uma Merkle-Patricia é determinística e criptograficamente verificável: a única maneira de gerar uma raiz de estado é computando-a a partir de cada parte individual do estado, e dois estados que são idênticos podem ser facilmente provados comparando o hash raiz e os hashes que levaram a ele (_uma prova de Merkle_). Por outro lado, não há como criar dois estados diferentes com o mesmo hash raiz, e qualquer tentativa de modificar o estado com valores diferentes resultará em um hash raiz de estado diferente. Teoricamente, essa estrutura fornece o "Santo Graal" da eficiência `O(log(n))` para inserções, pesquisas e exclusões. -Em um futuro próximo, o Ethereum planeja migrar para uma estrutura de [Verkle Tree](https://ethereum.org/en/roadmap/verkle-trees), o que abrirá muitas novas possibilidades para futuras melhorias de protocolo. +Em um futuro próximo, o Ethereum planeja migrar para uma estrutura de [Verkle Tree](/roadmap/verkle-trees), o que abrirá muitas novas possibilidades para futuras melhorias de protocolo. ## Pré-requisitos {#prerequisites} diff --git a/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md index 4f791c966cc..6afc3cddb5d 100644 --- a/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Endereçar a diversidade do cliente requer mais do que usuários individuais par [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) Os usuários técnicos podem ajudar a acelerar esse processo escrevendo mais tutoriais e documentações para clientes minoritários e encorajando seus pares operacionais de nó a migrar para longe dos clientes dominantes. Guias para mudar para um cliente de consenso minoritário estão disponíveis em [clientdiversity.org](https://clientdiversity.org/). diff --git a/public/content/translations/pt-br/developers/docs/nodes-and-clients/index.md b/public/content/translations/pt-br/developers/docs/nodes-and-clients/index.md index bd77053b181..bb37d31e739 100644 --- a/public/content/translations/pt-br/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/pt-br/developers/docs/nodes-and-clients/index.md @@ -195,7 +195,7 @@ Existem vários clientes de consenso (anteriormente conhecidos como clientes “ | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten e mais | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten e mais | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten e mais | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten e mais | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten e mais | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten e mais | ### Lighthouse {#lighthouse} @@ -220,7 +220,7 @@ Saiba mais na [documentação da Nimbus](https://nimbus.guide/) O Prysm é um cliente de consenso de código aberto completo, escrito em Go sob a licença GPL-3.0. Ele apresenta uma interface de usuário de aplicativo Web opcional e prioriza a experiência do usuário, a documentação e a configurabilidade para usuários institucionais e particulares. -Visite a [documentação do Prysm](https://docs.prylabs.network/docs/getting-started/) para saber mais. +Visite a [documentação do Prysm](https://prysm.offchainlabs.com/docs/) para saber mais. ### Teku {#teku} diff --git a/public/content/translations/pt-br/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/pt-br/developers/docs/nodes-and-clients/run-a-node/index.md index d94914f6936..21173da785f 100644 --- a/public/content/translations/pt-br/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/pt-br/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Executando o Prysm -O Prysm vem com um script que permite uma instalação automática fácil. Os detalhes podem ser encontrados na [documentação do Prysm](https://docs.prylabs.network/docs/install/install-with-script). +O Prysm vem com um script que permite uma instalação automática fácil. Os detalhes podem ser encontrados na [documentação do Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/ro/developers/docs/nodes-and-clients/index.md b/public/content/translations/ro/developers/docs/nodes-and-clients/index.md index 19c2da3971f..7e22d2ed9be 100644 --- a/public/content/translations/ro/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/ro/developers/docs/nodes-and-clients/index.md @@ -249,7 +249,7 @@ There are multiple consensus clients (previously known as 'Eth2' clients) to sup | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Lanţul Beacon, Goerli | | [Lighthouse](https://lighthouse-book.sigmaprime.io/) | Rust | Linux, Windows, macOS | Lanţul Beacon, Goerli, Pyrmont | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Lanţul Beacon, Goerli | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Lanţul Beacon, Gnosis, Goerli, Pyrmont | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Lanţul Beacon, Gnosis, Goerli, Pyrmont | ## Hardware {#hardware} diff --git a/public/content/translations/ru/developers/docs/nodes-and-clients/index.md b/public/content/translations/ru/developers/docs/nodes-and-clients/index.md index 2d53a314d21..31b45bfb199 100644 --- a/public/content/translations/ru/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/ru/developers/docs/nodes-and-clients/index.md @@ -249,7 +249,7 @@ Erigon (в прошлом — Turbo-Geth) представляет собой о | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Goerli | | [Lighthouse](https://lighthouse-book.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Pyrmont | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Goerli | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont | ## Аппаратное обеспечение {#hardware} diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 3a157782b42..89e6386b129 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ Ethereum'un veri yapısı PATRICIA'nın (Alfasayısal Kodlanmış Bilgileri Alma Merkle-Patricia trie, kesin ve kriptografik olarak doğrulanabilirdir: Bir durum kökü üretmenin tek yolu, onu durumun her bir parçasından hesaplamaktır ve aynı olan iki durum, kök karması ve ona yol açan karmalar karşılaştırılarak kolayca kanıtlanabilir (_bir Merkle ispatı_). Tam tersinden bakacak olursak, aynı kök karmasına sahip iki farklı durum oluşturmak mümkün değildir ve farklı değerlere sahip durumları değiştirme girişimi farklı bir durum kök karmasına yol açar. Teorik olarak bu yapı, eklemeler, aramalar ve silmeler için `O(log(n))` verimliliğinin "kutsal kasesini" sağlar. -Ethereum, yakın gelecekte olası protokol geliştirmeleri açısından birçok fırsat yaratacak olan [Verkle Ağacı](https://ethereum.org/en/roadmap/verkle-trees) yapısına geçmeyi düşünüyor. +Ethereum, yakın gelecekte olası protokol geliştirmeleri açısından birçok fırsat yaratacak olan [Verkle Ağacı](/roadmap/verkle-trees) yapısına geçmeyi düşünüyor. ## Ön koşullar {#prerequisites} diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md index 24043300d5d..821d91a463a 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ Fikir birliği katmanı için güncel istemci çeşitliliği verileri artık [cl [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) Teknik kullanıcılar azınlık istemcileri için daha fazla öğretici ve doküman yazarak ve düğüm yöneten yakınlarını baskın istemcilerden ayrılmaya yönlendirerek bu süreci hızlandırmaya yardımcı olabilirler. Bir azınlık fikir birliği katmanına geçiş için kılavuzlar [clientdiversity.org](https://clientdiversity.org/) adresinde mevcuttur. diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/index.md index d55c920cf1a..01ad9f28ece 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/index.md @@ -195,7 +195,7 @@ EthereumJS Yürütüm İstemcisi (EthereumJS), TypeScript'te yazılmıştır ve | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten ve daha fazlası | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | İşaret Zinciri, Goerli, Sepolia, Ropsten ve daha fazlası | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | İşaret Zinciri, Goerli, Sepolia, Ropsten ve daha fazlası | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Başla | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten ve daha fazlası | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Başla | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten ve daha fazlası | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | İşaret Zinciri, Gnosis, Goerli, Sepolia, Ropsten ve daha fazlası | ### Lighthouse {#lighthouse} @@ -220,7 +220,7 @@ Nimbus, Nim ile yazılmış olan, Apache-2.0 lisansı altında bir fikir birliğ Prysm, Go ile yazılmış, GPL-3.0 lisansının altında tam teşekküllü açık kaynak bir fikir birliği istemcisidir. İsteğe bağlı bir web uygulaması arayüzüne sahiptir ve kullanıcı deneyimine, dokümanlara ve hem evdeki hisseleme hem de kurumsal kullanıcılar için yapılandırılabilirliğe öncelik verir. -Daha fazlasını öğrenmek için [Prysm dokümanlarını](https://docs.prylabs.network/docs/getting-started/) ziyaret edin. +Daha fazlasını öğrenmek için [Prysm dokümanlarını](https://prysm.offchainlabs.com/docs/) ziyaret edin. ### Teku {#teku} diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md index 5f31c03c0ee..598a9477f91 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### Prysm'i Çalıştırmak -Prysm kolay otomatik kurulum sağlayan bir betikle gelir. Detaylar [Prysm dokümanlarında](https://docs.prylabs.network/docs/install/install-with-script) bulunabilir. +Prysm kolay otomatik kurulum sağlayan bir betikle gelir. Detaylar [Prysm dokümanlarında](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) bulunabilir. ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md index dfd24a232f2..e8c87d7c282 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -`RecipientContract` bir ERC-223 jetonu aldığında sözleşme, tıpkı Ether işlemlerinin fonksiyon çağrılarını işlem `data` olarak kodlaması gibi jeton işleminin `_data` parametresi olarak kodlanan bir fonksiyonu yürütür. Daha fazla bilgi için [veri alanını](https://ethereum.org/en/developers/docs/transactions/#the-data-field) okuyun. +`RecipientContract` bir ERC-223 jetonu aldığında sözleşme, tıpkı Ether işlemlerinin fonksiyon çağrılarını işlem `data` olarak kodlaması gibi jeton işleminin `_data` parametresi olarak kodlanan bir fonksiyonu yürütür. Daha fazla bilgi için [veri alanını](/developers/docs/transactions/#the-data-field) okuyun. Yukarıdaki örnekte, bir ERC-223 jetonunun `transfer(address,uin256,bytes calldata _data)` fonksiyonu ile `RecipientContract` adresine transferi gerekmektedir. Eğer veri parametresi `0xc2985578` (`foo()` fonksiyonunun imzası) ise, jeton depozitosu alındıktan sonra foo() fonksiyonu çağrılır ve Foo() olayı tetiklenir. diff --git a/public/content/translations/zh-tw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/zh-tw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index a1d46f18502..315c0fbb414 100644 --- a/public/content/translations/zh-tw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/zh-tw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ sidebarDepth: 2 默克爾帕特里夏樹是確定性的,並且可以透過加密方式驗證:生成狀態根的唯一方式是從每個單獨的狀態進行計算,且兩個相同的狀態可以透過比較根雜湊和其父雜湊(_默克爾證明_)來簡單地證明相同。 相反,無法用同一個根雜湊建立兩個不同的狀態,任何用不同值修改狀態的嘗試都會導致不同的狀態根雜湊。 從理論上講,這種結構為置入、查找和刪除提供了完美的 `O(log(n))` 效率。 -在不久的將來,以太坊計劃遷移到[沃克爾樹](https://ethereum.org/en/roadmap/verkle-trees)結構,這將為未來的協定改進帶來更多新的可能性。 +在不久的將來,以太坊計劃遷移到[沃克爾樹](/roadmap/verkle-trees)結構,這將為未來的協定改進帶來更多新的可能性。 ## 前置要求 {#prerequisites} diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md index f9ac4637f4f..47f2db1d5bb 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md index 0a6f92383cb..558b1859097 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ EthereumJS 執行用戶端 (EthereumJS) 是以 TypeScript 編寫,並由多個 | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | 信標鏈、Goerli、Pyrmont、Sepolia、Ropsten 等 | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | | [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | 開始 | Linux, Windows, macOS | 信標鏈、Gnosis、Goerli、Pyrmont、Sepolia、Ropsten 等 | +| [Prysm](https://prysm.offchainlabs.com/docs/) | 開始 | Linux, Windows, macOS | 信標鏈、Gnosis、Goerli、Pyrmont、Sepolia、Ropsten 等 | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux、Windows、macOS | 信標鏈、Gnosis、Goerli、Sepolia、Ropsten 等 | | [Grandine](https://docs.grandine.io/)(測試版) | Rust | Linux、Windows、macOS | 信標鏈、Goerli、Sepolia 等 | @@ -222,7 +222,7 @@ Nimbus 是以 Nim 開發的共識用戶端實作,以 Apache-2.0 授權。 它 Prysm 是功能完整且開源的共識用戶端,以 Go 語言開發並以 GPL-3.0 授權。 它有可選的網頁應用用戶介面,並將自行質押者及機構使用者的使用者體驗、文檔及設定檔放在第一位。 -閱讀 [Prysm 文檔](https://docs.prylabs.network/docs/getting-started/)以獲得更多資訊。 +閱讀 [Prysm 文檔](https://prysm.offchainlabs.com/docs/)以獲得更多資訊。 ### Teku {#teku} diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md index 6fb5d450cbc..0c996e60cad 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### 運行 Prysm -Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https://docs.prylabs.network/docs/install/install-with-script)。 +Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/)。 ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 8fb373ff9e2..fc7e8507169 100644 --- a/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -11,7 +11,7 @@ sidebarDepth: 2 默克尔帕特里夏字典树是确定性的并可通过密码学验证:生成状态根的唯一方式是从每个单独的状态进行计算,且两个相同的状态可以通过比较根哈希和父节点哈希(_默克尔证明_)而轻松证明相同。 相反,也无法用同一根哈希创建两个不同的状态,任何用不同值修改状态的尝试都会产生不同的状态根哈希。 理论上,这种结构在插入、查找和删除操作上的效率达到了超乎寻常的 `O(log(n))`。 -在不久的将来,以太坊计划迁移到[沃克尔树](https://ethereum.org/en/roadmap/verkle-trees)结构,这将为未来的协议改进开创更多新的可能性。 +在不久的将来,以太坊计划迁移到[沃克尔树](/roadmap/verkle-trees)结构,这将为未来的协议改进开创更多新的可能性。 ## 前提条件 {#prerequisites} diff --git a/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md index 49d6bc2c22c..899b267a6c6 100644 --- a/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md @@ -77,7 +77,7 @@ sidebarDepth: 2 [Lodestar](https://github.com/ChainSafe/lodestar) -[Prysm](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://prysm.offchainlabs.com/docs/) [Grandine](https://docs.grandine.io/) diff --git a/public/content/translations/zh/developers/docs/nodes-and-clients/index.md b/public/content/translations/zh/developers/docs/nodes-and-clients/index.md index e160e8e0687..06c8f11b89d 100644 --- a/public/content/translations/zh/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/zh/developers/docs/nodes-and-clients/index.md @@ -196,7 +196,7 @@ EthereumJS 执行客户端 (EthereumJS) 是用 TypeScript 编写的,由许多 | [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux、Windows、macOS | 信标链、Holesky、Pyrmont、Sepolia 等 | | [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux、Windows、macOS | 信标链、Holesky、Sepolia 等 | | [Nimbus](https://nimbus.team/) | Nim | Linux、Windows、macOS | 信标链、Holesky、Sepolia 等 | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux、Windows、macOS | 信标链、Gnosis、Holesky、Pyrmont、Sepolia 等 | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux、Windows、macOS | 信标链、Gnosis、Holesky、Pyrmont、Sepolia 等 | | [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux、Windows、macOS | 信标链、Gnosis、Holesky、Sepolia 等 | | [Grandine](https://docs.grandine.io/) | Rust语言 | Linux、Windows、macOS | 信标链、Holesky、Sepolia 等 | @@ -222,7 +222,7 @@ Nimbus 是一种共识客户端实现,它用 Nim 语言编写,并依照 Apac Prysm 是一种功能齐全的开源共识客户端,它用 Go 语言编写,并依照 GPL-3.0 获得许可。 它具有可选的 Web 应用程序用户界面,并将单独质押人和机构用户的用户体验、相关文档和可配置性放在首位。 -访问 [Prysm 相关文档](https://docs.prylabs.network/docs/getting-started/)以了解更多信息。 +访问 [Prysm 相关文档](https://prysm.offchainlabs.com/docs/)以了解更多信息。 ### Teku {#teku} diff --git a/public/content/translations/zh/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/zh/developers/docs/nodes-and-clients/run-a-node/index.md index 3aab36e1424..e03f474f93a 100644 --- a/public/content/translations/zh/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/zh/developers/docs/nodes-and-clients/run-a-node/index.md @@ -365,7 +365,7 @@ nimbus_beacon_node \ ##### 运行 Prysm -Prysm 带有脚本,可实现轻松自动安装。 详细信息可以在 [Prysm 相关文档](https://docs.prylabs.network/docs/install/install-with-script)中找到。 +Prysm 带有脚本,可实现轻松自动安装。 详细信息可以在 [Prysm 相关文档](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/)中找到。 ```sh ./prysm.sh beacon-chain \ diff --git a/public/content/translations/zh/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/zh/developers/docs/standards/tokens/erc-223/index.md index 15dc96f9d52..aecb499aa5d 100644 --- a/public/content/translations/zh/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/zh/developers/docs/standards/tokens/erc-223/index.md @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -当 `RecipientContract` 收到 ERC-223 代币时,合约会执行一个编码为代币交易参数 `_data` 的函数,这与以太币交易将函数调用编码为交易 `data` 相同。 阅读[数据字段](https://ethereum.org/en/developers/docs/transactions/#the-data-field)以获取更多信息。 +当 `RecipientContract` 收到 ERC-223 代币时,合约会执行一个编码为代币交易参数 `_data` 的函数,这与以太币交易将函数调用编码为交易 `data` 相同。 阅读[数据字段](/developers/docs/transactions/#the-data-field)以获取更多信息。 在上述示例中,ERC-223 代币必须通过 `transfer(address,uin256,bytes calldata _data)` 函数转移到 `RecipientContract` 的地址。 如果数据参数将为 `0xc2985578`(`foo()` 函数的签名),那么在收到代币存款之后,将会调用 foo() 函数并触发事件 Foo()。 diff --git a/public/content/translations/zh/whitepaper/index.md b/public/content/translations/zh/whitepaper/index.md index c79d3c3210b..3a0fd5aa430 100644 --- a/public/content/translations/zh/whitepaper/index.md +++ b/public/content/translations/zh/whitepaper/index.md @@ -86,7 +86,7 @@ APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR 2. 检查该区块的时间戳是否大于上一个区块 [fn2](注释编号)的时间戳并且在将来 2 小时以内 3. 检查区块上的工作量证明是否有效。 4. 令前一个区块末尾的态为 `S[0]`。 -5. 假设 `TX` 是该区块的交易列表,其中包含 `n` 个交易。 对于 `0...n-1` 中的所有 `i`,如果有任何应用程序返回错误,退出并返回 false,请设置 `S[i+1] = APPLY(S[i],TX[i])`。 +5. 假设 `TX` 是该区块的交易列表,其中包含 `n` 个交易。 对于 `0...n-1` 中的每个数字 `i`,依次执行 `S[i+1] = APPLY(S[i],TX[i])`。 如果有任何一次对 `APPLY` 的调用返回了错误,退出并返回 false。 6. 返回 true,并将 `S[n]` 登记为该区块末尾的状态。 本质上,区块中的每笔交易都必须提供一个有效的状态转换,从交易执行前的规范状态转换到某个新状态。 注意,状态并未编码到区块。它纯粹只是校验节点记住的抽象概念,只能被任意区块从创世状态开始,按顺序加上每一个区块的每一笔交易,(安全地)计算出当前状态。 另外,需要注意矿工将交易收录进区块的顺序。如果一个区块中有A、B两笔交易,B花费的是A创建的UTXO,如果A在B之前,这个区块是有效的,否则,这个区块无效。 diff --git a/public/content/what-are-apps/index.md b/public/content/what-are-apps/index.md index ab53ac950ed..8283662aac7 100644 --- a/public/content/what-are-apps/index.md +++ b/public/content/what-are-apps/index.md @@ -29,7 +29,7 @@ Ethereum applications have their logic running on the Ethereum blockchain instea ## Why does this matter {#why-does-this-matter} -Ethereum apps can do stuff that just isn’t possible with traditional apps. Like lend money to a complete stranger with a guarantee that you’ll get your money back, plus interest. Without paying a “trustworthy” intermediary, like a lawyer, to handle the transaction. +Ethereum apps can do stuff that just isn’t possible with traditional apps. Like lend money to a complete stranger with a guarantee that you’ll get your money back, plus interest. Without paying a “trustworthy” intermediary, like a lawyer, to handle the transaction. There are apps for everything: gaming, finance, work, messaging, storage and more. With most apps you aren’t subjected to ads or limited by restricted access. @@ -73,7 +73,7 @@ When apps are all built on Ethereum, they are all compatible. A token for one ap -

Some applications do let you trade or buy crypto tokens, but not all apps are for that. If you are looking to buy your first tokens visit [Get ETH](/get-eth).

+

Some applications do let you trade or buy crypto tokens, but not all apps are for that. If you are looking to buy your first tokens, visit [Get ETH](/get-eth).

diff --git a/public/images/wallets/burner.png b/public/images/wallets/burner.png new file mode 100644 index 00000000000..af0bed1b82e Binary files /dev/null and b/public/images/wallets/burner.png differ diff --git a/public/images/wallets/infinity_wallet.png b/public/images/wallets/infinity_wallet.png deleted file mode 100644 index 5cebdf8744d..00000000000 Binary files a/public/images/wallets/infinity_wallet.png and /dev/null differ diff --git a/src/components/FindWalletProductTable/hooks/useWalletFilters.tsx b/src/components/FindWalletProductTable/hooks/useWalletFilters.tsx index f3edd652317..d589117c988 100644 --- a/src/components/FindWalletProductTable/hooks/useWalletFilters.tsx +++ b/src/components/FindWalletProductTable/hooks/useWalletFilters.tsx @@ -5,6 +5,8 @@ import { FilterOption } from "@/lib/types" import FindWalletLanguageSelectInput from "@/components/FindWalletProductTable/FindWalletLanguageSelectInput" import Layer2SelectInput from "@/components/FindWalletProductTable/Layer2SelectInput" +// TODO: Re-enable when at least one privacy-enabled wallet has been listed +// import PrivacyIcon from "@/components/icons/privacy.svg" import { BrowserIcon, BuyCryptoIcon, @@ -876,6 +878,34 @@ export const useWalletFilters = (): FilterOption[] => { }, options: [], }, + // TODO: Re-enable when at least one privacy-enabled wallet has been listed + // { + // filterKey: "privacy", + // filterLabel: t("page-find-wallet-privacy"), + // description: t("page-find-wallet-privacy-desc"), + // inputState: false, + // input: (filterIndex, itemIndex, inputState, updateFilterState) => { + // return ( + // { + // trackCustomEvent({ + // eventCategory: "WalletFilterSidebar", + // eventAction: `${t("page-find-wallet-privacy")}`, + // eventName: `privacy ${newInputState}`, + // }) + // updateFilterState(filterIndex, itemIndex, newInputState) + // }} + // /> + // ) + // }, + // options: [], + // }, ], }, { diff --git a/src/components/icons/Icons.stories.tsx b/src/components/icons/Icons.stories.tsx index fbedec3c63a..7164fd3f251 100644 --- a/src/components/icons/Icons.stories.tsx +++ b/src/components/icons/Icons.stories.tsx @@ -52,6 +52,7 @@ import { RockXGlyphIcon, SelfCustodyIcon, SenseiNodeGlyphIcon, + SerenitaGlyphIcon, SquidGlyphIcon, StafiGlyphIcon, StakefishGlyphIcon, @@ -158,6 +159,7 @@ const iconsDefinitions = [ { label: "RPCImportingIcon", Icon: RPCImportingIcon }, { label: "SelfCustodyIcon", Icon: SelfCustodyIcon }, { label: "SenseiNodeGlyphIcon", Icon: SenseiNodeGlyphIcon }, + { label: "SerenitaGlyphIcon", Icon: SerenitaGlyphIcon }, { label: "SocialRecoverIcon", Icon: SocialRecoverIcon }, { label: "SovereigntyGlyphIcon", Icon: SovereigntyGlyphIcon }, { label: "SquidGlyphIcon", Icon: SquidGlyphIcon }, diff --git a/src/components/icons/staking/index.ts b/src/components/icons/staking/index.ts index 04d78418953..b36f2311e18 100644 --- a/src/components/icons/staking/index.ts +++ b/src/components/icons/staking/index.ts @@ -29,6 +29,7 @@ import RockXGlyphIcon from "./rock-x-glyph.svg" import RocketPoolGlyphIcon from "./rocket-pool-glyph.svg" import SelfCustodyIcon from "./self-custody.svg" import SenseiNodeGlyphIcon from "./sensei-node-glyph.svg" +import SerenitaGlyphIcon from "./serenita-glyph.svg" import SquidGlyphIcon from "./squid-glyph.svg" import StafiGlyphIcon from "./stafi-glyph.svg" import StakefishGlyphIcon from "./stakefish-glyph.svg" @@ -77,6 +78,7 @@ export { RockXGlyphIcon, SelfCustodyIcon, SenseiNodeGlyphIcon, + SerenitaGlyphIcon, SquidGlyphIcon, StafiGlyphIcon, StakefishGlyphIcon, diff --git a/src/components/icons/staking/serenita-glyph.svg b/src/components/icons/staking/serenita-glyph.svg new file mode 100644 index 00000000000..870814857ef --- /dev/null +++ b/src/components/icons/staking/serenita-glyph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/data/community-events.json b/src/data/community-events.json index f9c1835e3fa..17072c1dba1 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -1,78 +1,4 @@ [ - { - "title": "ETHNigeria 2025", - "startDate": "2025-08-08", - "endDate": "2025-08-09", - "href": "https://ethereumnigeria.org", - "location": "Lagos, Nigeria", - "description": "", - "imageUrl": "" - }, - { - "title": "Pragma New York", - "startDate": "2025-08-14", - "endDate": "2025-08-14", - "href": "https://ethglobal.com/events/pragma-newyork2025", - "location": "New York, NYC, USA", - "description": "Bringing developers onchain to build the future of the internet.", - "imageUrl": "https://ethglobal.com/og.png", - "hackathon": true - }, - { - "title": "SBC (The Science of Blockchain Conference 2025)", - "startDate": "2025-08-04", - "endDate": "2025-08-06", - "href": "https://www.sbc-conference.com/2025/", - "location": "Berkeley, USA", - "description": "The conference focuses on technical innovations in the blockchain ecosystem, and brings together researchers and practioners working in the space. ", - "imageUrl": "" - }, - { - "title": "ETHGlobal New York", - "startDate": "2025-08-15", - "endDate": "2025-08-17", - "href": "https://ethglobal.com/events/newyork2025", - "location": "New York, NYC, USA", - "description": "Bringing developers onchain to build the future of the internet.", - "imageUrl": "https://ethglobal.com/og.png", - "hackathon": true - }, - { - "title": "ProdFest Jos", - "startDate": "2025-08-19", - "endDate": "2025-08-23", - "href": "https://prodfest.blockfuselabs.com/ ", - "location": "Jos, NGA", - "description": "Spotlighting the finest of African Innovation at the Web3 Jos Community Conference, Products Showcase and Hackathon", - "imageUrl": "https://drive.google.com/file/d/1JZlK8HFj0wB7woBlfvdJJ8_mpQUsGmCA/view?usp=sharing" - }, - { - "title": "Web3 Lagos Conference", - "startDate": "2025-08-28", - "endDate": "2025-08-30", - "href": "https://event.web3bridge.com ", - "location": "Lagos, NGA", - "description": "We are Building a Sustainable web3 community in Africa", - "imageUrl": "https://event.web3bridge.com/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Flekki.d4f13308.png&w=1920&q=75" - }, - { - "title": "ETHVietnam 2025", - "startDate": "2025-08-09", - "endDate": "2025-08-10", - "href": "https://eth-vietnam.com", - "location": "HCMC, VNM", - "description": "Vietnam Web3 Hub for Ethereum and Blockchain enthusiasts, designers and developers.", - "imageUrl": "http://static1.squarespace.com/static/629856e64f44db3799f8e3f6/t/6761041c2c3aab15bfbb0ec1/1734411300379/Group+2612.png?format=1500w" - }, - { - "title": "ETH Enugu '25", - "startDate": "2025-08-04", - "endDate": "2025-08-16", - "href": "https://ethenugu.xyz", - "location": "Enugu, NG", - "description": "Nigeria's first Builder Residency & Pop-up City + South-East Nigeria's First Ethereum Conference", - "imageUrl": "https://ethenugu.xyz/favicon.ico" - }, { "title": "ETHWarsaw", "startDate": "2025-09-04", diff --git a/src/data/community-meetups.json b/src/data/community-meetups.json index f1e56f329c7..ac1150bfb2a 100644 --- a/src/data/community-meetups.json +++ b/src/data/community-meetups.json @@ -65,31 +65,31 @@ "location": "Bogotá", "link": "https://www.meetup.com/ethereum-bogota" }, - { + { "title": "Ethereum Eje Cafetero", "emoji": ":colombia:", "location": "Armenia, Pereira, Manizales", "link": "https://www.meetup.com/ethereum-eje-cafetero" }, - { + { "title": "Ethereum Medellin", "emoji": ":colombia:", "location": "Medellín", "link": "https://www.meetup.com/ethereum-medellin" }, - { + { "title": "Ethereum Caribe", "emoji": ":colombia:", "location": "Barranquilla", "link": "https://www.meetup.com/ethereum-caribe" }, - { + { "title": "Ethereum Cali", "emoji": ":colombia:", "location": "Cali", "link": "https://www.meetup.com/ethereumcali" }, - { + { "title": "Ethereum Arauca", "emoji": ":colombia:", "location": "Saravena", @@ -568,11 +568,17 @@ "emoji": ":brazil:", "location": "São Paulo", "link": "https://lu.ma/user/erc55" - }, + }, { "title": "ETHBelgium ", "emoji": ":belgium:", "location": "Belgium", "link": "https://lu.ma/ethbelgium" - } + }, + { + "title": "ETHBhopal", + "emoji": ":india:", + "location": "Bhopal", + "link": "https://x.com/ETHBhopal" + } ] diff --git a/src/data/crowdin/file-ids.json b/src/data/crowdin/file-ids.json index c0ce1dca93d..d3bff51e9fa 100644 --- a/src/data/crowdin/file-ids.json +++ b/src/data/crowdin/file-ids.json @@ -7,6 +7,10 @@ "id": 7803, "path": "/roadmap/index.md" }, + { + "id": 13426, + "path": "/roadmap/fusaka/index.md" + }, { "id": 6161, "path": "/community/events/index.md" @@ -279,6 +283,10 @@ "id": 12036, "path": "/community/research/index.md" }, + { + "id": 13436, + "path": "/community/events/organizing/index.md" + }, { "id": 2926, "path": "/roadmap/merge/index.md" @@ -339,6 +347,10 @@ "id": 7935, "path": "/contributing/design/index.md" }, + { + "id": 13440, + "path": "/contributing/translation-program/playbook/index.md" + }, { "id": 6568, "path": "/developers/docs/networking-layer/index.md" @@ -397,7 +409,7 @@ }, { "id": 12754, - "path": "/index.md" + "path": "/what-are-apps/index.md" }, { "id": 2962, diff --git a/src/data/developer-docs-links.yaml b/src/data/developer-docs-links.yaml index cb0d5b5ccf5..0d17b422954 100644 --- a/src/data/developer-docs-links.yaml +++ b/src/data/developer-docs-links.yaml @@ -121,6 +121,8 @@ href: /developers/docs/smart-contracts/compiling/ - id: docs-nav-deploying-smart-contracts href: /developers/docs/smart-contracts/deploying/ + - id: docs-nav-naming-smart-contracts + href: /developers/docs/smart-contracts/naming/ - id: docs-nav-verifying-smart-contracts href: /developers/docs/smart-contracts/verifying/ - id: docs-nav-upgrading-smart-contracts diff --git a/src/data/published.json b/src/data/published.json index 3ad50ee42bc..3db22ce92f5 100644 --- a/src/data/published.json +++ b/src/data/published.json @@ -1 +1 @@ -{"date":"2025-09-04"} +{"date":"2025-09-10"} diff --git a/src/data/staking-products.json b/src/data/staking-products.json index a041d4e0f69..c8ba855a540 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -810,6 +810,65 @@ "eventAction": "Clicked", "eventName": "Clicked ConsensysStaking go to link" } + }, + { + "name": "Serenita", + "imageName": "Serenita", + "hue": 231, + "launchDate": "2023-11-28", + "url": "https://serenita.io", + "audits": [ + { + "name": "2023-05-Halborn", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2023-05-Halborn.pdf" + }, + { + "name": "2023-08-Halborn", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2023-08-Halborn.pdf" + }, + { + "name": "2023-08-Sigma-Prime", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2023-08-Sigma-Prime.pdf" + }, + { + "name": "2024-03-Consensys-Diligence", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2024-03-Consensys-Diligence.pdf" + }, + { + "name": "2024-06-Sigma-Prime", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2024-06-Sigma-Prime.pdf" + }, + { + "name": "2024-09-Sigma-Prime", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2024-09-Sigma-Prime.pdf" + }, + { + "name": "2025-09-ABDK", + "url": "https://github.com/stakewise/v3-core/tree/main/audits/2025-09-ABDK.pdf" + } + ], + "minEth": 32, + "additionalStake": null, + "additionalStakeUnit": null, + "monthlyFee": 5, + "monthlyFeeUnit": "%", + "isFoss": true, + "hasBugBounty": true, + "isTrustless": true, + "isPermissionless": true, + "pctMajorityExecutionClient": 0, + "pctMajorityConsensusClient": 0, + "isSelfCustody": true, + "platforms": ["Browser"], + "ui": ["GUI"], + "socials": { + "twitter": "https://x.com/SerenitaIO" + }, + "matomo": { + "eventCategory": "StakingProductCard", + "eventAction": "Clicked", + "eventName": "Clicked Serenita go to link" + } } ], "pools": [ @@ -1212,4 +1271,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/data/translationProgress.json b/src/data/translationProgress.json index a38994418d5..8cd43c1e1e5 100644 --- a/src/data/translationProgress.json +++ b/src/data/translationProgress.json @@ -2,687 +2,701 @@ { "languageId": "af", "words": { - "approved": 1520, - "total": 296988 + "approved": 1514, + "total": 312825 } }, { "languageId": "am", "words": { - "approved": 9574, - "total": 296988 + "approved": 7541, + "total": 312825 } }, { "languageId": "ar", "words": { - "approved": 34883, - "total": 296988 + "approved": 32801, + "total": 312825 } }, { "languageId": "az", "words": { - "approved": 19663, - "total": 296988 + "approved": 18093, + "total": 312825 } }, { "languageId": "be", "words": { - "approved": 33470, - "total": 296988 + "approved": 31499, + "total": 312825 + } + }, + { + "languageId": "bem", + "words": { + "approved": 0, + "total": 312887 } }, { "languageId": "bg", "words": { - "approved": 16964, - "total": 296988 + "approved": 14975, + "total": 312825 } }, { "languageId": "bi", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "bn", "words": { - "approved": 27022, - "total": 296988 + "approved": 25352, + "total": 312825 } }, { "languageId": "br-FR", "words": { "approved": 44, - "total": 296988 + "total": 312825 } }, { "languageId": "bs", "words": { - "approved": 7390, - "total": 296988 + "approved": 5409, + "total": 312825 } }, { "languageId": "ca", "words": { - "approved": 24326, - "total": 296988 + "approved": 22282, + "total": 312825 } }, { "languageId": "cs", "words": { - "approved": 133533, - "total": 296988 + "approved": 131153, + "total": 312825 } }, { "languageId": "da", "words": { - "approved": 2449, - "total": 296988 + "approved": 2444, + "total": 312825 } }, { "languageId": "de", "words": { - "approved": 192775, - "total": 296988 + "approved": 190233, + "total": 312825 } }, { "languageId": "dv", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "ee", "words": { - "approved": 2467, - "total": 296988 + "approved": 2446, + "total": 312825 } }, { "languageId": "el", "words": { - "approved": 282155, - "total": 296988 + "approved": 279537, + "total": 312825 } }, { "languageId": "eo", "words": { - "approved": 47, - "total": 296988 + "approved": 44, + "total": 312825 } }, { "languageId": "es-EM", "words": { - "approved": 248594, - "total": 296988 + "approved": 246009, + "total": 312825 } }, { "languageId": "et", "words": { "approved": 20, - "total": 296988 + "total": 312825 } }, { "languageId": "eu", "words": { "approved": 11, - "total": 296988 + "total": 312825 } }, { "languageId": "fa", "words": { - "approved": 236377, - "total": 296988 + "approved": 233819, + "total": 312825 } }, { "languageId": "fa-AF", "words": { - "approved": 65, - "total": 296988 + "approved": 62, + "total": 312825 } }, { "languageId": "fi", "words": { - "approved": 16831, - "total": 296988 + "approved": 15235, + "total": 312825 } }, { "languageId": "fil", "words": { - "approved": 49601, - "total": 296988 + "approved": 47483, + "total": 312825 } }, { "languageId": "fr", "words": { - "approved": 267989, - "total": 296988 + "approved": 265406, + "total": 312825 } }, { "languageId": "ga-IE", "words": { - "approved": 236289, - "total": 297050 + "approved": 233806, + "total": 312887 } }, { "languageId": "gi", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "gl", "words": { - "approved": 2446, - "total": 296988 + "approved": 2441, + "total": 312825 } }, { "languageId": "gu-IN", "words": { - "approved": 2563, - "total": 296988 + "approved": 2558, + "total": 312825 } }, { "languageId": "ha", "words": { - "approved": 36940, - "total": 296988 + "approved": 34771, + "total": 312825 } }, { "languageId": "he", "words": { - "approved": 3138, - "total": 296988 + "approved": 2915, + "total": 312825 } }, { "languageId": "hi", "words": { - "approved": 160304, - "total": 296988 + "approved": 158047, + "total": 312825 } }, { "languageId": "hr", "words": { - "approved": 17896, - "total": 296988 + "approved": 15905, + "total": 312825 } }, { "languageId": "hu", "words": { - "approved": 251641, - "total": 296988 + "approved": 249054, + "total": 312825 } }, { "languageId": "hy-AM", "words": { - "approved": 7697, - "total": 296988 + "approved": 6118, + "total": 312825 } }, { "languageId": "id", "words": { - "approved": 125145, - "total": 296988 + "approved": 122656, + "total": 312825 } }, { "languageId": "ig", "words": { - "approved": 19674, - "total": 296988 + "approved": 18066, + "total": 312825 } }, { "languageId": "it", "words": { - "approved": 254996, - "total": 296988 + "approved": 252421, + "total": 312825 } }, { "languageId": "ja", "words": { - "approved": 240270, - "total": 296988 + "approved": 237712, + "total": 312825 } }, { "languageId": "ka", "words": { - "approved": 5258, - "total": 296988 + "approved": 3289, + "total": 312825 } }, { "languageId": "kk", "words": { - "approved": 10218, - "total": 296988 + "approved": 8246, + "total": 312825 } }, { "languageId": "km", "words": { - "approved": 9905, - "total": 296988 + "approved": 8309, + "total": 312825 } }, { "languageId": "kn", "words": { - "approved": 39999, - "total": 296988 + "approved": 37942, + "total": 312825 } }, { "languageId": "ko", "words": { - "approved": 49406, - "total": 296988 + "approved": 47254, + "total": 312825 } }, { "languageId": "ku", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "ky", "words": { - "approved": 75, - "total": 296988 + "approved": 73, + "total": 312825 } }, { "languageId": "lb", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "lt", "words": { - "approved": 2751, - "total": 296988 + "approved": 2746, + "total": 312825 } }, { "languageId": "lv", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "mai", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "mk", "words": { "approved": 55, - "total": 296988 + "total": 312825 } }, { "languageId": "ml-IN", "words": { - "approved": 15375, - "total": 296988 + "approved": 13384, + "total": 312825 } }, { "languageId": "mn", "words": { "approved": 49, - "total": 296988 + "total": 312825 } }, { "languageId": "mr", "words": { - "approved": 19164, - "total": 296988 + "approved": 17192, + "total": 312825 } }, { "languageId": "ms", "words": { - "approved": 70408, - "total": 296988 + "approved": 68192, + "total": 312825 } }, { "languageId": "my", "words": { - "approved": 63, - "total": 296988 + "approved": 60, + "total": 312825 } }, { "languageId": "ne-NP", "words": { - "approved": 2458, - "total": 296988 + "approved": 2453, + "total": 312825 } }, { "languageId": "nl", "words": { - "approved": 96389, - "total": 296988 + "approved": 94169, + "total": 312825 } }, { "languageId": "no", "words": { - "approved": 2737, - "total": 296988 + "approved": 2730, + "total": 312825 } }, { "languageId": "ny", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "or", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "pa-IN", "words": { "approved": 4, - "total": 296988 + "total": 312825 } }, { "languageId": "pcm", "words": { - "approved": 68434, - "total": 296988 + "approved": 66347, + "total": 312825 } }, { "languageId": "pl", "words": { - "approved": 103383, - "total": 296988 + "approved": 101091, + "total": 312825 } }, { "languageId": "ps", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "pt-BR", "words": { - "approved": 255822, - "total": 296988 + "approved": 253239, + "total": 312825 } }, { "languageId": "pt-PT", "words": { - "approved": 33865, - "total": 296988 + "approved": 31720, + "total": 312825 } }, { "languageId": "ro", "words": { - "approved": 41205, - "total": 296988 + "approved": 39149, + "total": 312825 } }, { "languageId": "ru", "words": { - "approved": 109392, - "total": 296988 + "approved": 107105, + "total": 312825 } }, { "languageId": "sat", "words": { "approved": 58, - "total": 296988 + "total": 312825 } }, { "languageId": "si-LK", "words": { - "approved": 63, - "total": 296988 + "approved": 60, + "total": 312825 } }, { "languageId": "sk", "words": { - "approved": 42346, - "total": 296988 + "approved": 40262, + "total": 312825 } }, { "languageId": "sl", "words": { - "approved": 27453, - "total": 296988 + "approved": 25392, + "total": 312825 } }, { "languageId": "sn", "words": { - "approved": 6857, - "total": 296988 + "approved": 4820, + "total": 312825 } }, { "languageId": "so", "words": { - "approved": 63, - "total": 296988 + "approved": 60, + "total": 312825 } }, { "languageId": "sq", "words": { - "approved": 65, - "total": 296988 + "approved": 62, + "total": 312825 } }, { "languageId": "sr-CS", "words": { - "approved": 34542, - "total": 296988 + "approved": 32569, + "total": 312825 } }, { "languageId": "sv-SE", "words": { - "approved": 8195, - "total": 296988 + "approved": 6599, + "total": 312825 } }, { "languageId": "sw", "words": { - "approved": 21815, - "total": 296988 + "approved": 19751, + "total": 312825 } }, { "languageId": "ta", "words": { - "approved": 2613, - "total": 296988 + "approved": 2608, + "total": 312825 } }, { "languageId": "te", "words": { - "approved": 24605, - "total": 296988 + "approved": 22564, + "total": 312825 } }, { "languageId": "tg", "words": { "approved": 1, - "total": 296988 + "total": 312825 } }, { "languageId": "th", "words": { - "approved": 7381, - "total": 296988 + "approved": 5335, + "total": 312825 } }, { "languageId": "ti", "words": { "approved": 0, - "total": 296988 + "total": 312825 } }, { "languageId": "tk", "words": { - "approved": 6124, - "total": 296988 + "approved": 4550, + "total": 312825 } }, { "languageId": "tl", "words": { - "approved": 45906, - "total": 296988 + "approved": 43823, + "total": 312825 } }, { "languageId": "tr", "words": { - "approved": 241045, - "total": 296988 + "approved": 238487, + "total": 312825 } }, { "languageId": "tw", "words": { - "approved": 5953, - "total": 296988 + "approved": 3982, + "total": 312825 } }, { "languageId": "uk", "words": { - "approved": 78627, - "total": 296988 + "approved": 76306, + "total": 312825 } }, { "languageId": "ur-IN", "words": { - "approved": 2441, - "total": 296988 + "approved": 2436, + "total": 312825 } }, { "languageId": "ur-PK", "words": { - "approved": 857, - "total": 296988 + "approved": 854, + "total": 312825 } }, { "languageId": "uz", "words": { - "approved": 33834, - "total": 296988 + "approved": 31736, + "total": 312825 } }, { "languageId": "vi", "words": { - "approved": 31834, - "total": 296988 + "approved": 29765, + "total": 312825 + } + }, + { + "languageId": "xh", + "words": { + "approved": 0, + "total": 312887 } }, { "languageId": "yo", "words": { - "approved": 40444, - "total": 296988 + "approved": 38343, + "total": 312825 } }, { "languageId": "zh-CN", "words": { - "approved": 261586, - "total": 296988 + "approved": 259001, + "total": 312825 } }, { "languageId": "zh-TW", "words": { - "approved": 230003, - "total": 296988 + "approved": 227418, + "total": 312825 } }, { "languageId": "zu", "words": { "approved": 44, - "total": 296988 + "total": 312825 } } ] \ No newline at end of file diff --git a/src/data/wallets/wallet-data.ts b/src/data/wallets/wallet-data.ts index 69f0e2e2907..195cc2917cf 100644 --- a/src/data/wallets/wallet-data.ts +++ b/src/data/wallets/wallet-data.ts @@ -10,6 +10,7 @@ import BitgetImage from "@/public/images/wallets/bitget.png" import BlockWalletImage from "@/public/images/wallets/blockwallet.png" import BraavosImage from "@/public/images/wallets/braavos_wallet.png" import BridgeWalletImage from "@/public/images/wallets/bridge.png" +import BurnerImage from "@/public/images/wallets/burner.png" import ClearWallet from "@/public/images/wallets/clearwallet.png" import Coin98Image from "@/public/images/wallets/coin98.png" import CoinbaseImage from "@/public/images/wallets/coinbase.png" @@ -24,7 +25,6 @@ import FrameImage from "@/public/images/wallets/frame.png" import GemWalletImage from "@/public/images/wallets/gemwallet.png" import GridPlusImage from "@/public/images/wallets/gridplus.png" import imTokenImage from "@/public/images/wallets/imtoken.png" -import InfinityWalletImage from "@/public/images/wallets/infinity_wallet.png" import KeystoneImage from "@/public/images/wallets/keystone.png" import LedgerImage from "@/public/images/wallets/ledger.png" import LoopringImage from "@/public/images/wallets/loopring.png" @@ -1329,56 +1329,6 @@ export const walletsData: WalletData[] = [ "Starknet", ], }, - { - last_updated: "2024-08-16", - name: "Infinity Wallet", - image: InfinityWalletImage, - twBackgroundColor: "bg-[#ffffff]", - twGradiantBrandColor: "from-[#ffffff]", - url: "https://infinitywallet.io/", - active_development_team: true, - languages_supported: ["en", "es"], - twitter: "https://twitter.com/InfinityWallet", - discord: "https://discordapp.com/invite/SgNjKzF", - reddit: "", - telegram: "", - ios: false, - android: false, - linux: true, - windows: true, - macOS: true, - firefox: false, - chromium: false, - hardware: false, - open_source: false, - repo_url: "", - non_custodial: true, - security_audit: [""], - scam_protection: true, - hardware_support: false, - rpc_importing: false, - nft_support: true, - connect_to_dapps: true, - staking: false, - swaps: true, - multichain: true, - layer_2: true, - gas_fee_customization: true, - ens_support: true, - erc_20_support: true, - buy_crypto: true, - withdraw_crypto: true, - multisig: false, - social_recovery: false, - onboard_documentation: "", - documentation: "https://docs.infinitywallet.io/", - supported_chains: [ - "Ethereum Mainnet", - "Arbitrum One", - "OP Mainnet", - "Base", - ], - }, { last_updated: "2022-08-19", name: "Exodus", @@ -2535,6 +2485,52 @@ export const walletsData: WalletData[] = [ "Arbitrum One", ], }, + { + last_updated: "2025-05-19", + name: "Burner", + image: BurnerImage, + twBackgroundColor: "bg-[#ffffff]", + twGradiantBrandColor: "from-[#ffffff]", + url: "https://www.burner.pro/eth", + active_development_team: true, + languages_supported: ["en"], + twitter: "https://x.com/useburner", + discord: "", + reddit: "https://www.reddit.com/r/BurnerWallet/", + telegram: "https://t.me/useburner", + ios: true, + android: true, + linux: true, + windows: true, + macOS: true, + firefox: true, + chromium: true, + hardware: true, + open_source: false, + repo_url: "https://github.com/arx-research", + non_custodial: true, + security_audit: [], + scam_protection: false, + hardware_support: true, + rpc_importing: false, + nft_support: true, + connect_to_dapps: true, + staking: false, + swaps: true, + multichain: true, + layer_2: true, + gas_fee_customization: false, + ens_support: true, + erc_20_support: false, + buy_crypto: true, + withdraw_crypto: false, + multisig: false, + social_recovery: false, + onboard_documentation: + "https://help.burner.pro/en/collections/10242509-getting-started", + documentation: "https://help.burner.pro/en", + supported_chains: ["Ethereum Mainnet", "Base"], + }, ] as const satisfies Omit[] export type WalletName = (typeof walletsData)[number]["name"] diff --git a/src/data/wallets/wallet-filters.ts b/src/data/wallets/wallet-filters.ts index 0ebd639380b..5b914eefea6 100644 --- a/src/data/wallets/wallet-filters.ts +++ b/src/data/wallets/wallet-filters.ts @@ -136,6 +136,11 @@ const walletFilterData: { [key: string]: WalletFilterData } = { description: "page-find-wallet-social-recovery-desc", filterKey: "social_recovery", }, + privacy: { + title: "page-find-wallet-privacy", + description: "page-find-wallet-privacy-desc", + filterKey: "privacy", + }, } export default walletFilterData diff --git a/src/intl/en/common.json b/src/intl/en/common.json index 4d069720c8a..a0e784f4624 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -104,6 +104,7 @@ "ethereum-protocol": "Ethereum protocol", "ethereum-roadmap": "Ethereum roadmap", "ethereum-security": "Ethereum security and scam prevention", + "ethereum-privacy": "Privacy on Ethereum", "ethereum-support": "Ethereum support", "ethereum-upgrades": "Ethereum upgrades", "ethereum-wallets": "Ethereum wallets", @@ -341,6 +342,7 @@ "nav-rwa-description": "A method for turning valuable commodities into digital tokens", "nav-run-a-node-description": "Become fully sovereign while helping secure the network", "nav-security-description": "Learn best practices when using cryptocurrency", + "nav-privacy-description": "Tools and techniques for protecting your privacy on Ethereum", "nav-smart-contracts-description": "The fundamental building blocks of the Ethereum ecosystem", "nav-stablecoins-description": "Stablecoins are Ethereum tokens designed to stay at a fixed value", "nav-stake-description": "Earn rewards for securing Ethereum", diff --git a/src/intl/en/glossary.json b/src/intl/en/glossary.json index 021a80ed98a..3325329335e 100644 --- a/src/intl/en/glossary.json +++ b/src/intl/en/glossary.json @@ -365,6 +365,8 @@ "testnet-definition": "Short for \"test network,\" a network used to simulate the behavior of the main Ethereum network.", "token-term": "Token", "token-definition": "A tradable virtual good defined in smart contracts on the Ethereum blockchain.", + "token-factory-term": "Token factory", + "token-factory-definition": "A token factory is a smart contract that facilitates the creation of tokens within a specific standard, such as ERC-20, ERC-721, or ERC-1155. The smart contract acts as a template, allowing users to deploy new tokens with custom parameters like name, symbol, supply, and extra functionality without creating a new smart contract from scratch.", "transaction-term": "Transaction", "transaction-definition": "Data committed to the Ethereum Blockchain signed by an originating account, targeting a specific address. The transaction contains metadata such as the gas limit for that transaction. More on transactions.", "transaction-fee-term": "Transaction fee", diff --git a/src/intl/en/page-apps.json b/src/intl/en/page-apps.json index fe854be6950..0494a319899 100644 --- a/src/intl/en/page-apps.json +++ b/src/intl/en/page-apps.json @@ -1,4 +1,5 @@ { + "page-apps-all-apps": "All apps", "page-apps-dapp-description-cent": "A social network where you earn money by posting NFTs.", "page-apps-dapp-description-decentraland": "Collect, trade virtual land in a virtual world you can explore.", "page-apps-dapp-description-ens": "User-friendly names for Ethereum addresses and decentralized sites.", diff --git a/src/intl/en/page-developers-docs.json b/src/intl/en/page-developers-docs.json index 0de23067a97..c93471c904e 100644 --- a/src/intl/en/page-developers-docs.json +++ b/src/intl/en/page-developers-docs.json @@ -116,6 +116,7 @@ "docs-nav-transactions": "Transactions", "docs-nav-transactions-description": "Transfers and other actions that cause Ethereum's state to change", "docs-nav-upgrading-smart-contracts": "Upgrading smart contracts", + "docs-nav-naming-smart-contracts": "Naming smart contracts", "docs-nav-verifying-smart-contracts": "Verifying smart contracts", "docs-nav-web2-vs-web3": "Web2 vs Web3", "docs-nav-web2-vs-web3-description": "The fundamental differences that blockchain-based applications provide", diff --git a/src/intl/en/page-developers-index.json b/src/intl/en/page-developers-index.json index 1595981a3f5..039dd3298ff 100644 --- a/src/intl/en/page-developers-index.json +++ b/src/intl/en/page-developers-index.json @@ -124,5 +124,9 @@ "page-developers-course-advanced-foundry-alt": "Cyfrin Updraft Advanced foundry course banner", "page-developers-course-security-title": "Smart contract security", "page-developers-course-security-desc": "Start your career as a smart contract security researcher! Learn smart contract auditing and the best practices.", - "page-developers-course-security-alt": "Cyfrin Updraft Blockchain basics course banner" + "page-developers-course-security-alt": "Cyfrin Updraft Blockchain basics course banner", + "page-developers-why-title": "Get paid well. Stay remote. Build the future.", + "page-developers-why-subtitle": "Over half of blockchain careers are remote-first with some estimates putting the number as high as 70%.", + "page-developers-why-avg-salary-dev": "Avg developer salary", + "page-developers-why-avg-salary-blockchain": "Avg salary in blockchain industry" } diff --git a/src/intl/en/page-enterprise.json b/src/intl/en/page-enterprise.json index 728c3fd3742..f8b9eb273c9 100644 --- a/src/intl/en/page-enterprise.json +++ b/src/intl/en/page-enterprise.json @@ -55,5 +55,8 @@ "page-enterprise-team-form-success-heading": "Thanks for reaching out!", "page-enterprise-team-form-success-message": "We've received your message and someone from our enterprise team will get back to you within a few business days.", "page-enterprise-why-description": "Ethereum supports enterprise compliance with transparent, auditable infrastructure that aligns with GDPR and KYC while protecting sensitive data in private or consortium environments.", - "page-enterprise-why-header": "Why Ethereum" + "page-enterprise-why-header": "Why Ethereum", + "page-enterprise-why-metric-years": "Year", + "page-enterprise-why-metric-upgrades": "Upgrades", + "page-enterprise-why-metric-downtime": "Downtime" } diff --git a/src/intl/en/page-wallets-find-wallet.json b/src/intl/en/page-wallets-find-wallet.json index 4378df2d750..50e14b26484 100644 --- a/src/intl/en/page-wallets-find-wallet.json +++ b/src/intl/en/page-wallets-find-wallet.json @@ -84,5 +84,7 @@ "page-find-wallet-social-links": "Links", "page-find-wallet-empty-results-title": "No results", "page-find-wallet-empty-results-desc": "There are no wallets matching your criteria, try removing some filters.", - "page-find-wallet-see-wallets": "See wallets" + "page-find-wallet-see-wallets": "See wallets", + "page-find-wallet-privacy": "Privacy", + "page-find-wallet-privacy-desc": "Wallets that support built-in private transactions" } diff --git a/src/intl/en/page-what-is-ethereum.json b/src/intl/en/page-what-is-ethereum.json index 6dd80e404f6..b13dd6e08c2 100644 --- a/src/intl/en/page-what-is-ethereum.json +++ b/src/intl/en/page-what-is-ethereum.json @@ -38,7 +38,7 @@ "page-what-is-ethereum-ether-learn-more": "Learn more about ether (ETH)", "page-what-is-ethereum-how-title": "How does Ethereum work?", "page-what-is-ethereum-how-intro-1": "When Ethereum launched in 2015, it used a system called proof of work.", - "page-what-is-ethereum-how-intro-2": "This mechanism pioneered by Bitcoin, is how all computers agreed on who owns what. Computers would use a lot of energy trying to solve a complex mathematical puzzle. The winner would get to propose a block of incoming transactions and earn new ETH.", + "page-what-is-ethereum-how-intro-2": "This mechanism, pioneered by Bitcoin, is how all computers agreed on who owns what. Computers would use a lot of energy trying to solve a complex mathematical puzzle. The winner would get to propose a block of incoming transactions and earn new ETH.", "page-what-is-ethereum-how-intro-3": "In 2022, Ethereum upgraded to a new system called proof of stake that's 99% more energy efficient. Instead of mathematical puzzles, validators lock their ETH as a security deposit to earn the right to process transactions.", "page-what-is-ethereum-how-intro-4": "If they do it correctly, they earn ETH. If they cheat, they lose some of their stake.", "page-what-is-ethereum-how-intro-5": "Here's an example:", @@ -94,7 +94,7 @@ "page-what-is-ethereum-start-individuals-step-1": "Buy a small amount of ETH on an exchange or directly inside some wallets", "page-what-is-ethereum-start-individuals-step-2": "Use that ETH to pay for transactions like sending tokens or collecting NFTs", "page-what-is-ethereum-start-individuals-step-3": "Explore dapps like Zora, Uniswap, or Farcaster—no new logins or approvals needed", - "page-what-is-ethereum-start-individuals-desc-4": "These priorities will helps ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", + "page-what-is-ethereum-start-individuals-desc-4": "These priorities will help ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", "page-what-is-ethereum-start-individuals-desc-5": "These dapps run in your browser and work with your wallet instantly. You can start using Ethereum in minutes.", "page-what-is-ethereum-start-individuals-cta-1": "Start here", "page-what-is-ethereum-start-individuals-cta-2": "See apps", @@ -155,12 +155,12 @@ "page-what-is-ethereum-when-who-learn-more": "Learn more about Ethereum's history", "page-what-is-ethereum-roadmap-title": "What is the Ethereum roadmap for 2025?", "page-what-is-ethereum-roadmap-intro-1": "Ethereum doesn't follow a fixed roadmap. It follows a shared vision.", - "page-what-is-ethereum-roadmap-intro-2": "Network upgrades are made as EIP proposals and developed in public by contributors around the world. There's no central team deciding what happens, just people building what they believe is useful based on users' needs.", + "page-what-is-ethereum-roadmap-intro-2": "Network upgrades are made as EIPs and developed in public by contributors around the world. There's no central team deciding what happens, just people building what they believe is useful based on users' needs.", "page-what-is-ethereum-roadmap-intro-3": "Pectra is the most recent upgrade launched in May 2025. This upgrade improved wallet features, gave stakers more flexibility, and made it easier for dapps to run on L2s. The goal was to improve usability without compromising on security or decentralization.", "page-what-is-ethereum-roadmap-priorities-intro": "Looking ahead, Ethereum's priorities include:", "page-what-is-ethereum-roadmap-priority-1": "Making the core protocol and its L2s faster and cheaper for everyone", "page-what-is-ethereum-roadmap-priority-2": "Improving the experience for users and developers", - "page-what-is-ethereum-roadmap-outro-1": "These priorities will helps ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", + "page-what-is-ethereum-roadmap-outro-1": "These priorities will help ensure Ethereum is secure, scalable and user friendly as more people rely on the network everyday.", "page-what-is-ethereum-roadmap-outro-2": "If you want to steer the direction for Ethereum, get involved. You don't need permission, just the desire to make a difference in this new digital economy.", "page-what-is-ethereum-roadmap-learn-more": "See an overview of the Ethereum roadmap", "page-what-is-ethereum-further-reading-title": "Read next", diff --git a/src/intl/ko/page-what-is-ethereum.json b/src/intl/ko/page-what-is-ethereum.json index a748d668b6c..e0305471617 100644 --- a/src/intl/ko/page-what-is-ethereum.json +++ b/src/intl/ko/page-what-is-ethereum.json @@ -2,7 +2,7 @@ "page-what-is-ethereum-alt-img-bazaar": "한 사람이 이더리움을 나타내는 시장을 들여다보는 그림", "page-what-is-ethereum-alt-img-comm": "함께 일하는 이더리움 커뮤니티 멤버의 그림", "page-what-is-ethereum-alt-img-lego": "레고 벽돌로 만든 ETH 로고를 만드는 손 그림", - "page-what-is-ethereum-banking-card": "모두를 위한 뱅킹", + "page-what-is-ethereum-banking-card": "모두를 위한 금융", "page-what-is-ethereum-banking-card-desc": "모든 사람이 금융 서비스를 이용할 수 있는 것은 아닙니다. 하지만 인터넷 연결만 있으면 이더리움과 이를 기반으로 구축된 대출, 차용, 저축 상품에 접근할 수 있습니다.", "page-what-is-ethereum-build": "이더리움으로 제작하기", "page-what-is-ethereum-build-desc": "이더리움으로 개발하려면 문서를 읽고 튜토리얼을 시도해보거나, 시작할 때 필요한 도구를 확인하세요.", @@ -25,7 +25,7 @@ "page-what-is-ethereum-p2p-card-desc": "이더리움을 이용하면 다른 사람과 직접 작업을 조정하고 계약을 맺거나 디지털 자산을 교환할 수 있습니다. 중개인을 거치지 않아도 됩니다.", "page-what-is-ethereum-start-building-btn": "개발 시작하기", "page-what-is-ethereum-title": "이더리움이란 무엇인가요?", - "page-what-is-ethereum-subtitle": "이더리움 작동의 원리, 이더리움의 이점 및 전 세계 수백만 명의 사용자가 이더리움을 사용하는 방법에 대한 완벽한 입문자 안내서입니다.", + "page-what-is-ethereum-subtitle": "이더리움의 작동 원리와 장점, 그리고 전 세계 수백만 명이 이더리움을 사용하는 방식을 알려주는 입문자용 종합 가이드입니다.", "page-what-is-ethereum-button-lets-start": "시작하기", "page-what-is-ethereum-blockchain-tab-title": "블록체인이란 무엇인가요?", "page-what-is-ethereum-blockchain-tab-content": "블록체인은 트랜잭션의 데이터베이스이며 네트워크상의 수많은 컴퓨터에서 업데이트되고 서로 공유됩니다. 블록체인에서는 항상 새로운 트랜잭션 집합이 추가되는데 이를 \"블록\"이라고 합니다. 블록체인이라는 이름은 여기에서 유래되었습니다. 이더리움과 같은 공개형 블록체인을 통해 누구든지 데이터를 추가할 수 있습니다(단, 제거할 수는 없음). 누군가가 정보를 위조하거나 시스템을 해킹하려는 경우, 네트워크상의 수많은 컴퓨터를 모두 해킹해야 합니다. 사실상 불가능한 일이죠! 이 덕분에 이더리움 같은 탈중앙 블록체인은 강력한 보안을 유지할 수 있습니다.", diff --git a/src/lib/nav/buildNavigation.ts b/src/lib/nav/buildNavigation.ts index 5c6cd3898bf..edd279ab126 100644 --- a/src/lib/nav/buildNavigation.ts +++ b/src/lib/nav/buildNavigation.ts @@ -76,6 +76,11 @@ export const buildNavigation = (t: TranslateFn): NavSections => { description: t("nav-security-description"), href: "/security/", }, + { + label: t("ethereum-privacy"), + description: t("nav-privacy-description"), + href: "/privacy/", + }, ], }, { diff --git a/src/lib/types.ts b/src/lib/types.ts index 1c49deff3c4..a3c106de838 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -724,6 +724,7 @@ export type WalletData = { documentation: string mpc?: boolean new_to_crypto?: boolean + privacy?: boolean } export type Wallet = WalletData & { diff --git a/src/scripts/events/ethereum-events-import.ts b/src/scripts/events/ethereum-events-import.ts index b9c240b47b3..7b08d3e98de 100644 --- a/src/scripts/events/ethereum-events-import.ts +++ b/src/scripts/events/ethereum-events-import.ts @@ -69,6 +69,8 @@ export async function EthereumEventsImport(year: number) { start = Date.parse(`${startDate}, ${year} GMT`) end = Date.parse(`${endDate}, ${year} GMT`) if (Number.isNaN(start) || Number.isNaN(end)) continue + // Skip events that have already ended + if (end < Date.now()) continue } catch (e) { console.log("Invalid date", i[0]) continue diff --git a/tests/e2e/global.spec.ts b/tests/e2e/global.spec.ts index ccff02c7024..0d938b3b39e 100644 --- a/tests/e2e/global.spec.ts +++ b/tests/e2e/global.spec.ts @@ -1,8 +1,6 @@ import { expect, takeSnapshot, test } from "@chromatic-com/playwright" import { Page } from "@playwright/test" -import { DEFAULT_LOCALE } from "@/lib/constants" - import { testData } from "./fixtures/testData" import { HomePage } from "./pages/HomePage" @@ -65,7 +63,7 @@ test.describe("Global", () => { } test("switches to Chinese", async ({ page }) => { - await expect(page).toHaveURL(`/${DEFAULT_LOCALE}/`) + await expect(page).toHaveURL("/") await homePage.openLanguagePicker() await switchToChinese(page, homePage) }) @@ -97,7 +95,7 @@ test.describe("Global", () => { }) => { await homePage.goto() - await homePage.assertUrlMatches(`/${DEFAULT_LOCALE}/`) + await homePage.assertUrlMatches("/") await homePage.openLanguagePicker() await switchToArabic(page, homePage)