From 4d494fc11f8f3c8d2e3388ec54a6562dd5e5d032 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 30 May 2025 14:52:13 +0800 Subject: [PATCH 1/3] Sync fork with dev branch (#10) * update grants page * Update Crowdin translation progress * Update community-events.json We want to change our event to the new date * Update consensus-bounty-hunters.json * new homepage button * tranlation strings * new icon * new copy * update: community grants breakdown and listing * Add translations for new strings * Update src/intl/en/page-index.json * fix: add custom header ids * Updated translations * fix: correct the path used for SideNav * fix: start index for Roadmap carousel refactors to use releaseDate and plannedReleaseYear; removed 2 month window, defines production as releaseDate in past, coming soon as releaseDate in the future, and in development as no releaseDate, but optional plannedReleaseYear. * fix(temp): force roadmap release carousel to LTR * fix: use direction-responsive positioning * chore: remove whitespace * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] * fix: use existing function instead --------- Co-authored-by: Corwin Smith Co-authored-by: GitHub Action Co-authored-by: SUCI - Blockchain Hub Team <155696196+adminsuci@users.noreply.github.com> Co-authored-by: Fredrik Svantes Co-authored-by: Nuno Loureiro Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Co-authored-by: Luka Kropec Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> Co-authored-by: JoeChenJ Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 ++ README.md | 1 + .../roadmap/_components/ReleaseCarousel.tsx | 137 ++++++++++-------- public/content/community/grants/index.md | 65 ++++++--- src/components/Homepage/useHome.ts | 18 +-- src/components/icons/build-apps.svg | 5 + src/components/ui/carousel.tsx | 16 +- src/data/community-events.json | 4 +- src/data/consensus-bounty-hunters.json | 4 +- src/data/roadmap/releases.tsx | 30 +++- src/data/translationProgress.json | 28 ++-- src/intl/am/page-index.json | 4 +- src/intl/ar/page-index.json | 4 +- src/intl/az/page-index.json | 4 +- src/intl/be/page-index.json | 4 +- src/intl/bg/page-index.json | 4 +- src/intl/bn/page-index.json | 4 +- src/intl/bs/page-index.json | 4 +- src/intl/ca/page-index.json | 4 +- src/intl/cs/page-index.json | 4 +- src/intl/da/page-index.json | 4 +- src/intl/de/page-index.json | 4 +- src/intl/el/page-index.json | 4 +- src/intl/en/page-index.json | 4 +- src/intl/es/page-index.json | 4 +- src/intl/fa/page-index.json | 4 +- src/intl/fi/page-index.json | 4 +- src/intl/fil/page-index.json | 4 +- src/intl/fr/page-index.json | 4 +- src/intl/ga/page-index.json | 4 +- src/intl/gl/page-index.json | 4 +- src/intl/gu/page-index.json | 4 +- src/intl/ha/page-index.json | 4 +- src/intl/he/page-index.json | 4 +- src/intl/hi/page-index.json | 4 +- src/intl/hr/page-index.json | 4 +- src/intl/hu/page-index.json | 4 +- src/intl/hy-am/page-index.json | 4 +- src/intl/id/page-index.json | 4 +- src/intl/ig/page-index.json | 4 +- src/intl/it/page-index.json | 4 +- src/intl/ja/page-index.json | 4 +- src/intl/ka/page-index.json | 4 +- src/intl/kk/page-index.json | 4 +- src/intl/km/page-index.json | 4 +- src/intl/kn/page-index.json | 4 +- src/intl/ko/page-index.json | 4 +- src/intl/lt/page-index.json | 4 +- src/intl/ml/page-index.json | 4 +- src/intl/mr/page-index.json | 4 +- src/intl/ms/page-index.json | 4 +- src/intl/nb/page-index.json | 4 +- src/intl/ne-np/page-index.json | 4 +- src/intl/nl/page-index.json | 4 +- src/intl/pcm/page-index.json | 4 +- src/intl/pl/page-index.json | 4 +- src/intl/pt-br/page-index.json | 4 +- src/intl/pt/page-index.json | 4 +- src/intl/ro/page-index.json | 4 +- src/intl/ru/page-index.json | 4 +- src/intl/se/page-index.json | 4 +- src/intl/sk/page-index.json | 4 +- src/intl/sl/page-index.json | 4 +- src/intl/sn/page-index.json | 4 +- src/intl/sr/page-index.json | 4 +- src/intl/sw/page-index.json | 4 +- src/intl/ta/page-index.json | 4 +- src/intl/te/page-index.json | 4 +- src/intl/th/page-index.json | 4 +- src/intl/tk/page-index.json | 4 +- src/intl/tl/page-index.json | 4 +- src/intl/tr/page-index.json | 4 +- src/intl/tw/page-index.json | 4 +- src/intl/uk/page-index.json | 4 +- src/intl/ur/page-index.json | 4 +- src/intl/uz/page-index.json | 4 +- src/intl/vi/page-index.json | 4 +- src/intl/yo/page-index.json | 4 +- src/intl/zh-tw/page-index.json | 4 +- src/intl/zh/page-index.json | 4 +- src/layouts/Docs.tsx | 3 +- 81 files changed, 338 insertions(+), 258 deletions(-) create mode 100644 src/components/icons/build-apps.svg diff --git a/.all-contributorsrc b/.all-contributorsrc index 3f53c846f1a..71d578f3da7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -12761,6 +12761,15 @@ "contributions": [ "bug" ] + }, + { + "login": "adminsuci", + "name": "SUCI - Blockchain Hub Team", + "avatar_url": "https://avatars.githubusercontent.com/u/155696196?v=4", + "profile": "https://www.suci.io/", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 3795df6a1dc..c3db6ba4534 100644 --- a/README.md +++ b/README.md @@ -1951,6 +1951,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d microHoffman
microHoffman

🐛 Rashell Smith
Rashell Smith

🐛 Alex Olson
Alex Olson

🐛 + SUCI - Blockchain Hub Team
SUCI - Blockchain Hub Team

🚧 diff --git a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx index c092d5eebe0..874543edfba 100644 --- a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx +++ b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx @@ -1,6 +1,9 @@ "use client" -import { useEffect, useState } from "react" +// TODO: Extract intl strings +// TODO: Fix RTL compatibility; currenly forced to LTR flow +import { useCallback, useEffect, useMemo, useState } from "react" +import { useLocale } from "next-intl" import { Image } from "@/components/Image" import { ButtonLink } from "@/components/ui/buttons/Button" @@ -16,45 +19,39 @@ import { import { cn } from "@/lib/utils/cn" import { formatDate } from "@/lib/utils/date" -import { releasesData } from "@/data/roadmap/releases" +import { Release, releasesData } from "@/data/roadmap/releases" -const findLatestReleaseIndex = () => { - const today = new Date() - const twoMonthsFromNow = new Date() - twoMonthsFromNow.setMonth(today.getMonth() + 2) +const ReleaseCarousel = () => { + const locale = useLocale() - // First try to find a release within the next 2 months - const upcomingReleaseIndex = releasesData.findIndex((release) => { - const releaseDate = new Date(release.releaseDate) - return releaseDate > today && releaseDate <= twoMonthsFromNow - }) + const [api1, setApi1] = useState() + const [api2, setApi2] = useState() - // If no upcoming release found, find the most recent release up to today - if (upcomingReleaseIndex === -1) { - const pastReleases = releasesData.filter( - (release) => new Date(release.releaseDate) <= today - ) - if (pastReleases.length > 0) { - const mostRecentRelease = pastReleases[pastReleases.length - 1] - return releasesData.findIndex( - (release) => release.releaseDate === mostRecentRelease.releaseDate - ) - } - } + const startIndex = useMemo(() => { + const now = new Date() - return upcomingReleaseIndex -} + // Production: has a releaseDate in the past + const productionReleases = releasesData.filter((release) => { + if (!("releaseDate" in release) || !release.releaseDate) return false + const releaseDate = new Date(release.releaseDate) + return releaseDate <= now + }) -const ReleaseCarousel = () => { - const todayDate = new Date() - const twoMonthsFromNow = new Date() - twoMonthsFromNow.setMonth(todayDate.getMonth() + 2) + // Upcoming: has a releaseDate, but is in the future + const upcomingReleases = releasesData.filter((release) => { + if (!("releaseDate" in release) || !release.releaseDate) return false + const releaseDate = new Date(release.releaseDate) + return releaseDate > now + }) - const [api1, setApi1] = useState() - const [api2, setApi2] = useState() - const [currentIndex, setCurrentIndex] = useState(() => - findLatestReleaseIndex() - ) + // If upcoming releases exist, start index after production releases + if (upcomingReleases.length > 0) return productionReleases.length + + // If no upcoming releases, start at the last production release + return productionReleases.length - 1 + }, []) + + const [currentIndex, setCurrentIndex] = useState(startIndex) useEffect(() => { if (!api1 || !api2) { @@ -72,8 +69,29 @@ const ReleaseCarousel = () => { }) }, [api1, api2]) + const getStatus = useCallback((release: Release) => { + if (!("releaseDate" in release) || !release.releaseDate) return "dev" + if (new Date(release.releaseDate) <= new Date()) return "prod" + return "soon" + }, []) + + const getDisplayDate = (release: Release): string => { + if (!("releaseDate" in release || "plannedReleaseYear" in release)) + return "" + + if ("plannedReleaseYear" in release && release.plannedReleaseYear) + return new Intl.DateTimeFormat(locale, { + year: "numeric", + }).format(new Date(Number(release.plannedReleaseYear), 0, 1)) + + if ("releaseDate" in release && release.releaseDate) + return formatDate(release.releaseDate) + + return "" + } + return ( -
+
@@ -84,22 +102,15 @@ const ReleaseCarousel = () => { opts={{ align: "center", containScroll: false, + direction: "ltr", loop: false, - startIndex: findLatestReleaseIndex(), + startIndex, }} > {releasesData.map((release, index) => { - const releaseDate = new Date(release.releaseDate) - const nextRelease = - releaseDate > todayDate && releaseDate <= twoMonthsFromNow - const labelType = - releaseDate < todayDate - ? 1 - : releaseDate < twoMonthsFromNow - ? 2 - : 3 - + const status = getStatus(release) + const displayDate = getDisplayDate(release) return ( { >
- {labelType === 1 && ( + {status === "prod" && (
{

In production

)} - {labelType === 2 && ( + {status === "soon" && (
{

)} - {labelType === 3 && ( + {status === "dev" && (
{
)}
+ {/* Line-circle-line decoration —•— */}
{
@@ -181,7 +193,7 @@ const ReleaseCarousel = () => { {release.releaseName}

- {formatDate(release.releaseDate)} + {displayDate}

@@ -202,8 +214,9 @@ const ReleaseCarousel = () => { opts={{ align: "center", containScroll: false, + direction: "ltr", loop: false, - startIndex: findLatestReleaseIndex(), + startIndex, }} > @@ -225,9 +238,7 @@ const ReleaseCarousel = () => {

{release.releaseName}

-

- {formatDate(release.releaseDate)} -

+

{getDisplayDate(release)}

diff --git a/public/content/community/grants/index.md b/public/content/community/grants/index.md index f0eacff034e..e1fa7bb9f4a 100644 --- a/public/content/community/grants/index.md +++ b/public/content/community/grants/index.md @@ -15,32 +15,61 @@ This list is curated by our community. If there's something missing or incorrect These programs support the broad Ethereum ecosystem by offering grants to a wide scope of projects. These include solutions for scalability, community building, security, privacy, and more. These grants are not specific to any one Ethereum platform and are a good place to start if you're unsure. - [EF Ecosystem Support Program](https://esp.ethereum.foundation) - _Funding open source projects that benefit Ethereum, with a particular focus on universal tools, infrastructure, research and public goods_ -- [Moloch DAO](https://www.molochdao.com/) - _Privacy, layer 2 scaling, client security, and more_ -- [DAO Grants](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Google spreadsheet of organizations offering grants_ - [Academic Grants](https://esp.ethereum.foundation/academic-grants) - _Grants to support Ethereum-related academic work_ + +## Grant list aggregators and platforms {#grant-list-aggregators} + +These resources compile and organize various grant opportunities across the Ethereum ecosystem, making it easier to discover funding opportunities that match your project's needs. We've organized them by persona to help you get you started finding the most relevant resources based on your specific funding needs. + +### For all grant seekers: Comprehensive directories {#comprehensive-directories} + +These general platforms offer broad coverage of grants across the entire Web3 space and are useful starting points for anyone looking for funding: + - [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks has compiled a comprehensive directory of all grants, RFPs, and bug bounties._ +- [Find Blockchain Grants](https://findblockchaingrants.com/) - _Searchable database of blockchain grants_ +- [Grantr](https://grantr.app/) - _Platform for discovering and applying to Web3 grants_ +- [Blockchain Grants](https://www.blockchaingrants.org/) - _Directory of blockchain and crypto grants_ + +### For developers and builders {#for-developers-and-builders} + +- [Web3 Grants](https://www.notion.so/Web3-Grants-dae38f9b5f524d36a15aaee1b6fa3089) - _Notion database of Web3 grant opportunities_ +- [Grant Programs Viewer](https://airtable.com/shr86elKgWTSCP4AY) - _Public Airtable database of grant programs_ +- [Web3 Grants Spreadsheet](https://docs.google.com/spreadsheets/d/1c8koZCI-GLnD8MG-eFcXPOBCNu1v8-aXIfwAAvc7AMc/edit#gid=0) - _Google spreadsheet of Web3 grant opportunities_ + +### For DeFi projects and financial applications {#for-defi-projects} + +- [LlamaoGrants](https://wiki.defillama.com/wiki/LlamaoGrants) - _DeFi Llama's grant program directory_ +- [AlphaGrowth Grants](https://alphagrowth.io/crypto-web3-grants-list) - _Comprehensive list of crypto and Web3 grants_ + +### For DAO contributors and governance innovators {#for-dao-contributors} + +Resources for community-driven projects and governance experiments: + +- [DAO Grants](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Google spreadsheet of organizations offering grants_ +- [MetaGov Database](https://docs.google.com/spreadsheets/d/1e5g-dlWWsK2DZoZGBgfxyfGNSddLk-V7sLEgfPjEhbA/edit#gid=780420708) - _Comprehensive Web3 grants map_ + +### For entrepreneurs and startups {#for-entrepreneurs-and-startups} + +Resources for those building products and seeking investment beyond just grants: -## Project specific {#project-specific} +- [Web3Native](https://www.web3native.co/) - _Directory of Web3 grants, investors, and accelerator programs_ +- [Cryptoneur Web3 Grants](https://www.cryptoneur.xyz/web3-grants) - _Platform for finding Web3 project funding_ +- [Pentacle Grants](https://pentacle.xyz/grants) - _Grant opportunities in the Web3 space_ -These projects have created their own grants for projects aimed at developing and experimenting with their own technology. +### Public goods and impact {#public-goods-and-impact} -- [Aave Grants Program](https://aavegrants.org/) – _[Aave](https://aave.com/) grants DAO_ -- [Balancer](https://grants.balancer.community/) – _[Balancer](https://balancer.fi/) ecosystem fund_ -- [Chainlink Grants Program](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) community grants_ -- [Decentraland Grants Program](https://governance.decentraland.org/grants/) – _[Decentraland](https://decentraland.org/) DAO Metaverse_ -- [Lido Ecosystem Grants Organisation (LEGO)](https://lido.fi/lego) – _[Lido](https://lido.fi/) finance ecosystem_ -- [MetaMask Program](https://metamaskgrants.org/) - _[MetaMask](https://metamask.io/) employee-led grants DAO_ -- [SKALE Network Grants Program](https://skale.space/developers#grants) - _[SKALE Network](https://skale.space/) ecosystem_ -- [Swarm Foundation Grants Program](https://my.ethswarm.org/grants) - _[Swarm Foundation](https://www.ethswarm.org/) ecosystem_ -- [The Graph](https://thegraph.com/ecosystem/grants/) – _[The Graph](https://thegraph.com/) ecosystem_ -- [Uniswap Grants Program](https://www.uniswapfoundation.org/approach) – _[Uniswap](https://uniswap.org/) community_ +These programs focus on funding projects that benefit the broader community, public goods, and impact initiatives. These include grant providers, as well as donation platforms utilizing onchain funding allocation mechanisms including [quadratic funding](/defi/#quadratic-funding): -## Quadratic funding {#quadratic-funding} +- [Gitcoin](https://www.gitcoin.co/program) - _Gitcoin Grants utilizes multiple capital allocation mechanisms to fund open source projects and public goods in the Ethereum ecosystem_ +- [Octant](https://octant.app/home) - _Public goods funding ecosystem that balances the common good and individual financial empowerment_ +- [Giveth](https://giveth.io/) - _Crypto donation platform enabling direct donations from for-good projects with zero added fees_ +- [Artizen](https://artizen.fund/) - _Helping creators match fund new projects at the frontier of art, science, technology and culture_ +- [Quadratic Accelerator](https://qacc.giveth.io/) - _Start-up accelerator program that uses quadratic funding to support projects that benefit the public good_ -The open source roots of Ethereum have led to the growth of an interesting new fundraising model: quadratic funding. This has the potential to improve the way we fund all types of public goods in the future. Quadratic funding makes sure that the projects that receive the most funding are those with the most unique demand. In other words, projects that stand to improve the lives of the most people. [More on quadratic funding.](/defi/#quadratic-funding) +### Additional resources {#additional-resources} -- [Gitcoin](https://gitcoin.co/grants) -- [clr.fund](https://clr.fund/) +- [Web3 Summits Grants](https://www.web3summits.io/grants) - _Grant opportunities from Web3 Summits_ +- [Anke's Directory](https://docs.google.com/spreadsheets/d/1IdCCG-U7cGsih_nCNt7Yo4wXstZdCip1UKWbCK0qCZk/edit#gid=938115517) - _Web3 grant program directory_ ## Work in Ethereum {#work-in-ethereum} diff --git a/src/components/Homepage/useHome.ts b/src/components/Homepage/useHome.ts index a70d36f7bc4..8786d1bbc83 100644 --- a/src/components/Homepage/useHome.ts +++ b/src/components/Homepage/useHome.ts @@ -7,10 +7,10 @@ import type { CodeExample } from "@/lib/interfaces" import { useBentoBox } from "@/components/Homepage/useBentoBox" import BlockHeap from "@/components/icons/block-heap.svg" +import BuildAppsIcon from "@/components/icons/build-apps.svg" import EthGlyphIcon from "@/components/icons/eth-glyph.svg" import EthTokenIcon from "@/components/icons/eth-token.svg" import PickWalletIcon from "@/components/icons/eth-wallet.svg" -import ChooseNetworkIcon from "@/components/icons/network-layers.svg" import TryAppsIcon from "@/components/icons/phone-homescreen.svg" import RoadmapSign from "@/components/icons/roadmap-sign.svg" import Whitepaper from "@/components/icons/whitepaper.svg" @@ -103,14 +103,6 @@ export const useHome = () => { className: "text-accent-a hover:text-accent-a-hover", eventName: "get eth", }, - { - label: t("page-index:page-index-cta-networks-label"), - description: t("page-index:page-index-cta-networks-description"), - href: "/layer-2/", // TODO: Update with new networks page when ready - Svg: ChooseNetworkIcon, - className: "text-accent-b hover:text-accent-b-hover", - eventName: "L2", - }, { label: t("page-index:page-index-cta-dapps-label"), description: t("page-index:page-index-cta-dapps-description"), @@ -122,6 +114,14 @@ export const useHome = () => { ), eventName: "dapps", }, + { + label: t("page-index:page-index-cta-build-apps-label"), + description: t("page-index:page-index-cta-build-apps-description"), + href: "/developers/", + Svg: BuildAppsIcon, + className: "text-accent-b hover:text-accent-b-hover", + eventName: "build apps", + }, ] const popularTopics = [ diff --git a/src/components/icons/build-apps.svg b/src/components/icons/build-apps.svg new file mode 100644 index 00000000000..e81a4467227 --- /dev/null +++ b/src/components/icons/build-apps.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/components/ui/carousel.tsx b/src/components/ui/carousel.tsx index 32b67c80cfb..e305c16900b 100644 --- a/src/components/ui/carousel.tsx +++ b/src/components/ui/carousel.tsx @@ -1,9 +1,11 @@ +// TODO: Fix RTL compatibility + import * as React from "react" import useEmblaCarousel, { type UseEmblaCarouselType, } from "embla-carousel-react" +import { MdChevronLeft, MdChevronRight } from "react-icons/md" -import { ChevronNext, ChevronPrev } from "@/components/Chevron" import { Button } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" @@ -207,15 +209,15 @@ const CarouselPrevious = React.forwardRef< className={cn( "absolute h-8 w-8 rounded-full", orientation === "horizontal" - ? "left-5 top-1/2 -translate-y-1/2" - : "-top-12 left-1/2 -translate-x-1/2 rotate-90", + ? "start-5 top-1/2 -translate-y-1/2" + : "-top-12 start-1/2 -translate-x-1/2 rotate-90", className )} disabled={!canScrollPrev} onClick={scrollPrev} {...props} > - + Previous slide ) @@ -236,15 +238,15 @@ const CarouselNext = React.forwardRef< className={cn( "absolute h-8 w-8 rounded-full", orientation === "horizontal" - ? "right-5 top-1/2 -translate-y-1/2" - : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", + ? "end-5 top-1/2 -translate-y-1/2" + : "-bottom-12 start-1/2 -translate-x-1/2 rotate-90", className )} disabled={!canScrollNext} onClick={scrollNext} {...props} > - + Next slide ) diff --git a/src/data/community-events.json b/src/data/community-events.json index f01854403b6..43cd0fd2a46 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -667,8 +667,8 @@ }, { "title": "ETHVietnam 2025", - "startDate": "2025-05-23", - "endDate": "2025-05-24", + "startDate": "2025-08-09", + "endDate": "2025-08-10", "href": "https://eth-vietnam.com", "location": "HCMC, VNM", "description": "", diff --git a/src/data/consensus-bounty-hunters.json b/src/data/consensus-bounty-hunters.json index 32ce0c5f047..99af853f170 100644 --- a/src/data/consensus-bounty-hunters.json +++ b/src/data/consensus-bounty-hunters.json @@ -50,8 +50,8 @@ "score": 5000 }, { - "username": "asymmetric-research", - "name": "Giuseppe Cocomazzi (Asymmetric Research) ", + "username": "sbudella-gco", + "name": "Giuseppe Cocomazzi", "score": 5000 }, { diff --git a/src/data/roadmap/releases.tsx b/src/data/roadmap/releases.tsx index ca06fd300d1..70d57f6ffc5 100644 --- a/src/data/roadmap/releases.tsx +++ b/src/data/roadmap/releases.tsx @@ -6,14 +6,36 @@ import Layer2HubHeroImage from "@/public/images/heroes/layer-2-hub-hero.jpg" import QuizzesHubHeroImage from "@/public/images/heroes/quizzes-hub-hero.png" import FusakaImage from "@/public/images/roadmap/roadmap-fusaka.png" import PectraImage from "@/public/images/roadmap/roadmap-pectra.png" -interface Release { + +type DateString = + `2${number}${number}${number}-${number}${number}-${number}${number}` +type YearString = `2${number}${number}${number}` + +interface BaseRelease { image: StaticImageData releaseName: string - releaseDate: string content: React.ReactNode href: string } +interface ReleaseWithDate extends BaseRelease { + releaseDate: DateString + plannedReleaseYear?: never +} + +interface ReleaseWithYear extends BaseRelease { + releaseDate?: never + plannedReleaseYear: YearString +} + +interface ReleaseUnscheduled extends BaseRelease { + releaseDate?: never + plannedReleaseYear?: never +} + +// Release may have either a releaseDate or a plannedReleaseYear, but not both. +export type Release = ReleaseWithDate | ReleaseWithYear | ReleaseUnscheduled + export const releasesData: Release[] = [ { image: DevelopersHubHeroImage, @@ -144,7 +166,7 @@ export const releasesData: Release[] = [ { image: FusakaImage, releaseName: "Fusaka", - releaseDate: "2025", + plannedReleaseYear: "2025", content: (

@@ -172,7 +194,7 @@ export const releasesData: Release[] = [ { image: GuidesHubHeroImage, releaseName: "Glamsterdam", - releaseDate: "2026", + plannedReleaseYear: "2026", content: (

Discussed for Glamsterdam

diff --git a/src/data/translationProgress.json b/src/data/translationProgress.json index 78263040575..f5c0b2166f5 100644 --- a/src/data/translationProgress.json +++ b/src/data/translationProgress.json @@ -93,7 +93,7 @@ { "languageId": "de", "words": { - "approved": 198291, + "approved": 198769, "total": 280914 } }, @@ -114,7 +114,7 @@ { "languageId": "el", "words": { - "approved": 266720, + "approved": 268889, "total": 280914 } }, @@ -128,7 +128,7 @@ { "languageId": "es-EM", "words": { - "approved": 254050, + "approved": 255093, "total": 280914 } }, @@ -149,7 +149,7 @@ { "languageId": "fa", "words": { - "approved": 242192, + "approved": 242503, "total": 280914 } }, @@ -177,14 +177,14 @@ { "languageId": "fr", "words": { - "approved": 263694, + "approved": 272940, "total": 280914 } }, { "languageId": "ga-IE", "words": { - "approved": 175704, + "approved": 199875, "total": 280976 } }, @@ -240,7 +240,7 @@ { "languageId": "hu", "words": { - "approved": 257130, + "approved": 258157, "total": 280914 } }, @@ -254,7 +254,7 @@ { "languageId": "id", "words": { - "approved": 128250, + "approved": 128565, "total": 280914 } }, @@ -268,7 +268,7 @@ { "languageId": "it", "words": { - "approved": 260583, + "approved": 260828, "total": 280914 } }, @@ -387,7 +387,7 @@ { "languageId": "ms", "words": { - "approved": 70066, + "approved": 73490, "total": 280914 } }, @@ -450,7 +450,7 @@ { "languageId": "pl", "words": { - "approved": 106822, + "approved": 107027, "total": 280914 } }, @@ -464,7 +464,7 @@ { "languageId": "pt-BR", "words": { - "approved": 261079, + "approved": 262356, "total": 280914 } }, @@ -611,7 +611,7 @@ { "languageId": "tr", "words": { - "approved": 247156, + "approved": 247464, "total": 280914 } }, @@ -667,7 +667,7 @@ { "languageId": "zh-CN", "words": { - "approved": 264644, + "approved": 266470, "total": 280914 } }, diff --git a/src/intl/am/page-index.json b/src/intl/am/page-index.json index 2adaf073310..6b8f8565e96 100644 --- a/src/intl/am/page-index.json +++ b/src/intl/am/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "መተግበሪያዎችን ይሞክሩ", "page-index-cta-get-eth-description": "የ Ethereum መገበያያ", "page-index-cta-get-eth-label": "ETHን ያግኙ", - "page-index-cta-networks-description": "በአነስተኛ ክፍያዎች ይደሰቱ", - "page-index-cta-networks-label": "አውታረ መረብ ይምረጡ", "page-index-cta-wallet-description": "መለያ ይፍጠሩ እና ንብረቶችን ያስተዳድሩ", "page-index-cta-wallet-label": "ቦርሳ ይምረጡ", "page-index-description": "ለአዳዲስ መተግበሪያዎች እና የ blockchain አውታረ መረቦች መሪ መድረክ", + "page-index-cta-build-apps-description": "የመጀመሪያውን መተግበሪያዎት ይፍጠሩ", + "page-index-cta-build-apps-label": "ልማትን ይጀምሩ", "page-index-developers-code-example-description-0": "እርስዎ ፕሮግራም ባደረጉት ሎጂክ የሚሠራ ባንክ ይገንቡ", "page-index-developers-code-example-description-1": "ከመተግበሪያ ወደ መተግበሪያ ሊያስተላልፏቸው እና ጥቅም ላይ ሊያውሏቸው የምችሉትን ቶከኖች ይፍጠሩ።", "page-index-developers-code-example-description-2": "ከ Ethereum እና ከሌሎች መተግበሪያዎች ጋር ለመስተጋበር ነባር ቋንቋዎችን ይጠቀሙ።", diff --git a/src/intl/ar/page-index.json b/src/intl/ar/page-index.json index 842c3a91f8a..166534f9208 100644 --- a/src/intl/ar/page-index.json +++ b/src/intl/ar/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "جرب التطبيقات", "page-index-cta-get-eth-description": "عملة تطبيقات إيثريوم", "page-index-cta-get-eth-label": "احصل على عملات إثير", - "page-index-cta-networks-description": "استمتع مقابل رسوم بسيطة", - "page-index-cta-networks-label": "اختر شبكة", "page-index-cta-wallet-description": "إنشاء الحسابات وإدارة الأصول", "page-index-cta-wallet-label": "اختر محفظة", "page-index-description": "المنصة الرائدة للتطبيقات المبتكرة وشبكات البلوكتشين", + "page-index-cta-build-apps-description": "أنشئ أول تطبيق لك", + "page-index-cta-build-apps-label": "ابدأ التطوير", "page-index-developers-code-example-description-0": "بإمكانك بناء مصرف يدعمه المنطق الذي تقوم ببرمجته بنفسك", "page-index-developers-code-example-description-1": "يمكنك إنشاء رموز بحيث يمكنك نقلها واستخدامها عبر التطبيقات", "page-index-developers-code-example-description-2": "بإمكانك استخدام اللغات الموجودة للتفاعل مع إيثريوم والتطبيقات الأخرى", diff --git a/src/intl/az/page-index.json b/src/intl/az/page-index.json index 2760ddd4938..e36c2e93b00 100644 --- a/src/intl/az/page-index.json +++ b/src/intl/az/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "Tətbiqləri sınayın", "page-index-cta-get-eth-description": "Ethereum-un valyutası", "page-index-cta-get-eth-label": "ETH əldə et", - "page-index-cta-networks-description": "Ödənilən haqların minimal olmasından yararlanın", - "page-index-cta-networks-label": "Şəbəkə seçin", "page-index-cta-wallet-description": "Hesablar yaradın və aktivləri idarə edin", "page-index-cta-wallet-label": "Pul kisəsi seç", "page-index-description": "Yenilikçi tətbiqlər və blokçeyn şəbəkələri üçün qabaqcıl platforma", + "page-index-cta-build-apps-description": "İlk tətbiqinizi yaradın", + "page-index-cta-build-apps-label": "İnkişaf etməyə başlayın", "page-index-developers-code-example-description-0": "Proqramlaşdırdığınız məntiqlə işləyən bir bank qurun", "page-index-developers-code-example-description-1": "Tətbiqlər arasında köçürə və istifadə edə biləcəyiniz tokenlər yaradın", "page-index-developers-code-example-description-2": "Ethereum və digər tətbiqlərlə qarşılıqlı əlaqə yaratmaq üçün mövcud dillərdən istifadə edin", diff --git a/src/intl/be/page-index.json b/src/intl/be/page-index.json index f21c4bd168e..e5867d7ba6d 100644 --- a/src/intl/be/page-index.json +++ b/src/intl/be/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "Паспрабуйце выкарыстаць дадаткі", "page-index-cta-get-eth-description": "Валюта Ethereum", "page-index-cta-get-eth-label": "Атрымайце ETH", - "page-index-cta-networks-description": "Мінімальныя камісіі", - "page-index-cta-networks-label": "Выбар сеткі", "page-index-cta-wallet-description": "Стварэнне акаўнтаў і кіраванне актывамі", "page-index-cta-wallet-label": "Выберыце гаманец", "page-index-description": "Вядучая платформа для інавацыйных дадаткаў і блокчэйн-сетак", + "page-index-cta-build-apps-description": "Стварыце свой першы дадатак", + "page-index-cta-build-apps-label": "Пачніце распрацоўку", "page-index-developers-code-example-description-0": "Стварыце банк, які кіруецца запраграмаванай вамі логікай", "page-index-developers-code-example-description-1": "Стварайце токены, якія потым можна перадаваць і выкарыстоўваць у разнастайных дадатках", "page-index-developers-code-example-description-2": "Выкарыстоўвайце існуючыя мовы для ўзаемадзеяння з Ethereum і іншымі дадаткамі", diff --git a/src/intl/bg/page-index.json b/src/intl/bg/page-index.json index bc5921f398a..092ee0e7a2d 100644 --- a/src/intl/bg/page-index.json +++ b/src/intl/bg/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "Опитайте приложенията", "page-index-cta-get-eth-description": "Валутата на Eтереум", "page-index-cta-get-eth-label": "Вземете ETH", - "page-index-cta-networks-description": "Насладете се на минимални такси", - "page-index-cta-networks-label": "Изберете мрежа", "page-index-cta-wallet-description": "Създавайте акаунти и управлявайте активи", "page-index-cta-wallet-label": "Изберете портфейл", "page-index-description": "Водещата платформа за иновативни приложения и блокчейн мрежи", + "page-index-cta-build-apps-description": "Създайте своето първо приложение", + "page-index-cta-build-apps-label": "Започнете разработка", "page-index-developers-code-example-description-0": "Изградете банка, управлявана от програмирана от вас логика", "page-index-developers-code-example-description-1": "Създайте токени, които да прехвърляте и да използвате в различни приложения", "page-index-developers-code-example-description-2": "Използвайте съществуващите езици, за да взаимодействате с Етереум и други приложения", diff --git a/src/intl/bn/page-index.json b/src/intl/bn/page-index.json index 157d6ba1cd6..7b32f716e02 100644 --- a/src/intl/bn/page-index.json +++ b/src/intl/bn/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "অ্যাপগুলি ব্যাবহার করে দেখুন", "page-index-cta-get-eth-description": "ইথেরিয়ামের কারেন্সি", "page-index-cta-get-eth-label": "ETH নিন", - "page-index-cta-networks-description": "ন্যুনতম ফি উপভোগ করুন", - "page-index-cta-networks-label": "একটি নেটওয়ার্ক বেছে নিন", "page-index-cta-wallet-description": "অ্যাকাউন্ট তৈরি করুন এবং সম্পদ ব্যবস্থাপনা করুন", "page-index-cta-wallet-label": "একটি ওয়ালেট বেছে নিন", "page-index-description": "উদ্ভাবনী অ্যাপ এবং ব্লকচেইন নেটওয়ার্কগুলির জন্য অগ্রগণ্য প্ল্যাটফর্ম", + "page-index-cta-build-apps-description": "আপনার প্রথম অ্যাপ তৈরি করুন", + "page-index-cta-build-apps-label": "উন্নয়ন শুরু করুন", "page-index-developers-code-example-description-0": "আপনার তৈরি করা প্রোগ্রামের যুক্তি অনুযায়ী চালিত একটি ব্যাংক নির্মাণ করুন", "page-index-developers-code-example-description-1": "অ্যাপ্লিকেশনগুলি জুড়ে ট্রান্সফার এবং ব্যবহার করতে পারবেন এমন টোকেনগুলি তৈরি করুন", "page-index-developers-code-example-description-2": "ইথেরিয়াম এবং অন্যান্য অ্যাপ্লিকেশনগুলির সাথে পারস্পরিক যোগাযোগ করতে বিদ্যমান ভাষাগুলি ব্যবহার করুন", diff --git a/src/intl/bs/page-index.json b/src/intl/bs/page-index.json index 95024f781cd..1d16bfa829f 100644 --- a/src/intl/bs/page-index.json +++ b/src/intl/bs/page-index.json @@ -35,11 +35,11 @@ "page-index-cta-dapps-label": "Isprobajte aplikacije", "page-index-cta-get-eth-description": "Valuta Ethereuma", "page-index-cta-get-eth-label": "Nabavite ETH", - "page-index-cta-networks-description": "Uživajte u minimalnim naknadama", - "page-index-cta-networks-label": "Odaberite mrežu", "page-index-cta-wallet-description": "Kreirajte račune i upravljajte sredstvima", "page-index-cta-wallet-label": "Odaberite novčanik", "page-index-description": "Vodeća platforma za inovativne aplikacije i blockchain mreže", + "page-index-cta-build-apps-description": "Kreirajte svoju prvu aplikaciju", + "page-index-cta-build-apps-label": "Započnite razvoj", "page-index-developers-code-example-description-0": "Izgradite banku uz pomoć logike koju ste vi programirali", "page-index-developers-code-example-description-1": "Kreirajte tokene koje možete prenositi i koristiti u različitim aplikacijama", "page-index-developers-code-example-description-2": "Koristite postojeće jezike za interakciju s Ethereumom i drugim aplikacijama", diff --git a/src/intl/ca/page-index.json b/src/intl/ca/page-index.json index 140b18096f6..66c632d1d96 100644 --- a/src/intl/ca/page-index.json +++ b/src/intl/ca/page-index.json @@ -37,11 +37,11 @@ "page-index-cta-dapps-label": "Prova aplicacions", "page-index-cta-get-eth-description": "La moneda d'Ethereum", "page-index-cta-get-eth-label": "Aconsegueix ETH", - "page-index-cta-networks-description": "Gaudeix d'una comissió mínima", - "page-index-cta-networks-label": "Tria una xarxa", "page-index-cta-wallet-description": "Crea comptes i administra actius", "page-index-cta-wallet-label": "Selecciona una cartera", "page-index-description": "La plataforma líder per a aplicacions innovadores i xarxes de cadena de blocs", + "page-index-cta-build-apps-description": "Creï la seva primera aplicació", + "page-index-cta-build-apps-label": "Comenci a crear", "page-index-developers-code-example-description-0": "Crea un banc que funcioni amb la lògica que hagis programat", "page-index-developers-code-example-description-1": "Crea tokens per transferir i utilitzar en diverses aplicacions", "page-index-developers-code-example-description-2": "Utilitza els llenguatges existents per interactuar amb Ethereum i altres aplicacions", diff --git a/src/intl/cs/page-index.json b/src/intl/cs/page-index.json index ed7e8827f12..ae0d379b6f8 100644 --- a/src/intl/cs/page-index.json +++ b/src/intl/cs/page-index.json @@ -37,11 +37,11 @@ "page-index-cta-dapps-label": "Vyzkoušejte aplikace", "page-index-cta-get-eth-description": "Měna Ethereum", "page-index-cta-get-eth-label": "Získat ETH", - "page-index-cta-networks-description": "Minimální poplatky", - "page-index-cta-networks-label": "Zvolte síť", "page-index-cta-wallet-description": "Vytvořte účty a spravujte aktiva", "page-index-cta-wallet-label": "Vyberte si peněženku", "page-index-description": "Přední platforma pro inovativní aplikace a blockchainové sítě", + "page-index-cta-build-apps-description": "Vytvořte svou první aplikaci", + "page-index-cta-build-apps-label": "Začněte vyvíjet", "page-index-developers-code-example-description-0": "Vytvořte banku založenou na vámi naprogramované logice", "page-index-developers-code-example-description-1": "Vytvořte tokeny, které můžete přenášet a používat v různých aplikacích", "page-index-developers-code-example-description-2": "K interakci s Ethereem a ostatními aplikacemi používejte existující jazyky", diff --git a/src/intl/da/page-index.json b/src/intl/da/page-index.json index cbe92cb2638..742e984857c 100644 --- a/src/intl/da/page-index.json +++ b/src/intl/da/page-index.json @@ -36,11 +36,11 @@ "page-index-cta-dapps-label": "Prøv apps", "page-index-cta-get-eth-description": "Ethereum-valutaen", "page-index-cta-get-eth-label": "Få ETH", - "page-index-cta-networks-description": "Nyd godt af minimale gebyrer", - "page-index-cta-networks-label": "Vælg et netværk", "page-index-cta-wallet-description": "Opret konti og styr aktiver", "page-index-cta-wallet-label": "Vælg en wallet", "page-index-description": "Den førende platform for innovative apps og blockchain-netværk", + "page-index-cta-build-apps-description": "Opret Deres første app", + "page-index-cta-build-apps-label": "Start udviklingen", "page-index-developers-code-example-description-0": "Byg en bank drevet af logik, du har programmeret", "page-index-developers-code-example-description-1": "Opret tokens, som du kan overføre og bruge på tværs af applikationer", "page-index-developers-code-example-description-2": "Brug eksisterende sprog til at interagere med Ethereum og andre applikationer", diff --git a/src/intl/de/page-index.json b/src/intl/de/page-index.json index dbc4ed51838..2428939eb87 100644 --- a/src/intl/de/page-index.json +++ b/src/intl/de/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Anwendungen ausprobieren", "page-index-cta-get-eth-description": "Die Währung von Ethereum", "page-index-cta-get-eth-label": "ETH erwerben", - "page-index-cta-networks-description": "Profitiere von minimalen Gebühren", - "page-index-cta-networks-label": "Wähle ein Netzwerk", "page-index-cta-wallet-description": "Erstelle Konten und verwalte Vermögenswerte", "page-index-cta-wallet-label": "Wähle eine Wallet", + "page-index-cta-build-apps-description": "Erstellen Sie Ihre erste App", + "page-index-cta-build-apps-label": "Jetzt entwickeln", "page-index-description": "Die führende Plattform für innovative Anwendungen und Blockchain-Netzwerke", "page-index-developers-code-example-description-0": "Schaffe eine Bank, die der Logik folgt, die du programmiert hast", "page-index-developers-code-example-description-1": "Erstelle Token, die du anwendungsübergreifend transferieren und verwenden kannst", diff --git a/src/intl/el/page-index.json b/src/intl/el/page-index.json index 3907aecb72a..39a6419492e 100644 --- a/src/intl/el/page-index.json +++ b/src/intl/el/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Δοκιμή Εφαρμογών", "page-index-cta-get-eth-description": "Το νόμισμα του Ethereum", "page-index-cta-get-eth-label": "Αγορά ETH", - "page-index-cta-networks-description": "Επωφεληθείτε από τις ελάχιστες χρεώσεις", - "page-index-cta-networks-label": "Επιλογή Δικτύου", "page-index-cta-wallet-description": "Δημιουργία λογαριασμών & διαχείριση περιουσιακών στοιχείων", "page-index-cta-wallet-label": "Επιλογή Πορτοφολιού", + "page-index-cta-build-apps-description": "Δημιουργήστε την πρώτη σας εφαρμογή", + "page-index-cta-build-apps-label": "Ξεκινήστε την ανάπτυξη", "page-index-description": "Η ηγετική πλατφόρμα για καινοτόμες εφαρμογές και δίκτυα κρυπτοαλυσίδων", "page-index-developers-code-example-description-0": "Δημιουργήστε μια τράπεζα που λειτουργεί με λογική προγραμματισμένη από εσάς", "page-index-developers-code-example-description-1": "Δημιουργήστε κρυπτοπαραστατικά που μπορείτε να μεταφέρετε και να χρησιμοποιείτε μεταξύ των εφαρμογών", diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index b1207c423f4..3888609c1df 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Try apps", "page-index-cta-get-eth-description": "The currency of Ethereum", "page-index-cta-get-eth-label": "Get ETH", - "page-index-cta-networks-description": "Enjoy minimal fees", - "page-index-cta-networks-label": "Choose a network", "page-index-cta-wallet-description": "Create accounts & manage assets", "page-index-cta-wallet-label": "Pick a wallet", + "page-index-cta-build-apps-description": "Create your first app", + "page-index-cta-build-apps-label": "Start building", "page-index-description": "The leading platform for innovative apps and blockchain networks", "page-index-developers-code-example-description-0": "Build a bank powered by logic you've programmed", "page-index-developers-code-example-description-1": "Create tokens that you can transfer and use across applications", diff --git a/src/intl/es/page-index.json b/src/intl/es/page-index.json index 890fc921a6c..3b8a1934923 100644 --- a/src/intl/es/page-index.json +++ b/src/intl/es/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Pruebe apps", "page-index-cta-get-eth-description": "La moneda de Ethereum", "page-index-cta-get-eth-label": "Consiga ETH", - "page-index-cta-networks-description": "Aproveche tarifas mínimas", - "page-index-cta-networks-label": "Elija una red", "page-index-cta-wallet-description": "Cree cuentas y administre activos", "page-index-cta-wallet-label": "Seleccione una billetera", + "page-index-cta-build-apps-description": "Cree su primera aplicación", + "page-index-cta-build-apps-label": "Empiece a desarrollar", "page-index-description": "La plataforma líder para aplicaciones innovadoras y redes de cadena de bloques", "page-index-developers-code-example-description-0": "Construya un banco impulsado por la lógica que programe", "page-index-developers-code-example-description-1": "Cree tókenes que pueda transferir y usar en distintas aplicaciones", diff --git a/src/intl/fa/page-index.json b/src/intl/fa/page-index.json index 2e5a5ae6a6a..fc790ff9827 100644 --- a/src/intl/fa/page-index.json +++ b/src/intl/fa/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "اپلیکیشن‌ها را امتحان کنید", "page-index-cta-get-eth-description": "واحد پول اتریوم", "page-index-cta-get-eth-label": "دریافت ETH", - "page-index-cta-networks-description": "از حداقل هزینه‌ها لذت ببرید", - "page-index-cta-networks-label": "یک شبکه را انتخاب کنید", "page-index-cta-wallet-description": "ایجاد حساب‌ها و مدیریت دارایی‌ها", "page-index-cta-wallet-label": "یک کیف پول را انتخاب کنید", + "page-index-cta-build-apps-description": "اولین اپ خود را بسازید", + "page-index-cta-build-apps-label": "توسعه را آغاز کنید", "page-index-description": "پلتفرم پیشرو برای برنامه‌های نوآورانه و شبکه‌های بلاکچین", "page-index-developers-code-example-description-0": "بانکی را بسازید که توسط منطقی که برنامه‌نویسی کرده‌اید، پشتیبانی می‌شود", "page-index-developers-code-example-description-1": "توکن‌هایی را ایجاد کنید که می‌توانید آن‌ها را انتقال دهید و در برنامه‌های مختلف استفاده کنید", diff --git a/src/intl/fi/page-index.json b/src/intl/fi/page-index.json index d74fc04acc0..d74042b3331 100644 --- a/src/intl/fi/page-index.json +++ b/src/intl/fi/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Kokeile sovelluksia", "page-index-cta-get-eth-description": "Ethereumin valuutta", "page-index-cta-get-eth-label": "Hanki Ethereitä", - "page-index-cta-networks-description": "Nauti minimaalista kuluista", - "page-index-cta-networks-label": "Valitse verkko", "page-index-cta-wallet-description": "Luo tilejä ja hallitse resursseja", "page-index-cta-wallet-label": "Valitse lompakko", + "page-index-cta-build-apps-description": "Luokaa ensimmäinen sovelluksenne", + "page-index-cta-build-apps-label": "Aloittakaa kehittäminen", "page-index-description": "Innovatiivisten sovellusten ja lohkoketjuverkkojen johtava alusta", "page-index-developers-code-example-description-0": "Luo ohjelmoimasi logiikan mukainen pankki", "page-index-developers-code-example-description-1": "Voit luoda rahakkeita, joita voi siirtää ja käyttää eri sovellusten välillä", diff --git a/src/intl/fil/page-index.json b/src/intl/fil/page-index.json index 17f9b3ea449..1e9177fbc92 100644 --- a/src/intl/fil/page-index.json +++ b/src/intl/fil/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Subukan ang mga app", "page-index-cta-get-eth-description": "Ang pera ng Ethereum", "page-index-cta-get-eth-label": "Kumuha ng ETH", - "page-index-cta-networks-description": "I-enjoy ang mabababang bayarin", - "page-index-cta-networks-label": "Pumili ng network", "page-index-cta-wallet-description": "Gumawa ng mga account at pamahalaan ang mga asset", "page-index-cta-wallet-label": "Pumili ng wallet", + "page-index-cta-build-apps-description": "Gumawa ng iyong unang app", + "page-index-cta-build-apps-label": "Simulan ang pagbuo", "page-index-description": "Ang nangungunang platform para sa mga makabagong app at network ng blockchain", "page-index-developers-code-example-description-0": "Bumuo ng bangko na pinapagana ng lohikang ikaw ang nagprograma", "page-index-developers-code-example-description-1": "Gumawa ng mga token na maaaring mailipat at magagamit sa iba't ibang application", diff --git a/src/intl/fr/page-index.json b/src/intl/fr/page-index.json index e54920ff520..925b197df43 100644 --- a/src/intl/fr/page-index.json +++ b/src/intl/fr/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Essayer des applications", "page-index-cta-get-eth-description": "La devise d’Ethereum", "page-index-cta-get-eth-label": "Obtenir de l'ETH", - "page-index-cta-networks-description": "Bénéficiez de frais minimes", - "page-index-cta-networks-label": "Sélectionner un réseau", "page-index-cta-wallet-description": "Créer des comptes et gérer des actifs", "page-index-cta-wallet-label": "Choisissez un portefeuille", + "page-index-cta-build-apps-description": "Créez votre première application", + "page-index-cta-build-apps-label": "Commencez à développer", "page-index-description": "La principale plateforme pour les applications innovantes et les réseaux blockchain", "page-index-developers-code-example-description-0": "Construisez une banque alimentée par la logique que vous avez programmée", "page-index-developers-code-example-description-1": "Créez des jetons que vous pouvez transférer et utiliser dans différentes applications", diff --git a/src/intl/ga/page-index.json b/src/intl/ga/page-index.json index f75d6466914..aea619a35e0 100644 --- a/src/intl/ga/page-index.json +++ b/src/intl/ga/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Bain triail as aipeanna", "page-index-cta-get-eth-description": "Airgeadra Ethereum", "page-index-cta-get-eth-label": "Faigh ETH", - "page-index-cta-networks-description": "Bain leas as táillí íosta", - "page-index-cta-networks-label": "Roghnaigh líonra", "page-index-cta-wallet-description": "Cruthaigh cuntais agus bainistigh sócmhainní", "page-index-cta-wallet-label": "Pioc sparán", + "page-index-cta-build-apps-description": "Cruthaigh do chéad aip", + "page-index-cta-build-apps-label": "Tosaígí ar fhorbairt", "page-index-description": "An t-ardán is mó le haghaidh aipeanna nuálacha agus líonraí blocshlabhra", "page-index-developers-code-example-description-0": "Tóg banc atá faoi thiomáint ag an loighic atá ríomhchláraithe agat féin", "page-index-developers-code-example-description-1": "Cruthaigh comharthaí gur féidir leat a aistriú agus a úsáid thar feidhmchláir", diff --git a/src/intl/gl/page-index.json b/src/intl/gl/page-index.json index b255745b43d..ecc6f850066 100644 --- a/src/intl/gl/page-index.json +++ b/src/intl/gl/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Probar aplicacións", "page-index-cta-get-eth-description": "A divisa de Ethereum", "page-index-cta-get-eth-label": "Obter ETH", - "page-index-cta-networks-description": "Aproveita as tarifas mínimas", - "page-index-cta-networks-label": "Selecciona una rede", "page-index-cta-wallet-description": "Crear contas e xestionar activos", "page-index-cta-wallet-label": "Escolla unha carteira", + "page-index-cta-build-apps-description": "Cree a súa primeira aplicación", + "page-index-cta-build-apps-label": "Comece a crear", "page-index-description": "A plataforma líder das aplicacións innovadoras e as redes de blockchain", "page-index-developers-code-example-description-0": "Constrúe un banco impulsado pola lóxica que programaches", "page-index-developers-code-example-description-1": "Crea tokens que pode transferir e utilizar en todas as aplicacións", diff --git a/src/intl/gu/page-index.json b/src/intl/gu/page-index.json index 773a9b44383..87aef12942c 100644 --- a/src/intl/gu/page-index.json +++ b/src/intl/gu/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "ઍપ્સ અજમાવી જુઓ", "page-index-cta-get-eth-description": "Ethereumનું ચલણ", "page-index-cta-get-eth-label": "મેળવો ETH", - "page-index-cta-networks-description": "ન્યૂનતમ ફીનો આનંદ માણો", - "page-index-cta-networks-label": "નેટવર્ક પસંદ કરો", "page-index-cta-wallet-description": "એકાઉન્ટ્સ બનાવો અને સંપત્તિઓનું સંચાલન કરો", "page-index-cta-wallet-label": "વૉલેટ પસંદ કરો", + "page-index-cta-build-apps-description": "તમારી પ્રથમ એપ બનાવો", + "page-index-cta-build-apps-label": "ડેવલપમેન્ટ શરૂ કરો", "page-index-description": "નવીન ઍપ્સ અને બ્લોકચેન નેટવર્ક્સ માટેનું અગ્રણી પ્લેટફોર્મ", "page-index-developers-code-example-description-0": "તમે પ્રોગ્રામ કરેલા લૉજિક દ્વારા સંચાલિત બેંક બનાવો", "page-index-developers-code-example-description-1": "ટોકન્સ બનાવો કે જેને તમે ટ્રાન્સફર કરી શકો છો અને સમગ્ર ઍપ્લિકેશન્સમાં ઉપયોગ કરી શકો છો", diff --git a/src/intl/ha/page-index.json b/src/intl/ha/page-index.json index bd891a01dbf..5b5051b67c3 100644 --- a/src/intl/ha/page-index.json +++ b/src/intl/ha/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Gwada amfani da manhajoji", "page-index-cta-get-eth-description": "Kuɗin Ethereum", "page-index-cta-get-eth-label": "Samun ETH", - "page-index-cta-networks-description": "Ci moriyar kuɗade kaɗan", - "page-index-cta-networks-label": "Zaɓi cibiyar sadarwa", "page-index-cta-wallet-description": "Ƙirƙiri asusu & gudanar da kadarori", "page-index-cta-wallet-label": "Zaɓi lalita", + "page-index-cta-build-apps-description": "Ƙirƙiri aikace-aikacenka na farko", + "page-index-cta-build-apps-label": "Fara haɓaka", "page-index-description": "Dandalin da ke jagorantar ƙirƙirarrun manhajoji da cibiyoyin bulokcen", "page-index-developers-code-example-description-0": "Samar da bankin da tunaninku ke ƙarfafa ma wa", "page-index-developers-code-example-description-1": "Ƙirƙiri kadarorin dijital waɗanda za ku iya yin tiransifa tare da amfani da su a dukkan manhajoji", diff --git a/src/intl/he/page-index.json b/src/intl/he/page-index.json index a9638c1ef77..cf39ef864a3 100644 --- a/src/intl/he/page-index.json +++ b/src/intl/he/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "נסה אפליקציות", "page-index-cta-get-eth-description": "המטבע של אתריום", "page-index-cta-get-eth-label": "קבל ETH", - "page-index-cta-networks-description": "תיהנה מעמלות מינימליות", - "page-index-cta-networks-label": "בחר רשת", "page-index-cta-wallet-description": "צור חשבונות ונהל נכסים", "page-index-cta-wallet-label": "בחרו ארנק", + "page-index-cta-build-apps-description": "צור את האפליקציה הראשונה שלך", + "page-index-cta-build-apps-label": "התחילו לפתח", "page-index-description": "הפלטפורמה המובילה לאפליקציות חדשניות ורשתות בלוקצ'יין", "page-index-developers-code-example-description-0": "בנה בנק המופעל על ידי לוגיקה שתכנתת", "page-index-developers-code-example-description-1": "צור טוקנים שתוכל להעביר ולהשתמש בהם בין אפליקציות", diff --git a/src/intl/hi/page-index.json b/src/intl/hi/page-index.json index a87decebd81..fdc23b8b480 100644 --- a/src/intl/hi/page-index.json +++ b/src/intl/hi/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "ऐप्स आज़माएं", "page-index-cta-get-eth-description": "एथेरियम की करेंसी", "page-index-cta-get-eth-label": "ETH प्राप्त करें", - "page-index-cta-networks-description": "न्यूनतम शुल्क का आनंद लें", - "page-index-cta-networks-label": "नेटवर्क चुनें", "page-index-cta-wallet-description": "खाते बनाएं और संपत्ति प्रबंधित करें", "page-index-cta-wallet-label": "एक वॉलेट चुनें", + "page-index-cta-build-apps-description": "अपना पहला ऐप बनाएं", + "page-index-cta-build-apps-label": "विकास शुरू करें", "page-index-description": "इनोवेटिव ऐप्स और ब्लॉकचेन नेटवर्क के लिए प्रमुख प्लेटफ़ॉर्म", "page-index-developers-code-example-description-0": "आपके द्वारा प्रोग्राम किए गए लॉजिक से संचालित बैंक बनाएं", "page-index-developers-code-example-description-1": "ऐसे टोकन बनाएं, जिन्हें आप ट्रांसफ़र कर सकते हैं और कई अलग-अलग एप्लिकेशन पर उपयोग कर सकते हैं", diff --git a/src/intl/hr/page-index.json b/src/intl/hr/page-index.json index 5220666d41a..aec3ec13511 100644 --- a/src/intl/hr/page-index.json +++ b/src/intl/hr/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Isprobajte aplikacije", "page-index-cta-get-eth-description": "Ethereumova valuta", "page-index-cta-get-eth-label": "Nabavite ETH", - "page-index-cta-networks-description": "Uživajte u minimalnim naknadama", - "page-index-cta-networks-label": "Odaberite mrežu", "page-index-cta-wallet-description": "Izradite račune i upravljajte imovinom", "page-index-cta-wallet-label": "Odaberite novčanik", + "page-index-cta-build-apps-description": "Izradite svoju prvu aplikaciju", + "page-index-cta-build-apps-label": "Započnite razvoj", "page-index-description": "Vodeća platforma za inovativne aplikacije i mreže lanaca blokova", "page-index-developers-code-example-description-0": "Izradite banku upravljanu logikom koju ste sami programirali", "page-index-developers-code-example-description-1": "Izradite tokene koje možete prenositi i upotrebljavati u različitim aplikacijama", diff --git a/src/intl/hu/page-index.json b/src/intl/hu/page-index.json index ec9d62589f5..34b62b2ad2a 100644 --- a/src/intl/hu/page-index.json +++ b/src/intl/hu/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Próbálja ki az alkalmazásokat", "page-index-cta-get-eth-description": "Ez Ethereum pénzneme", "page-index-cta-get-eth-label": "ETH beszerzése", - "page-index-cta-networks-description": "Élvezze a minimális díjakat", - "page-index-cta-networks-label": "Válasszon hálózatot", "page-index-cta-wallet-description": "Hozzon létre fiókokat és kezelje eszközeit", "page-index-cta-wallet-label": "Válasszon egy tárcát", + "page-index-cta-build-apps-description": "Hozza létre első alkalmazását", + "page-index-cta-build-apps-label": "Kezdje el a fejlesztést", "page-index-description": "Az innovatív alkalmazások és blokklánc-hálózatok vezető platformja", "page-index-developers-code-example-description-0": "Építsen bankot, amely az Ön által programozott logikára épül", "page-index-developers-code-example-description-1": "Hozzon létre tokeneket, amelyeket az alkalmazások között is átvihet és használhat", diff --git a/src/intl/hy-am/page-index.json b/src/intl/hy-am/page-index.json index 2ee8bbd0c71..5eb27991f33 100644 --- a/src/intl/hy-am/page-index.json +++ b/src/intl/hy-am/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Փորձել հավելվածները", "page-index-cta-get-eth-description": "Էթերիումի արժույթը", "page-index-cta-get-eth-label": "Ստանալ ETH", - "page-index-cta-networks-description": "Վայելեք նվազագույն վճարները", - "page-index-cta-networks-label": "Ընտրեք ցանց", "page-index-cta-wallet-description": "Ստեղծեք հաշիվներ և կառավարեք ակտիվները", "page-index-cta-wallet-label": "Ընտրեք դրամապանակ", + "page-index-cta-build-apps-description": "Ստեղծեք ձեր առաջին հավելվածը", + "page-index-cta-build-apps-label": "Սկսեք զարգացնել", "page-index-description": "Առաջատար հարթակ նորարարական հավելվածների և բլոկչեյն ցանցերի համար", "page-index-developers-code-example-description-0": "Կառուցեք բանկ, որն աշխատում է ձեր ծրագրավորած տրամաբանությամբ", "page-index-developers-code-example-description-1": "Ստեղծեք token-ներ, որոնք կարող եք փոխանցել և օգտագործել տարբեր հավելվածներում", diff --git a/src/intl/id/page-index.json b/src/intl/id/page-index.json index 500c3570ffb..55cfec1a451 100644 --- a/src/intl/id/page-index.json +++ b/src/intl/id/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Coba aplikasi", "page-index-cta-get-eth-description": "Mata uang Ethereum", "page-index-cta-get-eth-label": "Dapatkan ETH", - "page-index-cta-networks-description": "Nikmati biaya minimal", - "page-index-cta-networks-label": "Pilih jaringan", "page-index-cta-wallet-description": "Buat akun & kelola aset", "page-index-cta-wallet-label": "Tentukan dompet", + "page-index-cta-build-apps-description": "Buatlah aplikasi pertama Anda", + "page-index-cta-build-apps-label": "Mulai mengembangkan", "page-index-description": "Platform terkemuka untuk aplikasi yang inovatif dan jaringan rantai blok", "page-index-developers-code-example-description-0": "Bangun bank yang dijalankan dengan logika yang telah Anda programkan", "page-index-developers-code-example-description-1": "Buat token yang dapat Anda transfer dan gunakan di seluruh aplikasi", diff --git a/src/intl/ig/page-index.json b/src/intl/ig/page-index.json index 4589a396aee..dca543e3460 100644 --- a/src/intl/ig/page-index.json +++ b/src/intl/ig/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Nwalee ngwa", "page-index-cta-get-eth-description": "Ego nke Ethereum", "page-index-cta-get-eth-label": "Nweta ETH", - "page-index-cta-networks-description": "Na-akwụ ụgwọ dị ala", - "page-index-cta-networks-label": "Họrọ otu netwọk", "page-index-cta-wallet-description": "Mepụta akaụntụ ma jikwaa akụ", "page-index-cta-wallet-label": "Họrọ akpaego", + "page-index-cta-build-apps-description": "Mepụta ngwa gị mbụ", + "page-index-cta-build-apps-label": "Bido mmepe", "page-index-description": "Ndi kachasi mma maka ngwa echeputara ohuru na netwọkụ blockchain", "page-index-developers-code-example-description-0": "Wulite ụlọ akụ nke ihe nghota imeputara na-akwado", "page-index-developers-code-example-description-1": "Mepụta akara ndị ị nwere ike ịnyefe ma jiri n'ofe ngwa", diff --git a/src/intl/it/page-index.json b/src/intl/it/page-index.json index 77099ebb028..6b0ceb53854 100644 --- a/src/intl/it/page-index.json +++ b/src/intl/it/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Prova le app", "page-index-cta-get-eth-description": "La valuta di Ethereum", "page-index-cta-get-eth-label": "Ottieni ETH", - "page-index-cta-networks-description": "Commissioni minime", - "page-index-cta-networks-label": "Scegli una rete", "page-index-cta-wallet-description": "Crea conti e gestisci asset", "page-index-cta-wallet-label": "Scegli un portafoglio", + "page-index-cta-build-apps-description": "Crei la Sua prima applicazione", + "page-index-cta-build-apps-label": "Inizi a sviluppare", "page-index-description": "La piattaforma leader per le app innovative e le reti blockchain", "page-index-developers-code-example-description-0": "Crea una banca basata sulla logica da te programmata", "page-index-developers-code-example-description-1": "Crea token trasferibili e utilizzabili tra più applicazioni", diff --git a/src/intl/ja/page-index.json b/src/intl/ja/page-index.json index bf769694a61..ebf07dbef73 100644 --- a/src/intl/ja/page-index.json +++ b/src/intl/ja/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "アプリを試す", "page-index-cta-get-eth-description": "イーサリアムの通貨", "page-index-cta-get-eth-label": "ETHを入手", - "page-index-cta-networks-description": "手数料が最小限", - "page-index-cta-networks-label": "ネットワークを選択", "page-index-cta-wallet-description": "アカウントの作成と資産の管理", "page-index-cta-wallet-label": "ウォレットを選ぶ", + "page-index-cta-build-apps-description": "最初のアプリを作成してください", + "page-index-cta-build-apps-label": "開発を開始", "page-index-description": "革新的なアプリのための主要プラットフォーム、そしてブロックチェーンのネットワーク", "page-index-developers-code-example-description-0": "自分でプログラムしたロジックで動く銀行を構築する", "page-index-developers-code-example-description-1": "アプリ間で転送・利用できるトークンを作成する", diff --git a/src/intl/ka/page-index.json b/src/intl/ka/page-index.json index 07feef9453e..db0ba44aa93 100644 --- a/src/intl/ka/page-index.json +++ b/src/intl/ka/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "სცადეთ აპები", "page-index-cta-get-eth-description": "Ethereum-ის ვალუტა", "page-index-cta-get-eth-label": "მიიღე ETH", - "page-index-cta-networks-description": "ისიამოვნეთ მინიმალური გადასახადებით", - "page-index-cta-networks-label": "აირჩიეთ ქსელი", "page-index-cta-wallet-description": "შექმენით ანგარიშები და მართეთ აქტივები", "page-index-cta-wallet-label": "შეარჩიე საფულე", + "page-index-cta-build-apps-description": "შექმენით თქვენი პირველი აპლიკაცია", + "page-index-cta-build-apps-label": "დაიწყეთ შექმნა", "page-index-description": "ინოვაციური აპებისა და ბლოქჩეინ ქსელების წამყვანი პლატფორმა", "page-index-developers-code-example-description-0": "ააგეთ თქვენ მიერ პროგრამირებული ლოგიკით მართული ბანკი", "page-index-developers-code-example-description-1": "შექმენით ტოკენები, რომელთა გადაცემასა და გამოყენებასაც აპლიკაციებში შეძლებთ", diff --git a/src/intl/kk/page-index.json b/src/intl/kk/page-index.json index ebf1fc2ffb4..c0f7866e25e 100644 --- a/src/intl/kk/page-index.json +++ b/src/intl/kk/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Қолданбаларды байқап көру", "page-index-cta-get-eth-description": "Ethereum валютасы", "page-index-cta-get-eth-label": "ETH алу", - "page-index-cta-networks-description": "Ең төмен комиссиялар", - "page-index-cta-networks-label": "Желіні таңдау", "page-index-cta-wallet-description": "Аккаунттар жасау және активтерді басқару", "page-index-cta-wallet-label": "Әмиянды таңдаңыз", + "page-index-cta-build-apps-description": "Алғашқы қосымшаңызды жасаңыз", + "page-index-cta-build-apps-label": "Құруды бастаңыз", "page-index-description": "Инновациялық қолданбалар мен блокчейн желілері үшін жетекші платформа", "page-index-developers-code-example-description-0": "Бағдарламалаған логикаңызбен басқарылатын банк жасаңыз", "page-index-developers-code-example-description-1": "Әр түрлі қолданбаларда тасымалдауға және пайдалануға болатын токен жасаңыз", diff --git a/src/intl/km/page-index.json b/src/intl/km/page-index.json index 8958b765607..f7fe1744e0b 100644 --- a/src/intl/km/page-index.json +++ b/src/intl/km/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "សាក់ល្បងប្រើកម្មវិធី", "page-index-cta-get-eth-description": "រូបិយប័ណ្ណរបស់ Ethereum", "page-index-cta-get-eth-label": "ទទួលយក ETH", - "page-index-cta-networks-description": "រីករាយជាមួយថ្លៃសេវាតិចតួច", - "page-index-cta-networks-label": "ជ្រើសរើសបណ្តាញមួយ", "page-index-cta-wallet-description": "បង្កើតគណនី និងគ្រប់គ្រងទ្រព្យ", "page-index-cta-wallet-label": "រើស​កាបូប", + "page-index-cta-build-apps-description": "បង្កើតកម្មវិធីដំបូងរបស់អ្នក", + "page-index-cta-build-apps-label": "ចាប់ផ្តើមអភិវឌ្ឍ", "page-index-description": "ជាថ្នាលឈានមុខគេសម្រាប់កម្មវិធី​នវានុវត្តន៍ និងបណ្តាញ blockchain", "page-index-developers-code-example-description-0": "បង្កើតធនាគារដែលដំណើរការដោយតក្កវិជ្ជាដែលអ្នកបានរៀបចំកម្មវិធី", "page-index-developers-code-example-description-1": "បង្កើតថូខិនដែលអ្នកអាចផ្ទេរ និងប្រើប្រាស់នៅលើកម្មវិធីនានា", diff --git a/src/intl/kn/page-index.json b/src/intl/kn/page-index.json index 2ca1529872f..95a5594627e 100644 --- a/src/intl/kn/page-index.json +++ b/src/intl/kn/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ", "page-index-cta-get-eth-description": "Ethereum ನ ಕರೆನ್ಸಿ", "page-index-cta-get-eth-label": "ETH ಪಡೆಯಿರಿ", - "page-index-cta-networks-description": "ಕನಿಷ್ಠ ಶುಲ್ಕವನ್ನು ಆನಂದಿಸಿ", - "page-index-cta-networks-label": "ನೆಟ್ವರ್ಕ್ ಆಯ್ಕೆಮಾಡಿ", "page-index-cta-wallet-description": "ಖಾತೆಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು ಸ್ವತ್ತುಗಳನ್ನು ನಿರ್ವಹಿಸಿ", "page-index-cta-wallet-label": "ವ್ಯಾಲೆಟ್ ಒಂದನ್ನು ಆರಿಸಿ", + "page-index-cta-build-apps-description": "ನಿಮ್ಮ ಮೊದಲ ಆಪ್ ರಚಿಸಿ", + "page-index-cta-build-apps-label": "ಅಭಿವೃದ್ಧಿ ಪ್ರಾರಂಭಿಸಿ", "page-index-description": "ನವೀನ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಬ್ಲಾಕ್‌ಚೈನ್ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಪ್ರಮುಖ ವೇದಿಕೆ", "page-index-developers-code-example-description-0": "ನೀವು ಪ್ರೋಗ್ರಾಮ್ ಮಾಡಿದ ತರ್ಕದಿಂದ ಚಾಲಿತ ಬ್ಯಾಂಕ್ ಅನ್ನು ನಿರ್ಮಿಸಿ", "page-index-developers-code-example-description-1": "ಅಪ್ಲಿಕೇಶನ್‌ಗಳಾದ್ಯಂತ ನೀವು ವರ್ಗಾಯಿಸಬಹುದಾದ ಮತ್ತು ಬಳಸಬಹುದಾದ ಟೋಕನ್‌ಗಳನ್ನು ರಚಿಸಿ", diff --git a/src/intl/ko/page-index.json b/src/intl/ko/page-index.json index 6f68c0ae9f7..25150556b63 100644 --- a/src/intl/ko/page-index.json +++ b/src/intl/ko/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "앱 사용하기", "page-index-cta-get-eth-description": "이더리움의 화폐", "page-index-cta-get-eth-label": "이더 구매하기", - "page-index-cta-networks-description": "최소 요금 지불", - "page-index-cta-networks-label": "네트워크 선택", "page-index-cta-wallet-description": "계정 만들기 및 자산 관리", "page-index-cta-wallet-label": "지갑 선택하기", + "page-index-cta-build-apps-description": "첫 앱을 만들어 보십시오", + "page-index-cta-build-apps-label": "개발을 시작하십시오", "page-index-description": "혁신적인 앱과 블록체인 네트워크의 선두 플랫폼", "page-index-developers-code-example-description-0": "직접 프로그래밍한 로직에 기반하여 은행을 빌드", "page-index-developers-code-example-description-1": "다양한 애플리케이션 간에 전송하고 사용할 수 있는 토큰 생성", diff --git a/src/intl/lt/page-index.json b/src/intl/lt/page-index.json index 1f09b8b352c..253fb6842ae 100644 --- a/src/intl/lt/page-index.json +++ b/src/intl/lt/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Išbandykite programėles", "page-index-cta-get-eth-description": "Ethereum valiuta", "page-index-cta-get-eth-label": "Gauti ETH", - "page-index-cta-networks-description": "Mėgaukitės minimaliais mokesčiais", - "page-index-cta-networks-label": "Pasirinkite tinklą", "page-index-cta-wallet-description": "Sukurkite paskyras ir valdykite aktyvus", "page-index-cta-wallet-label": "Pasirinkite piniginę", + "page-index-cta-build-apps-description": "Sukurkite pirmąją programą", + "page-index-cta-build-apps-label": "Pradėkite kurti", "page-index-description": "Pirmaujanti inovatyvių programėlių ir blockchain tinklų platforma", "page-index-developers-code-example-description-0": "Sukurkite banką, veikiantį pagal jūsų suprogramuotą logiką", "page-index-developers-code-example-description-1": "Sukurkite žetonus, kuriuos galite perkelti ir naudoti įvairiose programose", diff --git a/src/intl/ml/page-index.json b/src/intl/ml/page-index.json index 77707c162dc..c8be2fecbb3 100644 --- a/src/intl/ml/page-index.json +++ b/src/intl/ml/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "ആപ്പുകൾ പരീക്ഷിക്കുക", "page-index-cta-get-eth-description": "Ethereum കറൻസി", "page-index-cta-get-eth-label": "ETH നേടൂ", - "page-index-cta-networks-description": "കുറഞ്ഞ ഫീസ് ആസ്വദിക്കൂ", - "page-index-cta-networks-label": "ഒരു നെറ്റ്‌വർക്ക് തിരഞ്ഞെടുക്കുക", "page-index-cta-wallet-description": "അക്കൗണ്ടുകൾ സൃഷ്ടിക്കുക, അസറ്റുകൾ മാനേജ് ചെയ്യുക", "page-index-cta-wallet-label": "ഒരു വാലറ്റ് എടുക്കുക", + "page-index-cta-build-apps-description": "നിങ്ങളുടെ ആദ്യ ആപ്പ് സൃഷ്ടിക്കുക", + "page-index-cta-build-apps-label": "വികസനം ആരംഭിക്കുക", "page-index-description": "നൂതന ആപ്പുകളുടെയും ബ്ലോക്ക്‌ചെയിൻ നെറ്റ്‌വർക്കുകളുടെയും മുൻനിര പ്ലാറ്റ്‌ഫോം", "page-index-developers-code-example-description-0": "നിങ്ങൾ പ്രോഗ്രാം ചെയ്ത ലോജിക് ഉപയോഗിച്ച് ഒരു ബാങ്ക് ഉണ്ടാക്കുക", "page-index-developers-code-example-description-1": "നിങ്ങൾക്ക് ആപ്ലിക്കേഷനുകളിൽ ഉടനീളം കൈമാറാനും ഉപയോഗിക്കാനും കഴിയുന്ന ടോക്കണുകൾ സൃഷ്ടിക്കുക", diff --git a/src/intl/mr/page-index.json b/src/intl/mr/page-index.json index 36abe0bd34b..8a64cdbffed 100644 --- a/src/intl/mr/page-index.json +++ b/src/intl/mr/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "अ‍ॅप्स वापरून पहा", "page-index-cta-get-eth-description": "अथेरमचे चलन", "page-index-cta-get-eth-label": "ETH मिळवा", - "page-index-cta-networks-description": "अगदी किमान शुल्काचा लाभ घ्‍या", - "page-index-cta-networks-label": "एक नेटवर्क निवडा", "page-index-cta-wallet-description": "खाती तयार करा आणि मालमत्ता व्यवस्थापित करा", "page-index-cta-wallet-label": "वॉलेट निवडा", + "page-index-cta-build-apps-description": "तुमचा पहिला अ‍ॅप तयार करा", + "page-index-cta-build-apps-label": "विकास सुरू करा", "page-index-description": "नावीन्यपूर्ण अ‍ॅप्ससाठी आणि ब्लॉकचेन नेटवर्कसाठी अग्रणी प्लॅटफॉर्म", "page-index-developers-code-example-description-0": "तुम्ही प्रोग्राम केलेल्या तर्काच्या सामर्थ्‍याने एक बॅंक तयार करा", "page-index-developers-code-example-description-1": "तुम्ही अ‍ॅप्लिकेशन्सवर हस्तांतरित करू शकता आणि वापरू शकता अशी टोकन्स तयार करा", diff --git a/src/intl/ms/page-index.json b/src/intl/ms/page-index.json index 25a46aaf800..93f7ed43536 100644 --- a/src/intl/ms/page-index.json +++ b/src/intl/ms/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Cuba aplikasi", "page-index-cta-get-eth-description": "Mata wang Ethereum", "page-index-cta-get-eth-label": "Dapatkan ETH", - "page-index-cta-networks-description": "Nikmati yuran minimum", - "page-index-cta-networks-label": "Pilih rangkaian", "page-index-cta-wallet-description": "Cipta akaun & kendalikan aset", "page-index-cta-wallet-label": "Pilih dompet", + "page-index-cta-build-apps-description": "Cipta aplikasi pertama anda", + "page-index-cta-build-apps-label": "Mulakan pembangunan", "page-index-description": "Platform terbaik untuk aplikasi inovatif dan rangkaian blok rantai", "page-index-developers-code-example-description-0": "Bina bank yang dikuasakan oleh logik yang telah anda programkan", "page-index-developers-code-example-description-1": "Cipta token yang boleh anda pindahkan dan gunakan merentasi aplikasi", diff --git a/src/intl/nb/page-index.json b/src/intl/nb/page-index.json index 9a30727bfb3..dac5d78ece9 100644 --- a/src/intl/nb/page-index.json +++ b/src/intl/nb/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Prøv apper", "page-index-cta-get-eth-description": "Valutaen til Ethereum", "page-index-cta-get-eth-label": "Hent ETH", - "page-index-cta-networks-description": "Dra nytte av minimale avgifter", - "page-index-cta-networks-label": "Velg et nettverk", "page-index-cta-wallet-description": "Opprett kontoer og administer aktiva", "page-index-cta-wallet-label": "Velg en lommebok", + "page-index-cta-build-apps-description": "Lag Deres første app", + "page-index-cta-build-apps-label": "Start utvikling", "page-index-description": "Den ledende plattformen for innovative apper og blokkjede-nettverk", "page-index-developers-code-example-description-0": "Bygg en bank drevet med logikk du har programmert", "page-index-developers-code-example-description-1": "Opprett tokener som du kan overføre og bruke i andre programmer", diff --git a/src/intl/ne-np/page-index.json b/src/intl/ne-np/page-index.json index 86a2b9c1efa..2a7f86731f4 100644 --- a/src/intl/ne-np/page-index.json +++ b/src/intl/ne-np/page-index.json @@ -34,10 +34,10 @@ "page-index-cta-dapps-label": "एप्पहरू प्रयास गर्नुहोस्", "page-index-cta-get-eth-description": "Ethereum को मुद्रा", "page-index-cta-get-eth-label": "ETH प्राप्त गर्नुहोस्", - "page-index-cta-networks-description": "न्यूनतम शुल्कको आनन्द लिनुहोस्", - "page-index-cta-networks-label": "नेटवर्क रोज्नुहोस्", "page-index-cta-wallet-description": "खाता सिर्जना गर्नुहोस् र सम्पत्ति व्यवस्थापन गर्नुहोस्", "page-index-cta-wallet-label": "एउटा वालेट छान्नुहोस", + "page-index-cta-build-apps-description": "तपाईंको पहिलो एप बनाउनुहोस्", + "page-index-cta-build-apps-label": "विकास सुरु गर्नुहोस्", "page-index-description": "अभिनव एप्पहरू र ब्लकचेन नेटवर्कहरूका लागि अग्रणी प्लेटफर्म", "page-index-developers-code-example-description-0": "तपाईंले प्रोग्राम गर्नुभएको तर्कद्वारा संचालित बैंक बनाउनुहोस्", "page-index-developers-code-example-description-1": "तपाईंले एप्पहरूमा स्थानान्तरण र प्रयोग गर्न सक्ने टोकनहरू सिर्जना गर्नुहोस्", diff --git a/src/intl/nl/page-index.json b/src/intl/nl/page-index.json index 37f77d6a001..4901cd4638d 100644 --- a/src/intl/nl/page-index.json +++ b/src/intl/nl/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Probeer de apps", "page-index-cta-get-eth-description": "De valuta van Ethereum", "page-index-cta-get-eth-label": "Verkrijg ETH", - "page-index-cta-networks-description": "Profiteer van minimale kosten", - "page-index-cta-networks-label": "Kies een netwerk", "page-index-cta-wallet-description": "Maak accounts aan en beheer activa", "page-index-cta-wallet-label": "Kies een portemonnee", + "page-index-cta-build-apps-description": "Maak uw eerste app", + "page-index-cta-build-apps-label": "Begin met bouwen", "page-index-description": "Het toonaangevende platform voor innovatieve apps en blockchain-netwerken", "page-index-developers-code-example-description-0": "Bouw een bank aangedreven door logica die jij hebt geprogrammeerd", "page-index-developers-code-example-description-1": "Maak tokens aan die je kunt overzetten en gebruiken verspreid over applicaties", diff --git a/src/intl/pcm/page-index.json b/src/intl/pcm/page-index.json index 41d5a6c3041..dd61f60e36b 100644 --- a/src/intl/pcm/page-index.json +++ b/src/intl/pcm/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Try apps", "page-index-cta-get-eth-description": "Di kurensy of Ethereum", "page-index-cta-get-eth-label": "Get ETH", - "page-index-cta-networks-description": "Enjoy minimal fees", - "page-index-cta-networks-label": "Shuse one netwok", "page-index-cta-wallet-description": "Kreate akants and manaj assets", "page-index-cta-wallet-label": "Make yu pick one wallet", + "page-index-cta-build-apps-description": "Make your first app", + "page-index-cta-build-apps-label": "Begin building", "page-index-description": "Di platfom wey dey lead for innovative apps and blockchain netwoks", "page-index-developers-code-example-description-0": "Build one bank wey dem pawa by logik wey yu don program", "page-index-developers-code-example-description-1": "Kreate tokens wey yu fit transfa and yus akross aplikashons", diff --git a/src/intl/pl/page-index.json b/src/intl/pl/page-index.json index d481e7f88c7..6066e5f3d53 100644 --- a/src/intl/pl/page-index.json +++ b/src/intl/pl/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Wypróbuj aplikacje", "page-index-cta-get-eth-description": "Waluta sieci Ethereum", "page-index-cta-get-eth-label": "Zdobądź ETH", - "page-index-cta-networks-description": "Minimalne opłaty", - "page-index-cta-networks-label": "Wybierz sieć", "page-index-cta-wallet-description": "Twórz konta i zarządzaj aktywami", "page-index-cta-wallet-label": "Wybierz portfel", + "page-index-cta-build-apps-description": "Proszę stworzyć swoją pierwszą aplikację", + "page-index-cta-build-apps-label": "Rozpocznij tworzenie", "page-index-description": "Czołowa platforma dla innowacyjnych aplikacji i sieci blockchain", "page-index-developers-code-example-description-0": "Stwórz bank działający w oparciu o zaprogramowaną przez Ciebie logikę", "page-index-developers-code-example-description-1": "Twórz tokeny, które możesz przesyłać i wykorzystywać w różnych aplikacjach", diff --git a/src/intl/pt-br/page-index.json b/src/intl/pt-br/page-index.json index f4f257e470c..e12649d96ca 100644 --- a/src/intl/pt-br/page-index.json +++ b/src/intl/pt-br/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Avaliar aplicativos", "page-index-cta-get-eth-description": "A moeda do Ethereum", "page-index-cta-get-eth-label": "Obtenha ETH", - "page-index-cta-networks-description": "Aproveite taxas mínimas", - "page-index-cta-networks-label": "Escola uma rede", "page-index-cta-wallet-description": "Crie contas e gerencie ativos", "page-index-cta-wallet-label": "Escolha uma carteira", + "page-index-cta-build-apps-description": "Crie o seu primeiro aplicativo", + "page-index-cta-build-apps-label": "Comece a desenvolver", "page-index-description": "A plataforma líder para aplicativos inovadores e redes de blockchain", "page-index-developers-code-example-description-0": "Crie um banco movido pela lógica que você programou", "page-index-developers-code-example-description-1": "Crie tokens que você pode transferir e usar entre aplicativos", diff --git a/src/intl/pt/page-index.json b/src/intl/pt/page-index.json index 94d1ad4eb30..a8a4b9636b7 100644 --- a/src/intl/pt/page-index.json +++ b/src/intl/pt/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Experimente aplicações", "page-index-cta-get-eth-description": "A moeda da Ethereum", "page-index-cta-get-eth-label": "Obter ETH", - "page-index-cta-networks-description": "Desfrute de taxas mínimas", - "page-index-cta-networks-label": "Escolha uma rede", "page-index-cta-wallet-description": "Crie contas e faça a gestão de ativos", "page-index-cta-wallet-label": "Escolha uma carteira", + "page-index-cta-build-apps-description": "Crie a sua primeira aplicação", + "page-index-cta-build-apps-label": "Comece a desenvolver", "page-index-description": "A plataforma líder para aplicações inovadoras e redes de blockchain", "page-index-developers-code-example-description-0": "Crie um banco com a lógica que programou", "page-index-developers-code-example-description-1": "Crie tokens que pode transferir e utilizar entre aplicações", diff --git a/src/intl/ro/page-index.json b/src/intl/ro/page-index.json index 9ea7d32b45c..8249d4949ad 100644 --- a/src/intl/ro/page-index.json +++ b/src/intl/ro/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Încercați aplicațiile", "page-index-cta-get-eth-description": "Moneda Ethereum", "page-index-cta-get-eth-label": "Obțineți ETH", - "page-index-cta-networks-description": "Bucurați-vă de comisioane minime", - "page-index-cta-networks-label": "Alegeți o rețea", "page-index-cta-wallet-description": "Creați conturi și gestionați active", "page-index-cta-wallet-label": "Alegeți un portofel", + "page-index-cta-build-apps-description": "Creați-vă prima aplicație", + "page-index-cta-build-apps-label": "Începeți să dezvoltați", "page-index-description": "Platforma de top pentru aplicații inovatoare și rețele blockchain", "page-index-developers-code-example-description-0": "Construiți o bancă gestionată de codul pe care l-ați programat", "page-index-developers-code-example-description-1": "Creați tokenuri pe care le puteți transfera și utiliza în mai multe aplicații", diff --git a/src/intl/ru/page-index.json b/src/intl/ru/page-index.json index 9a5172ed5f9..445bcd9c557 100644 --- a/src/intl/ru/page-index.json +++ b/src/intl/ru/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Попробовать приложения", "page-index-cta-get-eth-description": "Валюта Ethereum", "page-index-cta-get-eth-label": "Получить ETH", - "page-index-cta-networks-description": "Самые низкие комиссии", - "page-index-cta-networks-label": "Выбор сети", "page-index-cta-wallet-description": "Создание аккаунтов и управление активами", "page-index-cta-wallet-label": "Выберите кошелек", + "page-index-cta-build-apps-description": "Создайте своё первое приложение", + "page-index-cta-build-apps-label": "Начните разработку", "page-index-description": "Ведущая платформа для инновационных приложений и блокчейн-сетей", "page-index-developers-code-example-description-0": "Создайте банк, управляемый запрограммированной вами логикой", "page-index-developers-code-example-description-1": "Создавайте токены, которые можно передавать и использовать в разных приложениях", diff --git a/src/intl/se/page-index.json b/src/intl/se/page-index.json index 21e5d1a9015..b4b9b84c0d0 100644 --- a/src/intl/se/page-index.json +++ b/src/intl/se/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Prova appar", "page-index-cta-get-eth-description": "Ethereum-valutan", "page-index-cta-get-eth-label": "Skaffa ETH", - "page-index-cta-networks-description": "Dra fördel av minimala avgifter", - "page-index-cta-networks-label": "Välj ett nätverk", "page-index-cta-wallet-description": "Skapa konton och hantera tillgångar", "page-index-cta-wallet-label": "Välj en plånbok", + "page-index-cta-build-apps-description": "Skapa er första app", + "page-index-cta-build-apps-label": "Börja utveckla", "page-index-description": "Den ledande plattformen för innovativa appar och blockkedjenätverk", "page-index-developers-code-example-description-0": "Bygg en bank som drivs av logik du har programmerat", "page-index-developers-code-example-description-1": "Skapa tokens som du kan överföra och använda mellan olika applikationer", diff --git a/src/intl/sk/page-index.json b/src/intl/sk/page-index.json index 4077a56606a..e73f5961933 100644 --- a/src/intl/sk/page-index.json +++ b/src/intl/sk/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Vyskúšajte aplikácie", "page-index-cta-get-eth-description": "Mena Ethereum", "page-index-cta-get-eth-label": "Získať ETH", - "page-index-cta-networks-description": "Užite si minimálne poplatky", - "page-index-cta-networks-label": "Vyberte si sieť", "page-index-cta-wallet-description": "Vytvoriť si učty a spravujte aktíva", "page-index-cta-wallet-label": "Vyberte si peňaženku", + "page-index-cta-build-apps-description": "Vytvorte svoju prvú aplikáciu", + "page-index-cta-build-apps-label": "Začnite vyvíjať", "page-index-description": "Popredná platforma pre inovatívne aplikácie a blockchainové siete", "page-index-developers-code-example-description-0": "Vybudujte banku poháňanú logikou, ktorú ste naprogramovali", "page-index-developers-code-example-description-1": "Vytvárajte tokeny, ktoré môžete prenášať a používať v rôznych aplikáciách", diff --git a/src/intl/sl/page-index.json b/src/intl/sl/page-index.json index f82acaa0589..9fe76487a92 100644 --- a/src/intl/sl/page-index.json +++ b/src/intl/sl/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Preizkusi aplikacije", "page-index-cta-get-eth-description": "Valuta na Ethereum", "page-index-cta-get-eth-label": "Pridobite ETH", - "page-index-cta-networks-description": "Uživajte v minimalnih provizijah", - "page-index-cta-networks-label": "Izberite omrežje", "page-index-cta-wallet-description": "Ustvarite račune in upravljajte sredstva", "page-index-cta-wallet-label": "Izberite denarnico", + "page-index-cta-build-apps-description": "Ustvarite svojo prvo aplikacijo", + "page-index-cta-build-apps-label": "Začnite razvijati", "page-index-description": "Vodilna platforma za inovativne aplikacije in omrežja verige blokov", "page-index-developers-code-example-description-0": "Ustvarite banko, ki jo poganja logika, ki ste jo programirali sami", "page-index-developers-code-example-description-1": "Ustvarite žetone, ki jih lahko prenašate in uporabljate v različnih aplikacijah", diff --git a/src/intl/sn/page-index.json b/src/intl/sn/page-index.json index 0f6dd02f9b6..dcf151c466f 100644 --- a/src/intl/sn/page-index.json +++ b/src/intl/sn/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Edza maapu", "page-index-cta-get-eth-description": "Mari yeEthereum", "page-index-cta-get-eth-label": "Tora ETH", - "page-index-cta-networks-description": "Nakidzwa muripo uri pasi-pasi", - "page-index-cta-networks-label": "Sarudza netiweki", "page-index-cta-wallet-description": "Gadzira maakaundi uye utarisire zvakanaka midziyo inokosha", "page-index-cta-wallet-label": "Sarudza chikwama", + "page-index-cta-build-apps-description": "Gadzira app yako yekutanga", + "page-index-cta-build-apps-label": "Tangai kugadzira", "page-index-description": "Puratifomu yemberi inowanikwa maapu ekuitisa hudobidobi uye ine manetiweki emakambani makuru", "page-index-developers-code-example-description-0": "Gadzira bhanga rinosundwa nepfungwa dzawakaruka wega", "page-index-developers-code-example-description-1": "Gadzira matokeni aunogona kutumira kumwe uye kushandisa pamaapu akawanda", diff --git a/src/intl/sr/page-index.json b/src/intl/sr/page-index.json index f4da4ec553b..3f35086b79b 100644 --- a/src/intl/sr/page-index.json +++ b/src/intl/sr/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Isprobajte aplikacije", "page-index-cta-get-eth-description": "Valuta Ethereum-a", "page-index-cta-get-eth-label": "Uzmi ETH", - "page-index-cta-networks-description": "Uživajte u minimalnim provizijama", - "page-index-cta-networks-label": "Izaberite mrežu", "page-index-cta-wallet-description": "Kreirajte račune i upravljajte sredstvima", "page-index-cta-wallet-label": "Odaberi novčanik", + "page-index-cta-build-apps-description": "Kreirajte svoju prvu aplikaciju", + "page-index-cta-build-apps-label": "Počnite razvoj", "page-index-description": "Vodeća platforma za inovativne aplikacije i mreže lanca blokova", "page-index-developers-code-example-description-0": "Izgradite banku koju pokreće logika koju ste programirali", "page-index-developers-code-example-description-1": "Kreirajte tokene koje možete da prenosite i koristite u različitim aplikacijama", diff --git a/src/intl/sw/page-index.json b/src/intl/sw/page-index.json index 53edfb9caec..c74fed64c0f 100644 --- a/src/intl/sw/page-index.json +++ b/src/intl/sw/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Jaribu programu", "page-index-cta-get-eth-description": "Sarafu ya Ethereum", "page-index-cta-get-eth-label": "Pata ETH", - "page-index-cta-networks-description": "Furahia ada za chini", - "page-index-cta-networks-label": "Chagua mtandao", "page-index-cta-wallet-description": "Tengeneza akaunti & uthibiti mali", "page-index-cta-wallet-label": "Chagua pochi", + "page-index-cta-build-apps-description": "Tengeneza app yako ya kwanza", + "page-index-cta-build-apps-label": "Anza kuendeleza", "page-index-description": "Jukwaa linaloongoza la programu bunifu na mitandao ya blockchain", "page-index-developers-code-example-description-0": "Unda benki inayoendeshwa na mantiki uliyopanga", "page-index-developers-code-example-description-1": "Unda tokeni ambazo unaweza kuhamisha na kutumia katika programu tofauti", diff --git a/src/intl/ta/page-index.json b/src/intl/ta/page-index.json index 0706bcc355b..84429f87fed 100644 --- a/src/intl/ta/page-index.json +++ b/src/intl/ta/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "செயலிகளை முயற்சிக்கவும்", "page-index-cta-get-eth-description": "Ethereum -இன் நாணயம்", "page-index-cta-get-eth-label": "ETH பெறுக", - "page-index-cta-networks-description": "குறைந்தபட்ச கட்டணத்தை மகிழ்ந்திடுங்கள்", - "page-index-cta-networks-label": "ஒரு பிணையத்தை தேர்ந்தெடுங்கள்", "page-index-cta-wallet-description": "கணக்குகளை உருவாக்கி, உடைமைகளை நிர்வகித்திடுங்கள்", "page-index-cta-wallet-label": "பணப்பையைத் தேர்வுசெய்க", + "page-index-cta-build-apps-description": "உங்கள் முதல் பயன்பாட்டை உருவாக்குங்கள்", + "page-index-cta-build-apps-label": "உருவாக்கத்தைத் தொடங்குங்கள்", "page-index-description": "புதுமையான செயலிகள் மற்றும் பிளாக்செயின் பிணையங்களுக்கான முன்னணி தளம்", "page-index-developers-code-example-description-0": "நீங்கள் புரோகிராம் செய்த லாஜிக் மூலம் இயங்கும் ஒரு வங்கியை உருவாக்கிடுங்கள்", "page-index-developers-code-example-description-1": "நாணயப் பரிமாற்றம் செய்து அனைத்துச் செயலிகளிலும் பயன்படுத்துவதற்கான டோக்கன்களை உருவாக்கிடுங்கள்", diff --git a/src/intl/te/page-index.json b/src/intl/te/page-index.json index 26d0d062a7a..98f29527ce1 100644 --- a/src/intl/te/page-index.json +++ b/src/intl/te/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "యాప్‌లను ప్రయత్నించండి", "page-index-cta-get-eth-description": "Ethereum యొక్క కరెన్సీ", "page-index-cta-get-eth-label": "ETHను పొందండి", - "page-index-cta-networks-description": "కనిష్ట రుసుములతో ఆనందించండి", - "page-index-cta-networks-label": "ఒక నెట్‌వర్క్‌ను ఎంచుకోండి", "page-index-cta-wallet-description": "ఖాతాలను సృష్టించండి & ఆస్తులను నిర్వహించండి", "page-index-cta-wallet-label": "వాలెట్‌ను ఎంచుకోండి", + "page-index-cta-build-apps-description": "మీ మొదటి యాప్‌ను సృష్టించండి", + "page-index-cta-build-apps-label": "అభివృద్ధిని ప్రారంభించండి", "page-index-description": "వినూత్న యాప్‌లు మరియు బ్లాక్‌చెయిన్ నెట్‌వర్క్‌ల కోసం ప్రముఖ ప్లాట్‌ఫారమ్", "page-index-developers-code-example-description-0": "మీరు ప్రోగ్రామ్ చేసిన లాజిక్‌తో నడిచే బ్యాంక్‌ను మీరు నిర్మించుకోవచ్చు", "page-index-developers-code-example-description-1": "మీరు అప్లికేషన్లలో బదిలీ చేయగల మరియు ఉపయోగించగల టోకెన్‌లను సృష్టించండి", diff --git a/src/intl/th/page-index.json b/src/intl/th/page-index.json index 991ce9a193e..7c8dca97e3e 100644 --- a/src/intl/th/page-index.json +++ b/src/intl/th/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "ลองใช้แอป", "page-index-cta-get-eth-description": "สกุลเงินของอีเธอเรียม", "page-index-cta-get-eth-label": "รับ ETH", - "page-index-cta-networks-description": "ใช้งานโดยมีค่าธรรมเนียมขั้นต่ำ", - "page-index-cta-networks-label": "เลือกเครือข่าย", "page-index-cta-wallet-description": "สร้างบัญชีและจัดการสินทรัพย์", "page-index-cta-wallet-label": "เลือกวอลเล็ท", + "page-index-cta-build-apps-description": "สร้างแอปแรกของคุณ", + "page-index-cta-build-apps-label": "เริ่มต้นการพัฒนา", "page-index-description": "แพลตฟอร์มชั้นนำสำหรับแอปที่เป็นนวัตกรรมและเครือข่าย blockchain", "page-index-developers-code-example-description-0": "สร้างธนาคารที่ทำงานด้วยตรรกะที่คุณเขียนโปรแกรมเอง", "page-index-developers-code-example-description-1": "สร้างโทเค็นที่สามารถถ่ายโอนและใช้ระหว่างแอปพลิเคชันต่าง ๆ ได้", diff --git a/src/intl/tk/page-index.json b/src/intl/tk/page-index.json index d9afbaa911d..886e5f4cc32 100644 --- a/src/intl/tk/page-index.json +++ b/src/intl/tk/page-index.json @@ -35,10 +35,10 @@ "page-index-cta-dapps-label": "Programmalary barlap görüň", "page-index-cta-get-eth-description": "Ethereumyň walýutasy", "page-index-cta-get-eth-label": "ETH edinmek", - "page-index-cta-networks-description": "Iň az töleglerden peýdalanyň", - "page-index-cta-networks-label": "Tor saýlaň", "page-index-cta-wallet-description": "Hasap dörediň we aktiwleri dolandyryň", "page-index-cta-wallet-label": "Gapjyk saýlaň", + "page-index-cta-build-apps-description": "Ilkinji apyňyzy dörediň", + "page-index-cta-build-apps-label": "Ösdürmegi başlaň", "page-index-description": "Innowasiýa programmalary we blokçeýn torlary üçin öňdebaryjy platforma", "page-index-developers-code-example-description-0": "Öz programmirlän logikaňyz bilen işleýän bank guruň", "page-index-developers-code-example-description-1": "Programmalaryň arasynda geçirip we ulanyp boljak tokenleri dörediň", diff --git a/src/intl/tl/page-index.json b/src/intl/tl/page-index.json index b982adac1c9..d995fb77113 100644 --- a/src/intl/tl/page-index.json +++ b/src/intl/tl/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Subukan ang mga app", "page-index-cta-get-eth-description": "Ang currency ng Ethereum", "page-index-cta-get-eth-label": "Kumuha ng ETH", - "page-index-cta-networks-description": "I-enjoy ang mabababang bayarin", - "page-index-cta-networks-label": "Pumili ng network", "page-index-cta-wallet-description": "Gumawa ng mga account at pamahalaan ang mga asset", "page-index-cta-wallet-label": "Pumili ng wallet", + "page-index-cta-build-apps-description": "Lumikha ng iyong unang app", + "page-index-cta-build-apps-label": "Simulan ang pagbuo", "page-index-description": "Ang nangungunang platform para sa mga makabagong app at network ng blockchain", "page-index-developers-code-example-description-0": "Magtayo ng bangko na pinapagana ng lohikang ikaw ang nagprograma", "page-index-developers-code-example-description-1": "Gumawa ng mga token na maaaring mailipat at magagamit sa iba't ibang application", diff --git a/src/intl/tr/page-index.json b/src/intl/tr/page-index.json index 76783026d33..024492d97fc 100644 --- a/src/intl/tr/page-index.json +++ b/src/intl/tr/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Uygulamaları deneyin", "page-index-cta-get-eth-description": "Ethereum para birimi", "page-index-cta-get-eth-label": "ETH edinin", - "page-index-cta-networks-description": "Düşük ücretlerden yararlanın", - "page-index-cta-networks-label": "Bir ağ seçin", "page-index-cta-wallet-description": "Hesaplar oluşturun ve varlıkları yönetin", "page-index-cta-wallet-label": "Bir cüzdan seçin", + "page-index-cta-build-apps-description": "İlk uygulamanızı oluşturun", + "page-index-cta-build-apps-label": "Geliştirmeye başlayın", "page-index-description": "Yenilikçi uygulamalar ve blok zinciri ağları için lider platform", "page-index-developers-code-example-description-0": "Programlamış olduğunuz mantıkla desteklenen bir banka kurun", "page-index-developers-code-example-description-1": "Uygulamalar arasında transfer edebileceğiniz ve kullanabileceğiniz jetonlar oluşturun", diff --git a/src/intl/tw/page-index.json b/src/intl/tw/page-index.json index 8936901ed6e..557a820c4e9 100644 --- a/src/intl/tw/page-index.json +++ b/src/intl/tw/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "So apps no hwe", "page-index-cta-get-eth-description": "Ethereum sika no", "page-index-cta-get-eth-label": "Nya ETH no bi", - "page-index-cta-networks-description": "Nya enigye fri ka ketewaa mu", - "page-index-cta-networks-label": "Fa netwek", "page-index-cta-wallet-description": "Ye akawnt na manegye agyapade", "page-index-cta-wallet-label": "Pɛ sika kotoku", + "page-index-cta-build-apps-description": "Yɛ wo app a edi kan", + "page-index-cta-build-apps-label": "Hyɛ ase yɛ adwuma", "page-index-description": "Beae aa edikan di ma apps afoforo ne blockchain netweks", "page-index-developers-code-example-description-0": "Fa logic aa waye no si bank", "page-index-developers-code-example-description-1": "Ye token aa wobetumi amena na wode edi dwuma wɔ aplikeshins ahorow nyinaa mu", diff --git a/src/intl/uk/page-index.json b/src/intl/uk/page-index.json index 775ed647df2..9377120349e 100644 --- a/src/intl/uk/page-index.json +++ b/src/intl/uk/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Скористайтеся програмами", "page-index-cta-get-eth-description": "Валюта Ethereum", "page-index-cta-get-eth-label": "Отримати ETH", - "page-index-cta-networks-description": "Скористайтеся перевагами мінімальної комісії", - "page-index-cta-networks-label": "Оберіть мережу", "page-index-cta-wallet-description": "Створюйте облікові записи та керуйте активами", "page-index-cta-wallet-label": "Виберіть гаманець", + "page-index-cta-build-apps-description": "Створіть свій перший застосунок", + "page-index-cta-build-apps-label": "Почніть розробку", "page-index-description": "Провідна платформа інноваційних програм і блокчейн-мереж", "page-index-developers-code-example-description-0": "Створіть банк, який користається запрограмованою вами логікою", "page-index-developers-code-example-description-1": "Створюйте токени, які можна переносити в інші програми та використовувати в них", diff --git a/src/intl/ur/page-index.json b/src/intl/ur/page-index.json index 39c04606a8d..564dafcd3d2 100644 --- a/src/intl/ur/page-index.json +++ b/src/intl/ur/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "ایپس آزمائیں", "page-index-cta-get-eth-description": "Ethereum کی کرنسی", "page-index-cta-get-eth-label": "ETH حاصل کریں", - "page-index-cta-networks-description": "کم ترین فیس سے لطف اندوز ہوں", - "page-index-cta-networks-label": "ایک نیٹ ورک منتخب کریں", "page-index-cta-wallet-description": "اکاؤنٹس تخلیق کریں یا اثاثہ جات کا نظم کریں", "page-index-cta-wallet-label": "والیٹ منتخب کریں", + "page-index-cta-build-apps-description": "اپنی پہلی ایپ بنائیں", + "page-index-cta-build-apps-label": "ترقی شروع کریں", "page-index-description": "جدید ایپس اور بلاک چین نیٹ ورکس کے لیے ایک سرکردہ پلیٹ فارم", "page-index-developers-code-example-description-0": "اپنی پروگرام کردہ لاجک کے ذریعے تقویت یافتہ بینک بنائیں", "page-index-developers-code-example-description-1": "ایسے ٹوکنز تخلیق کریں جو آپ ٹرانسفر کر سکتے ہیں اور ایپلیکیشنز میں استعمال کر سکتے ہیں", diff --git a/src/intl/uz/page-index.json b/src/intl/uz/page-index.json index 1f9b527bd1c..cade4d136ec 100644 --- a/src/intl/uz/page-index.json +++ b/src/intl/uz/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Ilovalarni sinash", "page-index-cta-get-eth-description": "Ethereum valyutasi", "page-index-cta-get-eth-label": "ETH olish", - "page-index-cta-networks-description": "Minimal toʻlovlardan zavqlaning", - "page-index-cta-networks-label": "Tarmoqni tanlang", "page-index-cta-wallet-description": "Hisoblar yaratish va aktivlarni boshqarish", "page-index-cta-wallet-label": "Hamyonni tanlang", + "page-index-cta-build-apps-description": "Birinchi ilovangizni yarating", + "page-index-cta-build-apps-label": "Rivojlantirishni boshlang", "page-index-description": "Innovatsion ilovalar va blokcheyn tarmoqlari boʻyicha yetakchi platforma", "page-index-developers-code-example-description-0": "Siz dasturlashtirgan mantiq bilan boshqariladigan bank yarating", "page-index-developers-code-example-description-1": "Ilovalar boʻylab uzatishingiz va ishlatishingiz mumkin boʻlgan tokenlarni yarating", diff --git a/src/intl/vi/page-index.json b/src/intl/vi/page-index.json index e2770054a5a..b30c6b9462e 100644 --- a/src/intl/vi/page-index.json +++ b/src/intl/vi/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "Dùng thử ứng dụng", "page-index-cta-get-eth-description": "Tiền tệ của Ethereum", "page-index-cta-get-eth-label": "Mua ETH", - "page-index-cta-networks-description": "Tận hưởng mức phí tối thiểu", - "page-index-cta-networks-label": "Chọn một mạng", "page-index-cta-wallet-description": "Tạo tài khoản & quản lý tài sản", "page-index-cta-wallet-label": "Chọn ví", + "page-index-cta-build-apps-description": "Hãy tạo ứng dụng đầu tiên của quý vị", + "page-index-cta-build-apps-label": "Bắt đầu phát triển", "page-index-description": "Nền tảng hàng đầu cho các ứng dụng sáng tạo và mạng chuỗi khối", "page-index-developers-code-example-description-0": "Xây dựng một ngân hàng được vận hành bằng logic mà bạn đã lập trình", "page-index-developers-code-example-description-1": "Tạo token mà bạn có thể chuyển và sử dụng trên nhiều ứng dụng", diff --git a/src/intl/yo/page-index.json b/src/intl/yo/page-index.json index 3867d36a505..f70089cb8b7 100644 --- a/src/intl/yo/page-index.json +++ b/src/intl/yo/page-index.json @@ -36,10 +36,10 @@ "page-index-cta-dapps-label": "Gbìyànjú àwọn ohun èlò ẹ̀rọ", "page-index-cta-get-eth-description": "Owó ti Ethereum", "page-index-cta-get-eth-label": "Gba ETH", - "page-index-cta-networks-description": "Jẹ ìgbádùn owó péréte", - "page-index-cta-networks-label": "Yan nẹ́tíwọọkì kan", "page-index-cta-wallet-description": "Ṣẹ̀dá àkántì àti ṣàkóso àwọn ohun-ìní", "page-index-cta-wallet-label": "Mú wọ́lẹ́ẹ́tì kan", + "page-index-cta-build-apps-description": "Ṣẹda app rẹ̀ àkọ́kọ́́", + "page-index-cta-build-apps-label": "Bẹrẹ idagbasoke", "page-index-description": "Pẹpẹ asíwájú fún àwọn ohun èlò tuntun àti àwọn nẹ́tíwọọkì blockchain", "page-index-developers-code-example-description-0": "Kọ́ bánkì kan tí ó ní agbára nípasẹ̀ ọgbọ́n tí o ti ṣètò", "page-index-developers-code-example-description-1": "Ṣẹ̀dá tọ́kẹ̀n tí o lè fi ránṣẹ́ tàbí lò lorí àwọn ohun èlò ẹ̀ro", diff --git a/src/intl/zh-tw/page-index.json b/src/intl/zh-tw/page-index.json index 9e5e14461ef..9bd6258e931 100644 --- a/src/intl/zh-tw/page-index.json +++ b/src/intl/zh-tw/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "嘗試應用程式", "page-index-cta-get-eth-description": "以太坊的貨幣", "page-index-cta-get-eth-label": "取得以太幣", - "page-index-cta-networks-description": "享用最低額度的費用", - "page-index-cta-networks-label": "選擇網路", "page-index-cta-wallet-description": "創建帳戶,管理資產", "page-index-cta-wallet-label": "選一個錢包", + "page-index-cta-build-apps-description": "建立你的第一個應用程式", + "page-index-cta-build-apps-label": "開始開發", "page-index-description": "區塊鏈網路與創新應用程式的頂尖平台", "page-index-developers-code-example-description-0": "建置由自已寫出來的邏輯所支援的銀行", "page-index-developers-code-example-description-1": "製作可跨應用程式轉移和使用的代幣", diff --git a/src/intl/zh/page-index.json b/src/intl/zh/page-index.json index 332692c1a45..1755afc5a99 100644 --- a/src/intl/zh/page-index.json +++ b/src/intl/zh/page-index.json @@ -37,10 +37,10 @@ "page-index-cta-dapps-label": "试用应用程序", "page-index-cta-get-eth-description": "以太坊的货币", "page-index-cta-get-eth-label": "获取以太币", - "page-index-cta-networks-description": "享受最低收费", - "page-index-cta-networks-label": "选择一个网络", "page-index-cta-wallet-description": "创建帐户和管理资产", "page-index-cta-wallet-label": "选择一个钱包", + "page-index-cta-build-apps-description": "创建你的第一个应用", + "page-index-cta-build-apps-label": "开始构建", "page-index-description": "创新应用程序和区块链网络的首要平台", "page-index-developers-code-example-description-0": "用你编写的逻辑构建银行", "page-index-developers-code-example-description-1": "创建可跨应用程序转账和使用的代币", diff --git a/src/layouts/Docs.tsx b/src/layouts/Docs.tsx index 10ec8387c92..c83b9cedb64 100644 --- a/src/layouts/Docs.tsx +++ b/src/layouts/Docs.tsx @@ -34,6 +34,7 @@ import YouTube from "@/components/YouTube" import { cn } from "@/lib/utils/cn" import { getEditPath } from "@/lib/utils/editPath" +import { addSlashes } from "@/lib/utils/url" const baseHeadingClasses = "font-bold scroll-mt-40 break-words" @@ -133,7 +134,7 @@ export const DocsLayout = ({ className="flex justify-between bg-background-highlight lg:pe-8" dir={contentNotTranslated ? "ltr" : "unset"} > - +

{frontmatter.title}

Date: Wed, 4 Jun 2025 19:12:22 +0800 Subject: [PATCH 2/3] fix: align German Oracle page hash ID with English version --- public/content/translations/de/developers/docs/oracles/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/translations/de/developers/docs/oracles/index.md b/public/content/translations/de/developers/docs/oracles/index.md index ca0343908df..49256c09a6a 100644 --- a/public/content/translations/de/developers/docs/oracles/index.md +++ b/public/content/translations/de/developers/docs/oracles/index.md @@ -11,7 +11,7 @@ Oracles sind Datenleitungen, die Ethereum mit Offchain-Informationen in der real 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} +## Was ist ein Oracle {#what-is-a-blockchain-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". From c463f12fd501766414abb6fecc6612c8b9209889 Mon Sep 17 00:00:00 2001 From: chainide-agent-bob Date: Thu, 5 Jun 2025 10:41:31 +0800 Subject: [PATCH 3/3] docs: update German oracle documentation with improved title translations and content structure --- .../de/developers/docs/oracles/index.md | 609 +++++++++--------- 1 file changed, 295 insertions(+), 314 deletions(-) diff --git a/public/content/translations/de/developers/docs/oracles/index.md b/public/content/translations/de/developers/docs/oracles/index.md index 49256c09a6a..70fa3ecc1ea 100644 --- a/public/content/translations/de/developers/docs/oracles/index.md +++ b/public/content/translations/de/developers/docs/oracles/index.md @@ -2,338 +2,107 @@ 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 -## 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-a-blockchain-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; - } -} -``` - -[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) +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. -[Dokumentation ansehen](https://docs.chain.link/docs/get-the-latest-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. -### 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: - -- `checkUpkeep` - Prüft, ob der Vertrag Arbeiten erfordert. -- `performUpkeep` - Führt die Arbeit an dem Vertrag aus, wenn er von checkUpkeep angewiesen wurde. - -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 +## Voraussetzungen {#prerequisites} -```javascript -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; +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. -// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and -// ./interfaces/KeeperCompatibleInterface.sol -import "@chainlink/contracts/src/v0.7/KeeperCompatible.sol"; +## Was ist ein Blockchain-Oracle? {#what-is-a-blockchain-oracle} -contract Counter is KeeperCompatibleInterface { - /** - * Public counter variable - */ - uint public counter; +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. - /** - * Use an interval in seconds and a timestamp to slow execution of Upkeep - */ - uint public immutable interval; - uint public lastTimeStamp; +Ohne ein Oracle wären Smart Contracts ausschließlich auf Onchain-Daten beschränkt. - constructor(uint updateInterval) { - interval = updateInterval; - lastTimeStamp = block.timestamp; +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). - counter = 0; - } +## Warum brauchen Smart Contracts Oracles? {#why-do-smart-contracts-need-oracles} - 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. - } +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". - 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 - } -} -``` +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. -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. +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: +- "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?" -### Keeper-Projekte {#keepers} +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. -- [Chainlink Keeper](https://keepers.chain.link/) -- [Keep3r Netzwerk](https://docs.keep3r.network/) +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 API Aufruf {#chainlink-api-call} +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 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. +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. -[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) +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. -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. +## Das Oracle-Problem {#the-oracle-problem} -```javascript -pragma solidity ^0.6.0; +Oracles lösen ein wichtiges Problem, bringen aber auch neue Herausforderungen mit sich, z. B.: +- 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: +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? -Sie können mehr über die Anwendungen von Chainlink erfahren, indem Sie den [Chainlink-Entwickler-Blog](https://blog.chain.link/tag/developers/) lesen. +### Oracle-Contract {#oracle-contract} -## Oracle-Dienste {#other-services} +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. -- [Chainlink](https://chain.link/) -- [Witnet](https://witnet.io/) -- [Provable](https://provable.xyz/) -- [Paralink](https://paralink.network/) -- [Dos.Netzwerk](https://dos.network/) +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. -### Erstellen Sie einen Oracle-Smart-Contract {#build-an-oracle-smart-contract} - -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, @@ -350,23 +119,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 @@ -374,31 +143,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)){ @@ -419,24 +188,236 @@ 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} -## Weiterführende Informationen {#further-reading} +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. -**Artikel** +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. -- [Was ist ein Blockchain-Oracle?](https://chain.link/education/blockchain-oracles) - _Chainlink_ -- [Was ist ein Blockchain-Oracle?](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72) - _Patrick Collins_ -- [Dezentralisierte Oracle: Ein umfassender Überblick](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) - _Julien Thevenard_ -- [Implementieren eines Blockchain-Oracles auf Ethereum](https://medium.com/@pedrodc/implementieren-ein-blockchain-orakel-auf-ethereum-cedc7e26b49e) - _Pedro Costa_ -- [Warum können Smart Contracts keine API-Aufrufe tätigen?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) - _StackExchange_ -- [Warum wir dezentralisierte Oracles brauchen](https://newsletter.banklesshq.com/p/why-we-need-decentralized-oracles) - _Banklos_ -- [Sie wollen also ein Preis-Oracle benutzen](https://samczsun.com/so-you-want-to-use-a-price-oracle/) -_samczsun_ +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). -**Videos** +## 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} -- [Oracle und die Ausweitung der Blockchain-Nutzung](https://youtu.be/BVUZpWa8vpw) - _Real Vision Finance_ +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](https://en.wikipedia.org/wiki/Focal_point_(game_theory)) 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 Literatur {#further-reading} + +**Artikel** +- [Was ist ein Blockchain-Oracle?](https://chain.link/education/blockchain-oracles) — Chainlink +- [Was ist ein Blockchain-Oracle?](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72) — Patrick Collins +- [Dezentralisierte Oracles: Ein umfassender Überblick](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — Julien Thevenard +- [Implementierung eines Blockchain-Oracles auf Ethereum](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – Pedro Costa +- [Warum können Contracts keine API-Aufrufe tätigen?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — StackExchange +- [Warum wir dezentralisierte Oracles brauchen](https://newsletter.banklesshq.com/p/why-we-need-decentralized-oracles) — Bankless +- [So you want to use a price oracle](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — samczsun + +**Videos** +- [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 -**Lernprogramme** +**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 -- [Wie man den aktuellen Preis von Ethereum in Solidity abrufen kann](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) - _Chainlink_ +**Beispielprojekte** +- [Chainlink Ethereum Full-Stack-Starter-Projekt](https://github.com/hackbg/chainlink-fullstack) — HackBG