diff --git a/.all-contributorsrc b/.all-contributorsrc index b6ae3128ce0..1effda39ef0 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -14094,6 +14094,42 @@ "contributions": [ "content" ] + }, + { + "login": "0xSachinK", + "name": "Sachin", + "avatar_url": "https://avatars.githubusercontent.com/u/73331595?v=4", + "profile": "https://github.com/0xSachinK", + "contributions": [ + "maintenance" + ] + }, + { + "login": "nxxck", + "name": "nxxck", + "avatar_url": "https://avatars.githubusercontent.com/u/48026464?v=4", + "profile": "https://github.com/nxxck", + "contributions": [ + "content" + ] + }, + { + "login": "nexonik2", + "name": "Nexonik", + "avatar_url": "https://avatars.githubusercontent.com/u/262324427?v=4", + "profile": "https://github.com/Nexonik2", + "contributions": [ + "content" + ] + }, + { + "login": "lo996", + "name": "lo996", + "avatar_url": "https://avatars.githubusercontent.com/u/136587632?v=4", + "profile": "https://github.com/lo996", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, diff --git a/.github/workflows/branch-task.yml b/.github/workflows/branch-task.yml new file mode 100644 index 00000000000..5de7555e742 --- /dev/null +++ b/.github/workflows/branch-task.yml @@ -0,0 +1,10 @@ +name: Branch Task + +on: + workflow_dispatch: + +jobs: + stub: + runs-on: ubuntu-latest + steps: + - run: echo "ok" diff --git a/.lintstagedrc.js b/.lintstagedrc.js index d68b7b70454..d931a735109 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,9 +1,9 @@ const path = require("path") const buildEslintCommand = (filenames) => - `next lint --fix --file ${filenames + `eslint --fix ${filenames .map((f) => path.relative(process.cwd(), f)) - .join(" --file ")}` + .join(" ")}` const formatCommand = "prettier --write" diff --git a/.storybook/main.ts b/.storybook/main.ts index 70f7fb7efbc..adb6f8a805d 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -14,27 +14,22 @@ const config: StorybookConfig = { "../src/layouts/stories/*.stories.tsx", "../src/styles/*.stories.tsx", ], + addons: [ "@storybook/addon-links", - { - name: "@storybook/addon-essentials", - options: { - backgrounds: false, - }, - }, - "@storybook/addon-interactions", "@storybook/addon-themes", "@chromatic-com/storybook", "storybook-next-intl", + "@storybook/addon-docs", ], + staticDirs: ["../public"], + framework: { name: "@storybook/nextjs", options: {}, }, - docs: { - autodocs: "tag", - }, + webpackFinal: async (config) => { config.module = config.module || {} config.module.rules = config.module.rules || [] @@ -75,6 +70,7 @@ const config: StorybookConfig = { return config }, + typescript: { reactDocgenTypescriptOptions: { shouldExtractLiteralValuesFromEnum: true, @@ -82,8 +78,10 @@ const config: StorybookConfig = { reactDocgen: "react-docgen-typescript", }, + features: { experimentalRSC: true, + backgrounds: false, }, } export default config diff --git a/.storybook/manager.ts b/.storybook/manager.ts index db394db3384..25faa585ba9 100644 --- a/.storybook/manager.ts +++ b/.storybook/manager.ts @@ -1,4 +1,4 @@ -import { addons } from "@storybook/manager-api" +import { addons } from "storybook/manager-api" import favicon from "../public/images/eth-home-icon.png" diff --git a/.storybook/next-intl.ts b/.storybook/next-intl.ts index 7c78b768786..83ec1d83a5b 100644 --- a/.storybook/next-intl.ts +++ b/.storybook/next-intl.ts @@ -29,35 +29,37 @@ const supportedLngs = Object.keys(baseLocales) /** * Taking the ns array and generating those files for each language available. + * Uses require() because this file is bundled by webpack for the browser — + * webpack resolves require() at build time. Node-only APIs like fs or + * import.meta.dirname do not work here. */ -const messagesByLocale = ns.reduce((acc, n) => { - supportedLngs.forEach((lng) => { - if (!acc[lng]) acc[lng] = {} +const messagesByLocale = ns.reduce( + (acc, n) => { + supportedLngs.forEach((lng) => { + if (!acc[lng]) acc[lng] = {} - try { - acc[lng] = { - ...acc[lng], - [n]: { - ...acc[lng][n], - ...require(`../src/intl/${lng}/${n}.json`), - }, + try { + acc[lng] = { + ...acc[lng], + [n]: { + ...acc[lng][n], + ...require(`../src/intl/${lng}/${n}.json`), + }, + } + } catch { + acc[lng] = { + ...acc[lng], + [n]: { + ...acc[lng][n], + ...require(`../src/intl/en/${n}.json`), + }, + } } - } catch { - acc[lng] = { - ...acc[lng], - [n]: { - ...acc[lng][n], - ...require(`../src/intl/en/${n}.json`), - }, - } - } - }) + }) - return acc -}, {}) -console.log( - "🚀 ~ constresources:Resource=ns.reduce ~ resources:", - messagesByLocale + return acc + }, + {} as Record>> ) const nextIntl = { diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index ed82699642f..ee8ad2d1f6e 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -1,7 +1,7 @@ import isChromatic from "chromatic/isChromatic" import { MotionGlobalConfig } from "motion/react" import { IBM_Plex_Mono, Inter } from "next/font/google" -import type { Preview } from "@storybook/react" +import type { Preview } from "@storybook/nextjs" import ThemeProvider from "@/components/ThemeProvider" import { TooltipProvider } from "@/components/ui/tooltip" @@ -40,10 +40,6 @@ export const breakpointSet: [token: string, value: string][] = [ ] const preview: Preview = { - globals: { - locale: "en", - locales: baseLocales, - }, decorators: [ withNextThemes({ themes: { @@ -81,7 +77,7 @@ const preview: Preview = { layout: "centered", // Modify viewport selection to match Chakra breakpoints (or custom breakpoints) viewport: { - viewports: breakpointSet.reduce<{ + options: breakpointSet.reduce<{ [token: string]: { name: string styles: Record<"width" | "height", string> @@ -100,6 +96,10 @@ const preview: Preview = { }, {}), }, }, + initialGlobals: { + locale: "en", + locales: baseLocales, + }, } export default preview diff --git a/.storybook/theme.ts b/.storybook/theme.ts index a8ae9620560..fbc1cc1b912 100644 --- a/.storybook/theme.ts +++ b/.storybook/theme.ts @@ -1,4 +1,4 @@ -import { create } from "@storybook/theming" +import { create } from "storybook/theming" export default create({ base: "dark", diff --git a/.storybook/withNextThemes.ts b/.storybook/withNextThemes.ts index 236c3a51982..5a1630d9121 100644 --- a/.storybook/withNextThemes.ts +++ b/.storybook/withNextThemes.ts @@ -4,7 +4,7 @@ import { type DataAttributeStrategyConfiguration, DecoratorHelpers, } from "@storybook/addon-themes" -import type { Decorator } from "@storybook/react/*" +import type { Decorator } from "@storybook/nextjs" const { initializeThemeState, pluckThemeFromContext } = DecoratorHelpers diff --git a/AGENTS.md b/AGENTS.md index 9f8bc8478b8..fede2fcfc3f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -154,6 +154,7 @@ pnpm events-import # Import community events 6. **Consider i18n** - All user-facing text should be translatable (use `getTranslations` and `getLocale`) 7. **Mobile-first** - Design for mobile, enhance for desktop 8. **Accessibility** - Use Radix primitives, semantic HTML +9. **Use locale-aware formatting wrappers** - Use `numberFormat()` from `src/lib/utils/numbers.ts` instead of `new Intl.NumberFormat()`, and `dateTimeFormat()` from `src/lib/utils/date.ts` instead of `new Intl.DateTimeFormat()` / `.toLocaleDateString()` / `.toLocaleTimeString()`. Both enforce correct numbering systems and calendar for Urdu and Arabic locales. ### Component Development diff --git a/README.md b/README.md index 563a4695019..318d5e19f26 100644 --- a/README.md +++ b/README.md @@ -2195,6 +2195,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d 0xMushow
0xMushow

🚧 Samuel Laferriere
Samuel Laferriere

🖋 + Sachin
Sachin

🚧 + nxxck
nxxck

🖋 + Nexonik
Nexonik

🖋 + lo996
lo996

🚧 diff --git a/app/[locale]/10years/_components/TenYearHero.tsx b/app/[locale]/10years/_components/TenYearHero.tsx index 4162a063355..83593c44417 100644 --- a/app/[locale]/10years/_components/TenYearHero.tsx +++ b/app/[locale]/10years/_components/TenYearHero.tsx @@ -7,11 +7,8 @@ import Morpher from "@/components/Morpher/lazy" import TenYearBackgroundImage from "@/public/images/10-year-anniversary/10-year-background.png" import TenYearGraphicImage from "@/public/images/10-year-anniversary/10-year-graphic.png" -const TenYearHero = async ({ locale }: { locale: string }) => { - const t = await getTranslations({ - locale, - namespace: "page-10-year-anniversary", - }) +const TenYearHero = async () => { + const t = await getTranslations("page-10-year-anniversary") const WORDS = [ t("page-10-year-censorship-resistance"), diff --git a/app/[locale]/10years/_components/torchHoldersData.ts b/app/[locale]/10years/_components/torchHoldersData.ts index 33202a057e1..57beb3a075a 100644 --- a/app/[locale]/10years/_components/torchHoldersData.ts +++ b/app/[locale]/10years/_components/torchHoldersData.ts @@ -1,3 +1,5 @@ +import { dateTimeFormat } from "@/lib/utils/date" + /** * Pre-computed static torch holders data * This data is final and will not be updated (the torch has been burned) @@ -229,13 +231,13 @@ export const extractTwitterHandle = (twitterUrl: string): string | null => { export const formatTorchDate = (timestamp: number): string => { const date = new Date(timestamp * 1000) - const month = date.toLocaleDateString("en-US", { month: "long" }) + const month = dateTimeFormat("en-US", { month: "long" }).format(date) const day = date.getDate().toString().padStart(2, "0") - const time = date.toLocaleTimeString("en-US", { + const time = dateTimeFormat("en-US", { hour: "numeric", minute: "2-digit", hour12: true, - }) + }).format(date) return `${month} ${day}, ${time}` } diff --git a/app/[locale]/10years/_components/utils.ts b/app/[locale]/10years/_components/utils.ts index 98ddb7631d8..9f35b66ceac 100644 --- a/app/[locale]/10years/_components/utils.ts +++ b/app/[locale]/10years/_components/utils.ts @@ -1,4 +1,4 @@ -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import { formatDate, isValidDate } from "@/lib/utils/date" @@ -46,11 +46,7 @@ export const parseStoryDates = ( })) export const getInnovationCards = async (): Promise => { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-10-year-anniversary", - }) + const t = await getTranslations("page-10-year-anniversary") return [ { image: EthereumLaunchImage, @@ -80,11 +76,7 @@ export const getInnovationCards = async (): Promise => { } export const getAdoptionCards = async (): Promise => { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-10-year-anniversary", - }) + const t = await getTranslations("page-10-year-anniversary") return [ { image: Adoption1Image, diff --git a/app/[locale]/10years/page-jsonld.tsx b/app/[locale]/10years/page-jsonld.tsx index 05cd1626f5d..2fe50a942fc 100644 --- a/app/[locale]/10years/page-jsonld.tsx +++ b/app/[locale]/10years/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function TenYearJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-10-year-anniversary", - }) + const t = await getTranslations("page-10-year-anniversary") const url = normalizeUrlForJsonLd(locale, "/10years/") diff --git a/app/[locale]/10years/page.tsx b/app/[locale]/10years/page.tsx index 71ed41266fc..8dcf52628a7 100644 --- a/app/[locale]/10years/page.tsx +++ b/app/[locale]/10years/page.tsx @@ -57,10 +57,7 @@ const Page = async (props: { params: Promise }) => { const requiredNamespaces = getRequiredNamespacesForPage("/10years") const messages = pick(allMessages, requiredNamespaces) - const t = await getTranslations({ - locale, - namespace: "page-10-year-anniversary", - }) + const t = await getTranslations("page-10-year-anniversary") const innovationCards = await getInnovationCards() const adoptionCards = await getAdoptionCards() @@ -74,7 +71,7 @@ const Page = async (props: { params: Promise }) => { <> - +
contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-apps" }) + const t = await getTranslations("page-apps") const url = normalizeUrlForJsonLd(locale, `/apps/categories/${categoryName}`) // Get apps for this category diff --git a/app/[locale]/apps/categories/[catetgoryName]/page.tsx b/app/[locale]/apps/categories/[catetgoryName]/page.tsx index 3214f84af77..daf39407e7a 100644 --- a/app/[locale]/apps/categories/[catetgoryName]/page.tsx +++ b/app/[locale]/apps/categories/[catetgoryName]/page.tsx @@ -8,6 +8,7 @@ import { import { AppCategoryEnum, + type AppData, type Lang, type PageParams, type SectionNavDetails, @@ -30,6 +31,7 @@ import { getHighlightedApps } from "@/lib/utils/apps" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" +import { slugify } from "@/lib/utils/url" import { appsCategories } from "@/data/apps/categories" @@ -61,7 +63,8 @@ const Page = async (props: { throw new Error("Failed to fetch apps data") } - const t = await getTranslations({ locale, namespace: "page-apps" }) + const t = await getTranslations("page-apps") + const tSubcategory = await getTranslations("app-subcategories") // Get i18n messages const allMessages = await getMessages({ locale }) @@ -86,6 +89,12 @@ const Page = async (props: { notFound() } + // Translate subcategory tags, falling back to the raw string + const translateSubcategories = (tag: string) => { + const key = `subcategory-${slugify(tag)}` + return tSubcategory.has(key) ? tSubcategory(key) : tag + } + // Get highlighted apps (apps with highlight=true) const highlightedApps = getHighlightedApps( appsData, @@ -160,13 +169,25 @@ const Page = async (props: {

{t("page-apps-highlights-title")}

({ + ...app, + subCategory: app.subCategory.map(translateSubcategories), + })) as AppData[] + } matomoCategory={`category_page`} />
- + ({ + ...app, + subCategory: app.subCategory.map(translateSubcategories), + })) as AppData[] + } + />
@@ -184,7 +205,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale, catetgoryName } = params - const t = await getTranslations({ locale, namespace: "page-apps" }) + const t = await getTranslations("page-apps") // Normalize slug to lowercase const normalizedSlug = catetgoryName.toLowerCase() diff --git a/app/[locale]/apps/page-jsonld.tsx b/app/[locale]/apps/page-jsonld.tsx index 1f093efab63..5e3ee93c987 100644 --- a/app/[locale]/apps/page-jsonld.tsx +++ b/app/[locale]/apps/page-jsonld.tsx @@ -19,7 +19,7 @@ export default async function AppsJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-apps" }) + const t = await getTranslations("page-apps") const url = normalizeUrlForJsonLd(locale, "/apps/") diff --git a/app/[locale]/apps/page.tsx b/app/[locale]/apps/page.tsx index e19371f7dab..b2aeccede8d 100644 --- a/app/[locale]/apps/page.tsx +++ b/app/[locale]/apps/page.tsx @@ -5,7 +5,7 @@ import { setRequestLocale, } from "next-intl/server" -import { Lang, PageParams } from "@/lib/types" +import { AppCategory, AppData, Lang, PageParams } from "@/lib/types" import AppCard from "@/components/AppCard" import Breadcrumbs from "@/components/Breadcrumbs" @@ -61,7 +61,27 @@ const Page = async (props: { params: Promise }) => { const discoverApps = getDiscoverApps(appsData, 6) // Get translations - const t = await getTranslations({ locale, namespace: "page-apps" }) + const t = await getTranslations("page-apps") + const tSubcategory = await getTranslations("app-subcategories") + + // Translate subcategory tags, falling back to the raw string + const translateSubcategories = (tag: string) => { + const key = `subcategory-${slugify(tag)}` + return tSubcategory.has(key) ? tSubcategory(key) : tag + } + + const translateApp = (app: AppData) => + ({ + ...app, + subCategory: app.subCategory.map(translateSubcategories), + }) as AppData + + const translatedAppsData = Object.fromEntries( + Object.entries(appsData).map(([category, apps]) => [ + category, + (apps as AppData[]).map(translateApp), + ]) + ) as Record // Get i18n messages const allMessages = await getMessages({ locale }) @@ -94,7 +114,7 @@ const Page = async (props: { params: Promise }) => {

{t("page-apps-highlights-title")}

- +
@@ -108,7 +128,7 @@ const Page = async (props: { params: Promise }) => { thumbnail={app.image} category={app.category} categoryTagStatus={APP_TAG_VARIANTS[app.category]} - tags={app.subCategory} + tags={app.subCategory.map(translateSubcategories)} href={`/apps/${slugify(app.name)}`} imageSize="large" customEventOptions={{ @@ -128,7 +148,7 @@ const Page = async (props: { params: Promise }) => {

{t("page-apps-applications-title")}

- +
{/* Note: Implemented this instead of swiper from design to allow for SSR */} @@ -156,7 +176,7 @@ const Page = async (props: { params: Promise }) => {

{t("page-apps-community-picks-title")}

@@ -174,7 +194,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-apps" }) + const t = await getTranslations("page-apps") return await getMetadata({ locale, diff --git a/app/[locale]/assets/page-jsonld.tsx b/app/[locale]/assets/page-jsonld.tsx index 228af391037..2d015d713d5 100644 --- a/app/[locale]/assets/page-jsonld.tsx +++ b/app/[locale]/assets/page-jsonld.tsx @@ -17,7 +17,7 @@ export default async function AssetsJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-assets" }) + const t = await getTranslations("page-assets") const url = normalizeUrlForJsonLd(locale, `/assets/`) diff --git a/app/[locale]/assets/page.tsx b/app/[locale]/assets/page.tsx index 1a67a86e4d9..82e32ff54a4 100644 --- a/app/[locale]/assets/page.tsx +++ b/app/[locale]/assets/page.tsx @@ -48,7 +48,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-assets" }) + const t = await getTranslations("page-assets") return await getMetadata({ locale, diff --git a/app/[locale]/bug-bounty/page-jsonld.tsx b/app/[locale]/bug-bounty/page-jsonld.tsx index 292a7a3fbe8..b0e94928809 100644 --- a/app/[locale]/bug-bounty/page-jsonld.tsx +++ b/app/[locale]/bug-bounty/page-jsonld.tsx @@ -17,7 +17,7 @@ export default async function BugBountyJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-bug-bounty" }) + const t = await getTranslations("page-bug-bounty") const url = normalizeUrlForJsonLd(locale, `/bug-bounty/`) diff --git a/app/[locale]/bug-bounty/page.tsx b/app/[locale]/bug-bounty/page.tsx index fafa72d60c0..1ecbef7ad02 100644 --- a/app/[locale]/bug-bounty/page.tsx +++ b/app/[locale]/bug-bounty/page.tsx @@ -113,8 +113,8 @@ export default async function Page(props: { params: Promise }) { const params = await props.params const { locale } = params - const t = await getTranslations({ namespace: "page-bug-bounty" }) - const tCommon = await getTranslations({ namespace: "common" }) + const t = await getTranslations("page-bug-bounty") + const tCommon = await getTranslations("common") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo("bug-bounty", locale as Lang) @@ -840,7 +840,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-bug-bounty" }) + const t = await getTranslations("page-bug-bounty") return await getMetadata({ locale, diff --git a/app/[locale]/collectibles/_components/CollectiblesProgress/index.tsx b/app/[locale]/collectibles/_components/CollectiblesProgress/index.tsx index 5b46b0dff26..9ae2fcd1416 100644 --- a/app/[locale]/collectibles/_components/CollectiblesProgress/index.tsx +++ b/app/[locale]/collectibles/_components/CollectiblesProgress/index.tsx @@ -5,6 +5,8 @@ import { useLocale } from "next-intl" import { Progress } from "@/components/ui/progress" +import { dateTimeFormat } from "@/lib/utils/date" + import { type BadgeWithOwned } from "../CollectiblesContent" import useTranslation from "@/hooks/useTranslation" @@ -38,7 +40,7 @@ const CollectiblesProgress = ({ badges }: CollectiblesProgressProps) => { {contributorSinceYear < Infinity && (

{t("page-collectibles-contributing-since")}:{" "} - {new Intl.DateTimeFormat(locale, { + {dateTimeFormat(locale, { year: "numeric", }).format(new Date().setFullYear(contributorSinceYear))}

diff --git a/app/[locale]/collectibles/page-jsonld.tsx b/app/[locale]/collectibles/page-jsonld.tsx index 3e06c6662d5..342c4770c03 100644 --- a/app/[locale]/collectibles/page-jsonld.tsx +++ b/app/[locale]/collectibles/page-jsonld.tsx @@ -24,7 +24,7 @@ export default async function CollectiblesJsonLD({ stats: Stats contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-collectibles" }) + const t = await getTranslations("page-collectibles") const url = normalizeUrlForJsonLd(locale, `/collectibles/`) diff --git a/app/[locale]/collectibles/page.tsx b/app/[locale]/collectibles/page.tsx index ba582b15753..c2d55b8f117 100644 --- a/app/[locale]/collectibles/page.tsx +++ b/app/[locale]/collectibles/page.tsx @@ -15,6 +15,7 @@ import { Section } from "@/components/ui/section" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" +import { numberFormat } from "@/lib/utils/numbers" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" import CollectiblesPage from "./_components/Collectibles/lazy" @@ -43,7 +44,7 @@ async function fetchStats() { export default async function Page(props: { params: Promise }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-collectibles" }) + const t = await getTranslations("page-collectibles") setRequestLocale(locale) // Fetch data @@ -111,7 +112,9 @@ export default async function Page(props: { params: Promise }) { {/* Minted */}
- {stats.collectorsCount?.toLocaleString(locale) ?? "-"} + {stats.collectorsCount + ? numberFormat(locale).format(stats.collectorsCount) + : "-"}
{t("page-collectibles-stats-minted")} @@ -120,7 +123,9 @@ export default async function Page(props: { params: Promise }) { {/* Collectors */}
- {stats.uniqueAddressesCount?.toLocaleString(locale) ?? "-"} + {stats.uniqueAddressesCount + ? numberFormat(locale).format(stats.uniqueAddressesCount) + : "-"}
{t("page-collectibles-stats-collectors")} @@ -129,7 +134,9 @@ export default async function Page(props: { params: Promise }) { {/* Unique Badges */}
- {stats.collectiblesCount?.toLocaleString(locale) ?? "-"} + {stats.collectiblesCount + ? numberFormat(locale).format(stats.collectiblesCount) + : "-"}
{t("page-collectibles-stats-unique-badges")} @@ -152,7 +159,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-collectibles" }) + const t = await getTranslations("page-collectibles") return await getMetadata({ locale, slug: ["collectibles"], diff --git a/app/[locale]/community/events/_components/OrganizerCTA.tsx b/app/[locale]/community/events/_components/OrganizerCTA.tsx index 26004127f41..bd0c0fb9a0f 100644 --- a/app/[locale]/community/events/_components/OrganizerCTA.tsx +++ b/app/[locale]/community/events/_components/OrganizerCTA.tsx @@ -1,4 +1,4 @@ -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import { ButtonLink } from "@/components/ui/buttons/Button" import { Section } from "@/components/ui/section" @@ -10,11 +10,7 @@ interface OrganizerCTAProps { } export default async function OrganizerCTA({ className }: OrganizerCTAProps) { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") return (
}) => { const _events = (await getEventsData()) ?? [] - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") // Apply translations and compute eventTypes from tags if missing const events = mapEventTranslations(_events, t) @@ -140,10 +137,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") const year = getLocaleYear(locale) diff --git a/app/[locale]/community/events/meetups/page.tsx b/app/[locale]/community/events/meetups/page.tsx index 1a6a232751a..b00fde43761 100644 --- a/app/[locale]/community/events/meetups/page.tsx +++ b/app/[locale]/community/events/meetups/page.tsx @@ -25,10 +25,7 @@ const Page = async (props: { params: Promise }) => { const _events = (await getEventsData()) ?? [] - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") // Apply translations and compute eventTypes from tags if missing const events = mapEventTranslations(_events, t) @@ -82,10 +79,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") const year = getLocaleYear(locale) diff --git a/app/[locale]/community/events/page-jsonld.tsx b/app/[locale]/community/events/page-jsonld.tsx index 1c460c9b037..d65524bc5de 100644 --- a/app/[locale]/community/events/page-jsonld.tsx +++ b/app/[locale]/community/events/page-jsonld.tsx @@ -106,8 +106,8 @@ export default async function EventsJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-community-events" }) - const common = await getTranslations({ namespace: "common" }) + const t = await getTranslations("page-community-events") + const common = await getTranslations("common") const year = getLocaleYear(locale) const url = normalizeUrlForJsonLd(locale, `/community/events/`) diff --git a/app/[locale]/community/events/page.tsx b/app/[locale]/community/events/page.tsx index 1c3634f351c..00be50ac273 100644 --- a/app/[locale]/community/events/page.tsx +++ b/app/[locale]/community/events/page.tsx @@ -50,10 +50,7 @@ const Page = async (props: { params: Promise }) => { const _events = (await getEventsData()) ?? [] - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") const allMessages = await getMessages({ locale }) const requiredNamespaces = getRequiredNamespacesForPage("/community/events") @@ -585,10 +582,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") const year = getLocaleYear(locale) diff --git a/app/[locale]/community/events/search/page.tsx b/app/[locale]/community/events/search/page.tsx index 3fd85249836..9aff9dd4761 100644 --- a/app/[locale]/community/events/search/page.tsx +++ b/app/[locale]/community/events/search/page.tsx @@ -38,11 +38,8 @@ const Page = async (props: { const _events = (await getEventsData()) ?? [] - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) - const tCommon = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("page-community-events") + const tCommon = await getTranslations("common") const events = mapEventTranslations(_events, t) @@ -151,10 +148,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-community-events", - }) + const t = await getTranslations("page-community-events") return await getMetadata({ locale, diff --git a/app/[locale]/community/page-jsonld.tsx b/app/[locale]/community/page-jsonld.tsx index 87bb4aa98d8..7cc45970188 100644 --- a/app/[locale]/community/page-jsonld.tsx +++ b/app/[locale]/community/page-jsonld.tsx @@ -17,7 +17,7 @@ export default async function CommunityJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-community" }) + const t = await getTranslations("page-community") const url = normalizeUrlForJsonLd(locale, `/community/`) diff --git a/app/[locale]/community/page.tsx b/app/[locale]/community/page.tsx index 6dea3835a4f..61bef534282 100644 --- a/app/[locale]/community/page.tsx +++ b/app/[locale]/community/page.tsx @@ -48,7 +48,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-community" }) + const t = await getTranslations("page-community") return await getMetadata({ locale, slug: ["community"], diff --git a/app/[locale]/community/support/page.tsx b/app/[locale]/community/support/page.tsx index 42ffc820731..6a0c32c8cb7 100644 --- a/app/[locale]/community/support/page.tsx +++ b/app/[locale]/community/support/page.tsx @@ -29,7 +29,7 @@ export default async function Page(props: { params: Promise }) { setRequestLocale(locale) - const t = await getTranslations({ namespace: "page-community-support" }) + const t = await getTranslations("page-community-support") return (
@@ -409,10 +409,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-community-support", - }) + const t = await getTranslations("page-community-support") return await getMetadata({ locale, diff --git a/app/[locale]/contributing/translation-program/acknowledgements/page-jsonld.tsx b/app/[locale]/contributing/translation-program/acknowledgements/page-jsonld.tsx index 927d8272a6f..c7c9f556c7e 100644 --- a/app/[locale]/contributing/translation-program/acknowledgements/page-jsonld.tsx +++ b/app/[locale]/contributing/translation-program/acknowledgements/page-jsonld.tsx @@ -17,9 +17,9 @@ export default async function AcknowledgementsJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-contributing-translation-program-acknowledgements", - }) + const t = await getTranslations( + "page-contributing-translation-program-acknowledgements" + ) const url = normalizeUrlForJsonLd( locale, diff --git a/app/[locale]/contributing/translation-program/acknowledgements/page.tsx b/app/[locale]/contributing/translation-program/acknowledgements/page.tsx index fa298f3a9b9..158d6590b37 100644 --- a/app/[locale]/contributing/translation-program/acknowledgements/page.tsx +++ b/app/[locale]/contributing/translation-program/acknowledgements/page.tsx @@ -50,10 +50,9 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-contributing-translation-program-acknowledgements", - }) + const t = await getTranslations( + "page-contributing-translation-program-acknowledgements" + ) return await getMetadata({ locale, diff --git a/app/[locale]/contributing/translation-program/contributors/page-jsonld.tsx b/app/[locale]/contributing/translation-program/contributors/page-jsonld.tsx index ea2726760af..c41328fce80 100644 --- a/app/[locale]/contributing/translation-program/contributors/page-jsonld.tsx +++ b/app/[locale]/contributing/translation-program/contributors/page-jsonld.tsx @@ -17,9 +17,9 @@ export default async function ContributorsJsonLD({ contributors: FileContributor[] locale: string }) { - const t = await getTranslations({ - namespace: "page-contributing-translation-program-contributors", - }) + const t = await getTranslations( + "page-contributing-translation-program-contributors" + ) const contributorList = contributors.map((contributor) => ({ "@type": "Person", diff --git a/app/[locale]/contributing/translation-program/contributors/page.tsx b/app/[locale]/contributing/translation-program/contributors/page.tsx index ad71c133aac..4844a3a61d1 100644 --- a/app/[locale]/contributing/translation-program/contributors/page.tsx +++ b/app/[locale]/contributing/translation-program/contributors/page.tsx @@ -50,10 +50,9 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-contributing-translation-program-contributors", - }) + const t = await getTranslations( + "page-contributing-translation-program-contributors" + ) return await getMetadata({ locale, diff --git a/app/[locale]/developers/page-jsonld.tsx b/app/[locale]/developers/page-jsonld.tsx index de7474d820c..c2c753a0f70 100644 --- a/app/[locale]/developers/page-jsonld.tsx +++ b/app/[locale]/developers/page-jsonld.tsx @@ -25,7 +25,7 @@ export default async function DevelopersPageJsonLD({ hackathons: EventItem[] contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-developers-index" }) + const t = await getTranslations("page-developers-index") const url = normalizeUrlForJsonLd(locale, `/developers/`) diff --git a/app/[locale]/developers/page.tsx b/app/[locale]/developers/page.tsx index 08cbd6d62e0..e0174d0f026 100644 --- a/app/[locale]/developers/page.tsx +++ b/app/[locale]/developers/page.tsx @@ -124,14 +124,8 @@ const DevelopersPage = async (props: { params: Promise }) => { const params = await props.params const { locale } = params setRequestLocale(locale) - const t = await getTranslations({ - locale, - namespace: "page-developers-index", - }) - const tCommon = await getTranslations({ - locale, - namespace: "common", - }) + const t = await getTranslations("page-developers-index") + const tCommon = await getTranslations("common") const paths = await getBuilderPaths() const speedRunDetails = { @@ -699,10 +693,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-developers-index", - }) + const t = await getTranslations("page-developers-index") return await getMetadata({ locale, diff --git a/app/[locale]/developers/tools/[category]/page-jsonld.tsx b/app/[locale]/developers/tools/[category]/page-jsonld.tsx index 5fbc34f9cec..e81f0f39744 100644 --- a/app/[locale]/developers/tools/[category]/page-jsonld.tsx +++ b/app/[locale]/developers/tools/[category]/page-jsonld.tsx @@ -23,7 +23,7 @@ export default async function DevelopersToolsCategoryJsonLD({ categoryTools: DeveloperTool[] contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-developers-tools" }) + const t = await getTranslations("page-developers-tools") const url = normalizeUrlForJsonLd(locale, `/developers/tools/${category}`) diff --git a/app/[locale]/developers/tools/[category]/page.tsx b/app/[locale]/developers/tools/[category]/page.tsx index 28b03b974d5..6b662021e7b 100644 --- a/app/[locale]/developers/tools/[category]/page.tsx +++ b/app/[locale]/developers/tools/[category]/page.tsx @@ -41,10 +41,7 @@ const Page = async (props: { notFound() } - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) + const t = await getTranslations("page-developers-tools") const data = await getDeveloperToolsData() if (!data) throw Error("No developer tools data available") @@ -159,10 +156,7 @@ export async function generateMetadata(props: { notFound() } - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) + const t = await getTranslations("page-developers-tools") return await getMetadata({ locale, diff --git a/app/[locale]/developers/tools/_components/HighlightsSection.tsx b/app/[locale]/developers/tools/_components/HighlightsSection.tsx index 8b5fd3db287..6de1f57e059 100644 --- a/app/[locale]/developers/tools/_components/HighlightsSection.tsx +++ b/app/[locale]/developers/tools/_components/HighlightsSection.tsx @@ -1,4 +1,4 @@ -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import AppCard from "@/components/AppCard" import { Image } from "@/components/Image" @@ -18,11 +18,7 @@ import type { DeveloperTool } from "../types" import { getCategoryTagStyle } from "../utils" const HighlightsSection = async ({ tools }: { tools: DeveloperTool[] }) => { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) + const t = await getTranslations("page-developers-tools") // Don't render section if no tools to highlight if (tools.length === 0) return null diff --git a/app/[locale]/developers/tools/_components/ToolModalContents.tsx b/app/[locale]/developers/tools/_components/ToolModalContents.tsx index 4d0ba038dfe..e2e3eac1b3a 100644 --- a/app/[locale]/developers/tools/_components/ToolModalContents.tsx +++ b/app/[locale]/developers/tools/_components/ToolModalContents.tsx @@ -10,6 +10,7 @@ import { ButtonLink } from "@/components/ui/buttons/Button" import { Tag, TagsInlineText } from "@/components/ui/tag" import { formatDate, getValidDate } from "@/lib/utils/date" +import { numberFormat } from "@/lib/utils/numbers" import { isExternal } from "@/lib/utils/url" import { DEV_TOOL_CATEGORY_SLUGS } from "../constants" @@ -20,11 +21,8 @@ import { renderSimpleMarkdown } from "@/lib/md/renderSimple" const ToolModalContents = async ({ tool }: { tool: DeveloperTool }) => { const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) - const tCommon = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("page-developers-tools") + const tCommon = await getTranslations("common") const categorySlug = DEV_TOOL_CATEGORY_SLUGS[tool.category] @@ -62,7 +60,7 @@ const ToolModalContents = async ({ tool }: { tool: DeveloperTool }) => { status={getCategoryTagStyle(categorySlug)} className="px-1 py-0" > - {tool.category} + {t(`page-developers-tools-category-${categorySlug}-title`)}

{tool.name}

{ className="text-sm" title={t("page-developers-tools-stats-stargazers")} > - ({new Intl.NumberFormat(locale).format(stargazers)} + ({numberFormat(locale).format(stargazers)} ) @@ -139,7 +137,7 @@ const ToolModalContents = async ({ tool }: { tool: DeveloperTool }) => { title={t("page-developers-tools-stats-downloads")} > ( - {new Intl.NumberFormat(locale, { + {numberFormat(locale, { notation: "compact", }).format(downloads)} diff --git a/app/[locale]/developers/tools/page-jsonld.tsx b/app/[locale]/developers/tools/page-jsonld.tsx index e7ca51efe74..5128907995d 100644 --- a/app/[locale]/developers/tools/page-jsonld.tsx +++ b/app/[locale]/developers/tools/page-jsonld.tsx @@ -19,7 +19,7 @@ export default async function DevelopersToolsJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-developers-tools" }) + const t = await getTranslations("page-developers-tools") const url = normalizeUrlForJsonLd(locale, "/developers/tools/") diff --git a/app/[locale]/developers/tools/page.tsx b/app/[locale]/developers/tools/page.tsx index ac3b45bebb0..42eadb8e37f 100644 --- a/app/[locale]/developers/tools/page.tsx +++ b/app/[locale]/developers/tools/page.tsx @@ -38,10 +38,7 @@ const Page = async (props: { const { toolId } = searchParams setRequestLocale(locale) - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) + const t = await getTranslations("page-developers-tools") const data = await getDeveloperToolsData() if (!data) throw Error("No developer apps data available") @@ -172,10 +169,7 @@ export async function generateMetadata(props: { }) { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-developers-tools", - }) + const t = await getTranslations("page-developers-tools") return await getMetadata({ locale, diff --git a/app/[locale]/developers/tutorials/page-jsonld.tsx b/app/[locale]/developers/tutorials/page-jsonld.tsx index 86068f8b1c5..359536cc26c 100644 --- a/app/[locale]/developers/tutorials/page-jsonld.tsx +++ b/app/[locale]/developers/tutorials/page-jsonld.tsx @@ -19,7 +19,7 @@ export default async function TutorialsPageJsonLD({ internalTutorials: ITutorial[] contributors: FileContributor[] }) { - const t = await getTranslations({ namespace: "page-developers-tutorials" }) + const t = await getTranslations("page-developers-tutorials") const url = normalizeUrlForJsonLd(locale, `/developers/tutorials/`) diff --git a/app/[locale]/developers/tutorials/page.tsx b/app/[locale]/developers/tutorials/page.tsx index 72e0a516258..ea9e2865b6d 100644 --- a/app/[locale]/developers/tutorials/page.tsx +++ b/app/[locale]/developers/tutorials/page.tsx @@ -30,10 +30,7 @@ const Page = async (props: { params: Promise }) => { setRequestLocale(locale) - const t = await getTranslations({ - locale, - namespace: "page-developers-tutorials", - }) + const t = await getTranslations("page-developers-tutorials") // Get i18n messages const allMessages = await getMessages({ locale }) @@ -92,10 +89,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-developers-tutorials", - }) + const t = await getTranslations("page-developers-tutorials") return await getMetadata({ locale, diff --git a/app/[locale]/developers/utils.tsx b/app/[locale]/developers/utils.tsx index b2bb7533ebf..184336b9be0 100644 --- a/app/[locale]/developers/utils.tsx +++ b/app/[locale]/developers/utils.tsx @@ -1,4 +1,4 @@ -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import type { EventItem } from "@/lib/types" @@ -15,11 +15,7 @@ import speedrunStablecoins from "@/public/images/developers/speedrun-stablecoins import speedrunNFT from "@/public/images/developers/speedrun-tokenization.png" export const getBuilderPaths = async (): Promise => { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-developers-index", - }) + const t = await getTranslations("page-developers-index") return [ { @@ -53,11 +49,7 @@ export const getBuilderPaths = async (): Promise => { } export const getVideoCourses = async (): Promise => { - const locale = await getLocale() - const t = await getTranslations({ - locale, - namespace: "page-developers-index", - }) + const t = await getTranslations("page-developers-index") const getDuration = (hours: number) => t.rich("page-developers-course-duration", { diff --git a/app/[locale]/ethereum-history-founder-and-ownership/page-jsonld.tsx b/app/[locale]/ethereum-history-founder-and-ownership/page-jsonld.tsx index 34279c862cd..f03d18c2f15 100644 --- a/app/[locale]/ethereum-history-founder-and-ownership/page-jsonld.tsx +++ b/app/[locale]/ethereum-history-founder-and-ownership/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function EthereumHistoryFounderAndOwnershipPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-ethereum-history-founder-and-ownership", - }) + const t = await getTranslations("page-ethereum-history-founder-and-ownership") const url = normalizeUrlForJsonLd( locale, diff --git a/app/[locale]/ethereum-history-founder-and-ownership/page.tsx b/app/[locale]/ethereum-history-founder-and-ownership/page.tsx index e690349124f..9e06c8f5dce 100644 --- a/app/[locale]/ethereum-history-founder-and-ownership/page.tsx +++ b/app/[locale]/ethereum-history-founder-and-ownership/page.tsx @@ -26,9 +26,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { setRequestLocale(locale) - const t = await getTranslations({ - namespace: "page-ethereum-history-founder-and-ownership", - }) + const t = await getTranslations("page-ethereum-history-founder-and-ownership") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo( @@ -574,10 +572,7 @@ export async function generateMetadata({ }) { const { locale } = await params - const t = await getTranslations({ - locale, - namespace: "page-ethereum-history-founder-and-ownership", - }) + const t = await getTranslations("page-ethereum-history-founder-and-ownership") return await getMetadata({ locale, diff --git a/app/[locale]/ethereum-vs-bitcoin/page-jsonld.tsx b/app/[locale]/ethereum-vs-bitcoin/page-jsonld.tsx index 4f18ed1940f..40c185f799c 100644 --- a/app/[locale]/ethereum-vs-bitcoin/page-jsonld.tsx +++ b/app/[locale]/ethereum-vs-bitcoin/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function EthereumVsBitcoinPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-ethereum-vs-bitcoin", - }) + const t = await getTranslations("page-ethereum-vs-bitcoin") const url = normalizeUrlForJsonLd(locale, `/ethereum-vs-bitcoin/`) diff --git a/app/[locale]/ethereum-vs-bitcoin/page.tsx b/app/[locale]/ethereum-vs-bitcoin/page.tsx index 63a45a36f38..c17e309ef32 100644 --- a/app/[locale]/ethereum-vs-bitcoin/page.tsx +++ b/app/[locale]/ethereum-vs-bitcoin/page.tsx @@ -30,10 +30,7 @@ const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { setRequestLocale(locale) - const t = await getTranslations({ - locale, - namespace: "page-ethereum-vs-bitcoin", - }) + const t = await getTranslations("page-ethereum-vs-bitcoin") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo("ethereum-vs-bitcoin", locale as Lang) @@ -443,10 +440,7 @@ export async function generateMetadata({ }) { const { locale } = await params - const t = await getTranslations({ - locale, - namespace: "page-ethereum-vs-bitcoin", - }) + const t = await getTranslations("page-ethereum-vs-bitcoin") return await getMetadata({ locale, diff --git a/app/[locale]/founders/page-jsonld.tsx b/app/[locale]/founders/page-jsonld.tsx index 619947d11f7..8e534b046bb 100644 --- a/app/[locale]/founders/page-jsonld.tsx +++ b/app/[locale]/founders/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function FoundersPageJsonLD({ locale: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-founders", - }) + const t = await getTranslations("page-founders") const url = normalizeUrlForJsonLd(locale, `/founders/`) diff --git a/app/[locale]/founders/page.tsx b/app/[locale]/founders/page.tsx index 8c7b2f5ff63..dcf1c023371 100644 --- a/app/[locale]/founders/page.tsx +++ b/app/[locale]/founders/page.tsx @@ -38,7 +38,7 @@ import heroImg from "@/public/images/upgrades/merge.png" const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-founders" }) + const t = await getTranslations("page-founders") const supportTags = { active: { @@ -454,10 +454,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-founders", - }) + const t = await getTranslations("page-founders") return await getMetadata({ locale, diff --git a/app/[locale]/gas/page-jsonld.tsx b/app/[locale]/gas/page-jsonld.tsx index ba5f5d882a5..7ee4c0d6786 100644 --- a/app/[locale]/gas/page-jsonld.tsx +++ b/app/[locale]/gas/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function GasPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-gas", - }) + const t = await getTranslations("page-gas") const url = normalizeUrlForJsonLd(locale, `/gas/`) diff --git a/app/[locale]/gas/page.tsx b/app/[locale]/gas/page.tsx index 5fa18e4ed94..19615342138 100644 --- a/app/[locale]/gas/page.tsx +++ b/app/[locale]/gas/page.tsx @@ -52,7 +52,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-gas" }) + const t = await getTranslations("page-gas") return await getMetadata({ locale, diff --git a/app/[locale]/get-eth/page-jsonld.tsx b/app/[locale]/get-eth/page-jsonld.tsx index 6d4dd4e028c..5a4bd8d4df0 100644 --- a/app/[locale]/get-eth/page-jsonld.tsx +++ b/app/[locale]/get-eth/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function GetEthPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-get-eth", - }) + const t = await getTranslations("page-get-eth") const url = normalizeUrlForJsonLd(locale, `/get-eth/`) diff --git a/app/[locale]/get-eth/page.tsx b/app/[locale]/get-eth/page.tsx index d20eab251f8..10c4a00451d 100644 --- a/app/[locale]/get-eth/page.tsx +++ b/app/[locale]/get-eth/page.tsx @@ -76,7 +76,7 @@ const TwoColumnContent = (props: ChildOnlyProp) => ( export default async function Page(props: { params: Promise }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-get-eth" }) + const t = await getTranslations("page-get-eth") const tokenSwaps: CardListCardProps[] = [ { @@ -400,7 +400,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-get-eth" }) + const t = await getTranslations("page-get-eth") return await getMetadata({ locale, diff --git a/app/[locale]/layer-2/_components/layer-2.tsx b/app/[locale]/layer-2/_components/layer-2.tsx index 73656d28d64..52587996cd9 100644 --- a/app/[locale]/layer-2/_components/layer-2.tsx +++ b/app/[locale]/layer-2/_components/layer-2.tsx @@ -12,6 +12,8 @@ import Translation from "@/components/Translation" import { ButtonLink } from "@/components/ui/buttons/Button" import InlineLink from "@/components/ui/Link" +import { numberFormat } from "@/lib/utils/numbers" + import { Rollups } from "@/data/networks/networks" import useTranslation from "@/hooks/useTranslation" @@ -126,12 +128,10 @@ const Layer2Hub = ({

$ - {( - growThePieData.dailyTxCosts["ethereum"] || 0 - ).toLocaleString(locale as Lang, { + {numberFormat(locale, { minimumFractionDigits: 2, maximumFractionDigits: 2, - })} + }).format(growThePieData.dailyTxCosts["ethereum"] || 0)}

{t("page-layer-2-blockchain-transaction-cost")} @@ -143,10 +143,12 @@ const Layer2Hub = ({

$ - {medianTxCost.toLocaleString(locale as Lang, { + {numberFormat(locale, { minimumFractionDigits: 2, maximumFractionDigits: 3, - })} + }).format( + typeof medianTxCost === "number" ? medianTxCost : 0 + )}

{t("page-layer-2-networks-transaction-cost")} diff --git a/app/[locale]/layer-2/learn/page-jsonld.tsx b/app/[locale]/layer-2/learn/page-jsonld.tsx index e593a3c9991..dcc311cab7e 100644 --- a/app/[locale]/layer-2/learn/page-jsonld.tsx +++ b/app/[locale]/layer-2/learn/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function Layer2LearnPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-layer-2-learn", - }) + const t = await getTranslations("page-layer-2-learn") const url = normalizeUrlForJsonLd(locale, `/layer-2/learn/`) diff --git a/app/[locale]/layer-2/learn/page.tsx b/app/[locale]/layer-2/learn/page.tsx index 254c462d5a6..14b31f6f7bb 100644 --- a/app/[locale]/layer-2/learn/page.tsx +++ b/app/[locale]/layer-2/learn/page.tsx @@ -52,7 +52,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-layer-2-learn" }) + const t = await getTranslations("page-layer-2-learn") return await getMetadata({ locale, diff --git a/app/[locale]/layer-2/networks/page-jsonld.tsx b/app/[locale]/layer-2/networks/page-jsonld.tsx index 6f4354e8f0b..646cfd62160 100644 --- a/app/[locale]/layer-2/networks/page-jsonld.tsx +++ b/app/[locale]/layer-2/networks/page-jsonld.tsx @@ -13,9 +13,7 @@ export default async function Layer2NetworksPageJsonLD({ layer2Data, contributors, }) { - const t = await getTranslations({ - namespace: "page-layer-2-networks", - }) + const t = await getTranslations("page-layer-2-networks") const url = normalizeUrlForJsonLd(locale, `/layer-2/networks/`) diff --git a/app/[locale]/layer-2/networks/page.tsx b/app/[locale]/layer-2/networks/page.tsx index 01a5fa79cda..5f6d297c36c 100644 --- a/app/[locale]/layer-2/networks/page.tsx +++ b/app/[locale]/layer-2/networks/page.tsx @@ -157,10 +157,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-layer-2-networks", - }) + const t = await getTranslations("page-layer-2-networks") return await getMetadata({ locale, diff --git a/app/[locale]/layer-2/page-jsonld.tsx b/app/[locale]/layer-2/page-jsonld.tsx index 23b6156b058..d4791ea0c99 100644 --- a/app/[locale]/layer-2/page-jsonld.tsx +++ b/app/[locale]/layer-2/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function Layer2PageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-layer-2", - }) + const t = await getTranslations("page-layer-2") const url = normalizeUrlForJsonLd(locale, `/layer-2/`) diff --git a/app/[locale]/layer-2/page.tsx b/app/[locale]/layer-2/page.tsx index 298b4814a8f..7170b8f5a3a 100644 --- a/app/[locale]/layer-2/page.tsx +++ b/app/[locale]/layer-2/page.tsx @@ -91,7 +91,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-layer-2" }) + const t = await getTranslations("page-layer-2") return await getMetadata({ locale, diff --git a/app/[locale]/learn/page-jsonld.tsx b/app/[locale]/learn/page-jsonld.tsx index b1ee6f17792..c65611c7c27 100644 --- a/app/[locale]/learn/page-jsonld.tsx +++ b/app/[locale]/learn/page-jsonld.tsx @@ -9,9 +9,7 @@ import { import { normalizeUrlForJsonLd } from "@/lib/utils/url" export default async function LearnPageJsonLD({ locale, contributors }) { - const t = await getTranslations({ - namespace: "page-learn", - }) + const t = await getTranslations("page-learn") const url = normalizeUrlForJsonLd(locale, `/learn/`) diff --git a/app/[locale]/learn/page.tsx b/app/[locale]/learn/page.tsx index 03dc4c1801a..0ffe4f31ffe 100644 --- a/app/[locale]/learn/page.tsx +++ b/app/[locale]/learn/page.tsx @@ -117,8 +117,8 @@ const ImageHeight200 = ({ src, alt }: ImageProps) => ( export default async function Page(props: { params: Promise }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-learn" }) - const tCommon = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("page-learn") + const tCommon = await getTranslations("common") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo("learn", locale as Lang) @@ -738,7 +738,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-learn" }) + const t = await getTranslations("page-learn") return await getMetadata({ locale, diff --git a/app/[locale]/page-jsonld.tsx b/app/[locale]/page-jsonld.tsx index cb5912950a7..a56f5a730e6 100644 --- a/app/[locale]/page-jsonld.tsx +++ b/app/[locale]/page-jsonld.tsx @@ -16,9 +16,7 @@ export default async function IndexPageJsonLD({ }: { locale: Lang | undefined }) { - const t = await getTranslations({ - namespace: "page-index", - }) + const t = await getTranslations("page-index") const url = normalizeUrlForJsonLd(locale, `/`) diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index e5957f20dc6..36bf989131f 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -101,8 +101,8 @@ const Page = async (props: { params: Promise }) => { setRequestLocale(locale) - const t = await getTranslations({ locale, namespace: "page-index" }) - const tCommon = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("page-index") + const tCommon = await getTranslations("common") const { direction: dir, isRtl } = getDirection(locale) // Fetch data using the new data-layer functions (already cached) @@ -163,7 +163,7 @@ const Page = async (props: { params: Promise }) => { const appsOfTheWeek = parseAppsOfTheWeek(appsData) - const bentoItems = await getBentoBoxItems(locale) + const bentoItems = await getBentoBoxItems() const ethPriceHasError = "error" in ethPrice @@ -936,7 +936,7 @@ export async function generateMetadata(props: { const { locale } = params try { - const t = await getTranslations({ locale, namespace: "page-index" }) + const t = await getTranslations("page-index") return await getMetadata({ locale, slug: [""], diff --git a/app/[locale]/quizzes/page-jsonld.tsx b/app/[locale]/quizzes/page-jsonld.tsx index 9e3ecbaed86..48ae92e42e8 100644 --- a/app/[locale]/quizzes/page-jsonld.tsx +++ b/app/[locale]/quizzes/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function QuizzesPageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-quizzes", - }) + const t = await getTranslations("page-quizzes") const url = normalizeUrlForJsonLd(locale, `/quizzes/`) diff --git a/app/[locale]/quizzes/page.tsx b/app/[locale]/quizzes/page.tsx index 490449b56b1..97c4970a716 100644 --- a/app/[locale]/quizzes/page.tsx +++ b/app/[locale]/quizzes/page.tsx @@ -46,7 +46,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale }) + const t = await getTranslations() return await getMetadata({ locale, diff --git a/app/[locale]/resources/_components/SlotCountdown.tsx b/app/[locale]/resources/_components/SlotCountdown.tsx index 2a5bf5fa062..3522964762f 100644 --- a/app/[locale]/resources/_components/SlotCountdown.tsx +++ b/app/[locale]/resources/_components/SlotCountdown.tsx @@ -5,6 +5,8 @@ import { useLocale } from "next-intl" import RadialChart from "@/components/RadialChart" +import { numberFormat } from "@/lib/utils/numbers" + const SlotCountdownChart = ({ children }: { children: string }) => { const [timeToNextBlock, setTimeToNextBlock] = useState(12) const locale = useLocale() @@ -28,7 +30,7 @@ const SlotCountdownChart = ({ children }: { children: string }) => { { @@ -106,7 +108,7 @@ const UpgradeCountdown = () => { ) : (

Live Since{" "} - {new Intl.DateTimeFormat(locale, { timeZone: "UTC" }).format( + {dateTimeFormat(locale, { timeZone: "UTC" }).format( new Date(upgradeDate) )}
diff --git a/app/[locale]/resources/page-jsonld.tsx b/app/[locale]/resources/page-jsonld.tsx index a09884270cb..7ea0ac5376d 100644 --- a/app/[locale]/resources/page-jsonld.tsx +++ b/app/[locale]/resources/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function ResourcesPageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-resources", - }) + const t = await getTranslations("page-resources") const url = normalizeUrlForJsonLd(locale, `/resources/`) diff --git a/app/[locale]/resources/page.tsx b/app/[locale]/resources/page.tsx index 6c5238beaf9..f4643bdf2d5 100644 --- a/app/[locale]/resources/page.tsx +++ b/app/[locale]/resources/page.tsx @@ -17,6 +17,7 @@ import TabNav, { StickyContainer } from "@/components/ui/TabNav" import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" +import { numberFormat } from "@/lib/utils/numbers" import { GITHUB_REPO_URL } from "@/lib/constants" @@ -33,7 +34,7 @@ const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-resources" }) + const t = await getTranslations("page-resources") // Fetch data using the new data-layer functions (already cached) const [growThePieData, blobscanOverallStats] = await Promise.all([ @@ -56,7 +57,7 @@ const Page = async (props: { params: Promise }) => { // Extract blob stats directly (getBlobscanStats returns BlobscanStats, not wrapped in MetricReturnData) const blobStats = { avgBlobFee: blobscanOverallStats.avgBlobFee, - totalBlobs: new Intl.NumberFormat(undefined, { + totalBlobs: numberFormat(locale, { notation: "compact", maximumFractionDigits: 1, }).format(blobscanOverallStats.totalBlobs), @@ -235,7 +236,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-resources" }) + const t = await getTranslations("page-resources") return await getMetadata({ locale, diff --git a/app/[locale]/resources/utils.tsx b/app/[locale]/resources/utils.tsx index dad5d19be0e..1e46bf44ed5 100644 --- a/app/[locale]/resources/utils.tsx +++ b/app/[locale]/resources/utils.tsx @@ -1,7 +1,5 @@ import { getLocale, getTranslations } from "next-intl/server" -import { Lang } from "@/lib/types" - import BigNumber from "@/components/BigNumber" import SectionIconArrowsFullscreen from "@/components/icons/arrows-fullscreen.svg" import SectionIconEthGlyph from "@/components/icons/eth-glyph.svg" @@ -10,7 +8,6 @@ import SectionIconHeartPulse from "@/components/icons/heart-pulse.svg" import SectionIconPrivacy from "@/components/icons/privacy.svg" import { formatSmallUSD } from "@/lib/utils/numbers" -import { getLocaleForNumberFormat } from "@/lib/utils/translations" import { SlotCountdownChart, @@ -63,8 +60,7 @@ export const getResources = async ({ avgBlobFee, }): Promise => { const locale = await getLocale() - const t = await getTranslations({ locale, namespace: "page-resources" }) - const localeForNumberFormat = getLocaleForNumberFormat(locale as Lang) + const t = await getTranslations("page-resources") // Fetch ETH price using the new data-layer function (already cached) const ethPrice = await getEthPrice() @@ -82,7 +78,7 @@ export const getResources = async ({ value: formatSmallUSD( // Converting value from wei to USD avgBlobFee * 1e-18 * ethPrice.value, - localeForNumberFormat + locale ), } @@ -91,7 +87,7 @@ export const getResources = async ({ ? { error: txCostsMedianUsd.error } : { ...txCostsMedianUsd, - value: formatSmallUSD(txCostsMedianUsd.value, localeForNumberFormat), + value: formatSmallUSD(txCostsMedianUsd.value, locale), } const networkBoxes: DashboardBox[] = [ diff --git a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx index 7dded3f6fae..3aee5f05a28 100644 --- a/app/[locale]/roadmap/_components/ReleaseCarousel.tsx +++ b/app/[locale]/roadmap/_components/ReleaseCarousel.tsx @@ -16,7 +16,7 @@ import { } from "@/components/ui/carousel" import { cn } from "@/lib/utils/cn" -import { formatDate } from "@/lib/utils/date" +import { dateTimeFormat, formatDate } from "@/lib/utils/date" import { getReleasesData, Release } from "@/data/roadmap/releases" @@ -100,7 +100,7 @@ const ReleaseCarousel = () => { return "" if ("plannedReleaseYear" in release && release.plannedReleaseYear) - return new Intl.DateTimeFormat(locale, { + return dateTimeFormat(locale, { year: "numeric", }).format(new Date(Number(release.plannedReleaseYear), 0, 1)) diff --git a/app/[locale]/roadmap/_vision/page-jsonld.tsx b/app/[locale]/roadmap/_vision/page-jsonld.tsx index cf4fe24614a..0766b83af16 100644 --- a/app/[locale]/roadmap/_vision/page-jsonld.tsx +++ b/app/[locale]/roadmap/_vision/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function RoadmapVisionPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-roadmap-vision", - }) + const t = await getTranslations("page-roadmap-vision") const url = normalizeUrlForJsonLd(locale, `/roadmap/vision/`) diff --git a/app/[locale]/roadmap/_vision/page.tsx b/app/[locale]/roadmap/_vision/page.tsx index dfaf03271a4..bfad46be1d3 100644 --- a/app/[locale]/roadmap/_vision/page.tsx +++ b/app/[locale]/roadmap/_vision/page.tsx @@ -52,7 +52,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-roadmap-vision" }) + const t = await getTranslations("page-roadmap-vision") return await getMetadata({ locale, diff --git a/app/[locale]/roadmap/page-jsonld.tsx b/app/[locale]/roadmap/page-jsonld.tsx index 3d04e7c8f0e..06b961f4ee1 100644 --- a/app/[locale]/roadmap/page-jsonld.tsx +++ b/app/[locale]/roadmap/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function RoadmapPageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-roadmap", - }) + const t = await getTranslations("page-roadmap") const url = normalizeUrlForJsonLd(locale, `/roadmap/`) diff --git a/app/[locale]/roadmap/page.tsx b/app/[locale]/roadmap/page.tsx index dcb943321d5..a75fac52696 100644 --- a/app/[locale]/roadmap/page.tsx +++ b/app/[locale]/roadmap/page.tsx @@ -46,7 +46,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-roadmap" }) + const t = await getTranslations("page-roadmap") return await getMetadata({ locale, diff --git a/app/[locale]/run-a-node/page-jsonld.tsx b/app/[locale]/run-a-node/page-jsonld.tsx index 78ceb3d272a..16ff656a9bd 100644 --- a/app/[locale]/run-a-node/page-jsonld.tsx +++ b/app/[locale]/run-a-node/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function RunANodePageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-run-a-node", - }) + const t = await getTranslations("page-run-a-node") const url = normalizeUrlForJsonLd(locale, `/run-a-node/`) diff --git a/app/[locale]/run-a-node/page.tsx b/app/[locale]/run-a-node/page.tsx index 6bcf7d184ca..911b8b1d6a3 100644 --- a/app/[locale]/run-a-node/page.tsx +++ b/app/[locale]/run-a-node/page.tsx @@ -52,7 +52,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-run-a-node" }) + const t = await getTranslations("page-run-a-node") return await getMetadata({ locale, diff --git a/app/[locale]/stablecoins/page-jsonld.tsx b/app/[locale]/stablecoins/page-jsonld.tsx index b3b6948fbe6..82c6666fd99 100644 --- a/app/[locale]/stablecoins/page-jsonld.tsx +++ b/app/[locale]/stablecoins/page-jsonld.tsx @@ -9,9 +9,7 @@ import { import { normalizeUrlForJsonLd } from "@/lib/utils/url" export default async function StablecoinsPageJsonLD({ locale, contributors }) { - const t = await getTranslations({ - namespace: "page-stablecoins", - }) + const t = await getTranslations("page-stablecoins") const url = normalizeUrlForJsonLd(locale, `/stablecoins/`) diff --git a/app/[locale]/stablecoins/page.tsx b/app/[locale]/stablecoins/page.tsx index c0f7fbcc016..b4864aa2a71 100644 --- a/app/[locale]/stablecoins/page.tsx +++ b/app/[locale]/stablecoins/page.tsx @@ -33,6 +33,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { cn } from "@/lib/utils/cn" import { getAppPageContributorInfo } from "@/lib/utils/contributors" import { getMetadata } from "@/lib/utils/metadata" +import { numberFormat } from "@/lib/utils/numbers" import { getRequiredNamespacesForPage } from "@/lib/utils/translations" import { stablecoins } from "./data" @@ -78,8 +79,8 @@ const Section = ({ async function Page(props: { params: Promise }) { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-stablecoins" }) - const tCommon = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("page-stablecoins") + const tCommon = await getTranslations("common") setRequestLocale(locale) @@ -118,7 +119,7 @@ async function Page(props: { params: Promise }) { .sort((a, b) => b.market_cap - a.market_cap) .map(({ market_cap, ...rest }) => ({ ...rest, - marketCap: new Intl.NumberFormat("en-US", { + marketCap: numberFormat(locale, { style: "currency", currency: "USD", minimumFractionDigits: 0, @@ -761,7 +762,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-stablecoins" }) + const t = await getTranslations("page-stablecoins") return await getMetadata({ locale, diff --git a/app/[locale]/staking/deposit-contract/page.tsx b/app/[locale]/staking/deposit-contract/page.tsx index de97a2665a6..1a606294f13 100644 --- a/app/[locale]/staking/deposit-contract/page.tsx +++ b/app/[locale]/staking/deposit-contract/page.tsx @@ -40,10 +40,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-staking-deposit-contract", - }) + const t = await getTranslations("page-staking-deposit-contract") return await getMetadata({ locale, diff --git a/app/[locale]/staking/page-jsonld.tsx b/app/[locale]/staking/page-jsonld.tsx index 5d20ff21f7d..6537af481b8 100644 --- a/app/[locale]/staking/page-jsonld.tsx +++ b/app/[locale]/staking/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function StakingPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-staking", - }) + const t = await getTranslations("page-staking") const url = normalizeUrlForJsonLd(locale, `/staking/`) diff --git a/app/[locale]/staking/page.tsx b/app/[locale]/staking/page.tsx index 5c07dd683fd..85c552b005e 100644 --- a/app/[locale]/staking/page.tsx +++ b/app/[locale]/staking/page.tsx @@ -72,7 +72,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-staking" }) + const t = await getTranslations("page-staking") return await getMetadata({ locale, diff --git a/app/[locale]/start/page-jsonld.tsx b/app/[locale]/start/page-jsonld.tsx index ea822c1a631..688857ed683 100644 --- a/app/[locale]/start/page-jsonld.tsx +++ b/app/[locale]/start/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function StartPageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-start", - }) + const t = await getTranslations("page-start") const url = normalizeUrlForJsonLd(locale, `/start/`) diff --git a/app/[locale]/start/page.tsx b/app/[locale]/start/page.tsx index 89728a54a3d..307212e1ba5 100644 --- a/app/[locale]/start/page.tsx +++ b/app/[locale]/start/page.tsx @@ -26,7 +26,7 @@ import ManDogeImage from "@/public/images/start-with-ethereum/man-doge-playing.p const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-start" }) + const t = await getTranslations("page-start") setRequestLocale(locale) @@ -96,7 +96,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-start" }) + const t = await getTranslations("page-start") return await getMetadata({ locale, diff --git a/app/[locale]/trillion-dollar-security/page-jsonld.tsx b/app/[locale]/trillion-dollar-security/page-jsonld.tsx index 5ed2eb7434a..63a106a0135 100644 --- a/app/[locale]/trillion-dollar-security/page-jsonld.tsx +++ b/app/[locale]/trillion-dollar-security/page-jsonld.tsx @@ -17,9 +17,7 @@ export default async function TrillionDollarSecurityPageJsonLD({ locale: Lang | undefined contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-trillion-dollar-security", - }) + const t = await getTranslations("page-trillion-dollar-security") const url = normalizeUrlForJsonLd(locale, `/trillion-dollar-security/`) diff --git a/app/[locale]/trillion-dollar-security/page.tsx b/app/[locale]/trillion-dollar-security/page.tsx index 9fe6f3275cd..d7163fb8d3e 100644 --- a/app/[locale]/trillion-dollar-security/page.tsx +++ b/app/[locale]/trillion-dollar-security/page.tsx @@ -49,10 +49,7 @@ const TdsPage = async (props: { params: Promise }) => { setRequestLocale(locale) - const t = await getTranslations({ - locale, - namespace: "page-trillion-dollar-security", - }) + const t = await getTranslations("page-trillion-dollar-security") const { contributors } = await getAppPageContributorInfo( "trillion-dollar-security", @@ -1096,10 +1093,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-trillion-dollar-security", - }) + const t = await getTranslations("page-trillion-dollar-security") return await getMetadata({ locale, diff --git a/app/[locale]/utils.ts b/app/[locale]/utils.ts index cc4484c3aa8..baf20b1b1f2 100644 --- a/app/[locale]/utils.ts +++ b/app/[locale]/utils.ts @@ -7,10 +7,10 @@ import { getTranslations } from "next-intl/server" import type { AllHomepageActivityData, Lang, StatsBoxMetric } from "@/lib/types" -import { getLocaleForNumberFormat } from "@/lib/utils/translations" +import { numberFormat } from "@/lib/utils/numbers" const formatLargeUSD = (value: number, locale: string): string => { - return new Intl.NumberFormat(locale, { + return numberFormat(locale, { style: "currency", currency: "USD", notation: "compact", @@ -20,7 +20,7 @@ const formatLargeUSD = (value: number, locale: string): string => { } const formatSmallUSD = (value: number, locale: string): string => { - return new Intl.NumberFormat(locale, { + return numberFormat(locale, { style: "currency", currency: "USD", notation: "compact", @@ -30,7 +30,7 @@ const formatSmallUSD = (value: number, locale: string): string => { } const formatLargeNumber = (value: number, locale: string): string => { - return new Intl.NumberFormat(locale, { + return numberFormat(locale, { notation: "compact", minimumSignificantDigits: 3, maximumSignificantDigits: 4, @@ -49,8 +49,6 @@ export const getActivity = async ( ): Promise => { const t = await getTranslations("page-index") - const localeForNumberFormat = getLocaleForNumberFormat(locale) - const hasEthStakerAndPriceData = "value" in totalEthStaked && "value" in ethPrice const totalStakedInUsd = hasEthStakerAndPriceData @@ -68,7 +66,7 @@ export const getActivity = async ( } : { ...totalEthStaked, - value: formatLargeUSD(totalStakedInUsd, localeForNumberFormat), + value: formatLargeUSD(totalStakedInUsd, locale), } const valueLocked = @@ -76,7 +74,7 @@ export const getActivity = async ( ? { error: totalValueLocked.error } : { ...totalValueLocked, - value: formatLargeUSD(totalValueLocked.value, localeForNumberFormat), + value: formatLargeUSD(totalValueLocked.value, locale), } const txs = @@ -84,7 +82,7 @@ export const getActivity = async ( ? { error: txCount.error } : { ...txCount, - value: formatLargeNumber(txCount.value, localeForNumberFormat), + value: formatLargeNumber(txCount.value, locale), } const medianTxCost = @@ -92,7 +90,7 @@ export const getActivity = async ( ? { error: txCostsMedianUsd.error } : { ...txCostsMedianUsd, - value: formatSmallUSD(txCostsMedianUsd.value, localeForNumberFormat), + value: formatSmallUSD(txCostsMedianUsd.value, locale), } const metrics: StatsBoxMetric[] = [ diff --git a/app/[locale]/wallets/find-wallet/page-jsonld.tsx b/app/[locale]/wallets/find-wallet/page-jsonld.tsx index 4195c8f3734..224d0ef8e38 100644 --- a/app/[locale]/wallets/find-wallet/page-jsonld.tsx +++ b/app/[locale]/wallets/find-wallet/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function FindWalletPageJsonLD({ contributors: FileContributor[] wallets: WalletData[] }) { - const t = await getTranslations({ - namespace: "page-wallets-find-wallet", - }) + const t = await getTranslations("page-wallets-find-wallet") const url = normalizeUrlForJsonLd(locale, `/wallets/find-wallet/`) diff --git a/app/[locale]/wallets/find-wallet/page.tsx b/app/[locale]/wallets/find-wallet/page.tsx index 5dc421d446a..046b245349e 100644 --- a/app/[locale]/wallets/find-wallet/page.tsx +++ b/app/[locale]/wallets/find-wallet/page.tsx @@ -26,10 +26,7 @@ import FindWalletPageJsonLD from "./page-jsonld" const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-wallets-find-wallet", - }) + const t = await getTranslations("page-wallets-find-wallet") setRequestLocale(locale) @@ -91,10 +88,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-wallets-find-wallet", - }) + const t = await getTranslations("page-wallets-find-wallet") return await getMetadata({ locale, diff --git a/app/[locale]/wallets/page-jsonld.tsx b/app/[locale]/wallets/page-jsonld.tsx index fc4c1f50ff4..6326d1bc5c8 100644 --- a/app/[locale]/wallets/page-jsonld.tsx +++ b/app/[locale]/wallets/page-jsonld.tsx @@ -13,9 +13,7 @@ export default async function WalletsPageJsonLD({ lastEditLocaleTimestamp, contributors, }) { - const t = await getTranslations({ - namespace: "page-find-wallet", - }) + const t = await getTranslations("page-find-wallet") const url = normalizeUrlForJsonLd(locale, `/wallets/`) diff --git a/app/[locale]/wallets/page.tsx b/app/[locale]/wallets/page.tsx index ce5e67a1f06..22c478fdc9b 100644 --- a/app/[locale]/wallets/page.tsx +++ b/app/[locale]/wallets/page.tsx @@ -49,7 +49,7 @@ const StyledCard = (props: ComponentPropsWithRef) => ( const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-wallets" }) + const t = await getTranslations("page-wallets") setRequestLocale(locale) @@ -469,7 +469,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ locale, namespace: "page-wallets" }) + const t = await getTranslations("page-wallets") return await getMetadata({ locale, diff --git a/app/[locale]/what-is-ether/page-jsonld.tsx b/app/[locale]/what-is-ether/page-jsonld.tsx index 45651583da2..58b0ab84991 100644 --- a/app/[locale]/what-is-ether/page-jsonld.tsx +++ b/app/[locale]/what-is-ether/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function WhatIsEtherPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-what-is-ether", - }) + const t = await getTranslations("page-what-is-ether") const url = normalizeUrlForJsonLd(locale, `/what-is-ether/`) diff --git a/app/[locale]/what-is-ether/page.tsx b/app/[locale]/what-is-ether/page.tsx index f20ffe55274..f73f53c2692 100644 --- a/app/[locale]/what-is-ether/page.tsx +++ b/app/[locale]/what-is-ether/page.tsx @@ -39,9 +39,7 @@ const Page = async (props: { params: Promise<{ locale: Lang }> }) => { const { locale } = params setRequestLocale(locale) - const t = await getTranslations({ - namespace: "page-what-is-ether", - }) + const t = await getTranslations("page-what-is-ether") const [ { contributors, lastEditLocaleTimestamp }, @@ -711,10 +709,7 @@ export async function generateMetadata({ }) { const { locale } = await params - const t = await getTranslations({ - locale, - namespace: "page-what-is-ether", - }) + const t = await getTranslations("page-what-is-ether") return await getMetadata({ locale, diff --git a/app/[locale]/what-is-ethereum/page-jsonld.tsx b/app/[locale]/what-is-ethereum/page-jsonld.tsx index edabe65f729..cb5f3981667 100644 --- a/app/[locale]/what-is-ethereum/page-jsonld.tsx +++ b/app/[locale]/what-is-ethereum/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function WhatIsEthereumPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-what-is-ethereum", - }) + const t = await getTranslations("page-what-is-ethereum") const url = normalizeUrlForJsonLd(locale, `/what-is-ethereum/`) diff --git a/app/[locale]/what-is-ethereum/page.tsx b/app/[locale]/what-is-ethereum/page.tsx index be1c21f0b0f..84cbf44e315 100644 --- a/app/[locale]/what-is-ethereum/page.tsx +++ b/app/[locale]/what-is-ethereum/page.tsx @@ -51,10 +51,7 @@ import heroImg from "@/public/images/what-is-ethereum.png" const Page = async (props: { params: Promise }) => { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-what-is-ethereum", - }) + const t = await getTranslations("page-what-is-ethereum") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo("what-is-ethereum", locale as Lang) @@ -1096,10 +1093,7 @@ export async function generateMetadata(props: { const params = await props.params const { locale } = params - const t = await getTranslations({ - locale, - namespace: "page-what-is-ethereum", - }) + const t = await getTranslations("page-what-is-ethereum") return await getMetadata({ locale, diff --git a/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx b/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx index f0971ccc3f9..bd73c3dbfd9 100644 --- a/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx +++ b/app/[locale]/what-is-the-ethereum-network/page-jsonld.tsx @@ -19,9 +19,7 @@ export default async function WhatIsTheEthereumNetworkPageJsonLD({ lastEditLocaleTimestamp: string contributors: FileContributor[] }) { - const t = await getTranslations({ - namespace: "page-what-is-the-ethereum-network", - }) + const t = await getTranslations("page-what-is-the-ethereum-network") const url = normalizeUrlForJsonLd(locale, `/what-is-the-ethereum-network/`) diff --git a/app/[locale]/what-is-the-ethereum-network/page.tsx b/app/[locale]/what-is-the-ethereum-network/page.tsx index c19a2e7fb8a..87ce647bd31 100644 --- a/app/[locale]/what-is-the-ethereum-network/page.tsx +++ b/app/[locale]/what-is-the-ethereum-network/page.tsx @@ -30,9 +30,7 @@ import heroImg from "@/public/images/what-is-ethereum-network/what-is-ethereum-n const Page = async ({ params }: { params: Promise<{ locale: Lang }> }) => { const { locale } = await params - const t = await getTranslations({ - namespace: "page-what-is-the-ethereum-network", - }) + const t = await getTranslations("page-what-is-the-ethereum-network") const { contributors, lastEditLocaleTimestamp } = await getAppPageContributorInfo( @@ -708,10 +706,7 @@ export async function generateMetadata({ }) { const { locale } = await params - const t = await getTranslations({ - locale, - namespace: "page-what-is-the-ethereum-network", - }) + const t = await getTranslations("page-what-is-the-ethereum-network") return await getMetadata({ locale, diff --git a/app/api/ab-config/route.ts b/app/api/ab-config/route.ts index 949d6aa1fdc..06be5015cff 100644 --- a/app/api/ab-config/route.ts +++ b/app/api/ab-config/route.ts @@ -4,6 +4,8 @@ import { IS_PROD } from "@/lib/utils/env" import type { ABTestConfig, MatomoExperiment } from "@/lib/ab-testing/types" +export const revalidate = 3600 + const isExperimentActive = (experiment: MatomoExperiment): boolean => { const now = new Date() @@ -31,8 +33,6 @@ const getPreviewConfig = () => ({ }, }) -export const revalidate = 3600 - export async function GET() { // Preview mode: Show menu with original default if (!IS_PROD) { diff --git a/app/api/gas-eth-price/route.ts b/app/api/gas-eth-price/route.ts index 3025bbebe95..b4005206ce5 100644 --- a/app/api/gas-eth-price/route.ts +++ b/app/api/gas-eth-price/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from "next/server" import { getHourlyEthPrice, getHourlyGasPriceData } from "@/lib/data" -export const revalidate = 3600 // 1 hour +export const revalidate = 3600 export async function GET() { const [gasPriceData, ethPriceData] = await Promise.all([ diff --git a/docs/ab-testing.md b/docs/ab-testing.md index 0c13eb385f3..254c96d8823 100644 --- a/docs/ab-testing.md +++ b/docs/ab-testing.md @@ -7,7 +7,7 @@ This guide explains how to implement server-side A/B tests on ethereum.org using Our A/B testing system provides: - **Server-side rendering** - Users see consistent variants on first page load with no layout shifts -- **Matomo API integration** - Tests configured entirely in Matomo dashboard, no code deployments needed +- **Matomo API integration** - Tests are configured entirely in the Matomo dashboard; no code deployments are needed - **GDPR compliance** - Cookie-less tracking using deterministic fingerprinting (IP + User-Agent) - **Multi-variant support** - Test 2+ variations with configurable weights / traffic splits - **Real-time updates** - Adjust experiment weights instantly via Matomo dashboard @@ -134,7 +134,7 @@ Supports 3+ variants: 1. Create your experiment in Matomo (set to "running") 2. Implement `ABTestWrapper` in your component -3. Test locally - the debug panel shows current assignment +3. Test locally - the debug panel shows the current assignment 4. Adjust weights in Matomo dashboard to test different scenarios ### Preview Mode @@ -146,7 +146,7 @@ Supports 3+ variants: ### Production 1. Deploy your component with `ABTestWrapper` -2. Monitor experiment in Matomo dashboard +2. Monitor the experiment in the Matomo dashboard 3. Adjust traffic allocation as needed 4. Analyze results and implement winning variant @@ -224,7 +224,7 @@ NEXT_PUBLIC_IS_PREVIEW_DEPLOY=false 1. **Check environment variables**: Ensure all Matomo config is set 2. **Verify API token**: Must have "experiments" permission in Matomo -3. **Check cache**: API responses cached for 1 hour, use dev mode for real-time updates +3. **Check cache**: API responses are cached for 1 hour, use dev mode for real-time updates 4. **Fallback behavior**: When API fails, all tests show original variant (safe default) ## Debug Panel diff --git a/docs/api-keys.md b/docs/api-keys.md index 60f7ca7ac83..5573c459adc 100644 --- a/docs/api-keys.md +++ b/docs/api-keys.md @@ -1,4 +1,4 @@ -# APIs we use in our website +# APIs we use on our website ## Environment File Structure @@ -11,7 +11,7 @@ This project uses two separate `.env.local` files: Some variables like `GITHUB_TOKEN_READ_ONLY` and Sentry config are shared and should be set in both files. -See `src/data-layer/.env.example` for all data-layer specific variables. +See `src/data-layer/.env.example` for all data-layer-specific variables. --- diff --git a/docs/applying-storybook.md b/docs/applying-storybook.md index 1f98b0c16ad..9a3f2e70d8f 100644 --- a/docs/applying-storybook.md +++ b/docs/applying-storybook.md @@ -2,7 +2,7 @@ ## Overview -StorybookJS is a UI tool for isolating UI components to visually test its styles and states. +StorybookJS is a UI tool for isolating UI components to visually test their styles and states. This is great for checking the various iterations of a component in a sandbox versus scouring all the pages in a large scale project it is used to verify that the component is rendering properly. @@ -10,7 +10,7 @@ You can also render pages if you need that level of visual testing. Storybook also gives you a library of addons provided by the team and the community to enhance the testing, including UX testing, A11y compliance, etc. -Check out [Intro to Storybook](https://storybook.js.org/tutorials/intro-to-storybook/) to get an in-depth look on the workflow. +Check out [Intro to Storybook](https://storybook.js.org/tutorials/intro-to-storybook/) to get an in-depth look at the workflow. ## Spinning up the Storybook server @@ -18,7 +18,7 @@ It's as easy as running `pnpm storybook` to boot up a dedicated localhost to see ## Setting up a component's stories -> 🚨 NOTE: This project uses Storybook v8.6+, using the Component Story Format v3 and the `satisfies` keyword to define the type of the meta object. The following documentation outlines preferences in setup as it relates to this version. You can refer to the [main docs](https://storybook.js.org/docs/get-started) if you need any additional details +> 🚨 NOTE: This project uses Storybook v10.3+, using the Component Story Format v3 and the `satisfies` keyword to define the type of the meta object. The following documentation outlines preferences in setup as it relates to this version. You can refer to the [main docs](https://storybook.js.org/docs/get-started) if you need any additional details A Storybook "story" is an instance of a component in a certain state or with certain parameters applied to show an alternative version of the component. @@ -35,7 +35,7 @@ src/ └── // Any other files as applicable (utils, child components, useHook, etc.) ``` -The initial structure of each story file will look something like this (in typescript): +The initial structure of each story file will look something like this (in TypeScript): ```tsx import ComponentA from "." @@ -55,7 +55,7 @@ export const Basic: Story = {} - With the `title` option, we write this based on the groupings set by the Design System. Groupings are declared with forward slashes. (i.e., `Atoms / Form / Input`). See the Storybook docs for details on [Naming conventions](https://storybook.js.org/docs/7.0/react/writing-stories/naming-components-and-hierarchy) - The `satisfies` TypeScript keyword is used with the `Meta` type for stricter type checking. This is particularly helpful to make sure required args are not missed. [Storybook Docs regarding `satisfies`](https://storybook.js.org/docs/writing-stories/typescript#using-satisfies-for-better-type-safety) - The use of `StoryObj` is to be able to typecheck the creation of a story as an object. This helps with prop inference. -- We use `StoryObj` in the event a required arg is provided in the `meta` object, to be applied to all stories in the file. This prevents type errors throwing at the story level for a required missing arg. +- We use `StoryObj` in the event a required arg is provided in the `meta` object, to be applied to all stories in the file. This prevents type errors from being thrown at the story level for a required missing arg. - If the story does not need any args or any custom rendering, it should be left as an empty object. Otherwise, use the `render` option to explicitly write the rendering of the story: i.e., `render: () => ` Also, please view the Figma file for the [proposed structure for the Design System](https://www.figma.com/file/Ne3iAassyfAcJ0AlgqioAP/DS-to-storybook-structure?type=design&node-id=42%3A50&mode=design&t=RGkyouvTilzF42y0-1) to provide the correct groupings. @@ -96,7 +96,7 @@ export const Outline: Story = { * For practical purposes, if you are displaying different "variants", * they should be shown under one story, so they can be seen side-by-side in the GUI * for reviewers to easily compare. - * This can also be done for various sizes or other like alterations + * This can also be done for various sizes or other similar alterations * * 🚨 If prop content is supplied directly to the component and the `args` prop is not used, * use `StoryObj` without a prop type. This is especially important when a story renders multiple versions @@ -142,7 +142,7 @@ The dashboard where you view each story has a number of different addons availab ![Screenshot of Storybook Dashboard for Ethereum.org](https://github.com/ethereum/ethereum-org-website/assets/65234762/7dea7692-6a6d-4f1c-b7cb-db177bcab44d) -Outlined below are each area going from left to right in the selections. +Outlined below are each of the areas going from left to right in the selections. | Toolbar above the preview | Panel below the preview | | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -171,12 +171,12 @@ Depending on the component, we might look for more than just one snapshot per st You will currently find the setup of these modes in [the `./storybook/modes.ts` file](../.storybook/modes.ts) -> Note: At this time we are only considering modes for viewport and languages. Color mode is not possible with the existing setup and is being investigated on making it available, should we want to use it. +> Note: At this time we are only considering modes for viewport and languages. Color mode is not possible with the existing setup and is being investigated to make it available, should we want to use it. When using a mode at either the component level (all stories in a given file) or at the story level, they are supplied under the `chromatic` parameter. ```tsx -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "../../../../.storybook/modes" @@ -196,7 +196,7 @@ const meta = { } satisfies Meta ``` -In this example, we are supplying all the combinations of the languages and viewports together in snapshots. These will only be viewed in chromatic and cannot be seen when viewing storybook locally. +In this example, we are supplying all the combinations of the languages and viewports together in snapshots. These will only be viewed in Chromatic and cannot be seen when viewing Storybook locally. If needs to be only a couple of options, you can write them like this: diff --git a/docs/best-practices.md b/docs/best-practices.md index 192e805e31c..c47825983b6 100644 --- a/docs/best-practices.md +++ b/docs/best-practices.md @@ -26,7 +26,7 @@ Markdown will be translated as whole pages of content, so no specific action is ``` JSON `"page-warning": "BE VERY CAREFUL"` ``` - - This minimizes issues during translation, and allows consistent styling to all languages + - This minimizes issues during translation, and allows consistent styling across all languages - _Please avoid_ embedding links within a sentence. For a word/phrase to be a link, it requires a key/string in the intl JSON. If this is in the middle of another sentence, this results in the sentence being broken into multiple pieces, and requires coding the sentence structure into the JavaScript. - This results in significant challenges during the translation process, as written syntax for each language will vary in terms of ordering subjects/verbs/etc. @@ -39,7 +39,7 @@ Markdown will be translated as whole pages of content, so no specific action is

``` - Once, you've added your English content to the appropriate JSON file, the above code should look something more like: + Once you've added your English content to the appropriate JSON file, the above code should look something more like: ```tsx

@@ -52,7 +52,7 @@ Markdown will be translated as whole pages of content, so no specific action is - _tl;dr Each individual JSON entry should be a complete phrase by itself_ -- This is done using the `Translation` component. However there is an alternative method for regular JS: using the `t` function from `@/hooks/useTranslation` +- This is done using the `Translation` component. However, there is an alternative method for regular JS: using the `t` function from `@/hooks/useTranslation` - **Method one: `` component (preferred if only needed in JSX)** @@ -213,7 +213,7 @@ Use tailwind classes to size icons: ### Background Circles -Wrap icon in a div for circular backgrounds, and color using background: +Wrap an icon in a div for circular backgrounds, and color using background: ```tsx

@@ -223,7 +223,7 @@ Wrap icon in a div for circular backgrounds, and color using background: ### Repository Preferences -1. **Preferred**: Lucide out-of-box with color styling +1. **Preferred**: Lucide out-of-the-box with color styling 2. **Acceptable**: Lucide with stroke property adjustments 3. **Last resort**: Custom `.svg` imports diff --git a/docs/code-conventions.md b/docs/code-conventions.md index fc0eaa39ed0..a1ab7c84a3c 100644 --- a/docs/code-conventions.md +++ b/docs/code-conventions.md @@ -8,7 +8,7 @@ Utility functions (utils) should be defined in standalone files inside `src/lib/ ## Scripts -Scripts we use on build time and are not directly related to the source code (eg: Crowdin imports, GitHub tasks) should be defined in standalone files inside `src/scripts` dir. +Scripts we use at build time and are not directly related to the source code (eg: Crowdin imports, GitHub tasks) should be defined in standalone files inside `src/scripts` dir. ## Constants @@ -63,7 +63,7 @@ For the props type signature use the naming convention `Props` to **Do not use `React.FC`** and instead annotate the props object directly. `React.FC` implies the `children` prop, but this is not always desired when there is a component that should not accept this prop. `React.FC` also does not allow for use of Generic types, or use of Generic type when doing type guarding like function overloading. It is also not generally recommended to use and [was removed from the create-react-app template](https://github.com/facebook/create-react-app/pull/8177). -A positive side-effect to directly annotating the props object is for IDE intellisense where you can view the props when hovering over the component name to see it's signature. +A positive side-effect to directly annotating the props object is for IDE intellisense where you can view the props when hovering over the component name to see its signature. i.e., `const Component: ({ label, title, ...props }: ComponentProps) => React.JSX.Element` diff --git a/docs/deploy-process.md b/docs/deploy-process.md index 2c95cfb176f..019fad7869b 100644 --- a/docs/deploy-process.md +++ b/docs/deploy-process.md @@ -9,7 +9,7 @@ The current process for deployment involves a 2-day QA cycle to test a release c The typical workflow is as follows: 1. A branch is created off of the `dev` branch, and pull requests for the branch are created into `dev` -2. Pull requests are reviewed, and merged into `dev` +2. Pull requests are reviewed and merged into `dev` 3. On Tuesday, a pull request is created into the `staging` branch - At this point, the `staging` branch will be the release candidate. At this point, no new features are added into staging for the release, only release blocking bugfixes. 4. During the next 2 days (Tuesday - Thursday) QA testing on the release candidate takes place @@ -19,7 +19,7 @@ The typical workflow is as follows: 5. If any release blocking bugfixes are merged into `staging`, bring those changes into `dev` 6. When a release candidate is ready for release, merge into `master` and deploy to production on Thursday 7. Create a tag for the new version in master -8. Merge tag into `staging` and `dev` +8. Merge the tag into `staging` and `dev` ``` master O (tag) - - - - - - - - - - - - O (tag) @@ -44,7 +44,7 @@ feature 2 \ _ _ O In the event that a bug was found in `staging` during the QA cycle that blocks a release, the following steps will take place to address the bug: 1. Create an issue in GitHub documenting the bug -2. Triage issue to a developer +2. Triage the issue to a developer 3. Developer will create a branch off of `staging` 4. Work on bugfix 5. Create a pull request into `staging` @@ -69,14 +69,14 @@ dev O - - - - O - - O - O - - - O - - - - - O ## Hotfix process -In the event that a hotfix is found in production and needs to be addressed before the next release +In the event that a hotfix is found in production and needs to be addressed before the next release. 1. Create an issue in GitHub documenting the bug 2. Triage issue to a developer 3. Developer will create a branch off of `master` 4. Work on hotfix 5. Create a pull request into `master` -6. After review, merge hotfix pull request into `master` and release into production +6. After review, merge the hotfix pull request into `master` and release into production 7. Merge `master` into `staging` and `dev` branches ``` diff --git a/docs/editing-markdown.md b/docs/editing-markdown.md index 2d298013dd1..69934b19618 100644 --- a/docs/editing-markdown.md +++ b/docs/editing-markdown.md @@ -9,7 +9,7 @@ - Editing MD files - Markdown is somewhat similar to HTML, you can use `#` for `h1` which is the largest heading or `##` for `h2`. - Here's a little [guide](https://www.markdownguide.org/cheat-sheet/) for better understanding of the same. - - You can directly edit these files on GitHub and can preview by clicking on the preview button. + - You can directly edit these files on GitHub and preview them by clicking on the preview button. - Scroll down, write a brief description about the changes you made and click on `Propose Changes`. - Click on `Create pull request` and wait for the reviewers to review your PR. ![create-pull-request](https://user-images.githubusercontent.com/55744578/136703597-6644e43c-7c64-4cc0-bf8b-7fb8db9544cf.jpg) diff --git a/docs/event-tracking.md b/docs/event-tracking.md index 34713b3c13b..b86dea815b0 100644 --- a/docs/event-tracking.md +++ b/docs/event-tracking.md @@ -29,7 +29,7 @@ Ideally, ask yourself what design decision/assumptions have been made on the pag - form fields abandoned - scroll behavior down a page -This data can be later used to decide whether a feature is being used or is underperforming. +This data can later be used to decide whether a feature is being used or is underperforming. It's helpful to ask yourself how the results of what we track and measure might influence our decision-making. For example, measuring something that won't help us make concrete product decisions is probably not worth tracking. @@ -91,7 +91,7 @@ Can be used to get more info on the UX. Examples: -- Use it to track the average position of clicked search result +- Use it to track the average position of clicked search results - What terms are entered into the search field - Which option is chosen from a dropdown menu - How many or what filters are applied when filtering the list of wallets diff --git a/docs/github-issue-triage-process.md b/docs/github-issue-triage-process.md index 3fe53c99345..1d0a37a0249 100644 --- a/docs/github-issue-triage-process.md +++ b/docs/github-issue-triage-process.md @@ -11,8 +11,8 @@ Whenever a new issue is opened, it will automatically be labeled with a `needs t The core team will review issues with the `needs triage 📥` label within 5 days. In order for an issue to be considered triaged, one of the following will need to happen: 1. The issue will be closed if it is not needed, a duplicate, or spam. -2. If an issue needs more discussion, the `GH grooming` tag will be added, and the issue will be discussed next GitHub grooming. After this call, action items will be recorded and the issue will be considered triaged. -3. The issue is labeled with the appropriate tags for work needed (ex: `design required`, `dev required`, etc.) and open it up for assignment. More on this below. +2. If an issue needs more discussion, the `GH grooming` tag will be added, and the issue will be discussed at the next GitHub grooming. After this call, action items will be recorded and the issue will be considered triaged. +3. The issue is labeled with the appropriate tags for work needed (ex: `design required`, `dev required`, etc.) and is opened up for assignment. More on this below. After an issue has been triaged, the `needs triage 📥` label will be removed from the issue. diff --git a/i18n.config.json b/i18n.config.json index 7c5b7605fd9..bc5e72fa8b1 100644 --- a/i18n.config.json +++ b/i18n.config.json @@ -4,224 +4,174 @@ "crowdinCode": "en", "name": "English", "localName": "English", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ar", "crowdinCode": "ar", "name": "Arabic", "localName": "العربية", - "langDir": "rtl", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "rtl" }, { "code": "bn", "crowdinCode": "bn", "name": "Bengali", "localName": "বাংলা", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "cs", "crowdinCode": "cs", "name": "Czech", "localName": "Čeština", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "de", "crowdinCode": "de", "name": "German", "localName": "Deutsch", - "langDir": "ltr", - "dateFormat": "DD/MM/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "es", "crowdinCode": "es-EM", "name": "Spanish", "localName": "Español", - "langDir": "ltr", - "dateFormat": "DD/MM/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "fr", "crowdinCode": "fr", "name": "French", "localName": "Français", - "langDir": "ltr", - "dateFormat": "DD/MM/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "hi", "crowdinCode": "hi", "name": "Hindi", "localName": "हिन्दी", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "id", "crowdinCode": "id", "name": "Indonesian", "localName": "Bahasa Indonesia", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "it", "crowdinCode": "it", "name": "Italian", "localName": "Italiano", - "langDir": "ltr", - "dateFormat": "DD/MM/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ja", "crowdinCode": "ja", "name": "Japanese", "localName": "日本語", - "langDir": "ltr", - "dateFormat": "YYYY/MM/DD", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ko", "crowdinCode": "ko", "name": "Korean", "localName": "한국어", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "mr", "crowdinCode": "mr", "name": "Marathi", "localName": "मराठी", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "pl", "crowdinCode": "pl", "name": "Polish", "localName": "Polski", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "pt-br", "crowdinCode": "pt-BR", "name": "Portuguese (Brazilian)", "localName": "Português", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ru", "crowdinCode": "ru", "name": "Russian", "localName": "Pусский", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "sw", "crowdinCode": "sw", "name": "Swahili", "localName": "Kiswahili", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ta", "crowdinCode": "ta", "name": "Tamil", "localName": "தமிழ்", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "te", "crowdinCode": "te", "name": "Telugu", "localName": "తెలుగు", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "tr", "crowdinCode": "tr", "name": "Turkish", "localName": "Türkçe", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "uk", "crowdinCode": "uk", "name": "Ukrainian", "localName": "Українська", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "ur", "crowdinCode": "ur-IN", "name": "Urdu", "localName": "اردو", - "langDir": "rtl", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "rtl" }, { "code": "vi", "crowdinCode": "vi", "name": "Vietnamese", "localName": "Tiếng Việt", - "langDir": "ltr", - "dateFormat": "MM/DD/YYYY", - "validISO639_1": true + "langDir": "ltr" }, { "code": "zh-tw", "crowdinCode": "zh-TW", "name": "Chinese Traditional", "localName": "繁體中文", - "langDir": "ltr", - "dateFormat": "YYYY-MM-DD", - "validISO639_1": true + "langDir": "ltr" }, { "code": "zh", "crowdinCode": "zh-CN", "name": "Chinese Simplified", "localName": "简体中文", - "langDir": "ltr", - "dateFormat": "YYYY-MM-DD", - "validISO639_1": true + "langDir": "ltr" } ] diff --git a/next.config.js b/next.config.js index 701a6d38dbb..6c611479196 100644 --- a/next.config.js +++ b/next.config.js @@ -96,8 +96,21 @@ module.exports = (phase) => { return config }, + // Turbopack loader equivalents for the webpack() config above + turbopack: { + rules: { + "*.yaml": { loaders: ["yaml-loader"], as: "*.js" }, + "*.yml": { loaders: ["yaml-loader"], as: "*.js" }, + "*.svg": { loaders: ["@svgr/webpack"], as: "*.js" }, + "*.md": { loaders: ["raw-loader"], as: "*.js" }, + "*.mp3": { as: "*.static" }, + }, + }, + // Replaces config.externals.push("pino-pretty", "lokijs", "encoding") + serverExternalPackages: ["pino-pretty", "lokijs", "encoding"], trailingSlash: true, images: { + qualities: [5, 10, 20, 35, 40, 75, 90, 100], deviceSizes: [640, 750, 828, 1080, 1200, 1504, 1920], remotePatterns: [ { @@ -239,6 +252,9 @@ module.exports = withSentryConfig(module.exports, { project: "ethorg", silent: true, widenClientFileUpload: true, - disableLogger: true, - automaticVercelMonitors: true, + webpack: { + treeshake: { + removeDebugLogging: true, + }, + }, }) diff --git a/package.json b/package.json index b917e10af31..1453b8d9ea2 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,16 @@ { "name": "ethereum-org-website", - "version": "11.1.0", + "version": "11.2.0", "license": "MIT", "private": true, "scripts": { - "dev": "next dev", - "build": "next build", + "dev": "next dev --webpack", + "dev:turbo": "next dev", + "build": "next build --webpack", + "build:turbo": "next build", "start": "next start", - "lint": "next lint", - "lint:fix": "next lint --fix", + "lint": "eslint .", + "lint:fix": "eslint . --fix", "format": "prettier \"**/*.{js,jsx,ts,tsx}\" --write", "preversion": "bash ./src/scripts/updatePublishDate.sh", "storybook": "storybook dev -p 6006", @@ -54,7 +56,7 @@ "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@rainbow-me/rainbowkit": "^2.2.3", - "@sentry/nextjs": "^10.41.0", + "@sentry/nextjs": "^10.46.0", "@socialgouv/matomo-next": "^1.8.0", "@tanstack/react-query": "^5.66.7", "@tanstack/react-table": "^8.19.3", @@ -72,14 +74,14 @@ "howler": "^2.2.4", "html-react-parser": "^5.2.17", "humanize-duration": "^3.33.1", - "lodash": "^4.17.23", + "lodash": "^4.18.1", "lucide-react": "^0.516.0", "motion": "^12.36.0", - "next": "^15.5.14", - "next-intl": "^3.26.3", + "next": "^16.2.1", + "next-intl": "^4.8.3", "next-mdx-remote": "^5.0.0", "next-themes": "^0.3.0", - "prism-react-renderer": "1.1.0", + "prism-react-renderer": "2.4.1", "prismjs": "^1.30.0", "react": "^19.2.4", "react-chartjs-2": "^5.2.0", @@ -104,20 +106,16 @@ }, "devDependencies": { "@chromatic-com/playwright": "^0.12.4", - "@chromatic-com/storybook": "1.5.0", + "@chromatic-com/storybook": "5.1.1", "@google/genai": "^1.46.0", "@netlify/plugin-nextjs": "^5.15.9", - "@next/bundle-analyzer": "^15.5.12", + "@next/bundle-analyzer": "^16.2.1", "@playwright/test": "^1.52.0", - "@storybook/addon-essentials": "8.6.14", - "@storybook/addon-interactions": "8.6.14", - "@storybook/addon-links": "8.6.14", - "@storybook/addon-themes": "8.6.14", - "@storybook/manager-api": "8.6.14", - "@storybook/nextjs": "^8.6.14", - "@storybook/react": "8.6.14", - "@storybook/test": "8.6.14", - "@storybook/theming": "^8.6.14", + "@sentry/nextjs": "^10.46.0", + "@storybook/addon-docs": "10.3.3", + "@storybook/addon-links": "10.3.3", + "@storybook/addon-themes": "10.3.3", + "@storybook/nextjs": "10.3.3", "@svgr/webpack": "^8.1.0", "@types/decompress": "^4.2.7", "@types/hast": "^3.0.0", @@ -130,14 +128,14 @@ "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", "autoprefixer": "^10.4.19", - "chromatic": "12.0.0", + "chromatic": "16.0.0", "decompress": "^4.2.1", "dotenv": "^16.5.0", "eslint": "^8.57.1", "eslint-config-next": "^15.5.12", "eslint-config-prettier": "^9", "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-storybook": "0.8.0", + "eslint-plugin-storybook": "10.3.3", "eslint-plugin-unused-imports": "^3.2.0", "franc-min": "^6.2.0", "husky": "^9.0.11", @@ -153,8 +151,8 @@ "raw-loader": "^4.0.2", "rehype-slug": "^6.0.0", "remark-heading-id": "^1.0.1", - "storybook": "8.6.17", - "storybook-next-intl": "^1.2.5", + "storybook": "10.3.3", + "storybook-next-intl": "10.1.1", "tailwindcss": "^3.4.4", "ts-node": "^10.9.1", "tsconfig-paths-webpack-plugin": "4.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15318a32dec..95137e62d73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,11 +94,11 @@ importers: specifier: ^2.2.3 version: 2.2.5(@tanstack/react-query@5.80.2(react@19.2.4))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.15.4(@netlify/blobs@10.4.1)(@tanstack/query-core@5.80.2)(@tanstack/react-query@5.80.2(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.0.9)(react@19.2.4)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) '@sentry/nextjs': - specifier: ^10.41.0 - version: 10.41.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.99.9(esbuild@0.25.12)) + specifier: ^10.46.0 + version: 10.46.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) '@socialgouv/matomo-next': specifier: ^1.8.0 - version: 1.9.2(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + version: 1.9.2(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) '@tanstack/react-query': specifier: ^5.66.7 version: 5.80.2(react@19.2.4) @@ -148,8 +148,8 @@ importers: specifier: ^3.33.1 version: 3.33.1 lodash: - specifier: ^4.17.23 - version: 4.17.23 + specifier: ^4.18.1 + version: 4.18.1 lucide-react: specifier: ^0.516.0 version: 0.516.0(react@19.2.4) @@ -157,11 +157,11 @@ importers: specifier: ^12.36.0 version: 12.36.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next: - specifier: ^15.5.14 - version: 15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^16.2.1 + version: 16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-intl: - specifier: ^3.26.3 - version: 3.26.5(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + specifier: ^4.8.3 + version: 4.8.3(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.8.3) next-mdx-remote: specifier: ^5.0.0 version: 5.0.0(@types/react@19.2.14)(acorn@8.16.0)(react@19.2.4) @@ -169,8 +169,8 @@ importers: specifier: ^0.3.0 version: 0.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) prism-react-renderer: - specifier: 1.1.0 - version: 1.1.0(react@19.2.4) + specifier: 2.4.1 + version: 2.4.1(react@19.2.4) prismjs: specifier: ^1.30.0 version: 1.30.0 @@ -215,10 +215,10 @@ importers: version: 2.6.0 tailwind-variants: specifier: ^0.2.1 - version: 0.2.1(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3))) + version: 0.2.1(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3))) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3))) + version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3))) usehooks-ts: specifier: ^3.1.0 version: 3.1.1(react@19.2.4) @@ -237,10 +237,10 @@ importers: devDependencies: '@chromatic-com/playwright': specifier: ^0.12.4 - version: 0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@chromatic-com/storybook': - specifier: 1.5.0 - version: 1.5.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(react@19.2.4) + specifier: 5.1.1 + version: 5.1.1(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) '@google/genai': specifier: ^1.46.0 version: 1.46.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -248,38 +248,23 @@ importers: specifier: ^5.15.9 version: 5.15.9 '@next/bundle-analyzer': - specifier: ^15.5.12 - version: 15.5.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) + specifier: ^16.2.1 + version: 16.2.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@playwright/test': specifier: ^1.52.0 version: 1.53.1 - '@storybook/addon-essentials': - specifier: 8.6.14 - version: 8.6.14(@types/react@19.2.14)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-interactions': - specifier: 8.6.14 - version: 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/addon-docs': + specifier: 10.3.3 + version: 10.3.3(@types/react@19.2.14)(esbuild@0.25.12)(rollup@4.46.2)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) '@storybook/addon-links': - specifier: 8.6.14 - version: 8.6.14(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + specifier: 10.3.3 + version: 10.3.3(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) '@storybook/addon-themes': - specifier: 8.6.14 - version: 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/manager-api': - specifier: 8.6.14 - version: 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + specifier: 10.3.3 + version: 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) '@storybook/nextjs': - specifier: ^8.6.14 - version: 8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.12)(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.12)) - '@storybook/react': - specifier: 8.6.14 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) - '@storybook/test': - specifier: 8.6.14 - version: 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/theming': - specifier: ^8.6.14 - version: 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + specifier: 10.3.3 + version: 10.3.3(@swc/core@1.15.21)(babel-plugin-macros@3.1.0)(esbuild@0.25.12)(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) '@svgr/webpack': specifier: ^8.1.0 version: 8.1.0(typescript@5.8.3) @@ -317,8 +302,8 @@ importers: specifier: ^10.4.19 version: 10.4.21(postcss@8.5.4) chromatic: - specifier: 12.0.0 - version: 12.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) + specifier: 16.0.0 + version: 16.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) decompress: specifier: ^4.2.1 version: 4.2.1 @@ -338,8 +323,8 @@ importers: specifier: ^10.0.0 version: 10.0.0(eslint@8.57.1) eslint-plugin-storybook: - specifier: 0.8.0 - version: 0.8.0(eslint@8.57.1)(typescript@5.8.3) + specifier: 10.3.3 + version: 10.3.3(eslint@8.57.1)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3) eslint-plugin-unused-imports: specifier: ^3.2.0 version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) @@ -378,7 +363,7 @@ importers: version: 0.6.12(prettier@3.5.3) raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.99.9(esbuild@0.25.12)) + version: 4.0.2(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) rehype-slug: specifier: ^6.0.0 version: 6.0.0 @@ -386,17 +371,17 @@ importers: specifier: ^1.0.1 version: 1.0.1 storybook: - specifier: 8.6.17 - version: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + specifier: 10.3.3 + version: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) storybook-next-intl: - specifier: ^1.2.5 - version: 1.2.6(next-intl@3.26.5(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)) + specifier: 10.1.1 + version: 10.1.1(next-intl@4.8.3(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) tailwindcss: specifier: ^3.4.4 - version: 3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) + version: 3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.17.57)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3) tsconfig-paths-webpack-plugin: specifier: 4.1.0 version: 4.1.0 @@ -760,18 +745,34 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.5': resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.27.4': resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.27.5': resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -780,37 +781,76 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.27.1': resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.27.1': resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.6.4': resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.27.1': resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.27.3': resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -819,6 +859,10 @@ packages: resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.27.1': resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} @@ -831,6 +875,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} @@ -843,6 +893,10 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -855,17 +909,32 @@ packages: resolution: {integrity: sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.27.5': resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} engines: {node: '>=6.9.0'} @@ -890,6 +959,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -912,12 +987,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.27.1': resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} @@ -930,6 +1017,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -948,12 +1041,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.27.1': resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.28.6': + resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.27.1': resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} engines: {node: '>=6.9.0'} @@ -966,42 +1071,84 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.28.6': + resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.27.1': resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-static-block@7.27.1': resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + '@babel/plugin-transform-classes@7.27.1': resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.27.1': resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.28.6': + resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.27.3': resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.27.1': resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.27.1': resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} engines: {node: '>=6.9.0'} @@ -1014,18 +1161,36 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-dynamic-import@7.27.1': resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.27.1': resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-export-namespace-from@7.27.1': resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} engines: {node: '>=6.9.0'} @@ -1050,6 +1215,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.27.1': resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} engines: {node: '>=6.9.0'} @@ -1062,6 +1233,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.27.1': resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} engines: {node: '>=6.9.0'} @@ -1080,12 +1257,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.27.1': resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.27.1': resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} engines: {node: '>=6.9.0'} @@ -1098,6 +1287,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-new-target@7.27.1': resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} engines: {node: '>=6.9.0'} @@ -1110,18 +1305,36 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.27.1': resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.27.3': resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.27.1': resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} engines: {node: '>=6.9.0'} @@ -1134,30 +1347,60 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.27.1': resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.27.1': resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.27.1': resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.28.6': + resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.27.1': resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.28.6': + resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.27.1': resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} engines: {node: '>=6.9.0'} @@ -1176,6 +1419,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-display-name@7.28.0': + resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-development@7.27.1': resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} engines: {node: '>=6.9.0'} @@ -1200,20 +1449,32 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regexp-modifiers@7.27.1': resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-reserved-words@7.27.1': resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.27.4': - resolution: {integrity: sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==} + '@babel/plugin-transform-runtime@7.29.0': + resolution: {integrity: sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1230,6 +1491,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.28.6': + resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.27.1': resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} engines: {node: '>=6.9.0'} @@ -1254,6 +1521,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.27.1': resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} @@ -1266,6 +1539,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.27.1': resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} engines: {node: '>=6.9.0'} @@ -1278,12 +1557,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/preset-env@7.27.2': resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-modules@0.1.6-no-external-plugins': resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: @@ -1295,28 +1586,56 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-react@7.28.5': + resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.27.1': resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.27.4': resolution: {integrity: sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.4': resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.27.3': resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@bugsnag/cuid@3.2.1': resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==} @@ -1326,9 +1645,11 @@ packages: peerDependencies: '@playwright/test': ^1.0.0 - '@chromatic-com/storybook@1.5.0': - resolution: {integrity: sha512-LkLKv7SWu/6kGep1ft2HA1T/cm14wU0zoW71gE4cZRcgUoRQJtyhITFTLHrjqAxz6bVqNgqzQtd5oBZ2nK3L3g==} - engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + '@chromatic-com/storybook@5.1.1': + resolution: {integrity: sha512-BPoAXHM71XgeCK2u0jKr9i8apeQMm/Z9IWGyndA2FMijfQG9m8ox45DdWh/pxFkK5ClhGgirv5QwMhFIeHmThg==} + engines: {node: '>=20.0.0', yarn: '>=1.22.18'} + peerDependencies: + storybook: ^0.0.0-0 || ^10.1.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0 '@chromaui/rrweb-snapshot@2.0.0-alpha.18-noAbsolute': resolution: {integrity: sha512-glB+dgHTLLiDS8ljwYDBb2EPNe/sPxz2uOWjm11PoDYmVw204VKzyq07jredeHs9nUocb47RyDcZWCa5Cbw3yw==} @@ -1379,12 +1700,12 @@ packages: '@emnapi/core@1.4.3': resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/wasi-threads@1.0.2': resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} @@ -1439,252 +1760,126 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.25.12': resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.25.12': resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.25.12': resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.25.12': resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.25.12': resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.25.12': resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.25.12': resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.25.12': resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.25.12': resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.25.12': resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.25.12': resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/netbsd-arm64@0.25.12': resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openharmony-arm64@0.25.12': resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} @@ -1697,54 +1892,36 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.25.12': resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.25.12': resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1776,8 +1953,8 @@ packages: '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - '@fastify/otel@0.16.0': - resolution: {integrity: sha512-2304BdM5Q/kUvQC9qJO1KZq3Zn1WWsw+WWkVmFEaj1UE2hEIiuFqrPeglQOwEtw/ftngisqfQ3v70TWMmwhhHA==} + '@fastify/otel@0.17.1': + resolution: {integrity: sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg==} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -1796,23 +1973,23 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@formatjs/ecma402-abstract@2.3.4': - resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + '@formatjs/bigdecimal@0.2.0': + resolution: {integrity: sha512-GeaxHZbUoYvHL9tC5eltHLs+1zU70aPw0s7LwqgktIzF5oMhNY4o4deEtusJMsq7WFJF3Ye2zQEzdG8beVk73w==} - '@formatjs/fast-memoize@2.2.7': - resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + '@formatjs/ecma402-abstract@3.2.0': + resolution: {integrity: sha512-dHnqHgBo6GXYGRsepaE1wmsC2etaivOWd5VaJstZd+HI2zR3DCUjbDVZRtoPGkkXZmyHvBwrdEUuqfvzhF/DtQ==} - '@formatjs/icu-messageformat-parser@2.11.2': - resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + '@formatjs/fast-memoize@3.1.1': + resolution: {integrity: sha512-CbNbf+tlJn1baRnPkNePnBqTLxGliG6DDgNa/UtV66abwIjwsliPMOt0172tzxABYzSuxZBZfcp//qI8AvBWPg==} - '@formatjs/icu-skeleton-parser@1.8.14': - resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + '@formatjs/icu-messageformat-parser@3.5.3': + resolution: {integrity: sha512-HJWZ9S6JWey6iY5+YXE3Kd0ofWU1sC2KTTp56e1168g/xxWvVvr8k9G4fexIgwYV9wbtjY7kGYK5FjoWB3B2OQ==} - '@formatjs/intl-localematcher@0.5.10': - resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==} + '@formatjs/icu-skeleton-parser@2.1.3': + resolution: {integrity: sha512-9mFp8TJ166ZM2pcjKwsBWXrDnOJGT7vMEScVgLygUODPOsE8S6f/FHoacvrlHK1B4dYZk8vSCNruyPU64AfgJQ==} - '@formatjs/intl-localematcher@0.6.1': - resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + '@formatjs/intl-localematcher@0.8.2': + resolution: {integrity: sha512-q05KMYGJLyqFNFtIb8NhWLF5X3aK/k0wYt7dnRFuy6aLQL+vUwQ1cg5cO4qawEiINybeCPXAWlprY2mSBjSXAQ==} '@google-cloud/precise-date@4.0.0': resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} @@ -1845,11 +2022,9 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.3': resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} @@ -1857,10 +2032,10 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + cpu: [arm64] os: [darwin] '@img/sharp-darwin-x64@0.34.3': @@ -1869,9 +2044,10 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] os: [darwin] '@img/sharp-libvips-darwin-arm64@1.2.0': @@ -1879,9 +2055,9 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] os: [darwin] '@img/sharp-libvips-darwin-x64@1.2.0': @@ -1889,19 +2065,19 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] '@img/sharp-libvips-linux-arm64@1.2.0': resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] os: [linux] '@img/sharp-libvips-linux-arm@1.2.0': @@ -1909,14 +2085,24 @@ packages: cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + '@img/sharp-libvips-linux-ppc64@1.2.0': resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] os: [linux] '@img/sharp-libvips-linux-s390x@1.2.0': @@ -1924,9 +2110,9 @@ packages: cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] os: [linux] '@img/sharp-libvips-linux-x64@1.2.0': @@ -1934,9 +2120,9 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] os: [linux] '@img/sharp-libvips-linuxmusl-arm64@1.2.0': @@ -1944,9 +2130,9 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] os: [linux] '@img/sharp-libvips-linuxmusl-x64@1.2.0': @@ -1954,10 +2140,9 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] os: [linux] '@img/sharp-linux-arm64@0.34.3': @@ -1966,10 +2151,10 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] + cpu: [arm64] os: [linux] '@img/sharp-linux-arm@0.34.3': @@ -1978,16 +2163,28 @@ packages: cpu: [arm] os: [linux] + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + '@img/sharp-linux-ppc64@0.34.3': resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] os: [linux] '@img/sharp-linux-s390x@0.34.3': @@ -1996,10 +2193,10 @@ packages: cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + cpu: [s390x] os: [linux] '@img/sharp-linux-x64@0.34.3': @@ -2008,10 +2205,10 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] + cpu: [x64] os: [linux] '@img/sharp-linuxmusl-arm64@0.34.3': @@ -2020,10 +2217,10 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + cpu: [arm64] os: [linux] '@img/sharp-linuxmusl-x64@0.34.3': @@ -2032,26 +2229,32 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] + cpu: [x64] + os: [linux] '@img/sharp-wasm32@0.34.3': resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + '@img/sharp-win32-arm64@0.34.3': resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] + cpu: [arm64] os: [win32] '@img/sharp-win32-ia32@0.34.3': @@ -2060,10 +2263,10 @@ packages: cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] + cpu: [ia32] os: [win32] '@img/sharp-win32-x64@0.34.3': @@ -2072,14 +2275,26 @@ packages: cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2097,6 +2312,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -2207,6 +2425,9 @@ packages: '@napi-rs/wasm-runtime@0.2.10': resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} + '@neoconfetti/react@1.0.0': + resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} + '@netlify/blobs@10.4.1': resolution: {integrity: sha512-43wntITwgocQxJThPxtgZ9XCPk2wAXrqD61uqgcIG2EhT/cXpvfEGEo6nLXXtb9irW6nQVXusJeLHEhKJFC4Vg==} engines: {node: ^14.16.0 || >=16.0.0} @@ -2227,59 +2448,59 @@ packages: resolution: {integrity: sha512-dyJeuggzQM8+Dsi0T8Z9UjfLJ6vCmNC36W6WE2aqzfTdTw4wPkh2xlEu4LoD75+TGuYK7jIhEoU2QcCXOzfyAQ==} engines: {node: ^18.14.0 || >=20} - '@next/bundle-analyzer@15.5.12': - resolution: {integrity: sha512-tDkdfvuKz9JlH+B/CEIY0+XqQ5gymVZZWvDer5HJI68rPI0EYfbSadbvIUvHTugYnMkyxSBf8u0P2yGOSQ4h+w==} + '@next/bundle-analyzer@16.2.1': + resolution: {integrity: sha512-fbj2WE6dnCyG8CvQnrBfpHyxdOIyZ4aEHJY0bSqAmamRiIXDqunFQPDvuSOPo24mJE9zQHw7TY6d+sGrXO98TQ==} - '@next/env@15.5.14': - resolution: {integrity: sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA==} + '@next/env@16.2.1': + resolution: {integrity: sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==} '@next/eslint-plugin-next@15.5.12': resolution: {integrity: sha512-+ZRSDFTv4aC96aMb5E41rMjysx8ApkryevnvEYZvPZO52KvkqP5rNExLUXJFr9P4s0f3oqNQR6vopCZsPWKDcQ==} - '@next/swc-darwin-arm64@15.5.14': - resolution: {integrity: sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg==} + '@next/swc-darwin-arm64@16.2.1': + resolution: {integrity: sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.14': - resolution: {integrity: sha512-aNnkSMjSFRTOmkd7qoNI2/rETQm/vKD6c/Ac9BZGa9CtoOzy3c2njgz7LvebQJ8iPxdeTuGnAjagyis8a9ifBw==} + '@next/swc-darwin-x64@16.2.1': + resolution: {integrity: sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.14': - resolution: {integrity: sha512-tjlpia+yStPRS//6sdmlVwuO1Rioern4u2onafa5n+h2hCS9MAvMXqpVbSrjgiEOoCs0nJy7oPOmWgtRRNSM5Q==} + '@next/swc-linux-arm64-gnu@16.2.1': + resolution: {integrity: sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.14': - resolution: {integrity: sha512-8B8cngBaLadl5lbDRdxGCP1Lef8ipD6KlxS3v0ElDAGil6lafrAM3B258p1KJOglInCVFUjk751IXMr2ixeQOQ==} + '@next/swc-linux-arm64-musl@16.2.1': + resolution: {integrity: sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.14': - resolution: {integrity: sha512-bAS6tIAg8u4Gn3Nz7fCPpSoKAexEt2d5vn1mzokcqdqyov6ZJ6gu6GdF9l8ORFrBuRHgv3go/RfzYz5BkZ6YSQ==} + '@next/swc-linux-x64-gnu@16.2.1': + resolution: {integrity: sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.14': - resolution: {integrity: sha512-mMxv/FcrT7Gfaq4tsR22l17oKWXZmH/lVqcvjX0kfp5I0lKodHYLICKPoX1KRnnE+ci6oIUdriUhuA3rBCDiSw==} + '@next/swc-linux-x64-musl@16.2.1': + resolution: {integrity: sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.14': - resolution: {integrity: sha512-OTmiBlYThppnvnsqx0rBqjDRemlmIeZ8/o4zI7veaXoeO1PVHoyj2lfTfXTiiGjCyRDhA10y4h6ZvZvBiynr2g==} + '@next/swc-win32-arm64-msvc@16.2.1': + resolution: {integrity: sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.14': - resolution: {integrity: sha512-+W7eFf3RS7m4G6tppVTOSyP9Y6FsJXfOuKzav1qKniiFm3KFByQfPEcouHdjlZmysl4zJGuGLQ/M9XyVeyeNEg==} + '@next/swc-win32-x64-msvc@16.2.1': + resolution: {integrity: sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2347,12 +2568,12 @@ packages: resolution: {integrity: sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==} engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.208.0': - resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} + '@opentelemetry/api-logs@0.212.0': + resolution: {integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==} engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.211.0': - resolution: {integrity: sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==} + '@opentelemetry/api-logs@0.213.0': + resolution: {integrity: sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.0': @@ -2371,8 +2592,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/context-async-hooks@2.5.1': - resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==} + '@opentelemetry/context-async-hooks@2.6.1': + resolution: {integrity: sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2389,14 +2610,14 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.0': - resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==} + '@opentelemetry/core@2.6.0': + resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.1': - resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} + '@opentelemetry/core@2.6.1': + resolution: {integrity: sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2413,134 +2634,134 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-amqplib@0.58.0': - resolution: {integrity: sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ==} + '@opentelemetry/instrumentation-amqplib@0.60.0': + resolution: {integrity: sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-connect@0.54.0': - resolution: {integrity: sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA==} + '@opentelemetry/instrumentation-connect@0.56.0': + resolution: {integrity: sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-dataloader@0.28.0': - resolution: {integrity: sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA==} + '@opentelemetry/instrumentation-dataloader@0.30.0': + resolution: {integrity: sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-express@0.59.0': - resolution: {integrity: sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA==} + '@opentelemetry/instrumentation-express@0.61.0': + resolution: {integrity: sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fs@0.30.0': - resolution: {integrity: sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA==} + '@opentelemetry/instrumentation-fs@0.32.0': + resolution: {integrity: sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-generic-pool@0.54.0': - resolution: {integrity: sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g==} + '@opentelemetry/instrumentation-generic-pool@0.56.0': + resolution: {integrity: sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-graphql@0.58.0': - resolution: {integrity: sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ==} + '@opentelemetry/instrumentation-graphql@0.61.0': + resolution: {integrity: sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-hapi@0.57.0': - resolution: {integrity: sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw==} + '@opentelemetry/instrumentation-hapi@0.59.0': + resolution: {integrity: sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.211.0': - resolution: {integrity: sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA==} + '@opentelemetry/instrumentation-http@0.213.0': + resolution: {integrity: sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-ioredis@0.59.0': - resolution: {integrity: sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw==} + '@opentelemetry/instrumentation-ioredis@0.61.0': + resolution: {integrity: sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-kafkajs@0.20.0': - resolution: {integrity: sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw==} + '@opentelemetry/instrumentation-kafkajs@0.22.0': + resolution: {integrity: sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-knex@0.55.0': - resolution: {integrity: sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ==} + '@opentelemetry/instrumentation-knex@0.57.0': + resolution: {integrity: sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-koa@0.59.0': - resolution: {integrity: sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg==} + '@opentelemetry/instrumentation-koa@0.61.0': + resolution: {integrity: sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.9.0 - '@opentelemetry/instrumentation-lru-memoizer@0.55.0': - resolution: {integrity: sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g==} + '@opentelemetry/instrumentation-lru-memoizer@0.57.0': + resolution: {integrity: sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongodb@0.64.0': - resolution: {integrity: sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA==} + '@opentelemetry/instrumentation-mongodb@0.66.0': + resolution: {integrity: sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongoose@0.57.0': - resolution: {integrity: sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg==} + '@opentelemetry/instrumentation-mongoose@0.59.0': + resolution: {integrity: sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql2@0.57.0': - resolution: {integrity: sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA==} + '@opentelemetry/instrumentation-mysql2@0.59.0': + resolution: {integrity: sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql@0.57.0': - resolution: {integrity: sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q==} + '@opentelemetry/instrumentation-mysql@0.59.0': + resolution: {integrity: sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pg@0.63.0': - resolution: {integrity: sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg==} + '@opentelemetry/instrumentation-pg@0.65.0': + resolution: {integrity: sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-redis@0.59.0': - resolution: {integrity: sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg==} + '@opentelemetry/instrumentation-redis@0.61.0': + resolution: {integrity: sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-tedious@0.30.0': - resolution: {integrity: sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA==} + '@opentelemetry/instrumentation-tedious@0.32.0': + resolution: {integrity: sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-undici@0.21.0': - resolution: {integrity: sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw==} + '@opentelemetry/instrumentation-undici@0.23.0': + resolution: {integrity: sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.7.0 @@ -2557,14 +2778,14 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.208.0': - resolution: {integrity: sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==} + '@opentelemetry/instrumentation@0.212.0': + resolution: {integrity: sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.211.0': - resolution: {integrity: sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==} + '@opentelemetry/instrumentation@0.213.0': + resolution: {integrity: sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -2609,8 +2830,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.5.1': - resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==} + '@opentelemetry/resources@2.6.1': + resolution: {integrity: sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -2639,8 +2860,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.5.1': - resolution: {integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==} + '@opentelemetry/sdk-trace-base@2.6.1': + resolution: {integrity: sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -2675,6 +2896,88 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + '@paulmillr/qr@0.2.1': resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} deprecated: 'The package is now available as "qr": npm install qr' @@ -2717,8 +3020,8 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@prisma/instrumentation@7.2.0': - resolution: {integrity: sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g==} + '@prisma/instrumentation@7.4.2': + resolution: {integrity: sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg==} peerDependencies: '@opentelemetry/api': ^1.8 @@ -3469,6 +3772,9 @@ packages: resolution: {integrity: sha512-6ORQfwtEJYpalCeVO21L4XXGSdbEMfyp2hEv6cP82afKXSwvse6d3sdelgaPWUxHIsFRkWvHDdzh8IyyKHZKxw==} engines: {node: '>=16'} + '@schummar/icu-type-parser@1.21.5': + resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} + '@scure/base@1.1.9': resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} @@ -3503,28 +3809,28 @@ packages: resolution: {integrity: sha512-lRLz1WZaDokMoUe299yP5JkInc3OgJuqNNlxb6j0q22umCiq6b5iDo2gRmFn93reirIvJxWIicQsGrHd93q8GQ==} engines: {node: '>=14'} - '@sentry-internal/browser-utils@10.41.0': - resolution: {integrity: sha512-Nsy7wqdWWqqNaoB/t5iqwAwTkHB73+UmyOU9k4OAmKuizSwj98h0fgPzoil3RgGzR7bjMxvaxXWKZyi//zEr0g==} + '@sentry-internal/browser-utils@10.46.0': + resolution: {integrity: sha512-WB1gBT9G13V02ekZ6NpUhoI1aGHV2eNfjEPthkU2bGBvFpQKnstwzjg7waIRGR7cu+YSW2Q6UI6aQLgBeOPD1g==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.41.0': - resolution: {integrity: sha512-fRWntZkEPVG7aBMjL7+NPpCTW9FW8RRmx7KZy8AzK51yCXhLwmM1aTR8RKJnz7zZC6XZozvhEXvtI9ud3b0LYA==} + '@sentry-internal/feedback@10.46.0': + resolution: {integrity: sha512-c4pI/z9nZCQXe9GYEw/hE/YTY9AxGBp8/wgKI+T8zylrN35SGHaXv63szzE1WbI8lacBY8lBF7rstq9bQVCaHw==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.41.0': - resolution: {integrity: sha512-fVirArw97oTm851JwJ3R1fC5rL+E8G3qx2XMmwU890UzovBcPo//DMDCGG2kkS62VVlZJ01HWF96a0Trer245g==} + '@sentry-internal/replay-canvas@10.46.0': + resolution: {integrity: sha512-ub314MWUsekVCuoH0/HJbbimlI24SkV745UW2pj9xRbxOAEf1wjkmIzxKrMDbTgJGuEunug02XZVdJFJUzOcDw==} engines: {node: '>=18'} - '@sentry-internal/replay@10.41.0': - resolution: {integrity: sha512-2CstiGYsE15nZ0K2HJB9SH2+/XcAvPf4erT3Y4/NNWogaz+g0RpRMpYM2ybHFX2x0sXggLXYrddHAUPFltiTjg==} + '@sentry-internal/replay@10.46.0': + resolution: {integrity: sha512-JBsWeXG6bRbxBFK8GzWymWGOB9QE7Kl57BeF3jzgdHTuHSWZ2mRnAmb1K05T4LU+gVygk6yW0KmdC8Py9Qzg9A==} engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@5.1.1': resolution: {integrity: sha512-x2wEpBHwsTyTF2rWsLKJlzrRF1TTIGOfX+ngdE+Yd5DBkoS58HwQv824QOviPGQRla4/ypISqAXzjdDPL/zalg==} engines: {node: '>= 18'} - '@sentry/browser@10.41.0': - resolution: {integrity: sha512-7hwcgpl/RSCRAlSCDSq2U93MRa43W1E3z9pArmlSqraQ4pRIVhVRMhHwSyZZ8yPRlcRa16nIh7d04oZE3Zqniw==} + '@sentry/browser@10.46.0': + resolution: {integrity: sha512-80DmGlTk5Z2/OxVOzLNxwolMyouuAYKqG8KUcoyintZqHbF6kO1RulI610HmyUt3OagKeBCqt9S7w0VIfCRL+Q==} engines: {node: '>=18'} '@sentry/bundler-plugin-core@5.1.1': @@ -3583,18 +3889,18 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@10.41.0': - resolution: {integrity: sha512-TlYMUzyXdx2mICmEKFiCDPDw7fHB/3bIn5lJOOENPmF8SogLTTRiu+HhjIhWkZ9zM/fR3w7WT8qtE/ak7nr24Q==} + '@sentry/core@10.46.0': + resolution: {integrity: sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==} engines: {node: '>=18'} - '@sentry/nextjs@10.41.0': - resolution: {integrity: sha512-yVprYYb0RqKYhjznREGv5UOcqjlL4NOxyZJVAtA4qJFvfTNQnRFZQszVQ0e4G7NHe6F0Pg/HxUu6MkDBio0amQ==} + '@sentry/nextjs@10.46.0': + resolution: {integrity: sha512-DVS6vHOhgFuvcos9OXrj1wcLi9iv859bmQ5lVLpbotAmPd63+kX82aQzATk1CBr3ygZrlA2lSYHDbpRzTAvIaA==} engines: {node: '>=18'} peerDependencies: next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0 - '@sentry/node-core@10.41.0': - resolution: {integrity: sha512-kJXQsREtyvg/y0BokloxMlGDz64diZmjYbidTv7sz6E+86KZAQejVmg5gdaGa9xohjhzoi9/DKtCgmVtdPVTjA==} + '@sentry/node-core@10.46.0': + resolution: {integrity: sha512-gwLGXfkzmiCmUI1VWttyoZBaVp1ItpDKc8AV2mQblWPQGdLSD0c6uKV/FkU291yZA3rXsrLXVwcWoibwnjE2vw==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -3620,12 +3926,12 @@ packages: '@opentelemetry/semantic-conventions': optional: true - '@sentry/node@10.41.0': - resolution: {integrity: sha512-DiMt+BPtRrgIwi4JeJRwB8l3jRYltxPyz0ngpU7vWKuXDGOm5cW0gWbWVSFKijU8ckVWtcW5xmCgL2tMrbHHrA==} + '@sentry/node@10.46.0': + resolution: {integrity: sha512-vF+7FrUXEtmYWuVcnvBjlWKeyLw/kwHpwnGj9oUmO/a2uKjDmUr53ZVcapggNxCjivavGYr9uHOY64AGdeUyzA==} engines: {node: '>=18'} - '@sentry/opentelemetry@10.41.0': - resolution: {integrity: sha512-nAprKdw8PvHPfT7eYRLSj6VOL+NlWEjdfKg7ZLnQPgRBdPOmi1mp+Kym2QIUoCF0MnaU6R80opNvQ0VYeOVrJQ==} + '@sentry/opentelemetry@10.46.0': + resolution: {integrity: sha512-dzzV2ovruGsx9jzusGGr6cNPvMgYRu2BIrF8aMZ3rkQ1OpPJjPStqtA1l1fw0aoxHOxIjFU7ml4emF+xdmMl3g==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -3634,14 +3940,14 @@ packages: '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 '@opentelemetry/semantic-conventions': ^1.39.0 - '@sentry/react@10.41.0': - resolution: {integrity: sha512-8GIDEtAh3cA16jIv9ETIHyqcwpVOXjPv5K0plCmMILze+7kz+jBW1KXHIMfCCuMj1w0FiYweZbHyz6Ak2tv5+w==} + '@sentry/react@10.46.0': + resolution: {integrity: sha512-Rb1S+9OuUPVwsz7GWnQ6Kgf3azbsseUymIegg3JZHNcW/fM1nPpaljzTBnuineia113DH0pgMBcdrrZDLaosFQ==} engines: {node: '>=18'} peerDependencies: react: ^19.2.4 - '@sentry/vercel-edge@10.41.0': - resolution: {integrity: sha512-fgr+RwQNX7dZGk+/UFPYmekvpTpF+0fBMDemxR608QWQugeoTyOE00dplRw84k2ZeT/LvxY+9MSLmAdM38QmKw==} + '@sentry/vercel-edge@10.46.0': + resolution: {integrity: sha512-A50gQM5ZoEwR6V3sKbq4S0RxGeKllpWTZfN+vemXh+XGi+F5U3QpEQufJgd+xHP7cxxbc1BiJIYuLmIjGbxjQA==} engines: {node: '>=18'} '@sentry/webpack-plugin@5.1.1': @@ -4039,71 +4345,41 @@ packages: peerDependencies: storybook: ^8.5.8 - '@storybook/addon-actions@8.6.14': - resolution: {integrity: sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-backgrounds@8.5.8': resolution: {integrity: sha512-TsQFagQ95+d7H3/+qUZKI2B0SEK8iu6CV13cyry9Dm59nn2bBylFrwx4I3xDQUOWMiSF6QIRjCYzxKQ/jJ5OEg==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-backgrounds@8.6.14': - resolution: {integrity: sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-controls@8.5.8': resolution: {integrity: sha512-3iifI8mBGPsiPmV9eAYk+tK9i+xuWhVsa+sXz01xTZ/0yoOREpp972hka86mtCqdDTOJIpzh1LmxvB218OssvQ==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-controls@8.6.14': - resolution: {integrity: sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==} + '@storybook/addon-docs@10.3.3': + resolution: {integrity: sha512-trJQTpOtuOEuNv1Rn8X2Sopp5hSPpb0u0soEJ71BZAbxe4d2Y1d/1MYcxBdRKwncum6sCTsnxTpqQ/qvSJKlTQ==} peerDependencies: - storybook: ^8.6.14 + storybook: ^10.3.3 '@storybook/addon-docs@8.5.8': resolution: {integrity: sha512-zKVUqE0UGiq1gZtY2TX57SYB4RIsdlbTDxKW2JZ9HhZGLvZ5Qb7AvdiKTZxfOepGhuw3UcNXH/zCFkFCTJifMw==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-docs@8.6.14': - resolution: {integrity: sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-essentials@8.5.8': resolution: {integrity: sha512-sCNvMZqL6dywnyHuZBrWl4f6QXsvpJHOioL3wJJKaaRMZmctbFmS0u6J8TQjmgZhQfyRzuJuhr1gJg9oeqp6AA==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-essentials@8.6.14': - resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-highlight@8.5.8': resolution: {integrity: sha512-kkldtFrY0oQJY/vfNLkV66hVgtp66OO8T68KoZFsmUz4a3iYgzDS8WF+Av2/9jthktFvMchjFr8NKOno9YBGIg==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-highlight@8.6.14': - resolution: {integrity: sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-interactions@8.6.14': - resolution: {integrity: sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-links@8.6.14': - resolution: {integrity: sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==} + '@storybook/addon-links@10.3.3': + resolution: {integrity: sha512-tazBHlB+YbU62bde5DWsq0lnxZjcAsPB3YRUpN2hSMfAySsudRingyWrgu5KeOxXhJvKJj0ohjQvGcMx/wgQUA==} peerDependencies: react: ^19.2.4 - storybook: ^8.6.14 + storybook: ^10.3.3 peerDependenciesMeta: react: optional: true @@ -4113,46 +4389,26 @@ packages: peerDependencies: storybook: ^8.5.8 - '@storybook/addon-measure@8.6.14': - resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-outline@8.5.8': resolution: {integrity: sha512-NAC9VWZFg2gwvduzJRVAtxPeQfJjB8xfDDgcGjgLOCSQkZDDOmGVdLXf78pykMQKyuu/0YZ989KufAac6kRG5g==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-outline@8.6.14': - resolution: {integrity: sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/addon-themes@8.6.14': - resolution: {integrity: sha512-/HJCgskA3OFGectuoLEBQ3JX1nQhE7lnpSv5gH13CWyyaMEk/mP8JYF1uO25YQqwGuSgL2gaEox+aK7UmglAmQ==} + '@storybook/addon-themes@10.3.3': + resolution: {integrity: sha512-6PgH1o7yNnWRVj4lAT1DNcX/eZXKgzjhfmzgWh3oFpPfDDvUzpFxx+MClM5f/ZieIbyQscxEuq8li7+e/F5VEQ==} peerDependencies: - storybook: ^8.6.14 + storybook: ^10.3.3 '@storybook/addon-toolbars@8.5.8': resolution: {integrity: sha512-AfGdMNBp+vOjyiFKlOyUFLIU0kN1QF4PhVBqd0vYkWAk2w9n6a/ZlG0TcJGe7K5+bcvmZDAerYMKbDMSeg9bAw==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-toolbars@8.6.14': - resolution: {integrity: sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/addon-viewport@8.5.8': resolution: {integrity: sha512-SdoRb4bH99Knj2R+rTcMQQxHrtcIO1GLzTFitAefxBE1OUkq8FNLHMHd0Ip/sCQGLW/5F03U70R2uh7SkhBBYA==} peerDependencies: storybook: ^8.5.8 - '@storybook/addon-viewport@8.6.14': - resolution: {integrity: sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/blocks@8.5.8': resolution: {integrity: sha512-O6tJDJM83fDm3ZP1+lTf24l7HOTzSRXkkMDD7zB/JHixzlj9p6wI4UQc2lplLadDCa5ya1IwyE7zUDN/0UfC5Q==} peerDependencies: @@ -4165,16 +4421,13 @@ packages: react-dom: optional: true - '@storybook/blocks@8.6.14': - resolution: {integrity: sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==} + '@storybook/builder-webpack5@10.3.3': + resolution: {integrity: sha512-A7hop0VXG/06EZ7l2WIuhsrnpiV6NOOcOiVqjYDLplbVelkiiL98LTL+Om87u0n32sAfXWgFk2jIhSc3bbXlsQ==} peerDependencies: - react: ^19.2.4 - react-dom: ^19.2.4 - storybook: ^8.6.14 + storybook: ^10.3.3 + typescript: '*' peerDependenciesMeta: - react: - optional: true - react-dom: + typescript: optional: true '@storybook/builder-webpack5@8.5.8': @@ -4186,35 +4439,21 @@ packages: typescript: optional: true - '@storybook/builder-webpack5@8.6.14': - resolution: {integrity: sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA==} - peerDependencies: - storybook: ^8.6.14 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@storybook/components@8.5.8': resolution: {integrity: sha512-PPEMqWPXn7rX+qISaOOv9CDSuuvG538f0+4M5Ppq2LwpjXecgOG5ktqJF0ZqxmTytT+RpEaJmgjGW0dMAKZswA==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/components@8.6.14': - resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} + '@storybook/core-webpack@10.3.3': + resolution: {integrity: sha512-ESRM2k9m1V0qXaqEM+bvtCjv9+gYVE3PMuoNZMyIYNdGA4Pdc2PvQsUrKQNVByVbEGwjt+h0RE6b20bnBkdYsg==} peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + storybook: ^10.3.3 '@storybook/core-webpack@8.5.8': resolution: {integrity: sha512-M2LNQdYp0br8fgKMVtBh7YIo8mQsgALLc4i9PEXRS7wrp+bhvVnA9qhd5xDPzb0Rl4CHYbs4Yvkzo7ZQMibeIQ==} peerDependencies: storybook: ^8.5.8 - '@storybook/core-webpack@8.6.14': - resolution: {integrity: sha512-iG7r8osNKabSGBbuJuSeMWKbU+ilt5PvzTYkClcYaagla/DliXkXvfywA6jOugVk/Cpx+c6tVKlPfjLcaQHwmw==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/core@8.5.8': resolution: {integrity: sha512-OT02DQhkGpBgn5P+nZOZmbzxqubC4liVqbhpjp/HOGi5cOA3+fCJzDJeSDTu+pPh7dZnopC4XnR+5dWjtOJHdA==} peerDependencies: @@ -4223,12 +4462,22 @@ packages: prettier: optional: true - '@storybook/core@8.6.17': - resolution: {integrity: sha512-lndZDYIvUddWk54HmgYwE4h2B0JtWt8ztIRAzHRt6ReZZ9QQbmM5b85Qpa+ng4dyQEKc2JAtYD3Du7RRFcpHlw==} + '@storybook/csf-plugin@10.3.3': + resolution: {integrity: sha512-Utlh7zubm+4iOzBBfzLW4F4vD99UBtl2Do4edlzK2F7krQIcFvR2ontjAE8S1FQVLZAC3WHalCOS+Ch8zf3knA==} peerDependencies: - prettier: ^2 || ^3 + esbuild: '*' + rollup: '*' + storybook: ^10.3.3 + vite: '*' + webpack: '*' peerDependenciesMeta: - prettier: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: optional: true '@storybook/csf-plugin@8.5.8': @@ -4236,14 +4485,6 @@ packages: peerDependencies: storybook: ^8.5.8 - '@storybook/csf-plugin@8.6.14': - resolution: {integrity: sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==} - peerDependencies: - storybook: ^8.6.14 - - '@storybook/csf@0.0.1': - resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} - '@storybook/csf@0.1.12': resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} @@ -4260,29 +4501,24 @@ packages: react: ^19.2.4 react-dom: ^19.2.4 - '@storybook/instrumenter@8.6.14': - resolution: {integrity: sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==} + '@storybook/icons@2.0.1': + resolution: {integrity: sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg==} peerDependencies: - storybook: ^8.6.14 + react: ^19.2.4 + react-dom: ^19.2.4 '@storybook/manager-api@8.5.8': resolution: {integrity: sha512-ik3yikvYxAJMDFg0s3Pm7hZWucAlkFaaO7e2RlfOctaJFdaEi3evR4RS7GdmS38uKBEk31RC7x+nnIJkqEC59A==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/manager-api@8.6.14': - resolution: {integrity: sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@storybook/nextjs@8.6.14': - resolution: {integrity: sha512-HbOOpwxJxO8nIDBvEQL3Pt51GHxnSeVxQ/WApr1HCT5Ffu6KCHz8WVsX56taHdigxjonSq0NTnog+aTIP06Nkw==} - engines: {node: '>=18.0.0'} + '@storybook/nextjs@10.3.3': + resolution: {integrity: sha512-/7iNyht4P0QDdSXDIHswgaNfWTGMI3OsQ+blLXlos4AvQMPWvGpDDtWg571+qD+6tKzdUwog+SYt7lvWT69SxA==} peerDependencies: - next: ^13.5.0 || ^14.0.0 || ^15.0.0 + next: ^14.1.0 || ^15.0.0 || ^16.0.0 react: ^19.2.4 react-dom: ^19.2.4 - storybook: ^8.6.14 + storybook: ^10.3.3 typescript: '*' webpack: ^5.0.0 peerDependenciesMeta: @@ -4291,13 +4527,12 @@ packages: webpack: optional: true - '@storybook/preset-react-webpack@8.6.14': - resolution: {integrity: sha512-M7Q6ErNx7N2hQorTz0OLa3YV8nc8OcvkDlCxqqnkHPGQNEIWEpeDvq3wn2OvZlrHDpchyuiquGXZ8aztVtBP2g==} - engines: {node: '>=18.0.0'} + '@storybook/preset-react-webpack@10.3.3': + resolution: {integrity: sha512-R8WeGUo062VpIx+i+5/Cv8dVGM+YSgCGZ0STPANijmOHATvfWpslTAIjMkq0me/BoDT5zxzCnYvAyRrBcjOW8A==} peerDependencies: react: ^19.2.4 react-dom: ^19.2.4 - storybook: ^8.6.14 + storybook: ^10.3.3 typescript: '*' peerDependenciesMeta: typescript: @@ -4314,43 +4549,34 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.6.14': - resolution: {integrity: sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0': resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} peerDependencies: typescript: '>= 4.x' webpack: '>= 4' - '@storybook/react-dom-shim@8.5.8': - resolution: {integrity: sha512-UT/kGJHPW+HLNCTmI1rV1to+dUZuXKUTaRv2wZ2BUq2/gjIuePyqQZYVQeb0LkZbuH2uviLrPfXpS5d3/RSUJw==} + '@storybook/react-dom-shim@10.3.3': + resolution: {integrity: sha512-lkhuh4G3UTreU9M3Iz5Dt32c6U+l/4XuvqLtbe1sDHENZH6aPj7y0b5FwnfHyvuTvYRhtbo29xZrF5Bp9kCC0w==} peerDependencies: react: ^19.2.4 react-dom: ^19.2.4 - storybook: ^8.5.8 + storybook: ^10.3.3 - '@storybook/react-dom-shim@8.6.14': - resolution: {integrity: sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==} + '@storybook/react-dom-shim@8.5.8': + resolution: {integrity: sha512-UT/kGJHPW+HLNCTmI1rV1to+dUZuXKUTaRv2wZ2BUq2/gjIuePyqQZYVQeb0LkZbuH2uviLrPfXpS5d3/RSUJw==} peerDependencies: react: ^19.2.4 react-dom: ^19.2.4 - storybook: ^8.6.14 + storybook: ^8.5.8 - '@storybook/react@8.6.14': - resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==} - engines: {node: '>=18.0.0'} + '@storybook/react@10.3.3': + resolution: {integrity: sha512-cGG5TbR8Tdx9zwlpsWyBEfWrejm5iWdYF26EwIhwuKq9GFUTAVrQzo0Rs7Tqc3ZyVhRS/YfsRiWSEH+zmq2JiQ==} peerDependencies: - '@storybook/test': 8.6.14 react: ^19.2.4 react-dom: ^19.2.4 - storybook: ^8.6.14 - typescript: '>= 4.2.x' + storybook: ^10.3.3 + typescript: '>= 4.9.x' peerDependenciesMeta: - '@storybook/test': - optional: true typescript: optional: true @@ -4366,26 +4592,11 @@ packages: peerDependencies: storybook: ^8.5.8 - '@storybook/test@8.6.14': - resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} - peerDependencies: - storybook: ^8.6.14 - '@storybook/theming@8.5.8': resolution: {integrity: sha512-/Rm6BV778sCT+3Ok861VYmw9BlEV5zcCq2zg5TOVuk8HqZw7H7VHtubVsjukEuhveYCs+oF+i2tv/II6jh6jdg==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/theming@8.6.14': - resolution: {integrity: sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - - '@storybook/theming@8.6.17': - resolution: {integrity: sha512-IttFvRqozpuzN5MlQEWGOzUA2rZg86688Dyv1d+bjpYcFHtY1X4XyTCGwv1BPTaTsB959oM8R2yoNYWQkABbBA==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -4464,9 +4675,96 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} + '@swc/core-darwin-arm64@1.15.21': + resolution: {integrity: sha512-SA8SFg9dp0qKRH8goWsax6bptFE2EdmPf2YRAQW9WoHGf3XKM1bX0nd5UdwxmC5hXsBUZAYf7xSciCler6/oyA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.15.21': + resolution: {integrity: sha512-//fOVntgowz9+V90lVsNCtyyrtbHp3jWH6Rch7MXHXbcvbLmbCTmssl5DeedUWLLGiAAW1wksBdqdGYOTjaNLw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.15.21': + resolution: {integrity: sha512-meNI4Sh6h9h8DvIfEc0l5URabYMSuNvyisLmG6vnoYAS43s8ON3NJR8sDHvdP7NJTrLe0q/x2XCn6yL/BeHcZg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.15.21': + resolution: {integrity: sha512-QrXlNQnHeXqU2EzLlnsPoWEh8/GtNJLvfMiPsDhk+ht6Xv8+vhvZ5YZ/BokNWSIZiWPKLAqR0M7T92YF5tmD3g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.15.21': + resolution: {integrity: sha512-8/yGCMO333ultDaMQivE5CjO6oXDPeeg1IV4sphojPkb0Pv0i6zvcRIkgp60xDB+UxLr6VgHgt+BBgqS959E9g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-ppc64-gnu@1.15.21': + resolution: {integrity: sha512-ucW0HzPx0s1dgRvcvuLSPSA/2Kk/VYTv9st8qe1Kc22Gu0Q0rH9+6TcBTmMuNIp0Xs4BPr1uBttmbO1wEGI49Q==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + + '@swc/core-linux-s390x-gnu@1.15.21': + resolution: {integrity: sha512-ulTnOGc5I7YRObE/9NreAhQg94QkiR5qNhhcUZ1iFAYjzg/JGAi1ch+s/Ixe61pMIr8bfVrF0NOaB0f8wjaAfA==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + + '@swc/core-linux-x64-gnu@1.15.21': + resolution: {integrity: sha512-D0RokxtM+cPvSqJIKR6uja4hbD+scI9ezo95mBhfSyLUs9wnPPl26sLp1ZPR/EXRdYm3F3S6RUtVi+8QXhT24Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.15.21': + resolution: {integrity: sha512-nER8u7VeRfmU6fMDzl1NQAbbB/G7O2avmvCOwIul1uGkZ2/acbPH+DCL9h5+0yd/coNcxMBTL6NGepIew+7C2w==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.15.21': + resolution: {integrity: sha512-+/AgNBnjYugUA8C0Do4YzymgvnGbztv7j8HKSQLvR/DQgZPoXQ2B3PqB2mTtGh/X5DhlJWiqnunN35JUgWcAeQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.15.21': + resolution: {integrity: sha512-IkSZj8PX/N4HcaFhMQtzmkV8YSnuNoJ0E6OvMwFiOfejPhiKXvl7CdDsn1f4/emYEIDO3fpgZW9DTaCRMDxaDA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.15.21': + resolution: {integrity: sha512-zUyWso7OOENB6e1N1hNuNn8vbvLsTdKQ5WKLgt/JcBNfJhKy/6jmBmqI3GXk/MyvQKd5SLvP7A0F36p7TeDqvw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.15.21': + resolution: {integrity: sha512-fkk7NJcBscrR3/F8jiqlMptRHP650NxqDnspBMrRe5d8xOoCy9MLL5kOBLFXjFLfMo3KQQHhk+/jUULOMlR1uQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/types@0.1.26': + resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} + '@tanstack/query-core@5.80.2': resolution: {integrity: sha512-g2Es97uwFk7omkWiH9JmtLWSA8lTUFVseIyzqbjqJEEx7qN+Hg6jbBdDvelqtakamppaJtGORQ64hEJ5S6ojSg==} @@ -4499,12 +4797,12 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.5.0': - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -4557,6 +4855,9 @@ packages: '@types/babel__traverse@7.20.7': resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -4602,6 +4903,9 @@ packages: '@types/decompress@4.2.7': resolution: {integrity: sha512-9z+8yjKr5Wn73Pt17/ldnmQToaFHZxK0N1GHysuk/JIPT8RIdQeoInM01wWPgypRcvb6VH1drjuFpQ4zmY437g==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/doctrine@0.0.9': resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} @@ -4659,6 +4963,9 @@ packages: '@types/pg@8.15.6': resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/prismjs@1.26.6': + resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: @@ -4681,6 +4988,9 @@ packages: '@types/semver@7.7.0': resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/tedious@4.0.14': resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} @@ -4723,14 +5033,26 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/project-service@8.58.0': + resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/scope-manager@7.18.0': resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.58.0': + resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.58.0': + resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -4741,22 +5063,13 @@ packages: typescript: optional: true - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.18.0': resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} @@ -4767,11 +5080,11 @@ packages: typescript: optional: true - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/typescript-estree@8.58.0': + resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/utils@7.18.0': resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} @@ -4779,14 +5092,21 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/utils@8.58.0': + resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' '@typescript-eslint/visitor-keys@7.18.0': resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.58.0': + resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -4889,23 +5209,17 @@ packages: peerDependencies: '@vanilla-extract/css': ^1.0.0 - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} - - '@vitest/pretty-format@2.0.5': - resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/spy@2.0.5': - resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@2.0.5': - resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} - - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@wagmi/connectors@5.8.3': resolution: {integrity: sha512-U4SJgi91+ny/XDGQWAMmawMafDx1BofcbYkPT/WSU6XrGL+apa7VltscqY7PVmwVGi/CYTqe8nlQiK/wmQ8D3A==} @@ -5359,16 +5673,36 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.11.1: resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.13.0: + resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.4: resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -5389,6 +5723,11 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.10.12: + resolution: {integrity: sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==} + engines: {node: '>=6.0.0'} + hasBin: true + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -5412,15 +5751,9 @@ packages: bl@1.2.3: resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} - bn.js@4.12.3: resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} - bn.js@5.2.2: - resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} - bn.js@5.2.3: resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} @@ -5475,6 +5808,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} @@ -5512,6 +5850,10 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -5552,6 +5894,9 @@ packages: caniuse-lite@1.0.30001780: resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} + caniuse-lite@1.0.30001784: + resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==} + case-sensitive-paths-webpack-plugin@2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} @@ -5563,10 +5908,6 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -5608,8 +5949,8 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chromatic@11.29.0: - resolution: {integrity: sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A==} + chromatic@13.3.5: + resolution: {integrity: sha512-MzPhxpl838qJUo0A55osCF2ifwPbjcIPeElr1d4SHcjnHoIcg7l1syJDrAYK/a+PcCBrOGi06jPNpQAln5hWgw==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -5620,8 +5961,8 @@ packages: '@chromatic-com/playwright': optional: true - chromatic@12.0.0: - resolution: {integrity: sha512-X7v26BLfAzHCU92nxPsCuvt+MazmA7S6cN7pCRRhnDYChDxHES48YvXarOybLdlH9kNP/3lMyknu6iseTh0T9A==} + chromatic@16.0.0: + resolution: {integrity: sha512-O81RVGDXXoreNeG894hjaUx08xep+C/BA6aJNMZkwSjH7Lln8IweZekBpBEoQPNNpjmHyZvcTIwN/aGitdK53Q==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -5761,6 +6102,9 @@ packages: core-js-compat@3.42.0: resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-js-pure@3.42.0: resolution: {integrity: sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==} @@ -5843,6 +6187,18 @@ packages: webpack: optional: true + css-loader@7.1.4: + resolution: {integrity: sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -5997,9 +6353,6 @@ packages: decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - decode-named-character-reference@1.1.0: resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} @@ -6052,6 +6405,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -6060,6 +6421,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -6089,6 +6454,10 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -6203,6 +6572,9 @@ packages: electron-to-chromium@1.5.162: resolution: {integrity: sha512-hQA+Zb5QQwoSaXJWEAGEw1zhk//O7qDzib05Z4qTqZfNju/FAkrm5ZInp0JbTp4Z18A6bilopdZWEYrFSsfllA==} + electron-to-chromium@1.5.331: + resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} + elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -6346,11 +6718,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6448,11 +6815,11 @@ packages: peerDependencies: eslint: '>=5.0.0' - eslint-plugin-storybook@0.8.0: - resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} - engines: {node: '>= 18'} + eslint-plugin-storybook@10.3.3: + resolution: {integrity: sha512-jo8wZvKaJlxxrNvf4hCsROJP3CdlpaLiYewAs5Ww+PJxCrLelIi5XVHWOAgBvvr3H9WDKvUw8xuvqPYqAlpkFg==} peerDependencies: - eslint: '>=6' + eslint: '>=8' + storybook: ^10.3.3 eslint-plugin-unused-imports@3.2.0: resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} @@ -6480,6 +6847,10 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6664,6 +7035,15 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -6745,6 +7125,13 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 + fork-ts-checker-webpack-plugin@9.1.0: + resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -7064,6 +7451,9 @@ packages: peerDependencies: postcss: ^8.1.0 + icu-minify@4.8.3: + resolution: {integrity: sha512-65Av7FLosNk7bPbmQx5z5XG2Y3T2GFppcjiXh4z1idHeVgQxlDpAmkGoYI0eFzAvrOnjpWTL5FmPDhsdfRMPEA==} + idb-keyval@6.2.2: resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} @@ -7094,6 +7484,10 @@ packages: import-in-the-middle@2.0.6: resolution: {integrity: sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==} + import-in-the-middle@3.0.0: + resolution: {integrity: sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg==} + engines: {node: '>=18'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -7123,8 +7517,8 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - intl-messageformat@10.7.16: - resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + intl-messageformat@11.2.0: + resolution: {integrity: sha512-IhghAA8n4KSlXuWKzYsWyWb82JoYTzShfyvdSF85oJPnNOjvv4kAo7S7Jtkm3/vJ53C7dQNRO+Gpnj3iWgTjBQ==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -7199,6 +7593,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -7234,6 +7633,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -7328,6 +7732,10 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -7389,10 +7797,6 @@ packages: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} - jsdoc-type-pratt-parser@4.8.0: - resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} - engines: {node: '>=12.0.0'} - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -7536,8 +7940,8 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} @@ -7556,6 +7960,9 @@ packages: loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -7932,11 +8339,18 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-intl@3.26.5: - resolution: {integrity: sha512-EQlCIfY0jOhRldiFxwSXG+ImwkQtDEfQeSOEQp6ieAGSLWGlgjdb/Ck/O7wMfC430ZHGeUKVKax8KGusTPKCgg==} + next-intl-swc-plugin-extractor@4.8.3: + resolution: {integrity: sha512-YcaT+R9z69XkGhpDarVFWUprrCMbxgIQYPUaXoE6LGVnLjGdo8hu3gL6bramDVjNKViYY8a/pXPy7Bna0mXORg==} + + next-intl@4.8.3: + resolution: {integrity: sha512-PvdBDWg+Leh7BR7GJUQbCDVVaBRn37GwDBWc9sv0rVQOJDQ5JU1rVzx9EEGuOGYo0DHAl70++9LQ7HxTawdL7w==} peerDependencies: - next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 + next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 react: ^19.2.4 + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true next-mdx-remote@5.0.0: resolution: {integrity: sha512-RNNbqRpK9/dcIFZs/esQhuLA8jANqlH694yqoDBK8hkVdJUndzzGmnPHa2nyi90N4Z9VmzuSWNRpr5ItT3M7xQ==} @@ -7950,9 +8364,9 @@ packages: react: ^19.2.4 react-dom: ^19.2.4 - next@15.5.14: - resolution: {integrity: sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.2.1: + resolution: {integrity: sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -7980,6 +8394,9 @@ packages: node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -8017,6 +8434,9 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -8095,6 +8515,10 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -8264,6 +8688,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -8333,9 +8761,8 @@ packages: pnglib@0.0.1: resolution: {integrity: sha512-95ChzOoYLOPIyVmL+Y6X+abKGXUJlvOVLkB1QQkyXl7Uczc6FElUy/x01NS7r2GX6GRezloO/ecCX9h4U9KadA==} - pnp-webpack-plugin@1.7.0: - resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} - engines: {node: '>=6'} + po-parser@2.1.1: + resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==} polished@4.3.1: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} @@ -8528,8 +8955,8 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - prism-react-renderer@1.1.0: - resolution: {integrity: sha512-WZAw+mBoxk1qZDD1h1WOg0BVHgyk9zqbuIBFNgP+Z71i515jGL0WZIN1FIF8EgOyh06x8Rr7HAUXxsRsoUZKyg==} + prism-react-renderer@2.4.1: + resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} peerDependencies: react: ^19.2.4 @@ -8640,12 +9067,6 @@ packages: chart.js: ^4.1.1 react: ^19.2.4 - react-confetti@6.4.0: - resolution: {integrity: sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg==} - engines: {node: '>=16'} - peerDependencies: - react: ^19.2.4 - react-docgen-typescript@2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -8655,6 +9076,10 @@ packages: resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} engines: {node: '>=16.14.0'} + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} + engines: {node: ^20.9.0 || >=22} + react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: @@ -8823,6 +9248,10 @@ packages: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} @@ -8837,6 +9266,10 @@ packages: resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} engines: {node: '>=4'} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} @@ -8844,6 +9277,10 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + hasBin: true + rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} @@ -8895,10 +9332,6 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -8915,6 +9348,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -8939,9 +9377,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - ripemd160@2.0.3: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} @@ -8951,6 +9386,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-exclusive@2.2.19: resolution: {integrity: sha512-K3mdoAi7tjJ/qT7Flj90L7QyPozwUaAG+CVhkdDje4HLKXUYC3N/Jzkau3flHVDLQVhiHBtcimVodMjN9egYbA==} @@ -8982,11 +9421,11 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} - sass-loader@14.2.1: - resolution: {integrity: sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==} + sass-loader@16.0.7: + resolution: {integrity: sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 sass-embedded: '*' @@ -9073,14 +9512,14 @@ packages: engines: {node: '>= 0.10'} hasBin: true - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.3: resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -9206,16 +9645,19 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - storybook-i18n@3.1.1: - resolution: {integrity: sha512-k1/lS+Rx6l5mJEYAHQWEgXuwU5IyWk7kjcJtm2FDIn1UqZwbEraGlrp/fEZKK2e/7+SXEQdKeCaTz7+63WTQxw==} + storybook-i18n@10.1.1: + resolution: {integrity: sha512-A2cFaGCysU2VkjDQUFY0aQsppAFIhZU3Tx38/NYLhWShTRkUpE3huGHP59CAgArxLQEzEjLmieiTSuNT2bwA4Q==} + peerDependencies: + storybook: ^9.0.0 || ^10.0.0 - storybook-next-intl@1.2.6: - resolution: {integrity: sha512-qTA6Wsx4Zqb2EB8VYOn0Cddyv/8UZvMsYntBoI6dEF5B8OqXx/Yq+Xj/xtYG+QQwSTA1nA9yi++OXhU0n2H3oQ==} + storybook-next-intl@10.1.1: + resolution: {integrity: sha512-rN1kbTcy+wxZo7h20AfQgJn9fo4+u5tuWmwJo4m3tUpSkCLRXrrUanJyoNDkuzFeX32CiQP8/mWbkqj+U1YviQ==} peerDependencies: next-intl: ^3 || ^4 + storybook: ^9.0.0 || ^10.0.0 - storybook@8.5.8: - resolution: {integrity: sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==} + storybook@10.3.3: + resolution: {integrity: sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -9223,8 +9665,8 @@ packages: prettier: optional: true - storybook@8.6.17: - resolution: {integrity: sha512-krR/l680A6qVnkGiK9p8jY0ucX3+kFCs2f4zw+S3w2Cdq8EiM/tFebPcX2V4S3z2UsO0v0dwAJOJNpzbFPdmVg==} + storybook@8.5.8: + resolution: {integrity: sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -9340,6 +9782,12 @@ packages: peerDependencies: webpack: ^5.0.0 + style-loader@4.0.0: + resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.27.0 + style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -9499,12 +9947,16 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} tmp-promise@3.0.3: @@ -9547,6 +9999,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -9568,15 +10026,6 @@ packages: '@swc/wasm': optional: true - ts-pnp@1.2.0: - resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} - engines: {node: '>=6'} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - tsafe@1.8.12: resolution: {integrity: sha512-nFRqW0ttu/2o6XTXsHiVZWJBCOaxhVqZLg7dgs3coZNsCMPXPfwz+zPHAQA+70fNnVJLAPg1EgGIqK9Q84tvAw==} @@ -9597,18 +10046,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - tween-functions@1.2.0: - resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -9689,6 +10129,10 @@ packages: resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} engines: {node: '>=4'} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} @@ -9746,6 +10190,10 @@ packages: resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + unrs-resolver@1.7.9: resolution: {integrity: sha512-hhFtY782YKwpz54G1db49YYS1RuMn8mBylIrCldrjb9BxZKnQ2xHw7+2zcl7H6fnUlTHGWv23/+677cpufhfxQ==} @@ -9814,6 +10262,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -9834,8 +10288,8 @@ packages: '@types/react': optional: true - use-intl@3.26.5: - resolution: {integrity: sha512-OdsJnC/znPvHCHLQH/duvQNXnP1w0hPfS+tkSi3mAbfjYBGh4JnyfdwkQBfIVf7t8gs9eSX/CntxUMvtKdG2MQ==} + use-intl@4.8.3: + resolution: {integrity: sha512-nLxlC/RH+le6g3amA508Itnn/00mE+J22ui21QhOWo5V9hCEC43+WtnRAITbJW0ztVZphev5X9gvOf2/Dk9PLA==} peerDependencies: react: ^19.2.4 @@ -10151,6 +10605,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} @@ -11180,8 +11638,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.27.5': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.27.4': dependencies: '@ampproject/remapping': 2.3.0 @@ -11202,6 +11668,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.5 @@ -11210,6 +11696,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.27.3 @@ -11222,6 +11716,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.0 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11235,11 +11737,51 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': + dependencies: + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 semver: 6.3.1 '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)': @@ -11253,6 +11795,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.4 @@ -11260,6 +11815,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.27.4 @@ -11267,6 +11829,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11276,12 +11845,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.27.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.27.3 '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11291,6 +11880,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11300,6 +11898,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.27.4 @@ -11311,6 +11927,8 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.27.1': @@ -11326,10 +11944,19 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.27.3 + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + '@babel/parser@7.27.5': dependencies: '@babel/types': 7.27.3 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11338,16 +11965,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11357,6 +12002,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11365,18 +12019,30 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)': @@ -11384,32 +12050,68 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11419,6 +12121,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11428,16 +12139,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.27.5(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11446,6 +12176,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11454,6 +12200,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11466,49 +12220,115 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11517,6 +12337,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11526,26 +12354,55 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.4 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11554,6 +12411,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11562,6 +12427,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11572,6 +12453,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11580,27 +12471,61 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11609,6 +12534,17 @@ snapshots: '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11617,11 +12553,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11630,11 +12579,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11643,6 +12613,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11652,11 +12630,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11667,6 +12659,11 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11674,6 +12671,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11685,36 +12689,69 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/types': 7.27.3 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.27.5(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-runtime@7.27.4(@babel/core@7.27.4)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4) + + '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -11724,6 +12761,11 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11732,21 +12774,44 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11758,29 +12823,63 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/preset-env@7.27.2(@babel/core@7.27.4)': dependencies: '@babel/compat-data': 7.27.5 @@ -11856,6 +12955,82 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11863,6 +13038,13 @@ snapshots: '@babel/types': 7.27.3 esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.3 + esutils: 2.0.3 + '@babel/preset-react@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11875,6 +13057,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-react@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -11886,14 +13080,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.27.4': {} + '@babel/runtime@7.29.2': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.27.5 '@babel/types': 7.27.3 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@babel/traverse@7.27.4': dependencies: '@babel/code-frame': 7.27.1 @@ -11906,14 +13119,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.27.3': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bugsnag/cuid@3.2.1': {} - '@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@chromaui/rrweb-snapshot': 2.0.0-alpha.18-noAbsolute '@playwright/test': 1.53.1 @@ -11921,7 +13151,7 @@ snapshots: '@storybook/addon-essentials': 8.5.8(@types/react@19.2.14)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/csf': 0.1.13 '@storybook/manager-api': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/server-webpack5': 8.5.8(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@storybook/server-webpack5': 8.5.8(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -11938,17 +13168,17 @@ snapshots: - utf-8-validate - webpack-cli - '@chromatic-com/storybook@1.5.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(react@19.2.4)': + '@chromatic-com/storybook@5.1.1(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10))(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: - chromatic: 11.29.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@neoconfetti/react': 1.0.0 + chromatic: 13.3.5(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)) filesize: 10.1.6 jsonfile: 6.1.0 - react-confetti: 6.4.0(react@19.2.4) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' - '@chromatic-com/playwright' - - react '@chromaui/rrweb-snapshot@2.0.0-alpha.18-noAbsolute': dependencies: @@ -12013,12 +13243,12 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true @@ -12078,7 +13308,7 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/sheet@1.4.0': {} @@ -12100,161 +13330,91 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.25.5': - optional: true - '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.5': - optional: true - '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.25.5': - optional: true - '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.25.5': - optional: true - '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.5': - optional: true - '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.5': - optional: true - '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.5': - optional: true - '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.5': - optional: true - '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.5': - optional: true - '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.25.5': - optional: true - '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.5': - optional: true - '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.5': - optional: true - '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.5': - optional: true - '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.5': - optional: true - '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.5': - optional: true - '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.5': - optional: true - '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.25.5': - optional: true - '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.5': - optional: true - '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.5': - optional: true - '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.5': - optional: true - '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.5': - optional: true - '@esbuild/openharmony-arm64@0.25.12': optional: true '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.5': - optional: true - '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.5': - optional: true - '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.5': - optional: true - '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.25.5': - optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': @@ -12295,11 +13455,11 @@ snapshots: '@fastify/busboy@3.2.0': {} - '@fastify/otel@0.16.0(@opentelemetry/api@1.9.0)': + '@fastify/otel@0.17.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.212.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 minimatch: 10.2.4 transitivePeerDependencies: @@ -12322,35 +13482,28 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@formatjs/ecma402-abstract@2.3.4': - dependencies: - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.1 - decimal.js: 10.5.0 - tslib: 2.8.1 + '@formatjs/bigdecimal@0.2.0': {} - '@formatjs/fast-memoize@2.2.7': + '@formatjs/ecma402-abstract@3.2.0': dependencies: - tslib: 2.8.1 + '@formatjs/bigdecimal': 0.2.0 + '@formatjs/fast-memoize': 3.1.1 + '@formatjs/intl-localematcher': 0.8.2 - '@formatjs/icu-messageformat-parser@2.11.2': - dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-skeleton-parser': 1.8.14 - tslib: 2.8.1 + '@formatjs/fast-memoize@3.1.1': {} - '@formatjs/icu-skeleton-parser@1.8.14': + '@formatjs/icu-messageformat-parser@3.5.3': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 + '@formatjs/icu-skeleton-parser': 2.1.3 - '@formatjs/intl-localematcher@0.5.10': + '@formatjs/icu-skeleton-parser@2.1.3': dependencies: - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 - '@formatjs/intl-localematcher@0.6.1': + '@formatjs/intl-localematcher@0.8.2': dependencies: - tslib: 2.8.1 + '@formatjs/fast-memoize': 3.1.1 '@google-cloud/precise-date@4.0.0': {} @@ -12381,9 +13534,7 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/colour@1.1.0': optional: true '@img/sharp-darwin-arm64@0.34.3': @@ -12391,9 +13542,9 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.2.0 optional: true - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true '@img/sharp-darwin-x64@0.34.3': @@ -12401,60 +13552,66 @@ snapshots: '@img/sharp-libvips-darwin-x64': 1.2.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true '@img/sharp-libvips-darwin-arm64@1.2.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true '@img/sharp-libvips-darwin-x64@1.2.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true '@img/sharp-libvips-linux-arm64@1.2.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true '@img/sharp-libvips-linux-arm@1.2.0': optional: true + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + '@img/sharp-libvips-linux-ppc64@1.2.0': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true '@img/sharp-libvips-linux-s390x@1.2.0': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true '@img/sharp-libvips-linux-x64@1.2.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true '@img/sharp-libvips-linuxmusl-arm64@1.2.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true '@img/sharp-libvips-linuxmusl-x64@1.2.0': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true '@img/sharp-linux-arm64@0.34.3': @@ -12462,9 +13619,9 @@ snapshots: '@img/sharp-libvips-linux-arm64': 1.2.0 optional: true - '@img/sharp-linux-arm@0.33.5': + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true '@img/sharp-linux-arm@0.34.3': @@ -12472,14 +13629,24 @@ snapshots: '@img/sharp-libvips-linux-arm': 1.2.0 optional: true + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + '@img/sharp-linux-ppc64@0.34.3': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.2.0 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true '@img/sharp-linux-s390x@0.34.3': @@ -12487,9 +13654,9 @@ snapshots: '@img/sharp-libvips-linux-s390x': 1.2.0 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true '@img/sharp-linux-x64@0.34.3': @@ -12497,9 +13664,9 @@ snapshots: '@img/sharp-libvips-linux-x64': 1.2.0 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true '@img/sharp-linuxmusl-arm64@0.34.3': @@ -12507,9 +13674,9 @@ snapshots: '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true '@img/sharp-linuxmusl-x64@0.34.3': @@ -12517,9 +13684,9 @@ snapshots: '@img/sharp-libvips-linuxmusl-x64': 1.2.0 optional: true - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.4.3 + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true '@img/sharp-wasm32@0.34.3': @@ -12527,21 +13694,29 @@ snapshots: '@emnapi/runtime': 1.4.5 optional: true + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.9.1 + optional: true + '@img/sharp-win32-arm64@0.34.3': optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-arm64@0.34.5': optional: true '@img/sharp-win32-ia32@0.34.3': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-win32-ia32@0.34.5': optional: true '@img/sharp-win32-x64@0.34.3': optional: true + '@img/sharp-win32-x64@0.34.5': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -12551,12 +13726,22 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -12568,7 +13753,12 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 @@ -12795,6 +13985,8 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true + '@neoconfetti/react@1.0.0': {} + '@netlify/blobs@10.4.1': dependencies: '@netlify/dev-utils': 4.3.2 @@ -12835,41 +14027,41 @@ snapshots: '@netlify/runtime-utils@2.2.1': {} - '@next/bundle-analyzer@15.5.12(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@next/bundle-analyzer@16.2.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: webpack-bundle-analyzer: 4.10.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@15.5.14': {} + '@next/env@16.2.1': {} '@next/eslint-plugin-next@15.5.12': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.14': + '@next/swc-darwin-arm64@16.2.1': optional: true - '@next/swc-darwin-x64@15.5.14': + '@next/swc-darwin-x64@16.2.1': optional: true - '@next/swc-linux-arm64-gnu@15.5.14': + '@next/swc-linux-arm64-gnu@16.2.1': optional: true - '@next/swc-linux-arm64-musl@15.5.14': + '@next/swc-linux-arm64-musl@16.2.1': optional: true - '@next/swc-linux-x64-gnu@15.5.14': + '@next/swc-linux-x64-gnu@16.2.1': optional: true - '@next/swc-linux-x64-musl@15.5.14': + '@next/swc-linux-x64-musl@16.2.1': optional: true - '@next/swc-win32-arm64-msvc@15.5.14': + '@next/swc-win32-arm64-msvc@16.2.1': optional: true - '@next/swc-win32-x64-msvc@15.5.14': + '@next/swc-win32-x64-msvc@16.2.1': optional: true '@noble/ciphers@1.2.1': {} @@ -12922,11 +14114,11 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs@0.208.0': + '@opentelemetry/api-logs@0.212.0': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs@0.211.0': + '@opentelemetry/api-logs@0.213.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -12940,7 +14132,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -12954,12 +14146,12 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.40.0 @@ -12982,163 +14174,163 @@ snapshots: '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-amqplib@0.58.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-amqplib@0.60.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-connect@0.54.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-connect@0.56.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@types/connect': 3.4.38 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dataloader@0.28.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-dataloader@0.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-express@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-express@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fs@0.30.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-fs@0.32.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.54.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-generic-pool@0.56.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-graphql@0.58.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-graphql@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-hapi@0.57.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-hapi@0.59.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-http@0.213.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 forwarded-parse: 2.1.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-ioredis@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.38.2 '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-kafkajs@0.20.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-kafkajs@0.22.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-knex@0.55.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-knex@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-koa@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-koa@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.55.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-lru-memoizer@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongodb@0.64.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongodb@0.66.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.57.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongoose@0.59.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql2@0.57.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql2@0.59.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql@0.57.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql@0.59.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@types/mysql': 2.15.27 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pg@0.63.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-pg@0.65.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) '@types/pg': 8.15.6 @@ -13146,29 +14338,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-redis@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.38.2 '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.30.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-tedious@0.32.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.21.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-undici@0.23.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 transitivePeerDependencies: - supports-color @@ -13191,20 +14383,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/api-logs': 0.212.0 import-in-the-middle: 2.0.6 require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - import-in-the-middle: 2.0.6 + '@opentelemetry/api-logs': 0.213.0 + import-in-the-middle: 3.0.0 require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color @@ -13250,10 +14442,10 @@ snapshots: '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sdk-logs@0.203.0(@opentelemetry/api@1.9.0)': @@ -13283,11 +14475,11 @@ snapshots: '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': @@ -13316,7 +14508,67 @@ snapshots: '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.4 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 '@paulmillr/qr@0.2.1': {} @@ -13327,7 +14579,7 @@ snapshots: dependencies: playwright: 1.53.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.12))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.42.0 @@ -13337,14 +14589,14 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.2 source-map: 0.7.4 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) optionalDependencies: type-fest: 4.41.0 webpack-hot-middleware: 2.26.1 '@polka/url@1.0.0-next.29': {} - '@prisma/instrumentation@7.2.0(@opentelemetry/api@1.9.0)': + '@prisma/instrumentation@7.4.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.207.0(@opentelemetry/api@1.9.0) @@ -14285,6 +15537,8 @@ snapshots: '@safe-global/safe-gateway-typescript-sdk@3.23.1': {} + '@schummar/icu-type-parser@1.21.5': {} + '@scure/base@1.1.9': {} '@scure/base@1.2.6': {} @@ -14344,33 +15598,33 @@ snapshots: transitivePeerDependencies: - encoding - '@sentry-internal/browser-utils@10.41.0': + '@sentry-internal/browser-utils@10.46.0': dependencies: - '@sentry/core': 10.41.0 + '@sentry/core': 10.46.0 - '@sentry-internal/feedback@10.41.0': + '@sentry-internal/feedback@10.46.0': dependencies: - '@sentry/core': 10.41.0 + '@sentry/core': 10.46.0 - '@sentry-internal/replay-canvas@10.41.0': + '@sentry-internal/replay-canvas@10.46.0': dependencies: - '@sentry-internal/replay': 10.41.0 - '@sentry/core': 10.41.0 + '@sentry-internal/replay': 10.46.0 + '@sentry/core': 10.46.0 - '@sentry-internal/replay@10.41.0': + '@sentry-internal/replay@10.46.0': dependencies: - '@sentry-internal/browser-utils': 10.41.0 - '@sentry/core': 10.41.0 + '@sentry-internal/browser-utils': 10.46.0 + '@sentry/core': 10.46.0 '@sentry/babel-plugin-component-annotate@5.1.1': {} - '@sentry/browser@10.41.0': + '@sentry/browser@10.46.0': dependencies: - '@sentry-internal/browser-utils': 10.41.0 - '@sentry-internal/feedback': 10.41.0 - '@sentry-internal/replay': 10.41.0 - '@sentry-internal/replay-canvas': 10.41.0 - '@sentry/core': 10.41.0 + '@sentry-internal/browser-utils': 10.46.0 + '@sentry-internal/feedback': 10.46.0 + '@sentry-internal/replay': 10.46.0 + '@sentry-internal/replay-canvas': 10.46.0 + '@sentry/core': 10.46.0 '@sentry/bundler-plugin-core@5.1.1': dependencies: @@ -14429,22 +15683,22 @@ snapshots: - encoding - supports-color - '@sentry/core@10.41.0': {} + '@sentry/core@10.46.0': {} - '@sentry/nextjs@10.41.0(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.99.9(esbuild@0.25.12))': + '@sentry/nextjs@10.46.0(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.40.0 '@rollup/plugin-commonjs': 28.0.1(rollup@4.46.2) - '@sentry-internal/browser-utils': 10.41.0 + '@sentry-internal/browser-utils': 10.46.0 '@sentry/bundler-plugin-core': 5.1.1 - '@sentry/core': 10.41.0 - '@sentry/node': 10.41.0 - '@sentry/opentelemetry': 10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) - '@sentry/react': 10.41.0(react@19.2.4) - '@sentry/vercel-edge': 10.41.0 - '@sentry/webpack-plugin': 5.1.1(webpack@5.99.9(esbuild@0.25.12)) - next: 15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@sentry/core': 10.46.0 + '@sentry/node': 10.46.0 + '@sentry/opentelemetry': 10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/react': 10.46.0(react@19.2.4) + '@sentry/vercel-edge': 10.46.0 + '@sentry/webpack-plugin': 5.1.1(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + next: 16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) rollup: 4.46.2 stacktrace-parser: 0.1.11 transitivePeerDependencies: @@ -14456,86 +15710,86 @@ snapshots: - supports-color - webpack - '@sentry/node-core@10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0)': + '@sentry/node-core@10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0)': dependencies: - '@sentry/core': 10.41.0 - '@sentry/opentelemetry': 10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) - import-in-the-middle: 2.0.6 + '@sentry/core': 10.46.0 + '@sentry/opentelemetry': 10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) + import-in-the-middle: 3.0.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 - '@sentry/node@10.41.0': + '@sentry/node@10.46.0': dependencies: - '@fastify/otel': 0.16.0(@opentelemetry/api@1.9.0) + '@fastify/otel': 0.17.1(@opentelemetry/api@1.9.0) '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-amqplib': 0.58.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-connect': 0.54.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dataloader': 0.28.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-express': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fs': 0.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-generic-pool': 0.54.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-graphql': 0.58.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-hapi': 0.57.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-ioredis': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-kafkajs': 0.20.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-knex': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-koa': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-lru-memoizer': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongodb': 0.64.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongoose': 0.57.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql': 0.57.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql2': 0.57.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pg': 0.63.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-redis': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-tedious': 0.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-undici': 0.21.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.60.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.66.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.65.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.23.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 - '@prisma/instrumentation': 7.2.0(@opentelemetry/api@1.9.0) - '@sentry/core': 10.41.0 - '@sentry/node-core': 10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) - '@sentry/opentelemetry': 10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) - import-in-the-middle: 2.0.6 + '@prisma/instrumentation': 7.4.2(@opentelemetry/api@1.9.0) + '@sentry/core': 10.46.0 + '@sentry/node-core': 10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/opentelemetry': 10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) + import-in-the-middle: 3.0.0 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@10.41.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0)': + '@sentry/opentelemetry@10.46.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 - '@sentry/core': 10.41.0 + '@sentry/core': 10.46.0 - '@sentry/react@10.41.0(react@19.2.4)': + '@sentry/react@10.46.0(react@19.2.4)': dependencies: - '@sentry/browser': 10.41.0 - '@sentry/core': 10.41.0 + '@sentry/browser': 10.46.0 + '@sentry/core': 10.46.0 react: 19.2.4 - '@sentry/vercel-edge@10.41.0': + '@sentry/vercel-edge@10.46.0': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) - '@sentry/core': 10.41.0 + '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) + '@sentry/core': 10.46.0 - '@sentry/webpack-plugin@5.1.1(webpack@5.99.9(esbuild@0.25.12))': + '@sentry/webpack-plugin@5.1.1(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: '@sentry/bundler-plugin-core': 5.1.1 uuid: 9.0.1 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) transitivePeerDependencies: - encoding - supports-color @@ -15139,9 +16393,9 @@ snapshots: dependencies: tslib: 2.8.1 - '@socialgouv/matomo-next@1.9.2(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': + '@socialgouv/matomo-next@1.9.2(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: - next: 15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@socket.io/component-emitter@3.1.2': {} @@ -15154,15 +16408,6 @@ snapshots: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) uuid: 9.0.1 - '@storybook/addon-actions@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - uuid: 9.0.1 - '@storybook/addon-backgrounds@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -15170,13 +16415,6 @@ snapshots: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 - '@storybook/addon-backgrounds@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - '@storybook/addon-controls@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 @@ -15184,35 +16422,32 @@ snapshots: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - - '@storybook/addon-docs@8.5.8(@types/react@19.2.14)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/addon-docs@10.3.3(@types/react@19.2.14)(esbuild@0.25.12)(rollup@4.46.2)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: '@mdx-js/react': 3.1.0(@types/react@19.2.14)(react@19.2.4) - '@storybook/blocks': 8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/react-dom-shim': 8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/csf-plugin': 10.3.3(esbuild@0.25.12)(rollup@4.46.2)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' + - esbuild + - rollup + - vite + - webpack - '@storybook/addon-docs@8.6.14(@types/react@19.2.14)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/addon-docs@8.5.8(@types/react@19.2.14)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@mdx-js/react': 3.1.0(@types/react@19.2.14)(react@19.2.4) - '@storybook/blocks': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/csf-plugin': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/blocks': 8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/react-dom-shim': 8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -15233,46 +16468,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.6.14(@types/react@19.2.14)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-backgrounds': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-controls': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-docs': 8.6.14(@types/react@19.2.14)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-highlight': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-measure': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-outline': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-toolbars': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/addon-viewport': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - '@storybook/addon-highlight@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/addon-highlight@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - - '@storybook/addon-interactions@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/addon-links@10.3.3(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/test': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - polished: 4.3.1 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - - '@storybook/addon-links@8.6.14(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) optionalDependencies: react: 19.2.4 @@ -15282,47 +16486,26 @@ snapshots: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) tiny-invariant: 1.3.3 - '@storybook/addon-measure@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/global': 5.0.0 storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 - '@storybook/addon-outline@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - - '@storybook/addon-themes@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/addon-themes@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 '@storybook/addon-toolbars@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/addon-toolbars@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/addon-viewport@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: memoizerific: 1.11.3 storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/addon-viewport@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - memoizerific: 1.11.3 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/blocks@8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: '@storybook/csf': 0.1.12 @@ -15333,40 +16516,22 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/blocks@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/icons': 1.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@storybook/builder-webpack5@8.5.8(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + '@storybook/builder-webpack5@10.3.3(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@types/semver': 7.7.0 - browser-assert: 1.2.1 + '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 - constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.12)) + css-loader: 7.1.4(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)) - html-webpack-plugin: 5.6.3(webpack@5.99.9(esbuild@0.25.12)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + html-webpack-plugin: 5.6.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) magic-string: 0.30.17 - path-browserify: 1.0.1 - process: 0.11.10 - semver: 7.7.3 - storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.12)) - terser-webpack-plugin: 5.3.14(esbuild@0.25.12)(webpack@5.99.9(esbuild@0.25.12)) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + style-loader: 4.0.0(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.21)(esbuild@0.25.12)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) ts-dedent: 2.2.0 - url: 0.11.4 - util: 0.12.5 - util-deprecate: 1.0.2 - webpack: 5.99.9(esbuild@0.25.12) - webpack-dev-middleware: 6.1.3(webpack@5.99.9(esbuild@0.25.12)) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) + webpack-dev-middleware: 6.1.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -15378,31 +16543,31 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@8.6.14(esbuild@0.25.12)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + '@storybook/builder-webpack5@8.5.8(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/core-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@types/semver': 7.7.0 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.12)) + css-loader: 6.11.0(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)) - html-webpack-plugin: 5.6.3(webpack@5.99.9(esbuild@0.25.12)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + html-webpack-plugin: 5.6.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 - semver: 7.7.2 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.12)) - terser-webpack-plugin: 5.3.14(esbuild@0.25.12)(webpack@5.99.9(esbuild@0.25.12)) + semver: 7.7.4 + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + style-loader: 3.3.4(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.21)(esbuild@0.25.12)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.99.9(esbuild@0.25.12) - webpack-dev-middleware: 6.1.3(webpack@5.99.9(esbuild@0.25.12)) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) + webpack-dev-middleware: 6.1.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -15418,31 +16583,27 @@ snapshots: dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/components@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/core-webpack@10.3.3(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + ts-dedent: 2.2.0 '@storybook/core-webpack@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) ts-dedent: 2.2.0 - '@storybook/core-webpack@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - ts-dedent: 2.2.0 - '@storybook/core@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)': dependencies: '@storybook/csf': 0.1.12 better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.4 util: 0.12.5 ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: @@ -15452,41 +16613,20 @@ snapshots: - supports-color - utf-8-validate - '@storybook/core@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + '@storybook/csf-plugin@10.3.3(esbuild@0.25.12)(rollup@4.46.2)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: - '@storybook/theming': 8.6.17(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - better-opn: 3.0.2 - browser-assert: 1.2.1 - esbuild: 0.25.12 - esbuild-register: 3.6.0(esbuild@0.25.12) - jsdoc-type-pratt-parser: 4.8.0 - process: 0.11.10 - recast: 0.23.11 - semver: 7.7.4 - util: 0.12.5 - ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + unplugin: 2.3.11 optionalDependencies: - prettier: 3.5.3 - transitivePeerDependencies: - - bufferutil - - storybook - - supports-color - - utf-8-validate + esbuild: 0.25.12 + rollup: 4.46.2 + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) '@storybook/csf-plugin@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) unplugin: 1.16.1 - '@storybook/csf-plugin@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - unplugin: 1.16.1 - - '@storybook/csf@0.0.1': - dependencies: - lodash: 4.17.23 - '@storybook/csf@0.1.12': dependencies: type-fest: 2.19.0 @@ -15502,67 +16642,57 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@storybook/instrumenter@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/icons@2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@storybook/manager-api@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/manager-api@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - - '@storybook/nextjs@8.6.14(babel-plugin-macros@3.1.0)(esbuild@0.25.12)(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.12))': - dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4) - '@babel/plugin-transform-runtime': 7.27.4(@babel/core@7.27.4) - '@babel/preset-env': 7.27.2(@babel/core@7.27.4) - '@babel/preset-react': 7.27.1(@babel/core@7.27.4) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) - '@babel/runtime': 7.27.4 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(esbuild@0.25.12)) - '@storybook/builder-webpack5': 8.6.14(esbuild@0.25.12)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) - '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(esbuild@0.25.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) - '@storybook/test': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@types/semver': 7.7.0 - babel-loader: 9.2.1(@babel/core@7.27.4)(webpack@5.99.9(esbuild@0.25.12)) - css-loader: 6.11.0(webpack@5.99.9(esbuild@0.25.12)) - find-up: 5.0.0 - image-size: 1.2.1 + '@storybook/nextjs@10.3.3(@swc/core@1.15.21)(babel-plugin-macros@3.1.0)(esbuild@0.25.12)(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/runtime': 7.29.2 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + '@storybook/builder-webpack5': 10.3.3(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@storybook/preset-react-webpack': 10.3.3(@swc/core@1.15.21)(esbuild@0.25.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@storybook/react': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@types/semver': 7.7.1 + babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + css-loader: 6.11.0(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + image-size: 2.0.2 loader-utils: 3.3.1 - next: 15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(esbuild@0.25.12)) - pnp-webpack-plugin: 1.7.0(typescript@5.8.3) + next: 16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) postcss: 8.5.4 - postcss-loader: 8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)) + postcss-loader: 8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 14.2.1(webpack@5.99.9(esbuild@0.25.12)) - semver: 7.7.2 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.99.9(esbuild@0.25.12)) - styled-jsx: 5.1.7(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@19.2.4) - ts-dedent: 2.2.0 + sass-loader: 16.0.7(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + semver: 7.7.4 + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + style-loader: 3.3.4(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + styled-jsx: 5.1.7(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.4) tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 optionalDependencies: - sharp: 0.33.5 typescript: 5.8.3 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -15581,26 +16711,23 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(esbuild@0.25.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + '@storybook/preset-react-webpack@10.3.3(@swc/core@1.15.21)(esbuild@0.25.12)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)) - '@types/semver': 7.7.0 - find-up: 5.0.0 + '@storybook/core-webpack': 10.3.3(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) + '@types/semver': 7.7.1 magic-string: 0.30.17 react: 19.2.4 react-docgen: 7.1.1 react-dom: 19.2.4(react@19.2.4) resolve: 1.22.10 - semver: 7.7.2 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + semver: 7.7.4 + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - - '@storybook/test' - '@swc/core' - esbuild - supports-color @@ -15621,11 +16748,7 @@ snapshots: dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/preview-api@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12))': dependencies: debug: 4.4.3 endent: 2.1.0 @@ -15635,40 +16758,39 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/react-dom-shim@10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) - '@storybook/react-dom-shim@8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': + '@storybook/react-dom-shim@8.5.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + '@storybook/react@10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: - '@storybook/components': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/preview-api': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@storybook/theming': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) + '@storybook/react-dom-shim': 10.3.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) react: 19.2.4 + react-docgen: 8.0.3 + react-docgen-typescript: 2.2.2(typescript@5.8.3) react-dom: 19.2.4(react@19.2.4) - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) optionalDependencies: - '@storybook/test': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) typescript: 5.8.3 + transitivePeerDependencies: + - supports-color - '@storybook/server-webpack5@8.5.8(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': + '@storybook/server-webpack5@8.5.8(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3)': dependencies: - '@storybook/builder-webpack5': 8.5.8(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.5.8(@swc/core@1.15.21)(esbuild@0.25.12)(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(typescript@5.8.3) '@storybook/preset-server-webpack': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) '@storybook/server': 8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) @@ -15692,29 +16814,10 @@ snapshots: ts-dedent: 2.2.0 yaml: 2.8.0 - '@storybook/test@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10)) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/theming@8.5.8(storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': dependencies: storybook: 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@storybook/theming@8.6.14(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - - '@storybook/theming@8.6.17(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))': - dependencies: - storybook: 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -15808,10 +16911,70 @@ snapshots: - supports-color - typescript + '@swc/core-darwin-arm64@1.15.21': + optional: true + + '@swc/core-darwin-x64@1.15.21': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.15.21': + optional: true + + '@swc/core-linux-arm64-gnu@1.15.21': + optional: true + + '@swc/core-linux-arm64-musl@1.15.21': + optional: true + + '@swc/core-linux-ppc64-gnu@1.15.21': + optional: true + + '@swc/core-linux-s390x-gnu@1.15.21': + optional: true + + '@swc/core-linux-x64-gnu@1.15.21': + optional: true + + '@swc/core-linux-x64-musl@1.15.21': + optional: true + + '@swc/core-win32-arm64-msvc@1.15.21': + optional: true + + '@swc/core-win32-ia32-msvc@1.15.21': + optional: true + + '@swc/core-win32-x64-msvc@1.15.21': + optional: true + + '@swc/core@1.15.21': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.26 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.21 + '@swc/core-darwin-x64': 1.15.21 + '@swc/core-linux-arm-gnueabihf': 1.15.21 + '@swc/core-linux-arm64-gnu': 1.15.21 + '@swc/core-linux-arm64-musl': 1.15.21 + '@swc/core-linux-ppc64-gnu': 1.15.21 + '@swc/core-linux-s390x-gnu': 1.15.21 + '@swc/core-linux-x64-gnu': 1.15.21 + '@swc/core-linux-x64-musl': 1.15.21 + '@swc/core-win32-arm64-msvc': 1.15.21 + '@swc/core-win32-ia32-msvc': 1.15.21 + '@swc/core-win32-x64-msvc': 1.15.21 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/types@0.1.26': + dependencies: + '@swc/counter': 0.1.3 + '@tanstack/query-core@5.80.2': {} '@tanstack/react-query@5.80.2(react@19.2.4)': @@ -15837,8 +17000,8 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.27.4 + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -15846,17 +17009,16 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.5.0': + '@testing-library/jest-dom@6.9.1': dependencies: '@adobe/css-tools': 4.4.3 aria-query: 5.3.2 - chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - lodash: 4.17.23 + picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: '@testing-library/dom': 10.4.0 @@ -15942,23 +17104,28 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.27.5 - '@babel/types': 7.27.3 + '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.27.5 - '@babel/types': 7.27.3 + '@babel/types': 7.29.0 '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.27.3 + '@babel/types': 7.29.0 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/connect@3.4.38': dependencies: @@ -16006,16 +17173,18 @@ snapshots: dependencies: '@types/node': 20.17.57 + '@types/deep-eql@4.0.2': {} + '@types/doctrine@0.0.9': {} '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 '@types/estree-jsx@1.0.5': @@ -16066,6 +17235,8 @@ snapshots: pg-protocol: 1.10.3 pg-types: 2.2.0 + '@types/prismjs@1.26.6': {} + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: '@types/react': 19.2.14 @@ -16084,6 +17255,8 @@ snapshots: '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} + '@types/tedious@4.0.14': dependencies: '@types/node': 20.17.57 @@ -16133,46 +17306,45 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.62.0': + '@typescript-eslint/project-service@8.58.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.8.3) + '@typescript-eslint/types': 8.58.0 + debug: 4.4.3 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/scope-manager@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.58.0': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1 - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.8.3) - optionalDependencies: - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 - '@typescript-eslint/types@7.18.0': {} + '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.3 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + debug: 4.4.1 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 7.18.0 @@ -16188,20 +17360,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.58.0(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.7.2 + '@typescript-eslint/project-service': 8.58.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.8.3) + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/visitor-keys': 8.58.0 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: @@ -16214,16 +17386,27 @@ snapshots: - supports-color - typescript - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/utils@8.58.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.58.0 + '@typescript-eslint/types': 8.58.0 + '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.8.3) + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.58.0': + dependencies: + '@typescript-eslint/types': 8.58.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-darwin-arm64@1.7.9': @@ -16306,37 +17489,27 @@ snapshots: dependencies: '@vanilla-extract/css': 1.15.5(babel-plugin-macros@3.1.0) - '@vitest/expect@2.0.5': + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 2.0.5 - '@vitest/utils': 2.0.5 + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 chai: 5.2.0 - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/pretty-format@2.0.5': + '@vitest/pretty-format@3.2.4': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/pretty-format@2.1.9': + '@vitest/spy@3.2.4': dependencies: - tinyrainbow: 1.2.0 + tinyspy: 4.0.4 - '@vitest/spy@2.0.5': + '@vitest/utils@3.2.4': dependencies: - tinyspy: 3.0.2 - - '@vitest/utils@2.0.5': - dependencies: - '@vitest/pretty-format': 2.0.5 - estree-walker: 3.0.3 - loupe: 3.1.3 - tinyrainbow: 1.2.0 - - '@vitest/utils@2.1.9': - dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 - tinyrainbow: 1.2.0 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 '@wagmi/connectors@5.8.3(@netlify/blobs@10.4.1)(@types/react@19.2.14)(@wagmi/core@2.17.2(@tanstack/query-core@5.80.2)(@types/react@19.2.14)(react@19.2.4)(typescript@5.8.3)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(react@19.2.4)(typescript@5.8.3)(utf-8-validate@5.0.10)(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': dependencies: @@ -17304,12 +18477,12 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@9.2.1(@babel/core@7.27.4)(webpack@5.99.9(esbuild@0.25.12)): + babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) babel-plugin-macros@3.1.0: dependencies: @@ -17326,6 +18499,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4): dependencies: '@babel/core': 7.27.4 @@ -17334,6 +18516,22 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.4): dependencies: '@babel/core': 7.27.4 @@ -17341,6 +18539,13 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -17353,6 +18558,8 @@ snapshots: base64id@2.0.0: {} + baseline-browser-mapping@2.10.12: {} + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -17372,12 +18579,8 @@ snapshots: readable-stream: 2.3.8 safe-buffer: 5.2.1 - bn.js@4.12.2: {} - bn.js@4.12.3: {} - bn.js@5.2.2: {} - bn.js@5.2.3: {} boolbase@1.0.0: {} @@ -17429,13 +18632,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.3: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -17457,6 +18660,14 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.0) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.12 + caniuse-lite: 1.0.30001784 + electron-to-chromium: 1.5.331 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bs58@6.0.0: dependencies: base-x: 5.0.1 @@ -17494,6 +18705,10 @@ snapshots: builtin-status-codes@3.0.0: {} + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -17530,6 +18745,8 @@ snapshots: caniuse-lite@1.0.30001780: {} + caniuse-lite@1.0.30001784: {} + case-sensitive-paths-webpack-plugin@2.4.0: {} ccount@2.0.1: {} @@ -17542,11 +18759,6 @@ snapshots: loupe: 3.1.3 pathval: 2.0.0 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -17588,13 +18800,13 @@ snapshots: dependencies: readdirp: 4.1.2 - chromatic@11.29.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): + chromatic@13.3.5(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): optionalDependencies: - '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) - chromatic@12.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): + chromatic@16.0.0(@chromatic-com/playwright@0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10)): optionalDependencies: - '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@chromatic-com/playwright': 0.12.5(@playwright/test@1.53.1)(@swc/core@1.15.21)(@types/react@19.2.14)(bufferutil@4.0.9)(esbuild@0.25.12)(prettier@3.5.3)(typescript@5.8.3)(utf-8-validate@5.0.10) chrome-trace-event@1.0.4: {} @@ -17708,6 +18920,10 @@ snapshots: dependencies: browserslist: 4.25.0 + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + core-js-pure@3.42.0: {} core-util-is@1.0.3: {} @@ -17747,7 +18963,7 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 elliptic: 6.6.1 create-hash@1.2.0: @@ -17755,7 +18971,7 @@ snapshots: cipher-base: 1.0.6 inherits: 2.0.4 md5.js: 1.3.5 - ripemd160: 2.0.2 + ripemd160: 2.0.3 sha.js: 2.4.12 create-hmac@1.1.7: @@ -17763,7 +18979,7 @@ snapshots: cipher-base: 1.0.6 create-hash: 1.2.0 inherits: 2.0.4 - ripemd160: 2.0.2 + ripemd160: 2.0.3 safe-buffer: 5.2.1 sha.js: 2.4.12 @@ -17808,7 +19024,7 @@ snapshots: randombytes: 2.1.0 randomfill: 1.0.4 - css-loader@6.11.0(webpack@5.99.9(esbuild@0.25.12)): + css-loader@6.11.0(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: icss-utils: 5.1.0(postcss@8.5.4) postcss: 8.5.4 @@ -17817,9 +19033,22 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.4) postcss-modules-values: 4.0.0(postcss@8.5.4) postcss-value-parser: 4.2.0 - semver: 7.7.2 + semver: 7.7.4 + optionalDependencies: + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) + + css-loader@7.1.4(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): + dependencies: + icss-utils: 5.1.0(postcss@8.5.4) + postcss: 8.5.4 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.4) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.4) + postcss-modules-scope: 3.2.1(postcss@8.5.4) + postcss-modules-values: 4.0.0(postcss@8.5.4) + postcss-value-parser: 4.2.0 + semver: 7.7.4 optionalDependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) css-select@4.3.0: dependencies: @@ -17953,8 +19182,6 @@ snapshots: decimal.js-light@2.5.1: {} - decimal.js@10.5.0: {} - decode-named-character-reference@1.1.0: dependencies: character-entities: 2.0.2 @@ -18013,6 +19240,13 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -18021,6 +19255,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -18046,6 +19282,8 @@ snapshots: detect-libc@2.0.4: {} + detect-libc@2.1.2: {} + detect-node-es@1.1.0: {} dettle@1.0.5: {} @@ -18060,7 +19298,7 @@ snapshots: diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -18091,7 +19329,7 @@ snapshots: dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.27.4 - csstype: 3.1.3 + csstype: 3.2.3 dom-serializer@1.4.1: dependencies: @@ -18172,9 +19410,11 @@ snapshots: electron-to-chromium@1.5.162: {} + electron-to-chromium@1.5.331: {} + elliptic@6.6.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -18410,13 +19650,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.25.5): - dependencies: - debug: 4.4.3 - esbuild: 0.25.5 - transitivePeerDependencies: - - supports-color - esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -18446,34 +19679,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -18616,13 +19821,11 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.8.3): + eslint-plugin-storybook@10.3.3(eslint@8.57.1)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10))(typescript@5.8.3): dependencies: - '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.58.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 - requireindex: 1.2.0 - ts-dedent: 2.2.0 + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - typescript @@ -18648,6 +19851,8 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@5.0.1: {} + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) @@ -18835,7 +20040,7 @@ snapshots: extension-port-stream@3.0.0: dependencies: - readable-stream: 3.6.2 + readable-stream: 4.7.0 webextension-polyfill: 0.10.0 fast-deep-equal@3.1.3: {} @@ -18890,6 +20095,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -18960,7 +20169,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -18972,10 +20181,27 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.2 + semver: 7.7.4 + tapable: 2.2.2 + typescript: 5.8.3 + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) + + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): + dependencies: + '@babel/code-frame': 7.27.1 + chalk: 4.1.2 + chokidar: 4.0.3 + cosmiconfig: 8.3.6(typescript@5.8.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.4 tapable: 2.2.2 typescript: 5.8.3 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) formdata-polyfill@4.0.10: dependencies: @@ -19323,15 +20549,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - html-webpack-plugin@5.6.3(webpack@5.99.9(esbuild@0.25.12)): + html-webpack-plugin@5.6.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 pretty-error: 4.0.0 tapable: 2.2.2 optionalDependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) htmlparser2@10.1.0: dependencies: @@ -19373,6 +20599,10 @@ snapshots: dependencies: postcss: 8.5.4 + icu-minify@4.8.3: + dependencies: + '@formatjs/icu-messageformat-parser': 3.5.3 + idb-keyval@6.2.2: {} ieee754@1.2.1: {} @@ -19404,6 +20634,13 @@ snapshots: cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 + import-in-the-middle@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -19427,12 +20664,11 @@ snapshots: internmap@2.0.3: {} - intl-messageformat@10.7.16: + intl-messageformat@11.2.0: dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 - tslib: 2.8.1 + '@formatjs/ecma402-abstract': 3.2.0 + '@formatjs/fast-memoize': 3.1.1 + '@formatjs/icu-messageformat-parser': 3.5.3 invariant@2.2.4: dependencies: @@ -19510,6 +20746,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -19540,6 +20778,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-map@2.0.3: {} is-nan@1.3.2: @@ -19619,6 +20861,10 @@ snapshots: dependencies: is-docker: 2.2.1 + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isarray@1.0.0: {} isarray@2.0.5: {} @@ -19679,8 +20925,6 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsdoc-type-pratt-parser@4.8.0: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -19835,7 +21079,7 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.23: {} + lodash@4.18.1: {} log-update@6.1.0: dependencies: @@ -19855,6 +21099,8 @@ snapshots: loupe@3.1.3: {} + loupe@3.2.1: {} + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -19897,7 +21143,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.0.5 + hash-base: 3.1.2 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -20369,7 +21615,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 mime-db@1.52.0: {} @@ -20458,13 +21704,24 @@ snapshots: neo-async@2.6.2: {} - next-intl@3.26.5(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + next-intl-swc-plugin-extractor@4.8.3: {} + + next-intl@4.8.3(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.8.3): dependencies: - '@formatjs/intl-localematcher': 0.5.10 + '@formatjs/intl-localematcher': 0.8.2 + '@parcel/watcher': 2.5.6 + '@swc/core': 1.15.21 + icu-minify: 4.8.3 negotiator: 1.0.0 - next: 15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next-intl-swc-plugin-extractor: 4.8.3 + po-parser: 2.1.1 react: 19.2.4 - use-intl: 3.26.5(react@19.2.4) + use-intl: 4.8.3(react@19.2.4) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@swc/helpers' next-mdx-remote@5.0.0(@types/react@19.2.14)(acorn@8.16.0)(react@19.2.4): dependencies: @@ -20485,27 +21742,28 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@next/env': 15.5.14 + '@next/env': 16.2.1 '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.12 caniuse-lite: 1.0.30001780 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.14 - '@next/swc-darwin-x64': 15.5.14 - '@next/swc-linux-arm64-gnu': 15.5.14 - '@next/swc-linux-arm64-musl': 15.5.14 - '@next/swc-linux-x64-gnu': 15.5.14 - '@next/swc-linux-x64-musl': 15.5.14 - '@next/swc-win32-arm64-msvc': 15.5.14 - '@next/swc-win32-x64-msvc': 15.5.14 + '@next/swc-darwin-arm64': 16.2.1 + '@next/swc-darwin-x64': 16.2.1 + '@next/swc-linux-arm64-gnu': 16.2.1 + '@next/swc-linux-arm64-musl': 16.2.1 + '@next/swc-linux-x64-gnu': 16.2.1 + '@next/swc-linux-x64-musl': 16.2.1 + '@next/swc-win32-arm64-msvc': 16.2.1 + '@next/swc-win32-x64-msvc': 16.2.1 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.53.1 - sharp: 0.34.3 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -20519,6 +21777,8 @@ snapshots: node-addon-api@2.0.2: {} + node-addon-api@7.1.1: {} + node-domexception@1.0.0: {} node-fetch-native@1.6.6: {} @@ -20537,7 +21797,7 @@ snapshots: node-mock-http@1.0.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.99.9(esbuild@0.25.12)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -20564,10 +21824,12 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) node-releases@2.0.19: {} + node-releases@2.0.37: {} + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -20657,6 +21919,13 @@ snapshots: dependencies: mimic-function: 5.0.1 + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -20860,6 +22129,8 @@ snapshots: picomatch@4.0.2: {} + picomatch@4.0.4: {} + pidtree@0.6.0: {} pify@2.3.0: {} @@ -20921,11 +22192,7 @@ snapshots: pnglib@0.0.1: {} - pnp-webpack-plugin@1.7.0(typescript@5.8.3): - dependencies: - ts-pnp: 1.2.0(typescript@5.8.3) - transitivePeerDependencies: - - typescript + po-parser@2.1.1: {} polished@4.3.1: dependencies: @@ -20947,22 +22214,22 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.4 - postcss-load-config@4.0.2(postcss@8.5.4)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)): + postcss-load-config@4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.0 optionalDependencies: postcss: 8.5.4 - ts-node: 10.9.2(@types/node@20.17.57)(typescript@5.8.3) + ts-node: 10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3) - postcss-loader@8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(esbuild@0.25.12)): + postcss-loader@8.1.1(postcss@8.5.4)(typescript@5.8.3)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: cosmiconfig: 9.0.0(typescript@5.8.3) jiti: 1.21.7 postcss: 8.5.4 - semver: 7.7.2 + semver: 7.7.4 optionalDependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) transitivePeerDependencies: - typescript @@ -21040,7 +22307,7 @@ snapshots: pretty-error@4.0.0: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 renderkid: 3.0.0 pretty-format@27.5.1: @@ -21049,8 +22316,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - prism-react-renderer@1.1.0(react@19.2.4): + prism-react-renderer@2.4.1(react@19.2.4): dependencies: + '@types/prismjs': 1.26.6 + clsx: 2.1.1 react: 19.2.4 prismjs@1.30.0: {} @@ -21097,7 +22366,7 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.7 @@ -21160,29 +22429,24 @@ snapshots: range-parser@1.2.1: {} - raw-loader@4.0.2(webpack@5.99.9(esbuild@0.25.12)): + raw-loader@4.0.2(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) react-chartjs-2@5.3.0(chart.js@4.4.9)(react@19.2.4): dependencies: chart.js: 4.4.9 react: 19.2.4 - react-confetti@6.4.0(react@19.2.4): - dependencies: - react: 19.2.4 - tween-functions: 1.2.0 - react-docgen-typescript@2.2.2(typescript@5.8.3): dependencies: typescript: 5.8.3 react-docgen@7.1.1: dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/traverse': 7.27.4 '@babel/types': 7.27.3 '@types/babel__core': 7.20.5 @@ -21195,6 +22459,21 @@ snapshots: transitivePeerDependencies: - supports-color + react-docgen@8.0.3: + dependencies: + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.7 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.10 + strip-indent: 4.0.0 + transitivePeerDependencies: + - supports-color + react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 @@ -21357,7 +22636,7 @@ snapshots: dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 - lodash: 4.17.23 + lodash: 4.18.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-is: 18.3.1 @@ -21416,6 +22695,10 @@ snapshots: dependencies: regenerate: 1.4.2 + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + regenerate@1.4.2: {} regex-parser@2.3.1: {} @@ -21438,12 +22721,25 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + regjsgen@0.8.0: {} regjsparser@0.12.0: dependencies: jsesc: 3.0.2 + regjsparser@0.13.0: + dependencies: + jsesc: 3.1.0 + rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.7 @@ -21475,7 +22771,7 @@ snapshots: remark-heading-id@1.0.1: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 unist-util-visit: 1.4.1 remark-mdx@3.1.0: @@ -21513,7 +22809,7 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.23 + lodash: 4.18.1 strip-ansi: 6.0.1 require-directory@2.1.1: {} @@ -21537,8 +22833,6 @@ snapshots: require-main-filename@2.0.0: {} - requireindex@1.2.0: {} - resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -21557,6 +22851,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 @@ -21578,11 +22878,6 @@ snapshots: dependencies: glob: 7.2.3 - ripemd160@2.0.2: - dependencies: - hash-base: 3.0.5 - inherits: 2.0.4 - ripemd160@2.0.3: dependencies: hash-base: 3.1.2 @@ -21614,6 +22909,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 + run-applescript@7.1.0: {} + run-exclusive@2.2.19: dependencies: minimal-polyfills: 2.2.3 @@ -21649,11 +22946,11 @@ snapshots: safe-stable-stringify@2.5.0: {} - sass-loader@14.2.1(webpack@5.99.9(esbuild@0.25.12)): + sass-loader@16.0.7(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: neo-async: 2.6.2 optionalDependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) sax@1.4.1: {} @@ -21727,33 +23024,6 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.2 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - sharp@0.34.3: dependencies: color: 4.2.3 @@ -21783,6 +23053,38 @@ snapshots: '@img/sharp-win32-ia32': 0.34.3 '@img/sharp-win32-x64': 0.34.3 + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -21940,26 +23242,49 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook-i18n@3.1.1: {} + storybook-i18n@10.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)): + dependencies: + '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - react + - react-dom - storybook-next-intl@1.2.6(next-intl@3.26.5(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)): + storybook-next-intl@10.1.1(next-intl@4.8.3(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)): dependencies: - next-intl: 3.26.5(next@15.5.14(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) - storybook-i18n: 3.1.1 + next-intl: 4.8.3(next@16.2.1(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.53.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)(typescript@5.8.3) + storybook: 10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10) + storybook-i18n: 10.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - react + - react-dom - storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): + storybook@10.3.3(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.5.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@5.0.10): dependencies: - '@storybook/core': 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + esbuild: 0.25.12 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.4 + use-sync-external-store: 1.5.0(react@19.2.4) + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: prettier: 3.5.3 transitivePeerDependencies: + - '@testing-library/dom' - bufferutil - - supports-color + - react + - react-dom - utf-8-validate - storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): + storybook@8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10): dependencies: - '@storybook/core': 8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(storybook@8.6.17(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@storybook/core': 8.5.8(bufferutil@4.0.9)(prettier@3.5.3)(utf-8-validate@5.0.10) optionalDependencies: prettier: 3.5.3 transitivePeerDependencies: @@ -22102,9 +23427,13 @@ snapshots: strnum@2.1.1: {} - style-loader@3.3.4(webpack@5.99.9(esbuild@0.25.12)): + style-loader@3.3.4(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) + + style-loader@4.0.0(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): + dependencies: + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) style-to-js@1.1.16: dependencies: @@ -22130,12 +23459,12 @@ snapshots: '@babel/core': 7.27.4 babel-plugin-macros: 3.1.0 - styled-jsx@5.1.7(@babel/core@7.27.4)(babel-plugin-macros@3.1.0)(react@19.2.4): + styled-jsx@5.1.7(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.4): dependencies: client-only: 0.0.1 react: 19.2.4 optionalDependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 babel-plugin-macros: 3.1.0 stylis@4.2.0: {} @@ -22182,16 +23511,16 @@ snapshots: tailwind-merge@2.6.0: {} - tailwind-variants@0.2.1(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3))): + tailwind-variants@0.2.1(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3))): dependencies: tailwind-merge: 2.6.0 - tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)) - tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3))): dependencies: - tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)) - tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)): + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22210,7 +23539,7 @@ snapshots: postcss: 8.5.4 postcss-import: 15.1.0(postcss@8.5.4) postcss-js: 4.0.1(postcss@8.5.4) - postcss-load-config: 4.0.2(postcss@8.5.4)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) + postcss-load-config: 4.0.2(postcss@8.5.4)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3)) postcss-nested: 6.2.0(postcss@8.5.4) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -22234,21 +23563,22 @@ snapshots: dependencies: bintrees: 1.0.2 - terser-webpack-plugin@5.3.14(esbuild@0.25.12)(webpack@5.99.9(esbuild@0.25.12)): + terser-webpack-plugin@5.3.14(@swc/core@1.15.21)(esbuild@0.25.12)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.40.0 - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) optionalDependencies: + '@swc/core': 1.15.21 esbuild: 0.25.12 terser@5.40.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -22281,9 +23611,14 @@ snapshots: fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 - tinyrainbow@1.2.0: {} + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.4: {} tmp-promise@3.0.3: dependencies: @@ -22320,11 +23655,15 @@ snapshots: dependencies: typescript: 5.8.3 + ts-api-utils@2.5.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.15.21)(@types/node@20.17.57)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -22341,10 +23680,8 @@ snapshots: typescript: 5.8.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - - ts-pnp@1.2.0(typescript@5.8.3): optionalDependencies: - typescript: 5.8.3 + '@swc/core': 1.15.21 tsafe@1.8.12: {} @@ -22371,15 +23708,8 @@ snapshots: tslib@2.8.1: {} - tsutils@3.21.0(typescript@5.8.3): - dependencies: - tslib: 1.14.1 - typescript: 5.8.3 - tty-browserify@0.0.1: {} - tween-functions@1.2.0: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -22462,6 +23792,8 @@ snapshots: unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} + unicode-property-aliases-ecmascript@2.1.0: {} unified@10.1.2: @@ -22547,6 +23879,13 @@ snapshots: acorn: 8.16.0 webpack-virtual-modules: 0.6.2 + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.16.0 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + unrs-resolver@1.7.9: dependencies: napi-postinstall: 0.2.4 @@ -22589,6 +23928,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -22607,10 +23952,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - use-intl@3.26.5(react@19.2.4): + use-intl@4.8.3(react@19.2.4): dependencies: - '@formatjs/fast-memoize': 2.2.7 - intl-messageformat: 10.7.16 + '@formatjs/fast-memoize': 3.1.1 + '@schummar/icu-type-parser': 1.21.5 + icu-minify: 4.8.3 + intl-messageformat: 11.2.0 react: 19.2.4 use-isomorphic-layout-effect@1.2.1(@types/react@19.2.14)(react@19.2.4): @@ -22853,7 +24200,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.99.9(esbuild@0.25.12)): + webpack-dev-middleware@6.1.3(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -22861,7 +24208,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.2 optionalDependencies: - webpack: 5.99.9(esbuild@0.25.12) + webpack: 5.99.9(@swc/core@1.15.21)(esbuild@0.25.12) webpack-hot-middleware@2.26.1: dependencies: @@ -22873,15 +24220,15 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.99.9(esbuild@0.25.12): + webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.1 + acorn: 8.16.0 browserslist: 4.25.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 @@ -22896,7 +24243,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(esbuild@0.25.12)(webpack@5.99.9(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.21)(esbuild@0.25.12)(webpack@5.99.9(@swc/core@1.15.21)(esbuild@0.25.12)) watchpack: 2.4.4 webpack-sources: 3.3.2 transitivePeerDependencies: @@ -23019,6 +24366,10 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xml2js@0.6.2: dependencies: sax: 1.4.1 diff --git a/middleware.ts b/proxy.ts similarity index 97% rename from middleware.ts rename to proxy.ts index a2ca9b31c07..be00c346ac6 100644 --- a/middleware.ts +++ b/proxy.ts @@ -66,7 +66,7 @@ function redirectTo(request: NextRequest, pathname: string, status: number) { return NextResponse.redirect(url, status) } -export default function middleware(request: NextRequest) { +export default function proxy(request: NextRequest) { const { pathname } = request.nextUrl const lowerPath = pathname.toLowerCase() diff --git a/public/content/translations/ar/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/ar/developers/docs/nodes-and-clients/node-architecture/index.md index 7aa18f389b1..bffad7381d1 100644 --- a/public/content/translations/ar/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/ar/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: ar تتكون عقدة إيثريوم من عميلين: [عميل التنفيذ](/developers/docs/nodes-and-clients/#execution-clients) و[عميل الإجماع](/developers/docs/nodes-and-clients/#consensus-clients). لكي تقترح العقدة كتلة جديدة، يجب عليها أيضًا تشغيل [عميل مدقق](#validators). -عندما كان إيثريوم يستخدم [إثبات العمل](/developers/docs/consensus-mechanisms/pow/)، كان عميل التنفيذ كافيًا لتشغيل عقدة إيثريوم كاملة. ولكن، منذ تطبيق [إثبات الحصة](/developers/docs/consensus-mechanisms/pow/)، يجب استخدام عميل التنفيذ إلى جانب برنامج آخر يسمى [عميل الإجماع](/developers/docs/nodes-and-clients/#consensus-clients). +عندما كان إيثريوم يستخدم [إثبات العمل](/developers/docs/consensus-mechanisms/pow/)، كان عميل التنفيذ كافيًا لتشغيل عقدة إيثريوم كاملة. ولكن، منذ تطبيق [إثبات الحصة](/developers/docs/consensus-mechanisms/pos/)، يجب استخدام عميل التنفيذ إلى جانب برنامج آخر يسمى [عميل الإجماع](/developers/docs/nodes-and-clients/#consensus-clients). يوضح الرسم البياني أدناه العلاقة بين عميلي إيثريوم. يتصل العميلان بشبكات نظير إلى نظير (P2P) الخاصة بهما. هناك حاجة إلى شبكات P2P منفصلة حيث يقوم عملاء التنفيذ بالتحدث عن المعاملات عبر شبكة P2P الخاصة بهم، مما يمكنهم من إدارة مجموعة المعاملات المحلية الخاصة بهم، في حين يقوم عملاء الإجماع بحظر القيل والقال عبر شبكة P2P الخاصة بهم، مما يتيح الإجماع ونمو السلسلة. diff --git a/public/content/translations/ar/restaking/index.md b/public/content/translations/ar/restaking/index.md index 9c032862172..49e8c1d2ca5 100644 --- a/public/content/translations/ar/restaking/index.md +++ b/public/content/translations/ar/restaking/index.md @@ -144,7 +144,7 @@ buttons:

المؤسس المشارك لإيثريوم يكتب…

- حذر فيتاليك، المؤسس المشارك لإيثريوم، من المخاطر المحتملة لإعادة التخزين في تدوينة عام 2021 بعنوان لا تفرط في تحميل الإجماع. + حذر فيتاليك، المؤسس المشارك لإيثريوم، من المخاطر المحتملة لإعادة التخزين في تدوينة عام 2021 بعنوان لا تفرط في تحميل الإجماع.

diff --git a/public/content/translations/bn/developers/docs/apis/json-rpc/index.md b/public/content/translations/bn/developers/docs/apis/json-rpc/index.md index ff2d16e2a2e..a7ec4c440b5 100644 --- a/public/content/translations/bn/developers/docs/apis/json-rpc/index.md +++ b/public/content/translations/bn/developers/docs/apis/json-rpc/index.md @@ -1,66 +1,66 @@ --- title: JSON-RPC API -description: "Ethereum ক্লায়েন্টের জন্য একটি স্টেটলেস, লাইট-ওয়েট রিমোট প্রসিডিউর কল (RPC) প্রোটোকল।" +description: "ইথিরিয়াম ক্লায়েন্টদের জন্য একটি স্টেটলেস, লাইট-ওয়েট রিমোট প্রসিডিউর কল (RPC) প্রটোকল।" lang: bn --- -Ethereum ব্লকচেইনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সফ্টওয়্যার অ্যাপ্লিকেশনের জন্য - হয় ব্লকচেইন ডেটা পড়ে বা নেটওয়ার্কে লেনদেন পাঠানোর মাধ্যমে - এটি অবশ্যই একটি Ethereum নোডের সাথে সংযুক্ত থাকতে হবে। +একটি সফটওয়্যার অ্যাপ্লিকেশনকে [Ethereum](/) ব্লকচেইনের সাথে ইন্টারঅ্যাক্ট করার জন্য - তা ব্লকচেইন ডেটা পড়া হোক বা নেটওয়ার্কে লেনদেন পাঠানো হোক - এটিকে অবশ্যই একটি ইথিরিয়াম নোডের সাথে সংযুক্ত হতে হবে। -এই উদ্দেশ্যে, প্রতিটি [Ethereum ক্লায়েন্ট](/developers/docs/nodes-and-clients/#execution-clients) একটি [JSON-RPC স্পেসিফিকেশন](https://github.com/ethereum/execution-apis) প্রয়োগ করে, তাই পদ্ধতিগুলির একটি ইউনিফর্ম সেট রয়েছে যার উপর অ্যাপ্লিকেশনগুলি নির্দিষ্ট নোড বা ক্লায়েন্ট বাস্তবায়ন নির্বিশেষে নির্ভর করতে পারে। +এই উদ্দেশ্যে, প্রতিটি [Ethereum client](/developers/docs/nodes-and-clients/#execution-clients) একটি [JSON-RPC specification](https://github.com/ethereum/execution-apis) প্রয়োগ করে, যাতে নির্দিষ্ট নোড বা ক্লায়েন্ট ইমপ্লিমেন্টেশন নির্বিশেষে অ্যাপ্লিকেশনগুলি নির্ভর করতে পারে এমন একটি অভিন্ন মেথড সেট থাকে। -[JSON-RPC](https://www.jsonrpc.org/specification) একটি স্টেটলেস, লাইট-ওয়েট রিমোট প্রসিডিউর কল (RPC) প্রোটোকল। এটি বেশ কিছু ডেটা স্ট্রাকচার এবং তাদের প্রক্রিয়াকরণের নিয়মাবলী নির্ধারণ করে। এটি ট্রান্সপোর্ট অ্যাগনস্টিক কারণ এই ধারণাগুলি একই প্রক্রিয়ার মধ্যে, সকেটের উপর, HTTP-র উপর বা বিভিন্ন মেসেজ পাসিং পরিবেশে ব্যবহার করা যেতে পারে। এটি ডেটা ফরম্যাট হিসেবে JSON (RFC 4627) ব্যবহার করে। +[JSON-RPC](https://www.jsonrpc.org/specification) হলো একটি স্টেটলেস, লাইট-ওয়েট রিমোট প্রসিডিউর কল (RPC) প্রটোকল। এটি বেশ কয়েকটি ডেটা স্ট্রাকচার এবং তাদের প্রসেসিংয়ের নিয়মগুলি সংজ্ঞায়িত করে। এটি ট্রান্সপোর্ট অ্যাগনস্টিক, অর্থাৎ এর কনসেপ্টগুলো একই প্রসেসের মধ্যে, সকেটের মাধ্যমে, HTTP-এর মাধ্যমে, বা বিভিন্ন মেসেজ পাসিং এনভায়রনমেন্টে ব্যবহার করা যেতে পারে। এটি ডেটা ফরম্যাট হিসেবে JSON (RFC 4627) ব্যবহার করে। ## ক্লায়েন্ট ইমপ্লিমেন্টেশন {#client-implementations} -JSON-RPC স্পেসিফিকেশন প্রয়োগ করার সময় Ethereum ক্লায়েন্টরা প্রত্যেকে বিভিন্ন প্রোগ্রামিং ভাষা ব্যবহার করতে পারে। নির্দিষ্ট প্রোগ্রামিং ভাষা সম্পর্কিত আরও বিশদ বিবরণের জন্য পৃথক [ক্লায়েন্ট ডকুমেন্টেশন](/developers/docs/nodes-and-clients/#execution-clients) দেখুন। সর্বশেষ API সহায়তা তথ্যের জন্য আমরা প্রতিটি ক্লায়েন্টের ডকুমেন্টেশন পরীক্ষা করার পরামর্শ দিই। +JSON-RPC স্পেসিফিকেশন বাস্তবায়ন করার সময় ইথিরিয়াম ক্লায়েন্টগুলো প্রত্যেকে বিভিন্ন প্রোগ্রামিং ভাষা ব্যবহার করতে পারে। নির্দিষ্ট প্রোগ্রামিং ভাষা সম্পর্কিত আরও বিস্তারিত তথ্যের জন্য স্বতন্ত্র [ক্লায়েন্ট ডকুমেন্টেশন](/developers/docs/nodes-and-clients/#execution-clients) দেখুন। সর্বশেষ API সাপোর্ট তথ্যের জন্য আমরা প্রতিটি ক্লায়েন্টের ডকুমেন্টেশন দেখার পরামর্শ দিই। ## সুবিধাজনক লাইব্রেরি {#convenience-libraries} -যদিও আপনি JSON-RPC API-এর মাধ্যমে সরাসরি Ethereum ক্লায়েন্টদের সাথে ইন্টারঅ্যাক্ট করা বেছে নিতে পারেন, তবে dapp ডেভেলপারদের জন্য প্রায়শই সহজ বিকল্প রয়েছে। JSON-RPC API-এর উপরে র‍্যাপার সরবরাহ করার জন্য অনেক [জাভাস্ক্রিপ্ট](/developers/docs/apis/javascript/#available-libraries) এবং [ব্যাকএন্ড API](/developers/docs/apis/backend/#available-libraries) লাইব্রেরি বিদ্যমান। এই লাইব্রেরিগুলির সাহায্যে, ডেভেলপাররা Ethereum-এর সাথে ইন্টারঅ্যাক্ট করে এমন JSON-RPC অনুরোধগুলি (হুডের নীচে) শুরু করার জন্য তাদের পছন্দের প্রোগ্রামিং ভাষায় স্বজ্ঞাত, এক-লাইনের পদ্ধতি লিখতে পারে। +যদিও আপনি JSON-RPC API-এর মাধ্যমে সরাসরি ইথিরিয়াম ক্লায়েন্টগুলোর সাথে ইন্টারঅ্যাক্ট করা বেছে নিতে পারেন, ডিএ্যাপ ডেভেলপারদের জন্য প্রায়শই আরও সহজ বিকল্প থাকে। JSON-RPC API-এর উপরে র‍্যাপার (wrappers) প্রদান করার জন্য অনেক [JavaScript](/developers/docs/apis/javascript/#available-libraries) এবং [backend API](/developers/docs/apis/backend/#available-libraries) লাইব্রেরি রয়েছে। এই লাইব্রেরিগুলোর সাহায্যে, ডেভেলপাররা তাদের পছন্দের প্রোগ্রামিং ভাষায় সহজে বোধগম্য, এক-লাইনের মেথড লিখতে পারেন যা ইথিরিয়ামের সাথে ইন্টারঅ্যাক্ট করার জন্য (পর্দার আড়ালে) JSON-RPC রিকোয়েস্ট ইনিশিয়ালাইজ করে। -## কনসেন্সাস ক্লায়েন্ট APIs {#consensus-clients} +## কনসেন্সাস ক্লায়েন্ট এপিআই {#consensus-clients} -এই পৃষ্ঠাটি মূলত Ethereum এক্সিকিউশন ক্লায়েন্টদের দ্বারা ব্যবহৃত JSON-RPC API নিয়ে কাজ করে। যাইহোক, কনসেন্সাস ক্লায়েন্টদের একটি RPC APIও রয়েছে যা ব্যবহারকারীদের নোড সম্পর্কে তথ্য জিজ্ঞাসা করতে, বিকন ব্লক, বিকন স্টেট এবং অন্যান্য কনসেন্সাস-সম্পর্কিত তথ্য সরাসরি একটি নোড থেকে অনুরোধ করতে দেয়। এই APIটি [বিকন API ওয়েবপেজে](https://ethereum.github.io/beacon-APIs/#/) নথিভুক্ত করা আছে। +এই পৃষ্ঠাটি মূলত ইথিরিয়াম এক্সিকিউশন ক্লায়েন্ট দ্বারা ব্যবহৃত JSON-RPC এপিআই নিয়ে আলোচনা করে। তবে, কনসেন্সাস ক্লায়েন্টগুলোরও একটি RPC এপিআই রয়েছে যা ব্যবহারকারীদের সরাসরি একটি নোড থেকে নোড সম্পর্কে তথ্য অনুসন্ধান করতে, বিকন ব্লক, বিকন স্টেট এবং অন্যান্য কনসেন্সাস-সম্পর্কিত তথ্যের জন্য অনুরোধ করতে দেয়। এই এপিআইটি [Beacon API ওয়েবপেজে](https://ethereum.github.io/beacon-APIs/#/) নথিভুক্ত করা আছে। -একটি অভ্যন্তরীণ API একটি নোডের মধ্যে ইন্টার-ক্লায়েন্ট যোগাযোগের জন্যও ব্যবহৃত হয় - অর্থাৎ, এটি কনসেন্সাস ক্লায়েন্ট এবং এক্সিকিউশন ক্লায়েন্টকে ডেটা সোয়াপ করতে সক্ষম করে। এটিকে 'ইঞ্জিন API' বলা হয় এবং স্পেসগুলি [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)-এ উপলব্ধ। +একটি নোডের মধ্যে আন্তঃ-ক্লায়েন্ট যোগাযোগের জন্যও একটি অভ্যন্তরীণ এপিআই ব্যবহৃত হয় - অর্থাৎ, এটি কনসেন্সাস ক্লায়েন্ট এবং এক্সিকিউশন ক্লায়েন্টকে ডাটা সোয়াপ করতে সক্ষম করে। একে 'Engine API' বলা হয় এবং এর স্পেসিফিকেশনগুলো [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)-এ পাওয়া যায়। ## এক্সিকিউশন ক্লায়েন্ট স্পেক {#spec} -[GitHub-এ সম্পূর্ণ JSON-RPC API স্পেক পড়ুন](https://github.com/ethereum/execution-apis)। এই API টি [এক্সিকিউশন API ওয়েবপেজ](https://ethereum.github.io/execution-apis/)-এ নথিভুক্ত এবং সমস্ত উপলব্ধ পদ্ধতি চেষ্টা করার জন্য একটি ইন্সপেক্টর অন্তর্ভুক্ত করে। +[GitHub-এ সম্পূর্ণ JSON-RPC API স্পেক পড়ুন](https://github.com/ethereum/execution-apis)। এই API-টি [Execution API ওয়েবপেজে](https://ethereum.github.io/execution-apis/) ডকুমেন্ট করা হয়েছে এবং এতে উপলব্ধ সমস্ত মেথডগুলো পরীক্ষা করে দেখার জন্য একটি ইন্সপেক্টর অন্তর্ভুক্ত রয়েছে। -## কনভেনশন {#conventions} +## নিয়মাবলী {#conventions} ### হেক্স ভ্যালু এনকোডিং {#hex-encoding} -দুটি মূল ডেটা টাইপ JSON-এর মাধ্যমে পাস করা হয়: আনফরম্যাটেড বাইট অ্যারে এবং পরিমাণ। উভয়ই একটি হেক্স এনকোডিংয়ের সাথে পাস করা হয় তবে ফর্ম্যাটিংয়ের জন্য বিভিন্ন প্রয়োজনীয়তা সহ। +JSON-এর মাধ্যমে দুটি মূল ডাটা টাইপ পাস করা হয়: আনফরম্যাটেড বাইট অ্যারে এবং পরিমাণ (quantities)। উভয়ই হেক্স এনকোডিংয়ের মাধ্যমে পাস করা হয় তবে ফরম্যাটিংয়ের জন্য এদের ভিন্ন ভিন্ন প্রয়োজনীয়তা রয়েছে। -#### পরিমাণ {#quantities-encoding} +#### পরিমাণ (Quantities) {#quantities-encoding} -পরিমাণ (পূর্ণসংখ্যা, সংখ্যা) এনকোড করার সময়: হেক্স হিসাবে এনকোড করুন, "0x" এর সাথে প্রিফিক্স করুন, সবচেয়ে কমপ্যাক্ট উপস্থাপনা (সামান্য ব্যতিক্রম: শূন্যকে "0x0" হিসাবে উপস্থাপন করা উচিত)। +পরিমাণ (পূর্ণসংখ্যা, সংখ্যা) এনকোড করার সময়: হেক্স হিসেবে এনকোড করুন, শুরুতে "0x" যুক্ত করুন, যা সবচেয়ে কমপ্যাক্ট রূপ (সামান্য ব্যতিক্রম: শূন্যকে "0x0" হিসেবে উপস্থাপন করা উচিত)। -এখানে কয়েকটি উদাহরণ দেওয়া হল: +এখানে কিছু উদাহরণ দেওয়া হলো: -- 0x41 (দশমিকে 65) -- 0x400 (দশমিকে 1024) -- ভুল: 0x (সর্বদা কমপক্ষে একটি সংখ্যা থাকা উচিত - শূন্য হল "0x0") -- ভুল: 0x0400 (লিডিং জিরোর অনুমতি নেই) -- ভুল: ff (0x প্রিফিক্সড হতে হবে) +- 0x41 (ডেসিমালে 65) +- 0x400 (ডেসিমালে 1024) +- ভুল: 0x (সর্বদা অন্তত একটি ডিজিট থাকতে হবে - শূন্য হলো "0x0") +- ভুল: 0x0400 (শুরুতে শূন্য থাকা যাবে না) +- ভুল: ff (শুরুতে 0x থাকতে হবে) -### আনফরম্যাটেড ডেটা {#unformatted-data-encoding} +### আনফরম্যাটেড ডাটা {#unformatted-data-encoding} -আনফরম্যাটেড ডেটা (বাইট অ্যারে, অ্যাকাউন্ট অ্যাড্রেস, হ্যাস, বাইটকোড অ্যারে) এনকোড করার সময়: হেক্স হিসাবে এনকোড করুন, "0x" দিয়ে প্রিফিক্স করুন, প্রতি বাইটে দুটি হেক্স ডিজিট। +আনফরম্যাটেড ডাটা (বাইট অ্যারে, একাউন্ট এডড্রেস, হ্যাস, বাইটকোড অ্যারে) এনকোড করার সময়: হেক্স হিসেবে এনকোড করুন, শুরুতে "0x" যুক্ত করুন, প্রতি বাইটের জন্য দুটি হেক্স ডিজিট ব্যবহার করুন। -এখানে কয়েকটি উদাহরণ দেওয়া হল: +এখানে কিছু উদাহরণ দেওয়া হলো: - 0x41 (সাইজ 1, "A") - 0x004200 (সাইজ 3, "0B0") - 0x (সাইজ 0, "") -- ভুল: 0xf0f0f (অবশ্যই জোড় সংখ্যক অঙ্ক হতে হবে) -- ভুল: 004200 (0x প্রিফিক্স করা আবশ্যক) +- ভুল: 0xf0f0f (ডিজিটের সংখ্যা জোড় হতে হবে) +- ভুল: 004200 (শুরুতে 0x থাকতে হবে) ### ব্লক প্যারামিটার {#block-parameter} -নিম্নলিখিত পদ্ধতিগুলিতে একটি ব্লক প্যারামিটার রয়েছে: +নিচের মেথডগুলোতে একটি ব্লক প্যারামিটার রয়েছে: - [eth_getBalance](#eth_getbalance) - [eth_getCode](#eth_getcode) @@ -68,26 +68,26 @@ JSON-RPC স্পেসিফিকেশন প্রয়োগ করার - [eth_getStorageAt](#eth_getstorageat) - [eth_call](#eth_call) -Ethereum-এর অবস্থা জিজ্ঞাসা করার জন্য অনুরোধ করা হলে, প্রদত্ত ব্লক প্যারামিটারটি ব্লকের উচ্চতা নির্ধারণ করে। +যখন ইথিরিয়ামের স্টেট কোয়েরি করার জন্য রিকোয়েস্ট করা হয়, তখন প্রদত্ত ব্লক প্যারামিটারটি ব্লকের উচ্চতা (height) নির্ধারণ করে। -ব্লক প্যারামিটারের জন্য নিম্নলিখিত বিকল্পগুলি সম্ভব: +ব্লক প্যারামিটারের জন্য নিচের অপশনগুলো ব্যবহার করা যেতে পারে: -- `HEX স্ট্রিং` - একটি পূর্ণসংখ্যার ব্লক নম্বর -- সবচেয়ে প্রথম/জেনেসিস ব্লকের জন্য `স্ট্রিং "আর্লিয়েস্ট"` -- `স্ট্রিং "লেটেস্ট"` - সর্বশেষ প্রস্তাবিত ব্লকের জন্য -- `স্ট্রিং "সেফ"` - সর্বশেষ নিরাপদ হেড ব্লকের জন্য -- `স্ট্রিং "ফাইনালইজড"` - সর্বশেষ চূড়ান্ত ব্লকের জন্য -- `স্ট্রিং "পেন্ডিং"` - পেন্ডিং স্টেট/লেনদেনের জন্য +- `HEX String` - একটি পূর্ণসংখ্যা ব্লক নম্বর +- `String "earliest"` - সবচেয়ে প্রথম/জেনেসিস ব্লকের জন্য +- `String "latest"` - সর্বশেষ প্রস্তাবিত ব্লকের জন্য +- `String "safe"` - সর্বশেষ নিরাপদ হেড ব্লকের জন্য +- `String "finalized"` - সর্বশেষ চূড়ান্ত হওয়া ব্লকের জন্য +- `String "pending"` - পেন্ডিং স্টেট/লেনদেন এর জন্য ## উদাহরণ -এই পৃষ্ঠায় আমরা কমান্ড লাইন টুল, [curl](https://curl.se) ব্যবহার করে পৃথক JSON_RPC API এন্ডপয়েন্টগুলি কীভাবে ব্যবহার করতে হয় তার উদাহরণ প্রদান করি। এই পৃথক এন্ডপয়েন্টের উদাহরণগুলি নীচে [কার্ল উদাহরণ](#curl-examples) বিভাগে পাওয়া যাবে। পৃষ্ঠার আরও নীচে, আমরা একটি Geth নোড, JSON_RPC API এবং কার্ল ব্যবহার করে একটি স্মার্ট কন্ট্র্যাক্ট কম্পাইল এবং ডিপ্লয় করার জন্য একটি [এন্ড-টু-এন্ড উদাহরণ](#usage-example) প্রদান করি। +এই পৃষ্ঠায় আমরা কমান্ড লাইন টুল, [curl](https://curl.se) ব্যবহার করে স্বতন্ত্র JSON_RPC API এন্ডপয়েন্টগুলো কীভাবে ব্যবহার করতে হয় তার উদাহরণ প্রদান করি। এই স্বতন্ত্র এন্ডপয়েন্টের উদাহরণগুলো নিচে [Curl উদাহরণ](#curl-examples) বিভাগে পাওয়া যাবে। পৃষ্ঠার আরও নিচের দিকে, একটি Geth নোড, JSON_RPC API এবং curl ব্যবহার করে একটি স্মার্ট কন্ট্রাক্ট কম্পাইল এবং ডিপ্লয় করার জন্য আমরা একটি [এন্ড-টু-এন্ড উদাহরণ](#usage-example)-ও প্রদান করি। -## কার্ল উদাহরণ {#curl-examples} +## Curl এর উদাহরণ {#curl-examples} -একটি Ethereum নোডে [কার্ল](https://curl.se) অনুরোধ করে JSON_RPC API ব্যবহার করার উদাহরণ নিচে দেওয়া হল। প্রতিটি উদাহরণে নির্দিষ্ট এন্ডপয়েন্টের বর্ণনা, তার প্যারামিটার, রিটার্ন টাইপ এবং এটি কীভাবে ব্যবহার করা উচিত তার একটি কার্যকরী উদাহরণ অন্তর্ভুক্ত রয়েছে। +একটি ইথিরিয়াম নোড-এ [curl](https://curl.se) রিকোয়েস্ট করার মাধ্যমে JSON_RPC API ব্যবহারের উদাহরণ নিচে দেওয়া হলো। প্রতিটি উদাহরণে নির্দিষ্ট এন্ডপয়েন্টের বিবরণ, এর প্যারামিটার, রিটার্ন টাইপ এবং এটি কীভাবে ব্যবহার করা উচিত তার একটি কার্যকরী উদাহরণ অন্তর্ভুক্ত রয়েছে। -কার্ল অনুরোধগুলি কন্টেন্টের প্রকার সম্পর্কিত একটি ত্রুটি মেসেজ ফেরত দিতে পারে। এর কারণ হল `--data` বিকল্পটি কন্টেন্টের প্রকার `application/x-www-form-urlencoded`-এ সেট করে। যদি আপনার নোড এই বিষয়ে অভিযোগ করে, তাহলে কলের শুরুতে `-H "Content-Type: application/json"` স্থাপন করে ম্যানুয়ালি হেডার সেট করুন। উদাহরণগুলিতে URL/IP এবং পোর্টের সংমিশ্রণও অন্তর্ভুক্ত নয় যা কার্ল (curl)-কে দেওয়া শেষ আর্গুমেন্ট হতে হবে (যেমন, `127.0.0.1:8545`)। এই অতিরিক্ত ডেটা সহ একটি সম্পূর্ণ কার্ল অনুরোধ নিম্নলিখিত ফর্মটি নেয়: +curl রিকোয়েস্টগুলো কন্টেন্ট টাইপ সম্পর্কিত একটি এরর মেসেজ রিটার্ন করতে পারে। এর কারণ হলো `--data` অপশনটি কন্টেন্ট টাইপকে `application/x-www-form-urlencoded` হিসেবে সেট করে। যদি আপনার নোড এই বিষয়ে অভিযোগ করে, তবে কলের শুরুতে `-H "Content-Type: application/json"` বসিয়ে ম্যানুয়ালি হেডার সেট করুন। উদাহরণগুলোতে URL/IP এবং পোর্ট এর সংমিশ্রণ অন্তর্ভুক্ত করা হয়নি, যা curl-এ দেওয়া শেষ আর্গুমেন্ট হতে হবে (যেমন, `127.0.0.1:8545`)। এই অতিরিক্ত ডেটাসহ একটি সম্পূর্ণ curl রিকোয়েস্ট নিচের রূপটি ধারণ করে: ```shell curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 @@ -95,18 +95,18 @@ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","metho ## গসিপ, স্টেট, হিস্ট্রি {#gossip-state-history} -মুষ্টিমেয় কিছু মূল JSON-RPC পদ্ধতির জন্য Ethereum নেটওয়ার্ক থেকে ডেটা প্রয়োজন, এবং সুন্দরভাবে তিনটি প্রধান বিভাগে পড়ে: _গসিপ, স্টেট এবং হিস্ট্রি_। প্রতিটি পদ্ধতিতে যাওয়ার জন্য এই বিভাগগুলির লিঙ্কগুলি ব্যবহার করুন, বা পদ্ধতিগুলির সম্পূর্ণ তালিকা অন্বেষণ করতে বিষয়বস্তুর সারণী ব্যবহার করুন। +কয়েকটি মূল JSON-RPC মেথডের জন্য ইথিরিয়াম নেটওয়ার্ক থেকে ডেটার প্রয়োজন হয় এবং এগুলোকে সুন্দরভাবে তিনটি প্রধান ক্যাটাগরিতে ভাগ করা যায়: _গসিপ, স্টেট এবং হিস্ট্রি_। প্রতিটি মেথডে যেতে এই সেকশনগুলোর লিংক ব্যবহার করুন, অথবা মেথডগুলোর সম্পূর্ণ তালিকা দেখতে সূচিপত্র (table of contents) ব্যবহার করুন। -### গসিপ পদ্ধতি {#gossip-methods} +### গসিপ মেথড {#gossip-methods} -> এই পদ্ধতিগুলি চেইনের হেড ট্র্যাক করে। এইভাবে লেনদেনগুলি নেটওয়ার্কের চারপাশে তাদের পথ তৈরি করে, ব্লকগুলিতে তাদের পথ খুঁজে পায় এবং ক্লায়েন্টরা কীভাবে নতুন ব্লক সম্পর্কে জানতে পারে। +> এই মেথডগুলো চেইনের হেড (head) ট্র্যাক করে। এভাবেই লেনদেন নেটওয়ার্ক এর চারপাশে তাদের পথ তৈরি করে, ব্লকস-এ তাদের জায়গা খুঁজে পায় এবং ক্লায়েন্টরা নতুন ব্লকস সম্পর্কে জানতে পারে। - [eth_blockNumber](#eth_blocknumber) - [eth_sendRawTransaction](#eth_sendrawtransaction) -### স্টেট পদ্ধতি {#state_methods} +### স্টেট মেথড {#state_methods} -> যে পদ্ধতিগুলি সঞ্চিত সমস্ত ডেটার বর্তমান অবস্থা রিপোর্ট করে। "স্টেট" একটি বড় শেয়ার করা RAM-এর মতো, এবং এতে অ্যাকাউন্টের ব্যালেন্স, চুক্তির ডেটা এবং গ্যাস অনুমান অন্তর্ভুক্ত রয়েছে। +> যে মেথডগুলো সংরক্ষিত সমস্ত ডেটার বর্তমান স্টেট রিপোর্ট করে। "স্টেট" হলো একটি বড় শেয়ার করা RAM-এর মতো, এবং এর মধ্যে একাউন্ট ব্যালেন্স, কন্ট্রাক্ট ডেটা এবং গ্যাস এস্টিমেশন অন্তর্ভুক্ত থাকে। - [eth_getBalance](#eth_getbalance) - [eth_getStorageAt](#eth_getstorageat) @@ -115,9 +115,9 @@ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","metho - [eth_call](#eth_call) - [eth_estimateGas](#eth_estimategas) -### হিস্ট্রি পদ্ধতি {#history_methods} +### হিস্ট্রি মেথড {#history_methods} -> জেনেসিসে ফিরে প্রতিটি ব্লকের ঐতিহাসিক রেকর্ড নিয়ে আসে। এটি একটি বড় অ্যাপেন্ড-অনলি ফাইলের মতো, এবং এতে সমস্ত ব্লক হেডার, ব্লক বডি, আঙ্কেল ব্লক এবং লেনদেনের রসিদ অন্তর্ভুক্ত রয়েছে। +> জেনেসিস (genesis) পর্যন্ত প্রতিটি ব্লক-এর ঐতিহাসিক রেকর্ড নিয়ে আসে। এটি একটি বড় অ্যাপেন্ড-অনলি (append-only) ফাইলের মতো, এবং এর মধ্যে সমস্ত ব্লক হেডার, ব্লক বডি, আঙ্কেল ব্লকস (uncle blocks) এবং লেনদেন রিসিপ্ট অন্তর্ভুক্ত থাকে। - [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) - [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) @@ -134,28 +134,28 @@ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","metho ## JSON-RPC API প্লেগ্রাউন্ড -API পদ্ধতিগুলি আবিষ্কার করতে এবং চেষ্টা করার জন্য আপনি [প্লেগ্রাউন্ড টুল](https://ethereum-json-rpc.com) ব্যবহার করতে পারেন। এটি আপনাকে আরও দেখায় যে কোন পদ্ধতি এবং নেটওয়ার্কগুলি বিভিন্ন নোড প্রদানকারী দ্বারা সমর্থিত। +API মেথডগুলো আবিষ্কার করতে এবং পরীক্ষা করে দেখতে আপনি [প্লেগ্রাউন্ড টুল](https://ethereum-json-rpc.com) ব্যবহার করতে পারেন। এটি আপনাকে আরও দেখায় যে বিভিন্ন নোড প্রোভাইডার দ্বারা কোন মেথড এবং নেটওয়ার্কগুলো সমর্থিত। -## JSON-RPC API পদ্ধতি {#json-rpc-methods} +## JSON-RPC এপিআই মেথড {#json-rpc-methods} ### web3_clientVersion {#web3_clientversion} -বর্তমান ক্লায়েন্ট সংস্করণটি প্রদান করে। +বর্তমান ক্লায়েন্ট ভার্সন রিটার্ন করে। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`স্ট্রিং` - বর্তমান ক্লায়েন্ট সংস্করণ +`String` - বর্তমান ক্লায়েন্ট ভার্সন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' -// Result +// ফলাফল { "id":67, "jsonrpc":"2.0", @@ -165,26 +165,26 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[], ### web3_sha3 {#web3_sha3} -প্রদত্ত ডেটার Keccak-256 (স্ট্যান্ডার্ডাইজড SHA3-256 _নয়_) রিটার্ন করে। +প্রদত্ত ডাটার Keccak-256 (স্ট্যান্ডার্ডাইজড SHA3-256 _নয়_) রিটার্ন করে। **প্যারামিটার** -1. `DATA` - একটি SHA3 হ্যাসে রূপান্তর করার জন্য ডেটা +1. `DATA` - SHA3 হ্যাসে রূপান্তর করার জন্য ডাটা ```js params: ["0x68656c6c6f20776f726c64"] ``` -**রিটার্ন** +**রিটার্নস** -`DATA` - প্রদত্ত স্ট্রিংটির SHA3 ফলাফল। +`DATA` - প্রদত্ত স্ট্রিংয়ের SHA3 ফলাফল। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' -// Result +// ফলাফল { "id":64, "jsonrpc": "2.0", @@ -194,28 +194,28 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c ### net_version {#net_version} -বর্তমান নেটওয়ার্ক আইডি রিটার্ন করে। +বর্তমান নেটওয়ার্ক আইডি রিটার্ন করে। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`স্ট্রিং` - বর্তমান নেটওয়ার্ক আইডি। +`String` - বর্তমান নেটওয়ার্ক আইডি। -বর্তমান নেটওয়ার্ক আইডি-র সম্পূর্ণ তালিকা [chainlist.org](https://chainlist.org)-এ উপলব্ধ। কিছু সাধারণ হল: +বর্তমান নেটওয়ার্ক আইডিগুলোর সম্পূর্ণ তালিকা [chainlist.org](https://chainlist.org)-এ পাওয়া যাবে। কিছু সাধারণ আইডি হলো: -- `1`: Ethereum মেইননেট +- `1`: ইথিরিয়াম মেইননেট - `11155111`: Sepolia টেস্টনেট - `560048` : Hoodi টেস্টনেট **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' -// Result +// ফলাফল { "id":67, "jsonrpc": "2.0", @@ -225,22 +225,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67 ### net_listening {#net_listening} -ক্লায়েন্ট যদি সক্রিয়ভাবে নেটওয়ার্ক সংযোগের জন্য শুনছে তাহলে `সত্য` রিটার্ন করে। +ক্লায়েন্ট যদি সক্রিয়ভাবে নেটওয়ার্ক কানেকশনের জন্য লিসেন করে, তবে `true` রিটার্ন করে। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`বুলিয়ান` - শোনার সময় `সত্য`, অন্যথায় `মিথ্যা`। +`Boolean` - লিসেন করার সময় `true`, অন্যথায় `false`। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' -// Result +// ফলাফল { "id":67, "jsonrpc":"2.0", @@ -250,22 +250,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id": ### net_peerCount {#net_peercount} -বর্তমানে ক্লায়েন্টের সাথে সংযুক্ত পিয়ারদের সংখ্যা রিটার্ন করে। +বর্তমানে ক্লায়েন্টের সাথে সংযুক্ত পিয়ারের সংখ্যা রিটার্ন করে। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - সংযুক্ত পিয়ারদের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - সংযুক্ত পিয়ারের সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' -// Result +// ফলাফল { "id":74, "jsonrpc": "2.0", @@ -275,22 +275,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id": ### eth_protocolVersion {#eth_protocolversion} -বর্তমান Ethereum প্রোটোকল সংস্করণ রিটার্ন করে। মনে রাখবেন এই পদ্ধতিটি [Geth-এ উপলব্ধ নয়](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)৷ +বর্তমান ইথিরিয়াম প্রটোকল ভার্সন রিটার্ন করে। মনে রাখবেন যে এই মেথডটি [Geth-এ উপলব্ধ নয়](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`স্ট্রিং` - বর্তমান Ethereum প্রোটোকল সংস্করণ +`String` - বর্তমান ইথিরিয়াম প্রটোকল ভার্সন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' -// Result +// ফলাফল { "id":67, "jsonrpc": "2.0", @@ -300,7 +300,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[] ### eth_syncing {#eth_syncing} -সিঙ্ক স্ট্যাটাস সম্পর্কে ডেটা সহ একটি অবজেক্ট বা `মিথ্যা` রিটার্ন করে। +সিঙ্ক স্ট্যাটাস সম্পর্কিত ডাটা সহ একটি অবজেক্ট অথবা `false` রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -308,19 +308,19 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[] **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -সঠিক রিটার্ন ডেটা ক্লায়েন্ট প্রয়োগের মধ্যে ভিন্ন হয়। নোড সিঙ্ক না করার সময় সমস্ত ক্লায়েন্ট `মিথ্যা` রিটার্ন করে, এবং সমস্ত ক্লায়েন্ট নিম্নলিখিত ক্ষেত্রগুলি রিটার্ন করে। +সঠিক রিটার্ন ডাটা ক্লায়েন্ট ইমপ্লিমেন্টেশনের উপর ভিত্তি করে পরিবর্তিত হয়। নোড সিঙ্ক না হলে সব ক্লায়েন্ট `False` রিটার্ন করে এবং সব ক্লায়েন্ট নিচের ফিল্ডগুলো রিটার্ন করে। -`অবজেক্ট|বুলিয়ান`, সিঙ্ক স্ট্যাটাস ডেটা সহ একটি অবজেক্ট বা `মিথ্যা`, যখন সিঙ্ক হচ্ছে না: +`Object|Boolean`, সিঙ্ক স্ট্যাটাস ডাটা সহ একটি অবজেক্ট অথবা সিঙ্ক না হলে `FALSE`: -- `স্টার্টিংব্লক`: `কোয়ান্টিটি` - যে ব্লকে ইম্পোর্ট শুরু হয়েছিল (শুধুমাত্র রিসেট করা হবে, সিঙ্ক তার হেডে পৌঁছানোর পরে) -- `কারেন্টব্লক`: `কোয়ান্টিটি` - বর্তমান ব্লক, eth_blockNumber-এর মতোই -- `হাইয়েস্টব্লক`: `কোয়ান্টিটি` - আনুমানিক সর্বোচ্চ ব্লক +- `startingBlock`: `QUANTITY` - যে ব্লক থেকে ইমপোর্ট শুরু হয়েছে (সিঙ্ক তার হেডে পৌঁছানোর পরেই কেবল রিসেট হবে) +- `currentBlock`: `QUANTITY` - বর্তমান ব্লক, eth_blockNumber এর মতই +- `highestBlock`: `QUANTITY` - আনুমানিক সর্বোচ্চ ব্লক -যাইহোক, পৃথক ক্লায়েন্টরা অতিরিক্ত ডেটাও সরবরাহ করতে পারে। উদাহরণস্বরূপ Geth নিম্নলিখিতটি রিটার্ন করে: +তবে, আলাদা ক্লায়েন্টগুলো অতিরিক্ত ডাটাও প্রদান করতে পারে। উদাহরণস্বরূপ Geth নিচের ডাটা রিটার্ন করে: ```json { @@ -361,14 +361,14 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[] } ``` -আরো বিস্তারিত জানার জন্য আপনার নির্দিষ্ট ক্লায়েন্টের জন্য ডকুমেন্টেশন পড়ুন। +আরও বিস্তারিত তথ্যের জন্য আপনার নির্দিষ্ট ক্লায়েন্টের ডকুমেন্টেশন দেখুন। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -378,7 +378,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1} highestBlock: '0x454' } } -// Or when not syncing +// অথবা যখন সিঙ্ক হচ্ছে না { "id":1, "jsonrpc": "2.0", @@ -388,28 +388,28 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1} ### eth_coinbase {#eth_coinbase} -ক্লায়েন্ট কয়েনবেস অ্যাড্রেস রিটার্ন করে। +ক্লায়েন্ট কয়েনবেস এডড্রেস রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন -> **নোট:** এই পদ্ধতিটি **v1.14.0** থেকে অবচিত হয়েছে এবং আর সমর্থিত নয়। এই পদ্ধতিটি ব্যবহার করার চেষ্টা করলে একটি "মেথড নট সাপোর্টেড" ত্রুটি দেখা দেবে। +> **নোট:** এই মেথডটি **v1.14.0** থেকে বাতিল করা হয়েছে এবং আর সাপোর্ট করা হয় না। এই মেথডটি ব্যবহার করার চেষ্টা করলে "Method not supported" এরর দেখাবে। **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`DATA`, 20 বাইট - বর্তমান কয়েনবেস অ্যাড্রেস। +`DATA`, 20 bytes - বর্তমান কয়েনবেস এডড্রেস। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' -// Result +// ফলাফল { "id":64, "jsonrpc": "2.0", @@ -419,7 +419,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":6 ### eth_chainId {#eth_chainId} -রিপ্লে-সুরক্ষিত লেনদেন স্বাক্ষর করার জন্য ব্যবহৃত চেইন আইডি রিটার্ন করে। +রিপ্লে-প্রোটেক্টেড লেনদেন সাইন করার জন্য ব্যবহৃত চেইন আইডি রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -427,18 +427,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":6 **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`chainId`, বর্তমান চেইন আইডি-র পূর্ণসংখ্যাকে প্রতিনিধিত্বকারী স্ট্রিং হিসাবে হেক্সাডেসিমেল মান। +`chainId`, বর্তমান চেইন আইডির ইন্টিজারকে উপস্থাপনকারী স্ট্রিং হিসেবে হেক্সাডেসিমাল ভ্যালু। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' -// Result +// ফলাফল { "id":67, "jsonrpc": "2.0", @@ -448,7 +448,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67 ### eth_mining {#eth_mining} -ক্লায়েন্ট সক্রিয়ভাবে নতুন ব্লক মাইনিং করলে `সত্য` রিটার্ন করে। এটি শুধুমাত্র প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কের জন্য `সত্য` রিটার্ন করতে পারে এবং [দ্য মার্জ](/roadmap/merge/) থেকে কিছু ক্লায়েন্টে উপলব্ধ নাও হতে পারে। +ক্লায়েন্ট যদি সক্রিয়ভাবে নতুন ব্লক মাইন করে, তবে `true` রিটার্ন করে। এটি শুধুমাত্র প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কের জন্য `true` রিটার্ন করতে পারে এবং [The Merge](/roadmap/merge/)-এর পর থেকে কিছু ক্লায়েন্টে উপলব্ধ নাও থাকতে পারে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -456,18 +456,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67 **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`বুলিয়ান` - ক্লায়েন্ট মাইনিং করলে `সত্য` রিটার্ন করে, অন্যথায় `মিথ্যা`। +`Boolean` - ক্লায়েন্ট মাইন করলে `true` রিটার্ন করে, অন্যথায় `false`। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' -// + { "id":71, "jsonrpc": "2.0", @@ -477,7 +477,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71} ### eth_hashrate {#eth_hashrate} -নোডটি প্রতি সেকেন্ডে কতগুলি হ্যাস মাইনিং করছে তার সংখ্যা রিটার্ন করে। এটি শুধুমাত্র প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কের জন্য `সত্য` রিটার্ন করতে পারে এবং [দ্য মার্জ](/roadmap/merge/) থেকে কিছু ক্লায়েন্টে উপলব্ধ নাও হতে পারে। +নোডটি প্রতি সেকেন্ডে কতগুলো হ্যাস দিয়ে মাইন করছে তা রিটার্ন করে। এটি শুধুমাত্র প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কের জন্য `true` রিটার্ন করতে পারে এবং [The Merge](/roadmap/merge/)-এর পর থেকে কিছু ক্লায়েন্টে উপলব্ধ নাও থাকতে পারে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -485,18 +485,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71} **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - প্রতি সেকেন্ডে হ্যাসের সংখ্যা। +`QUANTITY` - প্রতি সেকেন্ডে হ্যাসের সংখ্যা। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' -// Result +// ফলাফল { "id":71, "jsonrpc": "2.0", @@ -506,7 +506,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":7 ### eth_gasPrice {#eth_gasprice} -wei-তে প্রতি গ্যাসের বর্তমান মূল্যের একটি অনুমান প্রদান করে। উদাহরণস্বরূপ, Besu ক্লায়েন্ট শেষ 100টি ব্লক পরীক্ষা করে এবং ডিফল্টভাবে মধ্যম গ্যাস ইউনিট মূল্য রিটার্ন করে। +wei-তে প্রতি গ্যাসের বর্তমান মূল্যের একটি অনুমান রিটার্ন করে। উদাহরণস্বরূপ, Besu ক্লায়েন্ট ডিফল্টভাবে শেষ 100টি ব্লক পরীক্ষা করে এবং মিডিয়ান গ্যাস ইউনিট প্রাইস রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -514,28 +514,28 @@ wei-তে প্রতি গ্যাসের বর্তমান মূল **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - wei-তে বর্তমান গ্যাস মূল্যের পূর্ণসংখ্যা। +`QUANTITY` - wei-তে বর্তমান গ্যাস প্রাইস এর ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' -// Result +// ফলাফল { "id":73, "jsonrpc": "2.0", - "result": "0x1dfd14000" // 8049999872 Wei + "result": "0x1dfd14000" // 8049999872 ওয়েই } ``` ### eth_accounts {#eth_accounts} -ক্লায়েন্টের মালিকানাধীন অ্যাড্রেসগুলির একটি তালিকা রিটার্ন করে। +ক্লায়েন্টের মালিকানাধীন এডড্রেসগুলোর একটি তালিকা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -543,18 +543,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":7 **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`DATA-এর অ্যারে`, 20 বাইট - ক্লায়েন্টের মালিকানাধীন অ্যাড্রেস। +`Array of DATA`, 20 Bytes - ক্লায়েন্টের মালিকানাধীন এডড্রেসগুলো। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -564,7 +564,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1 ### eth_blockNumber {#eth_blocknumber} -সবচেয়ে সাম্প্রতিক ব্লকের সংখ্যা প্রদান করে। +সবচেয়ে সাম্প্রতিক ব্লকের নম্বর রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -572,18 +572,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1 **প্যারামিটার** -কোনটি না +কোনোটি নয় -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - ক্লায়েন্ট যে বর্তমান ব্লক নম্বরে আছে তার পূর্ণসংখ্যা। +`QUANTITY` - ক্লায়েন্ট বর্তমানে যে ব্লক নম্বরে আছে তার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' -// Result +// ফলাফল { "id":83, "jsonrpc": "2.0", @@ -593,7 +593,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id ### eth_getBalance {#eth_getbalance} -একটি নির্দিষ্ট অ্যাড্রেসে অ্যাকাউন্টের ব্যালেন্স প্রদান করে। +প্রদত্ত এডড্রেসে থাকা একাউন্টের ব্যালেন্স রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -601,23 +601,23 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id **প্যারামিটার** -1. `DATA`, 20 বাইট - ব্যালেন্স পরীক্ষা করার জন্য অ্যাড্রেস। -2. `কোয়ান্টিটি|ট্যাগ` - পূর্ণসংখ্যা ব্লক নম্বর, অথবা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"`, বা `"ফাইনালইজড"` স্ট্রিং, [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) দেখুন +1. `DATA`, 20 Bytes - ব্যালেন্স চেক করার এডড্রেস। +2. `QUANTITY|TAG` - ইন্টিজার ব্লক নম্বর, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"`, বা `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন ```js params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] ``` -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - wei-তে বর্তমান ব্যালেন্সের পূর্ণসংখ্যা। +`QUANTITY` - wei-তে বর্তমান ব্যালেন্সের ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -627,7 +627,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407 ### eth_getStorageAt {#eth_getstorageat} -একটি প্রদত্ত অ্যাড্রেসের একটি স্টোরেজ অবস্থান থেকে মান প্রদান করে। +প্রদত্ত এডড্রেসের একটি স্টোরেজ পজিশন থেকে ভ্যালু রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -635,16 +635,16 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407 **প্যারামিটার** -1. `DATA`, 20 বাইট - স্টোরেজের অ্যাড্রেস। -2. `কোয়ান্টিটি` - স্টোরেজের অবস্থানের পূর্ণসংখ্যা। -3. `কোয়ান্টিটি|ট্যাগ` - পূর্ণসংখ্যা ব্লক নম্বর, অথবা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"`, `"ফাইনালইজড"` স্ট্রিং, [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) দেখুন +1. `DATA`, 20 Bytes - স্টোরেজের এডড্রেস। +2. `QUANTITY` - স্টোরেজে পজিশনের ইন্টিজার। +3. `QUANTITY|TAG` - ইন্টিজার ব্লক নম্বর, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"`, `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন -**রিটার্ন** +**রিটার্নস** -`DATA` - এই স্টোরেজ অবস্থানে মান। +`DATA` - এই স্টোরেজ পজিশনের ভ্যালু। **উদাহরণ** -সঠিক অবস্থান গণনা করা পুনরুদ্ধার করার জন্য স্টোরেজের উপর নির্ভর করে। অ্যাড্রেস `0x391694e7e0b0cce554cb130d723a9d27458f9298` দ্বারা `0x295a70b2de5e3953354a6a8344e616ed314d7251`-এ ডিপ্লয় করা নিম্নলিখিত চুক্তিটি বিবেচনা করুন। +সঠিক পজিশন গণনা করা নির্ভর করে কোন স্টোরেজটি রিট্রিভ করা হবে তার উপর। `0x391694e7e0b0cce554cb130d723a9d27458f9298` এডড্রেস দ্বারা `0x295a70b2de5e3953354a6a8344e616ed314d7251`-এ ডিপ্লয় করা নিচের কন্ট্রাক্টটি বিবেচনা করুন। ``` contract Storage { @@ -657,20 +657,20 @@ contract Storage { } ``` -pos0-এর মান পুনরুদ্ধার করা সহজ: +pos0 এর ভ্যালু রিট্রিভ করা সহজ: ```js curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 {"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} ``` -মানচিত্রের একটি উপাদান পুনরুদ্ধার করা আরও কঠিন। মানচিত্রে একটি উপাদানের অবস্থান গণনা করা হয়: +ম্যাপের একটি এলিমেন্ট রিট্রিভ করা তুলনামূলক কঠিন। ম্যাপে একটি এলিমেন্টের পজিশন গণনা করা হয় এভাবে: ```js keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) ``` -এর মানে হল pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]-এ স্টোরেজ পুনরুদ্ধার করতে আমাদের এর সাথে অবস্থান গণনা করতে হবে: +এর মানে হলো pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] এর স্টোরেজ রিট্রিভ করতে আমাদের পজিশন গণনা করতে হবে এভাবে: ```js keccak( @@ -681,7 +681,7 @@ keccak( ) ``` -web3 লাইব্রেরির সাথে আসা geth কনসোলটি গণনা করার জন্য ব্যবহার করা যেতে পারে: +web3 লাইব্রেরির সাথে আসা geth কনসোলটি এই গণনার জন্য ব্যবহার করা যেতে পারে: ```js > var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" @@ -690,7 +690,7 @@ undefined "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" ``` -এখন স্টোরেজ আনতে: +এখন স্টোরেজ ফেচ করতে: ```js curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 @@ -699,7 +699,7 @@ curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": [ ### eth_getTransactionCount {#eth_gettransactioncount} -একটি অ্যাড্রেস থেকে _প্রেরিত_ লেনদেনের সংখ্যা প্রদান করে। +একটি এডড্রেস থেকে _পাঠানো_ লেনদেনের সংখ্যা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -707,26 +707,26 @@ curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": [ **প্যারামিটার** -1. `DATA`, 20 বাইট - অ্যাড্রেস। -2. `কোয়ান্টিটি|ট্যাগ` - পূর্ণসংখ্যা ব্লক নম্বর, অথবা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) দেখুন +1. `DATA`, 20 Bytes - এডড্রেস। +2. `QUANTITY|TAG` - ইন্টিজার ব্লক নম্বর, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"` বা `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন ```js params: [ "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "latest", // সর্বশেষ ব্লকের অবস্থা + "latest", // সর্বশেষ ব্লকের স্টেট ] ``` -**রিটার্ন** +**রিটার্নস** -`QUANTITY` - এই অ্যাড্রেস থেকে পাঠানো ট্রানজ্যাকশনের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - এই এডড্রেস থেকে পাঠানো লেনদেনের সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -736,7 +736,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params ### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} -প্রদত্ত ব্লক হ্যাসের সাথে মিলে যাওয়া একটি ব্লক থেকে একটি ব্লকের লেনদেনের সংখ্যা প্রদান করে। +প্রদত্ত ব্লক হ্যাসের সাথে মিলে যাওয়া একটি ব্লকের লেনদেনের সংখ্যা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -744,22 +744,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি ব্লকের হ্যাস +1. `DATA`, 32 Bytes - একটি ব্লকের হ্যাস ```js params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] ``` -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - এই ব্লকের লেনদেনের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - এই ব্লকের লেনদেনের সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -769,7 +769,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHa ### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} -প্রদত্ত ব্লক নম্বর মিলে যাওয়া একটি ব্লকের লেনদেনের সংখ্যা প্রদান করে। +প্রদত্ত ব্লক নম্বরের সাথে মিলে যাওয়া একটি ব্লকের লেনদেনের সংখ্যা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -777,7 +777,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHa **প্যারামিটার** -1. `কোয়ান্টিটি|ট্যাগ` - একটি ব্লক নম্বরের পূর্ণসংখ্যা, বা `"আর্লিয়েস্ট"`, `"লেটেস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, যেমন [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter)-এ। +1. `QUANTITY|TAG` - একটি ব্লক নম্বরের ইন্টিজার, অথবা স্ট্রিং `"earliest"`, `"latest"`, `"pending"`, `"safe"` বা `"finalized"`, যেমনটি [block parameter](/developers/docs/apis/json-rpc/#block-parameter)-এ আছে। ```js params: [ @@ -785,16 +785,16 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - এই ব্লকের লেনদেনের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - এই ব্লকের লেনদেনের সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -804,7 +804,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNu ### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} -প্রদত্ত ব্লক হ্যাসের সাথে মিলে যাওয়া একটি ব্লক থেকে আঙ্কেল সংখ্যা প্রদান করে। +প্রদত্ত ব্লক হ্যাসের সাথে মিলে যাওয়া একটি ব্লকের আঙ্কেল (uncles) সংখ্যা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -812,22 +812,22 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNu **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি ব্লকের হ্যাস +1. `DATA`, 32 Bytes - একটি ব্লকের হ্যাস ```js params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] ``` -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - এই ব্লকের আঙ্কেলদের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - এই ব্লকের আঙ্কেল সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -837,7 +837,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","p ### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} -প্রদত্ত ব্লক নম্বর মিলে যাওয়া একটি ব্লক থেকে আঙ্কেলদের সংখ্যা প্রদান করে। +প্রদত্ত ব্লক নম্বরের সাথে মিলে যাওয়া একটি ব্লকের আঙ্কেল সংখ্যা রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -845,7 +845,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","p **প্যারামিটার** -1. `কোয়ান্টিটি|ট্যাগ` - একটি ব্লক নম্বরের পূর্ণসংখ্যা, বা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, যেমন [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) -এ +1. `QUANTITY|TAG` - একটি ব্লক নম্বরের ইন্টিজার, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"` বা `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন ```js params: [ @@ -853,16 +853,16 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - এই ব্লকের আঙ্কেলদের সংখ্যার পূর্ণসংখ্যা। +`QUANTITY` - এই ব্লকের আঙ্কেল সংখ্যার ইন্টিজার। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -872,7 +872,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber", ### eth_getCode {#eth_getcode} -একটি প্রদত্ত অ্যাড্রেসে কোড রিটার্ন করে। +প্রদত্ত এডড্রেসের কোড রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -880,8 +880,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber", **প্যারামিটার** -1. `DATA`, 20 বাইট - অ্যাড্রেস -2. `কোয়ান্টিটি|ট্যাগ` - পূর্ণসংখ্যা ব্লক নম্বর, অথবা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) দেখুন +1. `DATA`, 20 Bytes - এডড্রেস +2. `QUANTITY|TAG` - ইন্টিজার ব্লক নম্বর, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"` বা `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন ```js params: [ @@ -890,16 +890,16 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** -`DATA` - প্রদত্ত অ্যাড্রেস থেকে কোড। +`DATA` - প্রদত্ত এডড্রেস থেকে কোড। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -909,27 +909,27 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA ### eth_sign {#eth_sign} -সাইন পদ্ধতি একটি Ethereum নির্দিষ্ট স্বাক্ষর গণনা করে: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`। +sign মেথডটি একটি ইথিরিয়াম নির্দিষ্ট সিগনেচার গণনা করে: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))` দিয়ে। -মেসেজের সাথে একটি উপসর্গ যুক্ত করার মাধ্যমে গণনা করা স্বাক্ষরটিকে একটি Ethereum নির্দিষ্ট স্বাক্ষর হিসাবে স্বীকৃত করে। এটি অপব্যবহার রোধ করে যেখানে একটি ক্ষতিকর ডিএ্যাপ অবাধ ডেটা (যেমন, ট্রানজ্যাকশন) সাইন করতে পারে এবং শিকারকে ছদ্মবেশ ধারণ করার জন্য স্বাক্ষর ব্যবহার করতে পারে। +মেসেজে একটি প্রিফিক্স যোগ করার মাধ্যমে গণনা করা সিগনেচারটি ইথিরিয়াম নির্দিষ্ট সিগনেচার হিসেবে চেনা যায়। এটি অপব্যবহার রোধ করে যেখানে একটি ক্ষতিকারক ডিএ্যাপ ইচ্ছামতো ডাটা (যেমন, লেনদেন) সাইন করতে পারে এবং সিগনেচারটি ব্যবহার করে ভিকটিমের ছদ্মবেশ ধারণ করতে পারে। -দ্রষ্টব্য: স্বাক্ষর করার জন্য অ্যাড্রেস আনলক করা আবশ্যক। +নোট: সাইন করার এডড্রেসটি অবশ্যই আনলক করা থাকতে হবে। **প্যারামিটার** -1. `DATA`, 20 বাইট - অ্যাড্রেস -2. `DATA`, N বাইট - স্বাক্ষর করার জন্য মেসেজ +1. `DATA`, 20 Bytes - এডড্রেস +2. `DATA`, N Bytes - সাইন করার মেসেজ -**রিটার্ন** +**রিটার্নস** -`DATA`: স্বাক্ষর +`DATA`: সিগনেচার **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -939,31 +939,31 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d37 ### eth_signTransaction {#eth_signtransaction} -একটি লেনদেন স্বাক্ষর করে যা পরবর্তী সময়ে [eth_sendRawTransaction](#eth_sendrawtransaction) ব্যবহার করে নেটওয়ার্কে জমা দেওয়া যেতে পারে। +একটি লেনদেন সাইন করে যা পরবর্তীতে [eth_sendRawTransaction](#eth_sendrawtransaction) ব্যবহার করে নেটওয়ার্কে সাবমিট করা যেতে পারে। **প্যারামিটার** -1. `অবজেক্ট` - লেনদেনের অবজেক্ট +1. `Object` - লেনদেন অবজেক্ট -- `টাইপ`: -- `from`: `DATA`, 20 বাইট - যে অ্যাড্রেস থেকে লেনদেন পাঠানো হয়েছে। -- `to`: `DATA`, 20 বাইট - (নতুন চুক্তি তৈরি করার সময় ঐচ্ছিক) যে অ্যাড্রেসে লেনদেনটি নির্দেশিত হয়েছে। -- `গ্যাস`: `কোয়ান্টিটি` - (ঐচ্ছিক, ডিফল্ট: 90000) লেনদেন সম্পাদনের জন্য প্রদত্ত গ্যাসের পূর্ণসংখ্যা। এটি অব্যবহৃত গ্যাস ফেরত দেবে। -- `gasPrice`: `কোয়ান্টিটি` - (ঐচ্ছিক, ডিফল্ট: নির্ধারণ করা হবে) প্রতি প্রদত্ত গ্যাসের জন্য ব্যবহৃত gasPrice-এর পূর্ণসংখ্যা, Wei-তে। -- `value`: `কোয়ান্টিটি` - (ঐচ্ছিক) এই লেনদেনের সাথে প্রেরিত মূল্যের পূর্ণসংখ্যা, Wei-তে। -- `data`: `DATA` - একটি চুক্তির সংকলিত কোড অথবা আহূত পদ্ধতি স্বাক্ষরের হ্যাস এবং এনকোড করা প্যারামিটার। -- `nonce`: `কোয়ান্টিটি` - (ঐচ্ছিক) একটি ননসের পূর্ণসংখ্যা। এটি আপনাকে একই নন্স ব্যবহারকারী আপনার নিজের পেন্ডিং লেনদেনগুলি ওভাররাইট করার অনুমতি দেয়। +- `type`: +- `from`: `DATA`, 20 Bytes - যে এডড্রেস থেকে লেনদেন পাঠানো হয়। +- `to`: `DATA`, 20 Bytes - (নতুন কন্ট্রাক্ট তৈরি করার সময় ঐচ্ছিক) যে এডড্রেসে লেনদেন নির্দেশিত হয়। +- `gas`: `QUANTITY` - (ঐচ্ছিক, ডিফল্ট: 90000) লেনদেন এক্সিকিউশনের জন্য প্রদত্ত গ্যাসের ইন্টিজার। এটি অব্যবহৃত গ্যাস রিটার্ন করবে। +- `gasPrice`: `QUANTITY` - (ঐচ্ছিক, ডিফল্ট: To-Be-Determined) প্রতিটি পেইড গ্যাসের জন্য ব্যবহৃত gasPrice এর ইন্টিজার, Wei-তে। +- `value`: `QUANTITY` - (ঐচ্ছিক) এই লেনদেনের সাথে পাঠানো ভ্যালুর ইন্টিজার, Wei-তে। +- `data`: `DATA` - একটি কন্ট্রাক্টের কম্পাইল করা কোড অথবা ইনভোক করা মেথড সিগনেচার এবং এনকোড করা প্যারামিটারের হ্যাস। +- `nonce`: `QUANTITY` - (ঐচ্ছিক) একটি নন্স এর ইন্টিজার। এটি একই নন্স ব্যবহার করা আপনার নিজের পেন্ডিং লেনদেনগুলোকে ওভাররাইট করার অনুমতি দেয়। -**রিটার্ন** +**রিটার্নস** -`DATA`, নির্দিষ্ট অ্যাকাউন্ট দ্বারা স্বাক্ষরিত RLP-এনকোডেড লেনদেন অবজেক্ট। +`DATA`, নির্দিষ্ট একাউন্ট দ্বারা সাইন করা RLP-এনকোডেড লেনদেন অবজেক্ট। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' -// Result +// ফলাফল { "id": 1, "jsonrpc": "2.0", @@ -973,19 +973,19 @@ curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction"," ### eth_sendTransaction {#eth_sendtransaction} -নতুন মেসেজ কল লেনদেন বা একটি চুক্তি তৈরি করে, যদি ডেটা ক্ষেত্রে কোড থাকে এবং `from`-এ নির্দিষ্ট অ্যাকাউন্ট ব্যবহার করে এটি স্বাক্ষর করে। +নতুন মেসেজ কল লেনদেন বা একটি কন্ট্রাক্ট তৈরি করে, যদি ডাটা ফিল্ডে কোড থাকে, এবং `from`-এ নির্দিষ্ট করা একাউন্ট ব্যবহার করে এটি সাইন করে। **প্যারামিটার** -1. `অবজেক্ট` - লেনদেনের অবজেক্ট +1. `Object` - লেনদেন অবজেক্ট -- `from`: `DATA`, 20 বাইট - যে অ্যাড্রেস থেকে লেনদেন পাঠানো হয়েছে। -- `to`: `DATA`, 20 বাইট - (নতুন চুক্তি তৈরি করার সময় ঐচ্ছিক) যে অ্যাড্রেসে লেনদেনটি নির্দেশিত হয়েছে। -- `গ্যাস`: `কোয়ান্টিটি` - (ঐচ্ছিক, ডিফল্ট: 90000) লেনদেন সম্পাদনের জন্য প্রদত্ত গ্যাসের পূর্ণসংখ্যা। এটি অব্যবহৃত গ্যাস ফেরত দেবে। -- `gasPrice`: `কোয়ান্টিটি` - (ঐচ্ছিক, ডিফল্ট: নির্ধারণ করা হবে) প্রতি প্রদত্ত গ্যাসের জন্য ব্যবহৃত gasPrice-এর পূর্ণসংখ্যা। -- `value`: `কোয়ান্টিটি` - (ঐচ্ছিক) এই লেনদেনের সাথে প্রেরিত মূল্যের পূর্ণসংখ্যা। -- `input`: `DATA` - একটি চুক্তির সংকলিত কোড অথবা আহূত পদ্ধতি স্বাক্ষরের হ্যাস এবং এনকোড করা প্যারামিটার। -- `nonce`: `কোয়ান্টিটি` - (ঐচ্ছিক) একটি ননসের পূর্ণসংখ্যা। এটি আপনাকে একই নন্স ব্যবহারকারী আপনার নিজের পেন্ডিং লেনদেনগুলি ওভাররাইট করার অনুমতি দেয়। +- `from`: `DATA`, 20 Bytes - যে এডড্রেস থেকে লেনদেন পাঠানো হয়। +- `to`: `DATA`, 20 Bytes - (নতুন কন্ট্রাক্ট তৈরি করার সময় ঐচ্ছিক) যে এডড্রেসে লেনদেন নির্দেশিত হয়। +- `gas`: `QUANTITY` - (ঐচ্ছিক, ডিফল্ট: 90000) লেনদেন এক্সিকিউশনের জন্য প্রদত্ত গ্যাসের ইন্টিজার। এটি অব্যবহৃত গ্যাস রিটার্ন করবে। +- `gasPrice`: `QUANTITY` - (ঐচ্ছিক, ডিফল্ট: To-Be-Determined) প্রতিটি পেইড গ্যাসের জন্য ব্যবহৃত gasPrice এর ইন্টিজার। +- `value`: `QUANTITY` - (ঐচ্ছিক) এই লেনদেনের সাথে পাঠানো ভ্যালুর ইন্টিজার। +- `input`: `DATA` - একটি কন্ট্রাক্টের কম্পাইল করা কোড অথবা ইনভোক করা মেথড সিগনেচার এবং এনকোড করা প্যারামিটারের হ্যাস। +- `nonce`: `QUANTITY` - (ঐচ্ছিক) একটি নন্স এর ইন্টিজার। এটি একই নন্স ব্যবহার করা আপনার নিজের পেন্ডিং লেনদেনগুলোকে ওভাররাইট করার অনুমতি দেয়। ```js params: [ @@ -1001,18 +1001,18 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** -`DATA`, 32 বাইট - লেনদেনের হ্যাস, অথবা শূন্য হ্যাস যদি লেনদেন এখনও উপলব্ধ না হয়। +`DATA`, 32 Bytes - লেনদেনের হ্যাস, অথবা লেনদেনটি এখনও উপলব্ধ না হলে জিরো হ্যাস। -আপনি যখন একটি চুক্তি তৈরি করেন, তখন একটি ব্লকে লেনদেন প্রস্তাবিত হওয়ার পরে, চুক্তির অ্যাড্রেস পেতে [eth_getTransactionReceipt](#eth_gettransactionreceipt) ব্যবহার করুন। +আপনি যখন একটি কন্ট্রাক্ট তৈরি করেন, তখন লেনদেনটি একটি ব্লকে প্রস্তাবিত হওয়ার পর কন্ট্রাক্ট এডড্রেস পেতে [eth_getTransactionReceipt](#eth_gettransactionreceipt) ব্যবহার করুন। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1022,11 +1022,11 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{ ### eth_sendRawTransaction {#eth_sendrawtransaction} -স্বাক্ষরিত লেনদেনের জন্য নতুন মেসেজ কল লেনদেন বা একটি চুক্তি তৈরি করে। +সাইন করা লেনদেনের জন্য নতুন মেসেজ কল লেনদেন বা একটি কন্ট্রাক্ট তৈরি করে। **প্যারামিটার** -1. `DATA`, স্বাক্ষরিত লেনদেন ডেটা। +1. `DATA`, সাইন করা লেনদেনের ডাটা। ```js params: [ @@ -1034,18 +1034,18 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** -`DATA`, 32 বাইট - লেনদেনের হ্যাস, অথবা শূন্য হ্যাস যদি লেনদেন এখনও উপলব্ধ না হয়। +`DATA`, 32 Bytes - লেনদেনের হ্যাস, অথবা লেনদেনটি এখনও উপলব্ধ না হলে জিরো হ্যাস। -আপনি যখন একটি চুক্তি তৈরি করেন, তখন একটি ব্লকে লেনদেন প্রস্তাবিত হওয়ার পরে, চুক্তির অ্যাড্রেস পেতে [eth_getTransactionReceipt](#eth_gettransactionreceipt) ব্যবহার করুন। +আপনি যখন একটি কন্ট্রাক্ট তৈরি করেন, তখন লেনদেনটি একটি ব্লকে প্রস্তাবিত হওয়ার পর কন্ট্রাক্ট এডড্রেস পেতে [eth_getTransactionReceipt](#eth_gettransactionreceipt) ব্যবহার করুন। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1055,7 +1055,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params" ### eth_call {#eth_call} -ব্লকচেইনে একটি লেনদেন তৈরি না করেই অবিলম্বে একটি নতুন মেসেজ কল কার্যকর করে। প্রায়শই শুধুমাত্র পঠনযোগ্য স্মার্ট কন্ট্র্যাক্ট ফাংশনগুলি কার্যকর করার জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ একটি ERC-20 চুক্তির জন্য `balanceOf`। +ব্লকচেইনে কোনো লেনদেন তৈরি না করেই তাৎক্ষণিকভাবে একটি নতুন মেসেজ কল এক্সিকিউট করে। প্রায়শই রিড-অনলি স্মার্ট কন্ট্রাক্ট ফাংশন এক্সিকিউট করার জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ একটি ERC-20 কন্ট্রাক্টের জন্য `balanceOf`। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1063,27 +1063,27 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params" **প্যারামিটার** -1. `অবজেক্ট` - লেনদেন কল অবজেক্ট +1. `Object` - লেনদেন কল অবজেক্ট -- `from`: `DATA`, 20 বাইট - (ঐচ্ছিক) যে অ্যাড্রেস থেকে লেনদেন পাঠানো হয়েছে। -- `to`: `DATA`, 20 বাইট - যে অ্যাড্রেসে লেনদেনটি নির্দেশিত হয়েছে। -- `গ্যাস`: `কোয়ান্টিটি` - (ঐচ্ছিক) লেনদেন সম্পাদনের জন্য প্রদত্ত গ্যাসের পূর্ণসংখ্যা। eth_call শূন্য গ্যাস খরচ করে, কিন্তু কিছু এক্সিকিউশনের জন্য এই প্যারামিটারের প্রয়োজন হতে পারে। -- `gasPrice`: `কোয়ান্টিটি` - (ঐচ্ছিক) প্রতিটি প্রদত্ত গ্যাসের জন্য ব্যবহৃত gasPrice-এর পূর্ণসংখ্যা -- `value`: `কোয়ান্টিটি` - (ঐচ্ছিক) এই লেনদেনের সাথে প্রেরিত মূল্যের পূর্ণসংখ্যা -- `input`: `DATA` - (ঐচ্ছিক) পদ্ধতি স্বাক্ষরের হ্যাস এবং এনকোড করা প্যারামিটার। বিস্তারিত জানার জন্য সলিডিটি ডকুমেন্টেশনে [Ethereum চুক্তি ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) দেখুন। +- `from`: `DATA`, 20 Bytes - (ঐচ্ছিক) যে এডড্রেস থেকে লেনদেন পাঠানো হয়। +- `to`: `DATA`, 20 Bytes - যে এডড্রেসে লেনদেন নির্দেশিত হয়। +- `gas`: `QUANTITY` - (ঐচ্ছিক) লেনদেন এক্সিকিউশনের জন্য প্রদত্ত গ্যাসের ইন্টিজার। eth_call শূন্য গ্যাস খরচ করে, তবে কিছু এক্সিকিউশনের জন্য এই প্যারামিটারটির প্রয়োজন হতে পারে। +- `gasPrice`: `QUANTITY` - (ঐচ্ছিক) প্রতিটি পেইড গ্যাসের জন্য ব্যবহৃত gasPrice এর ইন্টিজার +- `value`: `QUANTITY` - (ঐচ্ছিক) এই লেনদেনের সাথে পাঠানো ভ্যালুর ইন্টিজার +- `input`: `DATA` - (ঐচ্ছিক) মেথড সিগনেচার এবং এনকোড করা প্যারামিটারের হ্যাস। বিস্তারিত জানতে [Solidity ডকুমেন্টেশনে ইথিরিয়াম কন্ট্রাক্ট ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) দেখুন। -2. `কোয়ান্টিটি|ট্যাগ` - পূর্ণসংখ্যা ব্লক নম্বর, অথবা `"লেটেস্ট"`, `"আর্লিয়েস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter) দেখুন +2. `QUANTITY|TAG` - ইন্টিজার ব্লক নম্বর, অথবা স্ট্রিং `"latest"`, `"earliest"`, `"pending"`, `"safe"` বা `"finalized"`, [block parameter](/developers/docs/apis/json-rpc/#block-parameter) দেখুন -**রিটার্ন** +**রিটার্নস** -`DATA` - সম্পাদিত চুক্তির রিটার্ন ভ্যালু। +`DATA` - এক্সিকিউট করা কন্ট্রাক্টের রিটার্ন ভ্যালু। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1093,7 +1093,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}] ### eth_estimateGas {#eth_estimategas} -লেনদেনটি সম্পূর্ণ করার জন্য কতটা গ্যাস প্রয়োজন তার একটি অনুমান তৈরি করে এবং ফেরত দেয়। লেনদেনটি ব্লকচেইনে যুক্ত হবে না। মনে রাখবেন যে অনুমানটি লেনদেনের দ্বারা প্রকৃতপক্ষে ব্যবহৃত গ্যাসের পরিমাণের চেয়ে উল্লেখযোগ্যভাবে বেশি হতে পারে, যার মধ্যে EVM মেকানিক্স এবং নোডের কর্মক্ষমতা সহ বিভিন্ন কারণে। +লেনদেনটি সম্পন্ন করার জন্য কতটুকু গ্যাস প্রয়োজন তার একটি অনুমান তৈরি করে এবং রিটার্ন করে। লেনদেনটি ব্লকচেইনে যোগ করা হবে না। মনে রাখবেন যে ইভিএম মেকানিক্স এবং নোড পারফরম্যান্স সহ বিভিন্ন কারণে লেনদেনের দ্বারা প্রকৃতপক্ষে ব্যবহৃত গ্যাসের পরিমাণের চেয়ে অনুমানটি উল্লেখযোগ্যভাবে বেশি হতে পারে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1101,18 +1101,18 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}] **প্যারামিটার** -[eth_call](#eth_call) প্যারামিটারগুলি দেখুন, তবে সমস্ত বৈশিষ্ট্য ঐচ্ছিক। যদি কোনো গ্যাস সীমা নির্দিষ্ট করা না থাকে, তাহলে geth পেন্ডিং ব্লক থেকে ব্লক গ্যাস সীমাটিকে একটি ঊর্ধ্ব সীমা হিসেবে ব্যবহার করে। ফলস্বরূপ, যখন গ্যাসের পরিমাণ পেন্ডিং ব্লক গ্যাস লিমিটের চেয়ে বেশি হয়, তখন ফেরত আসা অনুমানটি কল/ট্রানজ্যাকশন এক্সিকিউট করার জন্য যথেষ্ট নাও হতে পারে। +[eth_call](#eth_call) প্যারামিটারগুলো দেখুন, তবে সব প্রপার্টি ঐচ্ছিক। যদি কোনো গ্যাস লিমিট নির্দিষ্ট করা না থাকে তবে geth পেন্ডিং ব্লক থেকে ব্লক গ্যাস লিমিটকে আপার বাউন্ড হিসেবে ব্যবহার করে। ফলস্বরূপ, যখন গ্যাসের পরিমাণ পেন্ডিং ব্লক গ্যাস লিমিটের চেয়ে বেশি হয় তখন কল/লেনদেন এক্সিকিউট করার জন্য রিটার্ন করা অনুমানটি যথেষ্ট নাও হতে পারে। -**রিটার্ন** +**রিটার্নস** -`কোয়ান্টিটি` - ব্যবহৃত গ্যাসের পরিমাণ। +`QUANTITY` - ব্যবহৃত গ্যাসের পরিমাণ। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1122,7 +1122,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see ### eth_getBlockByHash {#eth_getblockbyhash} -হ্যাসের মাধ্যমে একটি ব্লক সম্পর্কে তথ্য প্রদান করে। +হ্যাস দ্বারা একটি ব্লক সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1130,8 +1130,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি ব্লকের হ্যাস। -2. `বুলিয়ান` - যদি `সত্য` হয় তবে এটি সম্পূর্ণ লেনদেন অবজেক্টগুলি প্রদান করে, যদি `মিথ্যা` হয় তবে শুধুমাত্র লেনদেনের হ্যাসগুলি প্রদান করে। +1. `DATA`, 32 Bytes - একটি ব্লকের হ্যাস। +2. `Boolean` - যদি `true` হয় তবে এটি সম্পূর্ণ লেনদেন অবজেক্টগুলো রিটার্ন করে, যদি `false` হয় তবে শুধুমাত্র লেনদেনের হ্যাসগুলো। ```js params: [ @@ -1140,34 +1140,34 @@ params: [ ] ``` -**রিটার্ন** - -`অবজেক্ট` - একটি ব্লক অবজেক্ট, অথবা যখন কোনো ব্লক পাওয়া যায়নি তখন `null`: - -- `number`: `কোয়ান্টিটি` - ব্লক নম্বর। যখন এর পেন্ডিং ব্লক থাকে তখন `null`। -- `hash`: `DATA`, 32 বাইট - ব্লকের হ্যাস। যখন এর পেন্ডিং ব্লক থাকে তখন `null`। -- `parentHash`: `DATA`, 32 বাইট - প্যারেন্ট ব্লকের হ্যাস। -- `nonce`: `DATA`, 8 বাইট - জেনারেট করা প্রুফ-অফ-ওয়ার্কের হ্যাস। যখন এর পেন্ডিং ব্লক থাকে তখন `null`, প্রুফ-অফ-স্টেক ব্লকের জন্য `0x0` (দ্য মার্জ থেকে) -- `sha3Uncles`: `DATA`, 32 বাইট - ব্লকের আঙ্কেল ডেটার SHA3। -- `logsBloom`: `DATA`, 256 বাইট - ব্লকের লগগুলির জন্য ব্লুম ফিল্টার। যখন এর পেন্ডিং ব্লক থাকে তখন `null`। -- `transactionsRoot`: `DATA`, 32 বাইট - ব্লকের লেনদেন ট্রাইয়ের রুট। -- `stateRoot`: `DATA`, 32 বাইট - ব্লকের চূড়ান্ত স্টেট ট্রাইয়ের রুট। -- `receiptsRoot`: `DATA`, 32 বাইট - ব্লকের রসিদ ট্রাইয়ের রুট। -- `miner`: `DATA`, 20 বাইট - সেই সুবিধাভোগীর অ্যাড্রেস যাকে ব্লকের পুরস্কার দেওয়া হয়েছিল। -- `difficulty`: `কোয়ান্টিটি` - এই ব্লকের জন্য অসুবিধার পূর্ণসংখ্যা। -- `totalDifficulty`: `কোয়ান্টিটি` - এই ব্লক পর্যন্ত চেইনের মোট অসুবিধার পূর্ণসংখ্যা। -- `extraData`: `DATA` - এই ব্লকের "অতিরিক্ত ডেটা" ক্ষেত্র। -- `size`: `কোয়ান্টিটি` - বাইটে এই ব্লকের আকারের পূর্ণসংখ্যা। -- `gasLimit`: `কোয়ান্টিটি` - এই ব্লকে অনুমোদিত সর্বাধিক গ্যাস। -- `gasUsed`: `কোয়ান্টিটি` - এই ব্লকের সমস্ত লেনদেন দ্বারা ব্যবহৃত মোট গ্যাস। -- `timestamp`: `কোয়ান্টিটি` - ব্লকটি কখন একত্রিত হয়েছিল তার ইউনিক্স টাইমস্ট্যাম্প। -- `transactions`: `অ্যারে` - লেনদেন অবজেক্টের অ্যারে, অথবা 32 বাইট লেনদেন হ্যাস, যা শেষ প্রদত্ত প্যারামিটারের উপর নির্ভর করে। -- `uncles`: `অ্যারে` - আঙ্কেল হ্যাসের অ্যারে। +**রিটার্নস** + +`Object` - একটি ব্লক অবজেক্ট, অথবা কোনো ব্লক পাওয়া না গেলে `null`: + +- `number`: `QUANTITY` - ব্লক নম্বর। পেন্ডিং ব্লক হলে `null`। +- `hash`: `DATA`, 32 Bytes - ব্লকের হ্যাস। পেন্ডিং ব্লক হলে `null`। +- `parentHash`: `DATA`, 32 Bytes - প্যারেন্ট ব্লকের হ্যাস। +- `nonce`: `DATA`, 8 Bytes - জেনারেট করা প্রুফ-অফ-ওয়ার্ক এর হ্যাস। পেন্ডিং ব্লক হলে `null`, প্রুফ-অফ-স্টেক ব্লকের জন্য `0x0` (The Merge এর পর থেকে) +- `sha3Uncles`: `DATA`, 32 Bytes - ব্লকে থাকা আঙ্কেল ডাটার SHA3। +- `logsBloom`: `DATA`, 256 Bytes - ব্লকের লগগুলোর জন্য ব্লুম ফিল্টার। পেন্ডিং ব্লক হলে `null`। +- `transactionsRoot`: `DATA`, 32 Bytes - ব্লকের লেনদেন ট্রাই (trie) এর রুট। +- `stateRoot`: `DATA`, 32 Bytes - ব্লকের চূড়ান্ত স্টেট ট্রাই এর রুট। +- `receiptsRoot`: `DATA`, 32 Bytes - ব্লকের রিসিপ্ট ট্রাই এর রুট। +- `miner`: `DATA`, 20 Bytes - বেনিফিশিয়ারির এডড্রেস যাকে ব্লক রিওয়ার্ড দেওয়া হয়েছিল। +- `difficulty`: `QUANTITY` - এই ব্লকের ডিফিকাল্টির ইন্টিজার। +- `totalDifficulty`: `QUANTITY` - এই ব্লক পর্যন্ত চেইনের মোট ডিফিকাল্টির ইন্টিজার। +- `extraData`: `DATA` - এই ব্লকের "extra data" ফিল্ড। +- `size`: `QUANTITY` - বাইটে এই ব্লকের সাইজের ইন্টিজার। +- `gasLimit`: `QUANTITY` - এই ব্লকে অনুমোদিত সর্বোচ্চ গ্যাস। +- `gasUsed`: `QUANTITY` - এই ব্লকের সব লেনদেন দ্বারা ব্যবহৃত মোট গ্যাস। +- `timestamp`: `QUANTITY` - ব্লকটি কখন কোলেট (collated) করা হয়েছিল তার ইউনিক্স টাইমস্ট্যাম্প। +- `transactions`: `Array` - লেনদেন অবজেক্টের অ্যারে, অথবা শেষ প্রদত্ত প্যারামিটারের উপর নির্ভর করে 32 Bytes লেনদেনের হ্যাস। +- `uncles`: `Array` - আঙ্কেল হ্যাসের অ্যারে। **উদাহরণ** ```js -// অনুরোধ +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' // ফলাফল { @@ -1202,7 +1202,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0 ### eth_getBlockByNumber {#eth_getblockbynumber} -ব্লক নম্বর দ্বারা একটি ব্লক সম্পর্কে তথ্য প্রদান করে। +ব্লক নম্বর দ্বারা একটি ব্লক সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1210,8 +1210,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0 **প্যারামিটার** -1. `কোয়ান্টিটি|ট্যাগ` - একটি ব্লক নম্বরের পূর্ণসংখ্যা, বা `"আর্লিয়েস্ট"`, `"লেটেস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, যেমন [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter)-এ। -2. `বুলিয়ান` - যদি `সত্য` হয় তবে এটি সম্পূর্ণ লেনদেন অবজেক্টগুলি প্রদান করে, যদি `মিথ্যা` হয় তবে শুধুমাত্র লেনদেনের হ্যাসগুলি প্রদান করে। +1. `QUANTITY|TAG` - একটি ব্লক নম্বরের ইন্টিজার, অথবা স্ট্রিং `"earliest"`, `"latest"`, `"pending"`, `"safe"` বা `"finalized"`, যেমনটি [block parameter](/developers/docs/apis/json-rpc/#block-parameter)-এ আছে। +2. `Boolean` - যদি `true` হয় তবে এটি সম্পূর্ণ লেনদেন অবজেক্টগুলো রিটার্ন করে, যদি `false` হয় তবে শুধুমাত্র লেনদেনের হ্যাসগুলো। ```js params: [ @@ -1220,21 +1220,21 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getBlockByHash](#eth_getblockbyhash) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' ``` -ফলাফল দেখুন [eth_getBlockByHash](#eth_getblockbyhash) +ফলাফল [eth_getBlockByHash](#eth_getblockbyhash) দেখুন ### eth_getTransactionByHash {#eth_gettransactionbyhash} -লেনদেনের হ্যাসের অনুরোধে একটি লেনদেন সম্পর্কে তথ্য প্রদান করে। +লেনদেনের হ্যাস দ্বারা রিকোয়েস্ট করা একটি লেনদেন সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1242,37 +1242,37 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":[ **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি লেনদেনের হ্যাস +1. `DATA`, 32 Bytes - লেনদেনের হ্যাস ```js params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] ``` -**রিটার্ন** +**রিটার্নস** -`অবজেক্ট` - একটি লেনদেন অবজেক্ট, অথবা যখন কোনো লেনদেন পাওয়া যায়নি তখন `null`: +`Object` - একটি লেনদেন অবজেক্ট, অথবা কোনো লেনদেন পাওয়া না গেলে `null`: -- `blockHash`: `DATA`, 32 বাইট - এই লেনদেনটি যে ব্লকে ছিল তার হ্যাস। `null` যখন এটি পেন্ডিং থাকে। -- `blockNumber`: `কোয়ান্টিটি` - ব্লক নম্বর যেখানে এই লেনদেনটি ছিল। `null` যখন এটি পেন্ডিং থাকে। -- `from`: `DATA`, 20 বাইট - প্রেরকের অ্যাড্রেস। -- `গ্যাস`: `কোয়ান্টিটি` - প্রেরকের দ্বারা সরবরাহ করা গ্যাস। -- `gasPrice`: `কোয়ান্টিটি` - প্রেরকের দ্বারা সরবরাহ করা গ্যাস মূল্য Wei-তে। -- `hash`: `DATA`, 32 বাইট - লেনদেনের হ্যাস। -- `input`: `DATA` - লেনদেনের সাথে প্রেরিত ডেটা। -- `nonce`: `কোয়ান্টিটি` - প্রেরকের দ্বারা এর আগে করা লেনদেনের সংখ্যা। -- `to`: `DATA`, 20 বাইট - প্রাপকের অ্যাড্রেস। `null` যখন এটি একটি চুক্তি তৈরির লেনদেন হয়। -- `transactionIndex`: `কোয়ান্টিটি` - ব্লকের লেনদেন সূচকের অবস্থানের পূর্ণসংখ্যা। `null` যখন এটি পেন্ডিং থাকে। -- `value`: `কোয়ান্টিটি` - Wei-তে স্থানান্তরিত মান। -- `v`: `কোয়ান্টিটি` - ECDSA রিকভারি আইডি -- `r`: `কোয়ান্টিটি` - ECDSA স্বাক্ষর r -- `s`: `কোয়ান্টিটি` - ECDSA স্বাক্ষর s +- `blockHash`: `DATA`, 32 Bytes - যে ব্লকে এই লেনদেনটি ছিল তার হ্যাস। পেন্ডিং হলে `null`। +- `blockNumber`: `QUANTITY` - যে ব্লক নম্বরে এই লেনদেনটি ছিল। পেন্ডিং হলে `null`। +- `from`: `DATA`, 20 Bytes - প্রেরকের এডড্রেস। +- `gas`: `QUANTITY` - প্রেরক দ্বারা প্রদত্ত গ্যাস। +- `gasPrice`: `QUANTITY` - Wei-তে প্রেরক দ্বারা প্রদত্ত গ্যাস প্রাইস। +- `hash`: `DATA`, 32 Bytes - লেনদেনের হ্যাস। +- `input`: `DATA` - লেনদেনের সাথে পাঠানো ডাটা। +- `nonce`: `QUANTITY` - এর আগে প্রেরক দ্বারা করা লেনদেনের সংখ্যা। +- `to`: `DATA`, 20 Bytes - প্রাপকের এডড্রেস। কন্ট্রাক্ট তৈরির লেনদেন হলে `null`। +- `transactionIndex`: `QUANTITY` - ব্লকে লেনদেনের ইনডেক্স পজিশনের ইন্টিজার। পেন্ডিং হলে `null`। +- `value`: `QUANTITY` - Wei-তে ট্রান্সফার করা ভ্যালু। +- `v`: `QUANTITY` - ECDSA রিকভারি আইডি +- `r`: `QUANTITY` - ECDSA সিগনেচার r +- `s`: `QUANTITY` - ECDSA সিগনেচার s **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' -// Result +// ফলাফল { "jsonrpc":"2.0", "id":1, @@ -1297,7 +1297,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","param ### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} -ব্লক হ্যাস এবং লেনদেন সূচক অবস্থান দ্বারা একটি লেনদেন সম্পর্কে তথ্য প্রদান করে। +ব্লক হ্যাস এবং লেনদেনের ইনডেক্স পজিশন দ্বারা একটি লেনদেন সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1305,8 +1305,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","param **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি ব্লকের হ্যাস। -2. `কোয়ান্টিটি` - লেনদেন সূচকের অবস্থানের পূর্ণসংখ্যা। +1. `DATA`, 32 Bytes - একটি ব্লকের হ্যাস। +2. `QUANTITY` - লেনদেনের ইনডেক্স পজিশনের ইন্টিজার। ```js params: [ @@ -1315,21 +1315,21 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getTransactionByHash](#eth_gettransactionbyhash) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' ``` -ফলাফল দেখুন [eth_getTransactionByHash](#eth_gettransactionbyhash) +ফলাফল [eth_getTransactionByHash](#eth_gettransactionbyhash) দেখুন ### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} -ব্লক নম্বর এবং লেনদেন সূচক অবস্থান দ্বারা একটি লেনদেন সম্পর্কে তথ্য প্রদান করে। +ব্লক নম্বর এবং লেনদেনের ইনডেক্স পজিশন দ্বারা একটি লেনদেন সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1337,8 +1337,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAnd **প্যারামিটার** -1. `কোয়ান্টিটি|ট্যাগ` - একটি ব্লক নম্বর, বা `"আর্লিয়েস্ট"`, `"লেটেস্ট"`, `"পেন্ডিং"`, `"সেফ"` বা `"ফাইনালইজড"` স্ট্রিং, যেমন [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter)-এ। -2. `কোয়ান্টিটি` - লেনদেন সূচক অবস্থান। +1. `QUANTITY|TAG` - একটি ব্লক নম্বর, অথবা স্ট্রিং `"earliest"`, `"latest"`, `"pending"`, `"safe"` বা `"finalized"`, যেমনটি [block parameter](/developers/docs/apis/json-rpc/#block-parameter)-এ আছে। +2. `QUANTITY` - লেনদেনের ইনডেক্স পজিশন। ```js params: [ @@ -1347,60 +1347,60 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getTransactionByHash](#eth_gettransactionbyhash) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' ``` -ফলাফল দেখুন [eth_getTransactionByHash](#eth_gettransactionbyhash) +ফলাফল [eth_getTransactionByHash](#eth_gettransactionbyhash) দেখুন ### eth_getTransactionReceipt {#eth_gettransactionreceipt} -লেনদেনের হ্যাসের মাধ্যমে একটি লেনদেনের রসিদ প্রদান করে। +লেনদেনের হ্যাস দ্বারা একটি লেনদেনের রিসিপ্ট রিটার্ন করে। -**দ্রষ্টব্য** পেন্ডিং লেনদেনের জন্য রসিদ উপলব্ধ নয়। +**নোট** পেন্ডিং লেনদেনের জন্য রিসিপ্ট উপলব্ধ নয়। **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি লেনদেনের হ্যাস +1. `DATA`, 32 Bytes - লেনদেনের হ্যাস ```js params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] ``` -**রিটার্ন** -`অবজেক্ট` - একটি লেনদেন রসিদ অবজেক্ট, অথবা যখন কোনো রসিদ পাওয়া যায়নি তখন `null`: +**রিটার্নস** +`Object` - একটি লেনদেন রিসিপ্ট অবজেক্ট, অথবা কোনো রিসিপ্ট পাওয়া না গেলে `null`: -- `transactionHash `: `DATA`, 32 বাইট - লেনদেনের হ্যাস। -- `transactionIndex`: `কোয়ান্টিটি` - ব্লকের লেনদেন সূচকের অবস্থানের পূর্ণসংখ্যা। -- `blockHash`: `DATA`, 32 বাইট - এই লেনদেনটি যে ব্লকে ছিল তার হ্যাস। -- `blockNumber`: `কোয়ান্টিটি` - ব্লক নম্বর যেখানে এই লেনদেনটি ছিল। -- `from`: `DATA`, 20 বাইট - প্রেরকের অ্যাড্রেস। -- `to`: `DATA`, 20 বাইট - প্রাপকের অ্যাড্রেস। null যখন এটি একটি চুক্তি তৈরির লেনদেন হয়। -- `cumulativeGasUsed` : `কোয়ান্টিটি ` - ব্লকের মধ্যে এই লেনদেনটি কার্যকর করার সময় ব্যবহৃত মোট গ্যাসের পরিমাণ। -- `effectiveGasPrice` : `কোয়ান্টিটি` - প্রতি ইউনিট গ্যাসের জন্য প্রদত্ত বেস ফি এবং টিপের যোগফল। -- `gasUsed `: `কোয়ান্টিটি ` - শুধুমাত্র এই নির্দিষ্ট লেনদেন দ্বারা ব্যবহৃত গ্যাসের পরিমাণ। -- `contractAddress `: `DATA`, 20 বাইট - তৈরি করা চুক্তির অ্যাড্রেস, যদি লেনদেনটি একটি চুক্তি তৈরি করে থাকে, অন্যথায় `null`। -- `logs`: `অ্যারে` - লগ অবজেক্টের অ্যারে, যা এই লেনদেনটি তৈরি করেছে। -- `logsBloom`: `DATA`, 256 বাইট - হালকা ক্লায়েন্টদের জন্য সম্পর্কিত লগগুলি দ্রুত পুনরুদ্ধার করার জন্য ব্লুম ফিল্টার। -- `type`: `কোয়ান্টিটি` - লেনদেনের প্রকারের পূর্ণসংখ্যা, লেগ্যাসি লেনদেনের জন্য `0x0`, অ্যাক্সেস তালিকা প্রকারের জন্য `0x1`, ডাইনামিক ফি-র জন্য `0x2`। +- `transactionHash `: `DATA`, 32 Bytes - লেনদেনের হ্যাস। +- `transactionIndex`: `QUANTITY` - ব্লকে লেনদেনের ইনডেক্স পজিশনের ইন্টিজার। +- `blockHash`: `DATA`, 32 Bytes - যে ব্লকে এই লেনদেনটি ছিল তার হ্যাস। +- `blockNumber`: `QUANTITY` - যে ব্লক নম্বরে এই লেনদেনটি ছিল। +- `from`: `DATA`, 20 Bytes - প্রেরকের এডড্রেস। +- `to`: `DATA`, 20 Bytes - প্রাপকের এডড্রেস। কন্ট্রাক্ট তৈরির লেনদেন হলে null। +- `cumulativeGasUsed` : `QUANTITY ` - ব্লকে এই লেনদেনটি এক্সিকিউট হওয়ার সময় ব্যবহৃত মোট গ্যাসের পরিমাণ। +- `effectiveGasPrice` : `QUANTITY` - প্রতি ইউনিট গ্যাসের জন্য প্রদত্ত বেস ফি এবং টিপের যোগফল। +- `gasUsed `: `QUANTITY ` - শুধুমাত্র এই নির্দিষ্ট লেনদেন দ্বারা ব্যবহৃত গ্যাসের পরিমাণ। +- `contractAddress `: `DATA`, 20 Bytes - তৈরি করা কন্ট্রাক্ট এডড্রেস, যদি লেনদেনটি একটি কন্ট্রাক্ট তৈরি করে থাকে, অন্যথায় `null`। +- `logs`: `Array` - লগ অবজেক্টের অ্যারে, যা এই লেনদেনটি জেনারেট করেছে। +- `logsBloom`: `DATA`, 256 Bytes - লাইট ক্লায়েন্টদের দ্রুত সম্পর্কিত লগগুলো রিট্রিভ করার জন্য ব্লুম ফিল্টার। +- `type`: `QUANTITY` - লেনদেনের ধরনের ইন্টিজার, লিগ্যাসি লেনদেনের জন্য `0x0`, এক্সেস লিস্ট টাইপের জন্য `0x1`, ডায়নামিক ফির জন্য `0x2`। -এটি _যেকোনো একটি_ রিটার্ন করে: +এটি আরও রিটার্ন করে _যেকোনো একটি_ : -- `root`: `DATA` 32 বাইটের পোস্ট-ট্রানজ্যাকশন স্টেট রুট (বাইজেন্টিয়াম-পূর্ব) -- `status`: `কোয়ান্টিটি` হয় `1` (সাফল্য) বা `0` (ব্যর্থতা) +- `root` : `DATA` 32 bytes পোস্ট-ট্রানজেকশন স্টেট রুট (Byzantium এর আগে) +- `status`: `QUANTITY` হয় `1` (সফল) অথবা `0` (ব্যর্থ) **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' -// Result +// ফলাফল { "jsonrpc": "2.0", "id": 1, @@ -1408,15 +1408,15 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","para "blockHash": "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", "blockNumber": "0xeff35f", - "contractAddress": null, // string of the address if it was created + "contractAddress": null, // ঠিকানাটি তৈরি করা হলে তার স্ট্রিং "cumulativeGasUsed": "0xa12515", "effectiveGasPrice": "0x5a9c688d4", "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", "gasUsed": "0xb4c8", "logs": [{ - // logs as returned by getFilterLogs, etc. + // getFilterLogs ইত্যাদি দ্বারা রিটার্ন করা লগ }], - "logsBloom": "0x00...0", // 256 byte bloom filter + "logsBloom": "0x00...0", // 256 বাইট ব্লুম ফিল্টার "status": "0x1", "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "transactionHash": @@ -1429,7 +1429,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","para ### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} -হ্যাস এবং আঙ্কেল ইনডেক্স পজিশন দ্বারা একটি ব্লকের আঙ্কেল সম্পর্কে তথ্য প্রদান করে। +হ্যাস এবং আঙ্কেল ইনডেক্স পজিশন দ্বারা একটি ব্লকের আঙ্কেল সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1437,8 +1437,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","para **প্যারামিটার** -1. `DATA`, 32 বাইট - একটি ব্লকের হ্যাস। -2. `কোয়ান্টিটি` - আঙ্কেলের সূচক অবস্থান। +1. `DATA`, 32 Bytes - একটি ব্লকের হ্যাস। +2. `QUANTITY` - আঙ্কেলের ইনডেক্স পজিশন। ```js params: [ @@ -1447,23 +1447,23 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getBlockByHash](#eth_getblockbyhash) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' ``` -ফলাফল দেখুন [eth_getBlockByHash](#eth_getblockbyhash) +ফলাফল [eth_getBlockByHash](#eth_getblockbyhash) দেখুন -**দ্রষ্টব্য**: একটি আঙ্কেলের মধ্যে পৃথক লেনদেন থাকে না। +**নোট**: একটি আঙ্কেলে আলাদা কোনো লেনদেন থাকে না। ### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} -নম্বর এবং আঙ্কেল ইনডেক্স পজিশন দ্বারা একটি ব্লকের আঙ্কেল সম্পর্কে তথ্য প্রদান করে। +নম্বর এবং আঙ্কেল ইনডেক্স পজিশন দ্বারা একটি ব্লকের আঙ্কেল সম্পর্কে তথ্য রিটার্ন করে। প্লেগ্রাউন্ডে এন্ডপয়েন্ট চেষ্টা করুন @@ -1471,8 +1471,8 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex" **প্যারামিটার** -1. `কোয়ান্টিটি|ট্যাগ` - একটি ব্লক নম্বর, বা `"আর্লিয়েস্ট"`, `"লেটেস্ট"`, `"পেন্ডিং"`, `"সেফ"`, `"ফাইনালইজড"` স্ট্রিং, যেমন [ব্লক প্যারামিটার](/developers/docs/apis/json-rpc/#block-parameter)-এ। -2. `কোয়ান্টিটি` - আঙ্কেলের সূচক অবস্থান। +1. `QUANTITY|TAG` - একটি ব্লক নম্বর, অথবা স্ট্রিং `"earliest"`, `"latest"`, `"pending"`, `"safe"`, `"finalized"`, যেমনটি [block parameter](/developers/docs/apis/json-rpc/#block-parameter)-এ আছে। +2. `QUANTITY` - আঙ্কেলের ইনডেক্স পজিশন। ```js params: [ @@ -1481,41 +1481,41 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getBlockByHash](#eth_getblockbyhash) দেখুন -**দ্রষ্টব্য**: একটি আঙ্কেলের মধ্যে পৃথক লেনদেন থাকে না। +**নোট**: একটি আঙ্কেলে আলাদা কোনো লেনদেন থাকে না। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' ``` -ফলাফল দেখুন [eth_getBlockByHash](#eth_getblockbyhash) +ফলাফল [eth_getBlockByHash](#eth_getblockbyhash) দেখুন ### eth_newFilter {#eth_newfilter} -ফিল্টার বিকল্পের উপর ভিত্তি করে একটি ফিল্টার অবজেক্ট তৈরি করে, যা স্টেট পরিবর্তন হলে (লগ) অবহিত করে। -স্টেট পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। +স্টেট পরিবর্তন (লগ) হলে নোটিফাই করার জন্য ফিল্টার অপশনের উপর ভিত্তি করে একটি ফিল্টার অবজেক্ট তৈরি করে। +স্টেট পরিবর্তন হয়েছে কিনা তা চেক করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। -**বিষয় ফিল্টার নির্দিষ্ট করার উপর একটি নোট:** -বিষয়গুলি ক্রম-নির্ভর। [A, B] বিষয় সহ একটি লগের সাথে একটি লেনদেন নিম্নলিখিত বিষয় ফিল্টার দ্বারা মেলানো হবে: +**টপিক ফিল্টার নির্দিষ্ট করার বিষয়ে একটি নোট:** +টপিকগুলো অর্ডার-নির্ভর। [A, B] টপিক সহ একটি লগের লেনদেন নিচের টপিক ফিল্টারগুলোর সাথে মিলে যাবে: - `[]` "যেকোনো কিছু" -- `[A]` "প্রথম অবস্থানে A (এবং পরে যেকোনো কিছু)" -- `[null, B]` "প্রথম অবস্থানে যেকোনো কিছু এবং দ্বিতীয় অবস্থানে B (এবং পরে যেকোনো কিছু)" -- `[A, B]` "প্রথম অবস্থানে A এবং দ্বিতীয় অবস্থানে B (এবং পরে যেকোনো কিছু)" -- `[[A, B], [A, B]]` "প্রথম অবস্থানে (A অথবা B) এবং দ্বিতীয় অবস্থানে (A অথবা B) (এবং পরে যেকোনো কিছু)" +- `[A]` "প্রথম পজিশনে A (এবং এরপর যেকোনো কিছু)" +- `[null, B]` "প্রথম পজিশনে যেকোনো কিছু এবং দ্বিতীয় পজিশনে B (এবং এরপর যেকোনো কিছু)" +- `[A, B]` "প্রথম পজিশনে A এবং দ্বিতীয় পজিশনে B (এবং এরপর যেকোনো কিছু)" +- `[[A, B], [A, B]]` "প্রথম পজিশনে (A অথবা B) এবং দ্বিতীয় পজিশনে (A অথবা B) (এবং এরপর যেকোনো কিছু)" - **প্যারামিটার** -1. `অবজেক্ট` - ফিল্টার বিকল্পগুলি: +1. `Object` - ফিল্টার অপশনগুলো: -- `fromBlock`: `কোয়ান্টিটি|ট্যাগ` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) পূর্ণসংখ্যার ব্লক নম্বর, অথবা শেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। -- `toBlock`: `কোয়ান্টিটি|ট্যাগ` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) পূর্ণসংখ্যার ব্লক নম্বর, অথবা শেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। -- `address`: `DATA|অ্যারে`, 20 বাইট - (ঐচ্ছিক) চুক্তির অ্যাড্রেস বা অ্যাড্রেসের একটি তালিকা যেখান থেকে লগ উৎপন্ন হওয়া উচিত। -- `topics`: `DATA-এর অ্যারে`, - (ঐচ্ছিক) 32 বাইট `DATA` বিষয়গুলির অ্যারে। বিষয়গুলি ক্রম-নির্ভর। প্রতিটি বিষয় "অথবা" বিকল্পগুলির সাথে DATA-এর একটি অ্যারেও হতে পারে। +- `fromBlock`: `QUANTITY|TAG` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) ইন্টিজার ব্লক নম্বর, অথবা সর্বশেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। +- `toBlock`: `QUANTITY|TAG` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) ইন্টিজার ব্লক নম্বর, অথবা সর্বশেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। +- `address`: `DATA|Array`, 20 Bytes - (ঐচ্ছিক) কন্ট্রাক্ট এডড্রেস বা এডড্রেসগুলোর একটি তালিকা যেখান থেকে লগগুলো উৎপন্ন হওয়া উচিত। +- `topics`: `Array of DATA`, - (ঐচ্ছিক) 32 Bytes `DATA` টপিকের অ্যারে। টপিকগুলো অর্ডার-নির্ভর। প্রতিটি টপিক "or" অপশন সহ DATA এর একটি অ্যারেও হতে পারে। ```js params: [ @@ -1535,15 +1535,15 @@ params: [ ] ``` -**রিটার্ন** -`কোয়ান্টিটি` - একটি ফিল্টার আইডি। +**রিটার্নস** +`QUANTITY` - একটি ফিল্টার আইডি। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1553,21 +1553,21 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topic ### eth_newBlockFilter {#eth_newblockfilter} -নোডে একটি ফিল্টার তৈরি করে, যা নতুন ব্লক এলে অবহিত করে। -স্টেট পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। +নতুন ব্লক আসলে নোটিফাই করার জন্য নোডে একটি ফিল্টার তৈরি করে। +স্টেট পরিবর্তন হয়েছে কিনা তা চেক করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। **প্যারামিটার** -কোনোটিই নয় +কোনোটি নয় -**রিটার্ন** -`কোয়ান্টিটি` - একটি ফিল্টার আইডি। +**রিটার্নস** +`QUANTITY` - একটি ফিল্টার আইডি। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1577,21 +1577,21 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[], ### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} -নোডে একটি ফিল্টার তৈরি করে, যা নতুন পেন্ডিং লেনদেন এলে অবহিত করে। -স্টেট পরিবর্তিত হয়েছে কিনা তা পরীক্ষা করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। +নতুন পেন্ডিং লেনদেন আসলে নোটিফাই করার জন্য নোডে একটি ফিল্টার তৈরি করে। +স্টেট পরিবর্তন হয়েছে কিনা তা চেক করতে, [eth_getFilterChanges](#eth_getfilterchanges) কল করুন। **প্যারামিটার** -কোনোটিই নয় +কোনোটি নয় -**রিটার্ন** -`কোয়ান্টিটি` - একটি ফিল্টার আইডি। +**রিটার্নস** +`QUANTITY` - একটি ফিল্টার আইডি। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1601,12 +1601,11 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter" ### eth_uninstallFilter {#eth_uninstallfilter} -প্রদত্ত আইডি সহ একটি ফিল্টার আনইনস্টল করে। যখন আর দেখার প্রয়োজন নেই তখন সর্বদা কল করা উচিত। -অতিরিক্তভাবে, ফিল্টারগুলি যখন একটি নির্দিষ্ট সময়ের জন্য [eth_getFilterChanges](#eth_getfilterchanges) দিয়ে অনুরোধ করা হয় না তখন টাইমআউট হয়ে যায়। +প্রদত্ত আইডি সহ একটি ফিল্টার আনইনস্টল করে। যখন আর ওয়াচ করার প্রয়োজন নেই তখন এটি সর্বদা কল করা উচিত। এছাড়া একটি নির্দিষ্ট সময়ের জন্য [eth_getFilterChanges](#eth_getfilterchanges) দিয়ে রিকোয়েস্ট করা না হলে ফিল্টারগুলো টাইমআউট হয়ে যায়। **প্যারামিটার** -1. `কোয়ান্টিটি` - ফিল্টার আইডি। +1. `QUANTITY` - ফিল্টার আইডি। ```js params: [ @@ -1614,15 +1613,15 @@ params: [ ] ``` -**রিটার্ন** -`বুলিয়ান` - যদি ফিল্টারটি সফলভাবে আনইনস্টল করা হয় তবে `সত্য`, অন্যথায় `মিথ্যা`। +**রিটার্নস** +`Boolean` - ফিল্টারটি সফলভাবে আনইনস্টল হলে `true`, অন্যথায় `false`। **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' -// Result +// ফলাফল { "id":1, "jsonrpc": "2.0", @@ -1632,11 +1631,11 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":[" ### eth_getFilterChanges {#eth_getfilterchanges} -একটি ফিল্টারের জন্য পোলিং পদ্ধতি, যা শেষ পোলের পর থেকে ঘটে যাওয়া লগগুলির একটি অ্যারে প্রদান করে। +একটি ফিল্টারের জন্য পোলিং মেথড, যা শেষ পোলের পর থেকে ঘটা লগগুলোর একটি অ্যারে রিটার্ন করে। **প্যারামিটার** -1. `কোয়ান্টিটি` - ফিল্টার আইডি। +1. `QUANTITY` - ফিল্টার আইডি। ```js params: [ @@ -1644,30 +1643,28 @@ params: [ ] ``` -**রিটার্ন** -`অ্যারে` - লগ অবজেক্টের অ্যারে, অথবা যদি শেষ পোল থেকে কিছু পরিবর্তন না হয় তবে একটি খালি অ্যারে। - -- `eth_newBlockFilter` দিয়ে তৈরি ফিল্টারগুলির জন্য রিটার্ন হল ব্লক হ্যাস (`DATA`, 32 বাইট), যেমন, `["0x3454645634534..."]`। +**রিটার্নস** +`Array` - লগ অবজেক্টের অ্যারে, অথবা শেষ পোলের পর থেকে কিছু পরিবর্তন না হলে একটি খালি অ্যারে। -- `eth_newPendingTransactionFilter` দিয়ে তৈরি ফিল্টারগুলির জন্য রিটার্ন হল ট্রানজ্যাকশন হ্যাস (`DATA`, 32 বাইট), যেমন, `["0x6345343454645..."]`। - -- `eth_newFilter` দিয়ে তৈরি করা ফিল্টারের জন্য লগগুলি নিম্নলিখিত প্যারামিটার সহ অবজেক্ট: - - `removed`: `ট্যাগ` - চেইন পুনর্গঠনের কারণে লগটি সরানো হলে `সত্য`। `মিথ্যা` যদি এটি একটি বৈধ লগ হয়। - - `logIndex`: `কোয়ান্টিটি` - ব্লকের লগ সূচকের অবস্থানের পূর্ণসংখ্যা। `null` যখন এটি পেন্ডিং লগ থাকে। - - `transactionIndex`: `কোয়ান্টিটি` - লগটি যেখান থেকে তৈরি করা হয়েছে সেই লেনদেন সূচকের অবস্থানের পূর্ণসংখ্যা। `null` যখন এটি পেন্ডিং লগ থাকে। - - `transactionHash`: `DATA`, 32 বাইট - এই লগটি যেখান থেকে তৈরি করা হয়েছে সেই লেনদেনের হ্যাস। `null` যখন এটি পেন্ডিং লগ থাকে। - - `blockHash`: `DATA`, 32 বাইট - এই লগটি যে ব্লকে ছিল তার হ্যাস। `null` যখন এটি পেন্ডিং থাকে। `null` যখন এটি পেন্ডিং লগ থাকে। - - `blockNumber`: `কোয়ান্টিটি` - এই লগটি যে ব্লকে ছিল তার ব্লক নম্বর। `null` যখন এটি পেন্ডিং থাকে। `null` যখন এটি পেন্ডিং লগ থাকে। - - `address`: `DATA`, 20 বাইট - যে অ্যাড্রেস থেকে এই লগটি উৎপন্ন হয়েছে। - - `data`: `DATA` - পরিবর্তনশীল-দৈর্ঘ্যের নন-ইনডেক্সড লগ ডেটা। ( _solidity_-তে: শূন্য বা তার বেশি 32 বাইটের নন-ইনডেক্সড লগ আর্গুমেন্ট।) - - `topics`: `DATA-এর অ্যারে` - সূচিত লগ আর্গুমেন্টের 0 থেকে 4টি 32 বাইট `DATA`-এর অ্যারে। ( _solidity_-তে: প্রথম টপিকটি হল ইভেন্টের স্বাক্ষরের _হ্যাস_ (যেমন, `Deposit(address,bytes32,uint256)`), যদি না আপনি `anonymous` স্পেসিফায়ার দিয়ে ইভেন্টটি ঘোষণা করেন।) +- `eth_newBlockFilter` দিয়ে তৈরি ফিল্টারের জন্য রিটার্ন হলো ব্লক হ্যাস (`DATA`, 32 Bytes), যেমন, `["0x3454645634534..."]`। +- `eth_newPendingTransactionFilter ` দিয়ে তৈরি ফিল্টারের জন্য রিটার্ন হলো লেনদেনের হ্যাস (`DATA`, 32 Bytes), যেমন, `["0x6345343454645..."]`। +- `eth_newFilter` দিয়ে তৈরি ফিল্টারের জন্য লগগুলো হলো নিচের প্যারাম সহ অবজেক্ট: + - `removed`: `TAG` - চেইন রিঅর্গানাইজেশনের কারণে লগটি রিমুভ করা হলে `true`। এটি একটি ভ্যালিড লগ হলে `false`। + - `logIndex`: `QUANTITY` - ব্লকে লগের ইনডেক্স পজিশনের ইন্টিজার। পেন্ডিং লগ হলে `null`। + - `transactionIndex`: `QUANTITY` - যে লেনদেনের ইনডেক্স পজিশন থেকে লগটি তৈরি করা হয়েছিল তার ইন্টিজার। পেন্ডিং লগ হলে `null`। + - `transactionHash`: `DATA`, 32 Bytes - যে লেনদেন থেকে এই লগটি তৈরি করা হয়েছিল তার হ্যাস। পেন্ডিং লগ হলে `null`। + - `blockHash`: `DATA`, 32 Bytes - যে ব্লকে এই লগটি ছিল তার হ্যাস। পেন্ডিং হলে `null`। পেন্ডিং লগ হলে `null`। + - `blockNumber`: `QUANTITY` - যে ব্লক নম্বরে এই লগটি ছিল। পেন্ডিং হলে `null`। পেন্ডিং লগ হলে `null`। + - `address`: `DATA`, 20 Bytes - যে এডড্রেস থেকে এই লগটি উৎপন্ন হয়েছে। + - `data`: `DATA` - ভেরিয়েবল-লেংথ নন-ইনডেক্সড লগ ডাটা। (_solidity_-তে: শূন্য বা ততোধিক 32 Bytes নন-ইনডেক্সড লগ আর্গুমেন্ট।) + - `topics`: `Array of DATA` - ইনডেক্সড লগ আর্গুমেন্টের 0 থেকে 4টি 32 Bytes `DATA` এর অ্যারে। (_solidity_-তে: প্রথম টপিকটি হলো ইভেন্টের সিগনেচারের _হ্যাস_ (যেমন, `Deposit(address,bytes32,uint256)`), যদি না আপনি ইভেন্টটিকে `anonymous` স্পেসিফায়ার দিয়ে ডিক্লেয়ার করে থাকেন।) - **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' -// Result +// ফলাফল { "id":1, "jsonrpc":"2.0", @@ -1688,11 +1685,11 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":[ ### eth_getFilterLogs {#eth_getfilterlogs} -প্রদত্ত আইডি সহ ফিল্টারের সাথে মিলে যাওয়া সমস্ত লগের একটি অ্যারে প্রদান করে। +প্রদত্ত আইডি সহ ফিল্টারের সাথে মিলে যাওয়া সব লগের একটি অ্যারে রিটার্ন করে। **প্যারামিটার** -1. `কোয়ান্টিটি` - ফিল্টার আইডি। +1. `QUANTITY` - ফিল্টার আইডি। ```js params: [ @@ -1700,31 +1697,31 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getFilterChanges](#eth_getfilterchanges) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' ``` -ফলাফল দেখুন [eth_getFilterChanges](#eth_getfilterchanges) +ফলাফল [eth_getFilterChanges](#eth_getfilterchanges) দেখুন ### eth_getLogs {#eth_getlogs} -একটি প্রদত্ত ফিল্টার অবজেক্টের সাথে মিলে যাওয়া সমস্ত লগের একটি অ্যারে প্রদান করে। +প্রদত্ত ফিল্টার অবজেক্টের সাথে মিলে যাওয়া সব লগের একটি অ্যারে রিটার্ন করে। **প্যারামিটার** -1. `অবজেক্ট` - ফিল্টার বিকল্পগুলি: +1. `Object` - ফিল্টার অপশনগুলো: -- `fromBlock`: `কোয়ান্টিটি|ট্যাগ` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) পূর্ণসংখ্যার ব্লক নম্বর, অথবা শেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। -- `toBlock`: `কোয়ান্টিটি|ট্যাগ` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) পূর্ণসংখ্যার ব্লক নম্বর, অথবা শেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। -- `address`: `DATA|অ্যারে`, 20 বাইট - (ঐচ্ছিক) চুক্তির অ্যাড্রেস বা অ্যাড্রেসের একটি তালিকা যেখান থেকে লগ উৎপন্ন হওয়া উচিত। -- `topics`: `DATA-এর অ্যারে`, - (ঐচ্ছিক) 32 বাইট `DATA` বিষয়গুলির অ্যারে। বিষয়গুলি ক্রম-নির্ভর। প্রতিটি বিষয় "অথবা" বিকল্পগুলির সাথে DATA-এর একটি অ্যারেও হতে পারে। -- `blockHash`: `DATA`, 32 বাইট - (ঐচ্ছিক, **ভবিষ্যৎ**) EIP-234 যোগ করার সাথে, `blockHash` একটি নতুন ফিল্টার বিকল্প হবে যা 32-বাইট হ্যাস `blockHash`-এর সাথে একক ব্লকে প্রত্যাবর্তিত লগগুলিকে সীমাবদ্ধ করে। `blockHash` ব্যবহার করা `fromBlock` = `toBlock` = হ্যাস `blockHash`-এর সাথে ব্লক নম্বরের সমান। যদি ফিল্টার মানদণ্ডে `blockHash` উপস্থিত থাকে, তবে `fromBlock` বা `toBlock` কোনোটিরই অনুমতি নেই। +- `fromBlock`: `QUANTITY|TAG` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) ইন্টিজার ব্লক নম্বর, অথবা সর্বশেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। +- `toBlock`: `QUANTITY|TAG` - (ঐচ্ছিক, ডিফল্ট: `"latest"`) ইন্টিজার ব্লক নম্বর, অথবা সর্বশেষ প্রস্তাবিত ব্লকের জন্য `"latest"`, সর্বশেষ নিরাপদ ব্লকের জন্য `"safe"`, সর্বশেষ চূড়ান্ত ব্লকের জন্য `"finalized"`, অথবা এখনও ব্লকে না থাকা লেনদেনের জন্য `"pending"`, `"earliest"`। +- `address`: `DATA|Array`, 20 Bytes - (ঐচ্ছিক) কন্ট্রাক্ট এডড্রেস বা এডড্রেসগুলোর একটি তালিকা যেখান থেকে লগগুলো উৎপন্ন হওয়া উচিত। +- `topics`: `Array of DATA`, - (ঐচ্ছিক) 32 Bytes `DATA` টপিকের অ্যারে। টপিকগুলো অর্ডার-নির্ভর। প্রতিটি টপিক "or" অপশন সহ DATA এর একটি অ্যারেও হতে পারে। +- `blockHash`: `DATA`, 32 Bytes - (ঐচ্ছিক, **ভবিষ্যৎ**) EIP-234 যুক্ত হওয়ার সাথে সাথে, `blockHash` একটি নতুন ফিল্টার অপশন হবে যা রিটার্ন করা লগগুলোকে 32-বাইট হ্যাস `blockHash` সহ একক ব্লকে সীমাবদ্ধ করে। `blockHash` ব্যবহার করা `fromBlock` = `toBlock` = `blockHash` হ্যাস সহ ব্লক নম্বরের সমতুল্য। যদি ফিল্টার ক্রাইটেরিয়াতে `blockHash` উপস্থিত থাকে, তবে `fromBlock` বা `toBlock` কোনোটিই অনুমোদিত নয়। ```js params: [ @@ -1736,25 +1733,25 @@ params: [ ] ``` -**রিটার্ন** +**রিটার্নস** [eth_getFilterChanges](#eth_getfilterchanges) দেখুন **উদাহরণ** ```js -// Request +// রিকোয়েস্ট curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' ``` -ফলাফল দেখুন [eth_getFilterChanges](#eth_getfilterchanges) +ফলাফল [eth_getFilterChanges](#eth_getfilterchanges) দেখুন ## ব্যবহারের উদাহরণ {#usage-example} -### JSON_RPC ব্যবহার করে একটি চুক্তি ডিপ্লয় করা {#deploying-contract} +### JSON_RPC ব্যবহার করে একটি কন্ট্রাক্ট ডিপ্লয় করা {#deploying-contract} -এই বিভাগে শুধুমাত্র RPC ইন্টারফেস ব্যবহার করে কীভাবে একটি চুক্তি ডিপ্লয় করতে হয় তার একটি প্রদর্শন অন্তর্ভুক্ত রয়েছে। চুক্তি ডিপ্লয় করার জন্য বিকল্প পথ রয়েছে যেখানে এই জটিলতাটি বিমূর্ত করা হয়—উদাহরণস্বরূপ, RPC ইন্টারফেসের উপরে নির্মিত লাইব্রেরি ব্যবহার করে যেমন [web3.js](https://web3js.readthedocs.io/) এবং [web3.py](https://github.com/ethereum/web3.py)। এই বিমূর্ততাগুলি সাধারণত বোঝা সহজ এবং কম ত্রুটি-প্রবণ, তবে হুডের নীচে কী ঘটছে তা বোঝা এখনও সহায়ক। +এই বিভাগে শুধুমাত্র RPC ইন্টারফেস ব্যবহার করে কীভাবে একটি কন্ট্রাক্ট ডিপ্লয় করতে হয় তার একটি ডেমোনস্ট্রেশন বা প্রদর্শন অন্তর্ভুক্ত রয়েছে। কন্ট্রাক্ট ডিপ্লয় করার বিকল্প উপায় রয়েছে যেখানে এই জটিলতাগুলো বিমূর্ত (abstracted) করা হয়—উদাহরণস্বরূপ, RPC ইন্টারফেসের উপর তৈরি লাইব্রেরি যেমন [web3.js](https://web3js.readthedocs.io/) এবং [web3.py](https://github.com/ethereum/web3.py) ব্যবহার করে। এই অ্যাবস্ট্রাকশনগুলো সাধারণত বুঝতে সহজ এবং এতে ভুলের সম্ভাবনা কম থাকে, তবে এর পেছনের কাজগুলো কীভাবে হচ্ছে তা বোঝা এখনও বেশ সহায়ক। -নিম্নলিখিতটি `Multiply7` নামক একটি সহজবোধ্য স্মার্ট কন্ট্র্যাক্ট যা একটি Ethereum নোডে JSON-RPC ইন্টারফেস ব্যবহার করে ডিপ্লয় করা হবে। এই টিউটোরিয়ালটি ধরে নেয় যে পাঠক ইতিমধ্যে একটি Geth নোড চালাচ্ছেন। নোড এবং ক্লায়েন্ট সম্পর্কে আরও তথ্য [এখানে](/developers/docs/nodes-and-clients/run-a-node) পাওয়া যায়। অ-Geth ক্লায়েন্টদের জন্য HTTP JSON-RPC কীভাবে শুরু করতে হয় তা দেখতে অনুগ্রহ করে পৃথক [ক্লায়েন্ট](/developers/docs/nodes-and-clients/) ডকুমেন্টেশন পড়ুন। বেশিরভাগ ক্লায়েন্ট ডিফল্টভাবে `localhost:8545`-এ পরিবেশন করে। +নিচে `Multiply7` নামের একটি সাধারণ স্মার্ট কন্ট্রাক্ট দেওয়া হলো যা JSON-RPC ইন্টারফেস ব্যবহার করে একটি ইথিরিয়াম নোড-এ ডিপ্লয় করা হবে। এই টিউটোরিয়ালটি ধরে নেয় যে পাঠক ইতিমধ্যে একটি Geth নোড চালাচ্ছেন। নোড এবং ক্লায়েন্ট সম্পর্কে আরও তথ্য [এখানে](/developers/docs/nodes-and-clients/run-a-node) পাওয়া যাবে। নন-Geth ক্লায়েন্টগুলোর জন্য কীভাবে HTTP JSON-RPC চালু করতে হয় তা দেখতে অনুগ্রহ করে নির্দিষ্ট [ক্লায়েন্ট](/developers/docs/nodes-and-clients/) ডকুমেন্টেশন দেখুন। বেশিরভাগ ক্লায়েন্ট ডিফল্টভাবে `localhost:8545`-এ সার্ভ করে। ```javascript contract Multiply7 { @@ -1766,15 +1763,15 @@ contract Multiply7 { } ``` -প্রথমত, নিশ্চিত করতে হবে যে HTTP RPC ইন্টারফেস সক্ষম আছে। এর মানে আমরা স্টার্টআপে Geth-কে `--http` ফ্ল্যাগ দিয়ে সরবরাহ করি। এই উদাহরণে আমরা একটি ব্যক্তিগত উন্নয়ন চেইনে Geth নোড ব্যবহার করি। এই পদ্ধতি ব্যবহার করে আমাদের আসল নেটওয়ার্কে ইথারের প্রয়োজন নেই। +প্রথমেই নিশ্চিত করতে হবে যে HTTP RPC ইন্টারফেসটি চালু আছে। এর মানে হলো স্টার্টআপের সময় আমরা Geth-কে `--http` ফ্ল্যাগ প্রদান করি। এই উদাহরণে আমরা একটি প্রাইভেট ডেভেলপমেন্ট চেইনে Geth নোড ব্যবহার করছি। এই পদ্ধতি ব্যবহার করলে আসল নেটওয়ার্ক-এ আমাদের ইথার (ether)-এর প্রয়োজন হবে না। ```bash geth --http --dev console 2>>geth.log ``` -এটি `http://localhost:8545`-এ HTTP RPC ইন্টারফেস শুরু করবে। +এটি `http://localhost:8545`-এ HTTP RPC ইন্টারফেস চালু করবে। -আমরা [curl](https://curl.se) ব্যবহার করে কয়েনবেস অ্যাড্রেস (অ্যাকাউন্টগুলির অ্যারে থেকে প্রথম অ্যাড্রেস প্রাপ্ত করে) এবং ব্যালেন্স পুনরুদ্ধার করে ইন্টারফেসটি চলছে কিনা তা যাচাই করতে পারি। দয়া করে মনে রাখবেন যে এই উদাহরণগুলির ডেটা আপনার স্থানীয় নোডে ভিন্ন হবে। আপনি যদি এই কমান্ডগুলি চেষ্টা করতে চান, তাহলে প্রথমটির থেকে প্রাপ্ত ফলাফল দিয়ে দ্বিতীয় কার্ল অনুরোধের অনুরোধ প্যারামিটারগুলি প্রতিস্থাপন করুন। +আমরা [curl](https://curl.se) ব্যবহার করে কয়েনবেস এডড্রেস (একাউন্ট-এর অ্যারে থেকে প্রথম এডড্রেসটি পেয়ে) এবং ব্যালেন্স পুনরুদ্ধার করে ইন্টারফেসটি চলছে কিনা তা যাচাই করতে পারি। অনুগ্রহ করে মনে রাখবেন যে এই উদাহরণগুলোর ডেটা আপনার লোকাল নোড-এ ভিন্ন হবে। আপনি যদি এই কমান্ডগুলো চেষ্টা করতে চান, তবে দ্বিতীয় curl রিকোয়েস্টের রিকোয়েস্ট প্যারামিটারগুলো প্রথমটি থেকে প্রাপ্ত ফলাফল দিয়ে প্রতিস্থাপন করুন। ```bash curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545 @@ -1784,16 +1781,16 @@ curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635 {"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} ``` -যেহেতু সংখ্যাগুলি হেক্স এনকোডেড, তাই ব্যালেন্সটি একটি হেক্স স্ট্রিং হিসাবে wei-তে ফেরত দেওয়া হয়। আমরা যদি সংখ্যা হিসাবে ইথারে ব্যালেন্স পেতে চাই তবে আমরা Geth কনসোল থেকে web3 ব্যবহার করতে পারি। +যেহেতু সংখ্যাগুলো হেক্স এনকোড করা, তাই ব্যালেন্সটি wei-তে একটি হেক্স স্ট্রিং হিসেবে ফেরত দেওয়া হয়। আমরা যদি ব্যালেন্সটি ইথার-এ একটি সংখ্যা হিসেবে পেতে চাই তবে আমরা Geth কনসোল থেকে web3 ব্যবহার করতে পারি। ```javascript web3.fromWei("0x1639e49bba16280000", "ether") // "410" ``` -এখন যেহেতু আমাদের ব্যক্তিগত উন্নয়ন চেইনে কিছু ইথার আছে, আমরা চুক্তিটি ডিপ্লয় করতে পারি। প্রথম ধাপ হল Multiply7 চুক্তিটিকে বাইট কোডে কম্পাইল করা যা EVM-এ পাঠানো যেতে পারে। সলিডিটি কম্পাইলার solc ইনস্টল করতে, [সলিডিটি ডকুমেন্টেশন](https://docs.soliditylang.org/en/latest/installing-solidity.html) অনুসরণ করুন। (আপনি আমাদের উদাহরণের জন্য ব্যবহৃত কম্পাইলারের সংস্করণের সাথে মেলাতে একটি পুরানো `solc` রিলিজ ব্যবহার করতে চাইতে পারেন।) +যেহেতু এখন আমাদের প্রাইভেট ডেভেলপমেন্ট চেইনে কিছু ইথার আছে, আমরা কন্ট্রাক্টটি ডিপ্লয় করতে পারি। প্রথম ধাপ হলো Multiply7 কন্ট্রাক্টটিকে বাইট কোডে কম্পাইল করা যা EVM-এ পাঠানো যেতে পারে। সলিডিটি (Solidity) কম্পাইলার solc ইনস্টল করতে, [Solidity documentation](https://docs.soliditylang.org/en/latest/installing-solidity.html) অনুসরণ করুন। (আপনি হয়তো [আমাদের উদাহরণের জন্য ব্যবহৃত কম্পাইলারের সংস্করণের](https://github.com/ethereum/solidity/releases/tag/v0.4.20) সাথে মেলাতে একটি পুরোনো `solc` রিলিজ ব্যবহার করতে চাইতে পারেন।) -পরবর্তী পদক্ষেপ হল Multiply7 কন্ট্র্যাক্টকে বাইট কোডে কম্পাইল করা যা EVM-এ পাঠানো যেতে পারে। +পরবর্তী ধাপ হলো Multiply7 কন্ট্রাক্টটিকে বাইট কোডে কম্পাইল করা যা EVM-এ পাঠানো যেতে পারে। ```bash echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin @@ -1803,59 +1800,58 @@ Binary: 6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 ``` -এখন যেহেতু আমাদের কম্পাইল করা কোড আছে, আমাদের নির্ধারণ করতে হবে এটি ডিপ্লয় করতে কত গ্যাস খরচ হবে। RPC ইন্টারফেসের একটি `eth_estimateGas` পদ্ধতি রয়েছে যা আমাদের একটি অনুমান দেবে। +এখন যেহেতু আমাদের কাছে কম্পাইল করা কোড আছে, আমাদের নির্ধারণ করতে হবে এটি ডিপ্লয় করতে কত গ্যাস খরচ হবে। RPC ইন্টারফেসে একটি `eth_estimateGas` মেথড রয়েছে যা আমাদের একটি আনুমানিক হিসাব দেবে। ```bash curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 {"jsonrpc":"2.0","id":5,"result":"0x1c31e"} ``` -এবং অবশেষে চুক্তিটি ডিপ্লয় করুন। +এবং সবশেষে কন্ট্রাক্টটি ডিপ্লয় করুন। ```bash curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 {"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} ``` -লেনদেনটি নোড দ্বারা গৃহীত হয় এবং একটি লেনদেন হ্যাস ফেরত দেওয়া হয়। এই হ্যাসটি ট্রানজ্যাকশন ট্র্যাক করতে ব্যবহার করা যেতে পারে। পরবর্তী পদক্ষেপ হল আমাদের কন্ট্র্যাক্টটি কোন অ্যাড্রেসে ডিপ্লয় করা হয়েছে তা নির্ধারণ করা। প্রতিটি এক্সিকিউটেড ট্রানজ্যাকশন একটি রিসিপ্ট তৈরি করবে। এই রিসিপ্টে ট্রানজ্যাকশন সম্পর্কে বিভিন্ন তথ্য থাকে, যেমন ট্রানজ্যাকশনটি কোন ব্লকে অন্তর্ভুক্ত ছিল এবং EVM দ্বারা কতটা গ্যাস ব্যবহার করা হয়েছিল। যদি একটি ট্রানজ্যাকশন -একটি কন্ট্র্যাক্ট তৈরি করে তবে এতে কন্ট্র্যাক্ট অ্যাড্রেসও থাকবে। আমরা `eth_getTransactionReceipt` RPC পদ্ধতি ব্যবহার করে রিসিপ্টটি পুনরুদ্ধার করতে পারি। +লেনদেন-টি নোড দ্বারা গৃহীত হয় এবং একটি লেনদেন হ্যাস ফেরত দেওয়া হয়। এই হ্যাস-টি লেনদেন ট্র্যাক করতে ব্যবহার করা যেতে পারে। পরবর্তী ধাপ হলো আমাদের কন্ট্রাক্টটি কোথায় ডিপ্লয় করা হয়েছে সেই এডড্রেস নির্ধারণ করা। প্রতিটি সম্পাদিত লেনদেন একটি রসিদ (receipt) তৈরি করবে। এই রসিদে লেনদেন সম্পর্কে বিভিন্ন তথ্য থাকে যেমন লেনদেন-টি কোন ব্লক-এ অন্তর্ভুক্ত ছিল এবং EVM দ্বারা কত গ্যাস ব্যবহার করা হয়েছিল। যদি কোনো লেনদেন একটি কন্ট্রাক্ট তৈরি করে তবে এতে কন্ট্রাক্ট এডড্রেস-ও থাকবে। আমরা `eth_getTransactionReceipt` RPC মেথড দিয়ে রসিদটি পুনরুদ্ধার করতে পারি। ```bash curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 {"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} ``` -আমাদের কন্ট্র্যাক্টটি `0x4d03d617d700cf81935d7f797f4e2ae719648262`-এ তৈরি করা হয়েছিল। একটি রিসিপ্টের পরিবর্তে একটি নাল (null) ফলাফল মানে ট্রানজ্যাকশনটি এখনও একটি ব্লকে অন্তর্ভুক্ত করা হয়নি। এক মুহূর্ত অপেক্ষা করুন এবং আপনার কনসেন্সাস ক্লায়েন্ট চলছে কিনা তা পরীক্ষা করুন এবং আবার চেষ্টা করুন। +আমাদের কন্ট্রাক্টটি `0x4d03d617d700cf81935d7f797f4e2ae719648262`-এ তৈরি করা হয়েছিল। রসিদের পরিবর্তে একটি নাল (null) ফলাফলের অর্থ হলো লেনদেন-টি এখনও কোনো ব্লক-এ অন্তর্ভুক্ত হয়নি। কিছুক্ষণ অপেক্ষা করুন এবং আপনার কনসেন্সাস ক্লায়েন্ট চলছে কিনা তা পরীক্ষা করে আবার চেষ্টা করুন। -#### স্মার্ট কন্ট্র্যাক্টের সাথে ইন্টারঅ্যাক্ট করা {#interacting-with-smart-contract} +#### স্মার্ট কন্ট্রাক্ট-এর সাথে ইন্টারঅ্যাক্ট করা {#interacting-with-smart-contract} -এই উদাহরণে আমরা কন্ট্র্যাক্টের `multiply` পদ্ধতিতে `eth_sendTransaction` ব্যবহার করে একটি ট্রানজ্যাকশন পাঠাব। +এই উদাহরণে আমরা কন্ট্রাক্টের `multiply` মেথডে `eth_sendTransaction` ব্যবহার করে একটি লেনদেন পাঠাব। -`eth_sendTransaction`-এর জন্য বেশ কিছু আর্গুমেন্টের প্রয়োজন, বিশেষ করে `from`, `to` এবং `data`। `From` হল আমাদের অ্যাকাউন্টের পাবলিক অ্যাড্রেস, এবং `to` হল কন্ট্র্যাক্ট অ্যাড্রেস। `data` আর্গুমেন্টে একটি পেলোড থাকে যা নির্ধারণ করে কোন পদ্ধতিকে কোন আর্গুমেন্টের সাথে কল করতে হবে। এখানেই [ABI (অ্যাপ্লিকেশন বাইনারি ইন্টারফেস)](https://docs.soliditylang.org/en/latest/abi-spec.html) কাজে আসে। ABI হল একটি JSON ফাইল যা সংজ্ঞায়িত করে কিভাবে EVM-এর জন্য ডেটা সংজ্ঞায়িত এবং এনকোড করতে হয়। +`eth_sendTransaction`-এর জন্য বেশ কয়েকটি আর্গুমেন্ট প্রয়োজন, বিশেষ করে `from`, `to` এবং `data`। `From` হলো আমাদের একাউন্ট-এর পাবলিক এডড্রেস, এবং `to` হলো কন্ট্রাক্ট এডড্রেস। `data` আর্গুমেন্টে একটি পেলোড থাকে যা নির্ধারণ করে কোন মেথডটি কল করতে হবে এবং কোন আর্গুমেন্টগুলোর সাথে। এখানেই [ABI (অ্যাপ্লিকেশন বাইনারি ইন্টারফেস)](https://docs.soliditylang.org/en/latest/abi-spec.html) কাজে আসে। ABI হলো একটি JSON ফাইল যা নির্ধারণ করে কীভাবে EVM-এর জন্য ডেটা সংজ্ঞায়িত এবং এনকোড করতে হয়। -পেলোডের বাইটগুলি নির্ধারণ করে যে কন্ট্র্যাক্টের কোন পদ্ধতিকে কল করা হয়েছে। এটি ফাংশনের নাম এবং তার আর্গুমেন্টের প্রকারের উপর Keccak হ্যাসের প্রথম 4 বাইট, যা হেক্স এনকোডেড। multiply ফাংশন একটি uint গ্রহণ করে যা uint256-এর একটি উপনাম। এর ফলে আমরা পাই: +পেলোডের বাইটগুলো নির্ধারণ করে কন্ট্রাক্টের কোন মেথডটি কল করা হয়েছে। এটি ফাংশনের নাম এবং এর আর্গুমেন্টের ধরনগুলোর উপর Keccak হ্যাস থেকে প্রথম 4 বাইট, যা হেক্স এনকোড করা। multiply ফাংশনটি একটি uint গ্রহণ করে যা uint256-এর একটি উপনাম (alias)। এটি আমাদের যা দেয় তা হলো: ```javascript web3.sha3("multiply(uint256)").substring(0, 10) // "0xc6888fa1" ``` -পরবর্তী পদক্ষেপ হল আর্গুমেন্টগুলিকে এনকোড করা। এখানে শুধুমাত্র একটি uint256 আছে, ধরা যাক, মান 6। ABI-এর একটি বিভাগ রয়েছে যা নির্দিষ্ট করে কিভাবে uint256 টাইপ এনকোড করতে হয়। +পরবর্তী ধাপ হলো আর্গুমেন্টগুলো এনকোড করা। এখানে শুধুমাত্র একটি uint256 আছে, ধরা যাক, মানটি হলো 6। ABI-তে একটি বিভাগ রয়েছে যা নির্দিষ্ট করে কীভাবে uint256 ধরনগুলো এনকোড করতে হয়। -`int: enc(X)` হল X-এর বিগ-এন্ডিয়ান টু'স কমপ্লিমেন্ট এনকোডিং, যা নেগেটিভ X-এর জন্য 0xff দিয়ে এবং পজিটিভ X-এর জন্য শূন্য বাইট দিয়ে উচ্চ-ক্রম (বাম) দিকে প্যাড করা হয়, যাতে দৈর্ঘ্য 32 বাইটের গুণিতক হয়। +`int: enc(X)` হলো X-এর বিগ-এন্ডিয়ান টুস কমপ্লিমেন্ট (two’s complement) এনকোডিং, যা নেগেটিভ X-এর জন্য উচ্চ-ক্রম (বাম) দিকে 0xff দিয়ে এবং পজিটিভ X-এর জন্য শূন্য > বাইট দিয়ে প্যাড করা হয় যাতে এর দৈর্ঘ্য 32 বাইটের গুণিতক হয়। -এটি `0000000000000000000000000000000000000000000000000000000000000006`-এ এনকোড করে। +এটি `0000000000000000000000000000000000000000000000000000000000000006`-এ এনকোড হয়। -ফাংশন নির্বাচক এবং এনকোড করা আর্গুমেন্ট একত্রিত করলে আমাদের ডেটা হবে `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`। +ফাংশন সিলেক্টর এবং এনকোড করা আর্গুমেন্ট একত্রিত করলে আমাদের ডেটা হবে `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`। -এটি এখন নোডে পাঠানো যেতে পারে: +এটি এখন নোড-এ পাঠানো যেতে পারে: ```bash curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 {"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} ``` -যেহেতু একটি ট্রানজ্যাকশন পাঠানো হয়েছে, তাই একটি ট্রানজ্যাকশন হ্যাস ফেরত দেওয়া হয়েছে। রিসিপ্ট পুনরুদ্ধার করলে পাওয়া যায়: +যেহেতু একটি লেনদেন পাঠানো হয়েছিল, তাই একটি লেনদেন হ্যাস ফেরত দেওয়া হয়েছে। রসিদটি পুনরুদ্ধার করলে পাওয়া যায়: ```javascript { @@ -1879,19 +1875,19 @@ curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from } ``` -রিসিপ্টটিতে একটি লগ রয়েছে। এই লগটি ট্রানজ্যাকশন এক্সিকিউশনের সময় EVM দ্বারা তৈরি করা হয়েছিল এবং রিসিপ্টে অন্তর্ভুক্ত করা হয়েছিল। `multiply` ফাংশনটি দেখায় যে ইনপুটের 7 গুণ দিয়ে `Print` ইভেন্টটি উত্থাপিত হয়েছিল। যেহেতু `Print` ইভেন্টের আর্গুমেন্টটি একটি uint256 ছিল, তাই আমরা এটিকে ABI নিয়ম অনুসারে ডিকোড করতে পারি যা আমাদের প্রত্যাশিত ডেসিমেল 42 দেবে। ডেটা ছাড়াও এটি লক্ষণীয় যে কোন ইভেন্টটি লগ তৈরি করেছে তা নির্ধারণ করতে টপিক ব্যবহার করা যেতে পারে: +রসিদটিতে একটি লগ রয়েছে। এই লগটি লেনদেন সম্পাদনের সময় EVM দ্বারা তৈরি করা হয়েছিল এবং রসিদে অন্তর্ভুক্ত করা হয়েছিল। `multiply` ফাংশনটি দেখায় যে ইনপুটের 7 গুণের সাথে `Print` ইভেন্টটি রেইজ করা হয়েছিল। যেহেতু `Print` ইভেন্টের আর্গুমেন্টটি একটি uint256 ছিল, তাই আমরা এটিকে ABI নিয়ম অনুযায়ী ডিকোড করতে পারি যা আমাদের প্রত্যাশিত ডেসিমাল 42 দেবে। ডেটা ছাড়াও এটি লক্ষণীয় যে টপিকগুলো ব্যবহার করে নির্ধারণ করা যেতে পারে কোন ইভেন্টটি লগ তৈরি করেছে: ```javascript web3.sha3("Print(uint256)") // "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" ``` -এটি ছিল সবচেয়ে সাধারণ কিছু কাজের একটি সংক্ষিপ্ত পরিচিতি, যা JSON-RPC-এর সরাসরি ব্যবহার প্রদর্শন করে। +এটি ছিল সবচেয়ে সাধারণ কিছু কাজের একটি সংক্ষিপ্ত পরিচিতি, যা JSON-RPC-এর সরাসরি ব্যবহার প্রদর্শন করে। -## সম্পর্কিত বিষয় {#related-topics} +## সম্পর্কিত বিষয়সমূহ {#related-topics} - [JSON-RPC স্পেসিফিকেশন](http://www.jsonrpc.org/specification) -- [নোড এবং ক্লায়েন্ট](/developers/docs/nodes-and-clients/) -- [JavaScript APIs](/developers/docs/apis/javascript/) +- [নোড এবং ক্লায়েন্ট](/developers/docs/nodes-and-clients/) +- [জাভাস্ক্রিপ্ট API](/developers/docs/apis/javascript/) - [ব্যাকএন্ড API](/developers/docs/apis/backend/) -- [এক্সিকিউশন ক্লায়েন্ট](/developers/docs/nodes-and-clients/#execution-clients) +- [এক্সিকিউশন ক্লায়েন্ট](/developers/docs/nodes-and-clients/#execution-clients) \ No newline at end of file diff --git a/public/content/translations/bn/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/bn/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index 198380efa71..f7f4aef32dd 100644 --- a/public/content/translations/bn/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/bn/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -1,6 +1,6 @@ --- title: Ethash -description: "Ethash অ্যালগরিদমটির একটি বিস্তারিত বিবরণ।" +description: "ইথহ্যাস (Ethash) এ্যালগরিদমের একটি বিস্তারিত রূপ।" lang: bn --- @@ -8,29 +8,29 @@ lang: bn - Ethash ছিল Ethereum-এর প্রুফ-অফ-ওয়ার্ক মাইনিং অ্যালগরিদম। প্রুফ-অফ-ওয়ার্ক এখন **সম্পূর্ণরূপে বন্ধ করে দেওয়া হয়েছে** এবং Ethereum এখন এর পরিবর্তে [প্রুফ-অফ-স্টেক](/developers/docs/consensus-mechanisms/pos/) ব্যবহার করে সুরক্ষিত। [The Merge](/roadmap/merge/), [প্রুফ-অফ-স্টেক](/developers/docs/consensus-mechanisms/pos/) এবং [স্টেকিং](/staking/) সম্পর্কে আরও পড়ুন। এই পৃষ্ঠাটি ঐতিহাসিক আগ্রহের জন্য! + ইথহ্যাস (Ethash) ছিল ইথিরিয়ামের প্রুফ-অফ-ওয়ার্ক মাইনিং এ্যালগরিদম। প্রুফ-অফ-ওয়ার্ক এখন **সম্পূর্ণরূপে বন্ধ করা হয়েছে** এবং এর পরিবর্তে ইথিরিয়াম এখন [প্রুফ-অফ-স্টেক](/developers/docs/consensus-mechanisms/pos/) ব্যবহার করে সুরক্ষিত। [দ্য মার্জ](/roadmap/merge/), [প্রুফ-অফ-স্টেক](/developers/docs/consensus-mechanisms/pos/) এবং [স্টেকিং](/staking/) সম্পর্কে আরও পড়ুন। এই পেজটি ঐতিহাসিক আগ্রহের জন্য! -Ethash হল [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) অ্যালগরিদমের একটি পরিবর্তিত সংস্করণ। Ethash প্রুফ-অফ-ওয়ার্ক [মেমরি হার্ড](https://wikipedia.org/wiki/Memory-hard_function), যা অ্যালগরিদমটিকে ASIC প্রতিরোধী করে তুলবে বলে মনে করা হয়েছিল। Ethash ASIC অবশেষে তৈরি করা হয়েছিল কিন্তু প্রুফ-অফ-ওয়ার্ক বন্ধ না হওয়া পর্যন্ত GPU মাইনিং একটি কার্যকর বিকল্প ছিল। Ethash এখনও অন্যান্য নন-Ethereum প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কে অন্য কয়েন মাইন করতে ব্যবহৃত হয়। +ইথহ্যাস হলো [ড্যাগার-হাশিমোতো (Dagger-Hashimoto)](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) এ্যালগরিদমের একটি পরিবর্তিত সংস্করণ। ইথহ্যাস প্রুফ-অফ-ওয়ার্ক হলো [মেমরি হার্ড](https://wikipedia.org/wiki/Memory-hard_function), যা এ্যালগরিদমটিকে ASIC প্রতিরোধী করে তুলবে বলে মনে করা হয়েছিল। শেষ পর্যন্ত ইথহ্যাস ASIC-গুলো তৈরি করা হয়েছিল, কিন্তু প্রুফ-অফ-ওয়ার্ক বন্ধ হওয়ার আগ পর্যন্ত GPU মাইনিং একটি কার্যকর বিকল্প ছিল। ইথহ্যাস এখনও অন্যান্য নন-ইথিরিয়াম প্রুফ-অফ-ওয়ার্ক নেটওয়ার্কে অন্যান্য কয়েন মাইন করতে ব্যবহৃত হয়। -## Ethash কিভাবে কাজ করে? {#how-does-ethash-work} +## ইথহ্যাস কীভাবে কাজ করে? {#how-does-ethash-work} -মেমরি হার্ডনেস একটি প্রুফ-অফ-ওয়ার্ক অ্যালগরিদম দিয়ে অর্জন করা হয় যার জন্য ননস এবং ব্লক হেডারের উপর নির্ভরশীল একটি নির্দিষ্ট রিসোর্সের সাবসেট বেছে নিতে হয়। এই রিসোর্স (আকারে কয়েক গিগাবাইট) কে DAG বলা হয়। DAG প্রতি 30000 ব্লকে পরিবর্তিত হয়, একটি ~125-ঘন্টার উইন্ডো যাকে ইপক বলা হয় (প্রায় 5.2 দিন) এবং এটি তৈরি হতে কিছুটা সময় নেয়। যেহেতু DAG শুধুমাত্র ব্লকের উচ্চতার উপর নির্ভর করে, তাই এটি আগে থেকে তৈরি করা যেতে পারে, কিন্তু যদি তা না করা হয় তাহলে ক্লায়েন্টকে একটি ব্লক তৈরি করার জন্য এই প্রক্রিয়ার শেষ পর্যন্ত অপেক্ষা করতে হবে। যদি ক্লায়েন্টরা সময়ের আগে DAG তৈরি এবং ক্যাশে না করে, তাহলে প্রতিটি ইপক পরিবর্তনের সময় নেটওয়ার্কে ব্যাপক ব্লক বিলম্ব হতে পারে। নোট করুন যে প্রুফ-অফ-ওয়ার্ক যাচাই করার জন্য DAG তৈরি করার প্রয়োজন নেই, যা মূলত কম CPU এবং ছোট মেমরি উভয় দিয়েই যাচাইকরণের অনুমতি দেয়। +মেমরি হার্ডনেস এমন একটি প্রুফ-অফ-ওয়ার্ক এ্যালগরিদমের মাধ্যমে অর্জিত হয় যার জন্য নন্স এবং ব্লক হেডারের উপর নির্ভরশীল একটি নির্দিষ্ট রিসোর্সের সাবসেট বেছে নেওয়া প্রয়োজন। এই রিসোর্সটিকে (কয়েক গিগাবাইট আকারের) DAG বলা হয়। DAG প্রতি 30000 ব্লকস পর পর পরিবর্তিত হয়, যা ~125-ঘণ্টার একটি উইন্ডো যাকে এপোক (প্রায় 5.2 দিন) বলা হয় এবং এটি তৈরি হতে কিছুটা সময় নেয়। যেহেতু DAG শুধুমাত্র ব্লক হাইটের উপর নির্ভর করে, তাই এটি আগে থেকেই তৈরি করা যায়, কিন্তু যদি তা না হয় তবে একটি ব্লক তৈরি করার জন্য ক্লায়েন্টকে এই প্রক্রিয়াটি শেষ হওয়া পর্যন্ত অপেক্ষা করতে হবে। যদি ক্লায়েন্টরা আগে থেকে DAG তৈরি এবং ক্যাশ না করে, তবে নেটওয়ার্ক প্রতিটি এপোক ট্রানজিশনে ব্যাপক ব্লক বিলম্বের সম্মুখীন হতে পারে। মনে রাখবেন যে প্রুফ-অফ-ওয়ার্ক যাচাই করার জন্য DAG তৈরি করার প্রয়োজন নেই, যা মূলত কম CPU এবং ছোট মেমরি উভয়ের মাধ্যমেই যাচাইকরণের অনুমতি দেয়। -অ্যালগরিদমটি যে সাধারণ পথ গ্রহণ করে তা নিম্নরূপ: +এ্যালগরিদমটি সাধারণত যে পদ্ধতি অনুসরণ করে তা নিচে দেওয়া হলো: -1. একটি **সীড** বিদ্যমান যা প্রতিটি ব্লকের জন্য সেই পর্যন্ত ব্লক হেডারগুলো স্ক্যান করে গণনা করা যেতে পারে। -2. সীড থেকে, একজন একটি **16 MB সিউডোর‍্যান্ডম ক্যাশে** গণনা করতে পারে। লাইট ক্লায়েন্টরা ক্যাশে সংরক্ষণ করে। -3. ক্যাশে থেকে, আমরা একটি **1 GB ডেটাসেট** তৈরি করতে পারি, এই বৈশিষ্ট্য সহ যে ডেটাসেটের প্রতিটি আইটেম ক্যাশে থেকে শুধুমাত্র অল্প সংখ্যক আইটেমের উপর নির্ভর করে। সম্পূর্ণ ক্লায়েন্ট এবং মাইনাররা ডেটাসেট সংরক্ষণ করে। ডেটাসেট সময়ের সাথে রৈখিকভাবে বৃদ্ধি পায়। -4. মাইনিং এর মধ্যে ডেটাসেটের র‍্যান্ডম স্লাইস গ্রহণ করা এবং সেগুলোকে একসাথে হ্যাস করা জড়িত। আপনার প্রয়োজনীয় ডেটাসেটের নির্দিষ্ট অংশগুলো পুনরায় তৈরি করতে ক্যাশে ব্যবহার করে কম মেমরির সাথে যাচাইকরণ করা যেতে পারে, তাই আপনাকে কেবল ক্যাশে সংরক্ষণ করতে হবে। +1. একটি **সিড (seed)** রয়েছে যা সেই পয়েন্ট পর্যন্ত ব্লক হেডারগুলো স্ক্যান করে প্রতিটি ব্লকের জন্য গণনা করা যেতে পারে। +2. সিড থেকে, একটি **16 MB সিউডোর‍্যান্ডম ক্যাশ** গণনা করা যায়। লাইট ক্লায়েন্টরা ক্যাশ স্টোর করে। +3. ক্যাশ থেকে, আমরা একটি **1 GB ডেটাসেট** তৈরি করতে পারি, যার বৈশিষ্ট্য হলো ডেটাসেটের প্রতিটি আইটেম ক্যাশ থেকে শুধুমাত্র অল্প সংখ্যক আইটেমের উপর নির্ভর করে। ফুল ক্লায়েন্ট এবং মাইনাররা ডেটাসেট স্টোর করে। ডেটাসেট সময়ের সাথে সাথে লিনিয়ারলি বৃদ্ধি পায়। +4. মাইনিংয়ের ক্ষেত্রে ডেটাসেটের র‍্যান্ডম স্লাইসগুলো নেওয়া এবং সেগুলোকে একসাথে হ্যাস করা জড়িত। আপনার প্রয়োজনীয় ডেটাসেটের নির্দিষ্ট অংশগুলো পুনরায় তৈরি করতে ক্যাশ ব্যবহার করে কম মেমরির মাধ্যমে যাচাইকরণ করা যেতে পারে, তাই আপনার শুধুমাত্র ক্যাশ স্টোর করার প্রয়োজন হয়। -বৃহৎ ডেটাসেটটি প্রতি 30000 ব্লকে একবার আপডেট করা হয়, তাই একজন মাইনারের প্রচেষ্টার বেশিরভাগই হবে ডেটাসেট পড়া, এতে পরিবর্তন করা নয়। +বড় ডেটাসেটটি প্রতি 30000 ব্লকস পর পর একবার আপডেট করা হয়, তাই একজন মাইনারের বেশিরভাগ প্রচেষ্টাই ডেটাসেট পড়ার ক্ষেত্রে ব্যয় হবে, এতে পরিবর্তন করার ক্ষেত্রে নয়। -## সংজ্ঞা {#definitions} +## সংজ্ঞাসমূহ {#definitions} -আমরা নিম্নলিখিত সংজ্ঞাগুলো ব্যবহার করি: +আমরা নিচের সংজ্ঞাসমূহ ব্যবহার করি: ``` WORD_BYTES = 4 # bytes in word @@ -47,18 +47,15 @@ CACHE_ROUNDS = 3 # number of rounds in cache production ACCESSES = 64 # number of accesses in hashimoto loop ``` -### 'SHA3'-এর ব্যবহার {#sha3} +### 'SHA3' এর ব্যবহার {#sha3} -Ethereum-এর ডেভেলপমেন্ট SHA3 স্ট্যান্ডার্ডের ডেভেলপমেন্টের সাথে একই সময়ে হয়েছিল, এবং -স্ট্যান্ডার্ড প্রক্রিয়াটি চূড়ান্ত হ্যাস অ্যালগরিদমের প্যাডিংয়ে একটি দেরীতে পরিবর্তন করেছিল, যাতে Ethereum-এর -"sha3_256" এবং "sha3_512" হ্যাসগুলো স্ট্যান্ডার্ড sha3 হ্যাস নয়, বরং একটি ভ্যারিয়েন্ট যা প্রায়শই -অন্যান্য প্রসঙ্গে "Keccak-256" এবং "Keccak-512" হিসাবে উল্লেখ করা হয়। আলোচনা দেখুন, যেমন, [এখানে](https://eips.ethereum.org/EIPS/eip-1803), [এখানে](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), অথবা [এখানে](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)। +ইথিরিয়ামের ডেভেলপমেন্ট SHA3 স্ট্যান্ডার্ডের ডেভেলপমেন্টের সাথে মিলে যায়, এবং স্ট্যান্ডার্ড প্রক্রিয়াটি চূড়ান্ত হ্যাস এ্যালগরিদমের প্যাডিংয়ে একটি বিলম্বিত পরিবর্তন করে, যার ফলে ইথিরিয়ামের "sha3_256" এবং "sha3_512" হ্যাসগুলো স্ট্যান্ডার্ড sha3 হ্যাস নয়, বরং একটি ভ্যারিয়েন্ট যা অন্যান্য ক্ষেত্রে প্রায়শই "Keccak-256" এবং "Keccak-512" হিসেবে উল্লেখ করা হয়। আলোচনা দেখুন, যেমন, [এখানে](https://eips.ethereum.org/EIPS/eip-1803), [এখানে](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), অথবা [এখানে](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)। -অনুগ্রহ করে মনে রাখবেন যে নীচের অ্যালগরিদমের বিবরণে "sha3" হ্যাসগুলো উল্লেখ করা হয়েছে। +অনুগ্রহ করে এটি মনে রাখবেন কারণ নিচের এ্যালগরিদমের বর্ণনায় "sha3" হ্যাসগুলো উল্লেখ করা হয়েছে। -## প্যারামিটার {#parameters} +## প্যারামিটারসমূহ {#parameters} -Ethash-এর ক্যাশে এবং ডেটাসেটের জন্য প্যারামিটারগুলো ব্লক নম্বরের উপর নির্ভর করে। ক্যাশে সাইজ এবং ডেটাসেট সাইজ উভয়ই রৈখিকভাবে বৃদ্ধি পায়; তবে, আমরা চক্রীয় আচরণের দিকে পরিচালিত করতে পারে এমন আকস্মিক নিয়মিততার ঝুঁকি কমাতে রৈখিকভাবে ক্রমবর্ধমান থ্রেশহোল্ডের নীচে সর্বোচ্চ প্রাইম সংখ্যাটি নিই। +ইথহ্যাস এর ক্যাশ এবং ডেটাসেটের প্যারামিটারগুলো ব্লক নম্বরের উপর নির্ভর করে। ক্যাশ সাইজ এবং ডেটাসেট সাইজ উভয়ই লিনিয়ারলি বৃদ্ধি পায়; তবে, সাইক্লিক আচরণের দিকে পরিচালিত আকস্মিক নিয়মিততার ঝুঁকি কমানোর জন্য আমরা সর্বদা লিনিয়ারলি ক্রমবর্ধমান থ্রেশহোল্ডের নিচে সর্বোচ্চ প্রাইম (মৌলিক সংখ্যা) নিই। ```python def get_cache_size(block_number): @@ -76,22 +73,22 @@ def get_full_size(block_number): return sz ``` -ডেটাসেট এবং ক্যাশে সাইজের মানের সারণী পরিশিষ্টে সরবরাহ করা হয়েছে। +ডেটাসেট এবং ক্যাশ সাইজ ভ্যালুর টেবিলগুলো পরিশিষ্টে (appendix) দেওয়া হয়েছে। -## ক্যাশে জেনারেশন {#cache-generation} +## ক্যাশ জেনারেশন {#cache-generation} -এখন, আমরা ক্যাশে তৈরির জন্য ফাংশনটি নির্দিষ্ট করছি: +এখন, আমরা একটি ক্যাশ তৈরি করার ফাংশন নির্দিষ্ট করছি: ```python def mkcache(cache_size, seed): n = cache_size // HASH_BYTES - # Sequentially produce the initial dataset + # ক্রমানুসারে প্রাথমিক ডেটাসেট তৈরি করুন o = [sha3_512(seed)] for i in range(1, n): o.append(sha3_512(o[-1])) - # Use a low-round version of randmemohash + # randmemohash-এর একটি লো-রাউন্ড সংস্করণ ব্যবহার করুন for _ in range(CACHE_ROUNDS): for i in range(n): v = o[i][0] % n @@ -100,11 +97,11 @@ def mkcache(cache_size, seed): return o ``` -ক্যাশে উৎপাদন প্রক্রিয়ার মধ্যে প্রথমে ক্রমানুসারে 32 MB মেমরি পূরণ করা হয়, তারপর [_স্ট্রিক্ট মেমরি হার্ড হ্যাশিং ফাংশন_ (2014)](http://www.hashcash.org/papers/memohash.pdf) থেকে Sergio Demian Lerner-এর _RandMemoHash_ অ্যালগরিদমের দুটি পাস করা হয়। আউটপুটটি হল 524288টি 64-বাইট মানের একটি সেট। +ক্যাশ উৎপাদন প্রক্রিয়ায় প্রথমে ক্রমান্বয়ে 32 MB মেমরি পূরণ করা হয়, তারপর [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf) থেকে Sergio Demian Lerner-এর _RandMemoHash_ এ্যালগরিদমের দুটি পাস সম্পাদন করা হয়। এর আউটপুট হলো 524288 টি 64-বাইট ভ্যালুর একটি সেট। ## ডেটা এগ্রিগেশন ফাংশন {#date-aggregation-function} -আমরা কিছু ক্ষেত্রে XOR-এর একটি নন-অ্যাসোসিয়েটিভ বিকল্প হিসাবে [FNV হ্যাস](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) দ্বারা অনুপ্রাণিত একটি অ্যালগরিদম ব্যবহার করি। নোট করুন যে আমরা প্রাইমটিকে সম্পূর্ণ 32-বিট ইনপুটের সাথে গুণ করি, FNV-1 স্পেকের বিপরীতে যা প্রাইমটিকে এক বাইট (অক্টেট) দিয়ে পর্যায়ক্রমে গুণ করে। +আমরা কিছু ক্ষেত্রে XOR-এর নন-অ্যাসোসিয়েটিভ বিকল্প হিসেবে [FNV হ্যাস](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) দ্বারা অনুপ্রাণিত একটি এ্যালগরিদম ব্যবহার করি। মনে রাখবেন যে আমরা সম্পূর্ণ 32-বিট ইনপুটের সাথে প্রাইম গুণ করি, যা FNV-1 স্পেকের বিপরীত, যেখানে প্রাইমকে পর্যায়ক্রমে এক বাইট (অকটেট) দিয়ে গুণ করা হয়। ```python FNV_PRIME = 0x01000193 @@ -113,57 +110,57 @@ def fnv(v1, v2): return ((v1 * FNV_PRIME) ^ v2) % 2**32 ``` -অনুগ্রহ করে মনে রাখবেন, যদিও ইয়েলো পেপারে fnv কে v1\*(FNV_PRIME ^ v2) হিসাবে নির্দিষ্ট করা হয়েছে, সমস্ত বর্তমান ইমপ্লিমেন্টেশন ধারাবাহিকভাবে উপরের সংজ্ঞাটি ব্যবহার করে। +অনুগ্রহ করে মনে রাখবেন, ইয়েলো পেপারেও fnv-কে v1\*(FNV_PRIME ^ v2) হিসেবে নির্দিষ্ট করা হয়েছে, তবে বর্তমান সমস্ত ইমপ্লিমেন্টেশন ধারাবাহিকভাবে উপরের সংজ্ঞাটি ব্যবহার করে। -## সম্পূর্ণ ডেটাসেট গণনা {#full-dataset-calculation} +## সম্পূর্ণ ডেটাসেট ক্যালকুলেশন {#full-dataset-calculation} -সম্পূর্ণ 1 GB ডেটাসেটের প্রতিটি 64-বাইট আইটেম নিম্নরূপ গণনা করা হয়: +সম্পূর্ণ 1 GB ডেটাসেটের প্রতিটি 64-বাইট আইটেম নিচের মতো করে গণনা করা হয়: ```python def calc_dataset_item(cache, i): n = len(cache) r = HASH_BYTES // WORD_BYTES - # initialize the mix + # মিক্স ইনিশিয়ালাইজ করুন mix = copy.copy(cache[i % n]) mix[0] ^= i mix = sha3_512(mix) - # fnv it with a lot of random cache nodes based on i + # i-এর উপর ভিত্তি করে প্রচুর র্যান্ডম ক্যাশে নোডের সাথে এটি fnv করুন for j in range(DATASET_PARENTS): cache_index = fnv(i ^ j, mix[j % r]) mix = map(fnv, mix, cache[cache_index % n]) return sha3_512(mix) ``` -মূলত, আমরা 256টি সিউডোর‍্যান্ডমলি নির্বাচিত ক্যাশে নোড থেকে ডেটা একত্রিত করি, এবং ডেটাসেট নোড গণনা করার জন্য এটিকে হ্যাস করি। সম্পূর্ণ ডেটাসেটটি তখন নিম্নলিখিতভাবে তৈরি করা হয়: +মূলত, আমরা 256 টি সিউডোর‍্যান্ডমভাবে নির্বাচিত ক্যাশ নোড থেকে ডেটা একত্রিত করি এবং ডেটাসেট নোড গণনা করতে সেটিকে হ্যাস করি। সম্পূর্ণ ডেটাসেটটি এরপর নিচের মাধ্যমে তৈরি করা হয়: ```python def calc_dataset(full_size, cache): return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] ``` -## প্রধান লুপ {#main-loop} +## মেইন লুপ {#main-loop} -এখন, আমরা প্রধান "হ্যাশিমোটো"-সদৃশ লুপটি নির্দিষ্ট করছি, যেখানে আমরা একটি নির্দিষ্ট হেডার এবং ননসের জন্য আমাদের চূড়ান্ত মান তৈরি করার জন্য সম্পূর্ণ ডেটাসেট থেকে ডেটা একত্রিত করি। নীচের কোডে, `header` একটি _ট্রাঙ্কেটেড_ ব্লক হেডারের RLP উপস্থাপনার SHA3-256 _হ্যাস_ প্রতিনিধিত্ব করে, অর্থাৎ, **mixHash** এবং **nonce** ক্ষেত্রগুলো বাদ দিয়ে একটি হেডার। `nonce` হলো বিগ-এন্ডিয়ান অর্ডারে একটি 64 বিট আনসাইন্ড ইন্টিজারের আট বাইট। সুতরাং `nonce[::-1]` হল সেই মানের আট-বাইট লিটল-এন্ডিয়ান উপস্থাপনা: +এখন, আমরা প্রধান "hashimoto"-এর মতো লুপ নির্দিষ্ট করছি, যেখানে আমরা একটি নির্দিষ্ট হেডার এবং নন্স এর জন্য আমাদের চূড়ান্ত ভ্যালু তৈরি করতে সম্পূর্ণ ডেটাসেট থেকে ডেটা একত্রিত করি। নিচের কোডে, `header` একটি _ট্রাংকেটেড_ ব্লক হেডারের RLP রিপ্রেজেন্টেশনের SHA3-256 _হ্যাস_ উপস্থাপন করে, অর্থাৎ, এমন একটি হেডার যা থেকে **mixHash** এবং **nonce** ফিল্ডগুলো বাদ দেওয়া হয়েছে। `nonce` হলো বিগ-এন্ডিয়ান অর্ডারে একটি 64 বিট আনসাইনড ইন্টিজারের আট বাইট। তাই `nonce[::-1]` হলো সেই ভ্যালুর আট-বাইট লিটল-এন্ডিয়ান রিপ্রেজেন্টেশন: ```python def hashimoto(header, nonce, full_size, dataset_lookup): n = full_size / HASH_BYTES w = MIX_BYTES // WORD_BYTES mixhashes = MIX_BYTES / HASH_BYTES - # combine header+nonce into a 64 byte seed + # হেডার+নন্স-কে একটি ৬৪ বাইট সিডে একত্রিত করুন s = sha3_512(header + nonce[::-1]) - # start the mix with replicated s + # রেপ্লিকেটেড s দিয়ে মিক্স শুরু করুন mix = [] for _ in range(MIX_BYTES / HASH_BYTES): mix.extend(s) - # mix in random dataset nodes + # র্যান্ডম ডেটাসেট নোডগুলোতে মিক্স করুন for i in range(ACCESSES): p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes newdata = [] for j in range(MIX_BYTES / HASH_BYTES): newdata.extend(dataset_lookup(p + j)) mix = map(fnv, mix, newdata) - # compress mix + # মিক্স কম্প্রেস করুন cmix = [] for i in range(0, len(mix), 4): cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) @@ -179,17 +176,17 @@ def hashimoto_full(full_size, dataset, header, nonce): return hashimoto(header, nonce, full_size, lambda x: dataset[x]) ``` -মূলত, আমরা একটি 128 বাইট চওড়া "মিক্স" বজায় রাখি, এবং বারবার ক্রমানুসারে সম্পূর্ণ ডেটাসেট থেকে 128 বাইট আনি এবং মিক্সের সাথে একত্রিত করার জন্য `fnv` ফাংশন ব্যবহার করি। 128 বাইটের সিকুয়েন্সিয়াল অ্যাক্সেস ব্যবহার করা হয় যাতে অ্যালগরিদমের প্রতিটি রাউন্ড সর্বদা RAM থেকে একটি সম্পূর্ণ পেজ নিয়ে আসে, যা ট্রান্সলেশন লুকাসাইড বাফার মিস কমিয়ে দেয় যা ASIC তাত্ত্বিকভাবে এড়াতে সক্ষম হবে। +মূলত, আমরা 128 বাইট চওড়া একটি "mix" বজায় রাখি, এবং বারবার ক্রমান্বয়ে সম্পূর্ণ ডেটাসেট থেকে 128 বাইট ফেচ করি এবং এটিকে মিক্সের সাথে একত্রিত করতে `fnv` ফাংশন ব্যবহার করি। 128 বাইটের সিকোয়েন্সিয়াল অ্যাক্সেস ব্যবহার করা হয় যাতে এ্যালগরিদমের প্রতিটি রাউন্ড সর্বদা RAM থেকে একটি সম্পূর্ণ পেজ ফেচ করে, যা ট্রান্সলেশন লুকাসাইড বাফার মিসগুলো কমিয়ে দেয় যা তাত্ত্বিকভাবে ASIC-গুলো এড়াতে সক্ষম হবে। -যদি এই অ্যালগরিদমের আউটপুট কাঙ্ক্ষিত লক্ষ্যের নিচে হয়, তবে ননসটি বৈধ। নোট করুন যে শেষে `sha3_256`-এর অতিরিক্ত প্রয়োগ নিশ্চিত করে যে একটি মধ্যবর্তী ননস বিদ্যমান যা প্রমাণ করতে প্রদান করা যেতে পারে যে অন্তত অল্প পরিমাণে কাজ করা হয়েছে; এই দ্রুত বাইরের PoW যাচাইকরণ অ্যান্টি-DDoS উদ্দেশ্যে ব্যবহার করা যেতে পারে। এটি পরিসংখ্যানগত নিশ্চয়তা প্রদান করতেও কাজ করে যে ফলাফলটি একটি নিরপেক্ষ, 256-বিট সংখ্যা। +যদি এই এ্যালগরিদমের আউটপুট কাঙ্ক্ষিত টার্গেটের নিচে হয়, তবে নন্সটি বৈধ। মনে রাখবেন যে শেষে `sha3_256`-এর অতিরিক্ত প্রয়োগ নিশ্চিত করে যে একটি ইন্টারমিডিয়েট নন্স রয়েছে যা প্রমাণ করতে দেওয়া যেতে পারে যে অন্তত অল্প পরিমাণ কাজ করা হয়েছে; এই দ্রুত আউটার PoW ভেরিফিকেশন অ্যান্টি-DDoS উদ্দেশ্যে ব্যবহার করা যেতে পারে। এটি পরিসংখ্যানগত নিশ্চয়তা প্রদান করতেও কাজ করে যে ফলাফলটি একটি আনবায়াসড, 256-বিট নম্বর। ## মাইনিং {#mining} -মাইনিং অ্যালগরিদমটি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে: +মাইনিং এ্যালগরিদমটি নিচের মতো করে সংজ্ঞায়িত করা হয়েছে: ```python def mine(full_size, dataset, header, difficulty): - # zero-pad target to compare with hash on the same digit + # একই ডিজিটে হ্যাস-এর সাথে তুলনা করতে টার্গেট জিরো-প্যাড করুন target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) @@ -198,9 +195,9 @@ def mine(full_size, dataset, header, difficulty): return nonce ``` -## সীড হ্যাস সংজ্ঞায়িত করা {#seed-hash} +## সিড হ্যাস সংজ্ঞায়িত করা {#seed-hash} -একটি প্রদত্ত ব্লকের উপরে মাইন করার জন্য ব্যবহৃত সীড হ্যাস গণনা করার জন্য, আমরা নিম্নলিখিত অ্যালগরিদম ব্যবহার করি: +একটি প্রদত্ত ব্লকের উপরে মাইন করতে ব্যবহৃত হবে এমন সিড হ্যাস গণনা করার জন্য, আমরা নিচের এ্যালগরিদমটি ব্যবহার করি: ```python def get_seedhash(block): @@ -210,20 +207,20 @@ def mine(full_size, dataset, header, difficulty): return s ``` -নোট করুন যে মসৃণ মাইনিং এবং যাচাইকরণের জন্য, আমরা একটি পৃথক থ্রেডে ভবিষ্যতের সীডহ্যাস এবং ডেটাসেটগুলো আগে থেকে গণনা করার সুপারিশ করি। +মনে রাখবেন যে মসৃণ মাইনিং এবং যাচাইকরণের জন্য, আমরা একটি পৃথক থ্রেডে ভবিষ্যতের সিডহ্যাস এবং ডেটাসেটগুলো আগে থেকে গণনা করার পরামর্শ দিই। -## আরও পড়ুন {#further-reading} +## আরও পড়ুন {#further-reading} -_এমন কোনো কমিউনিটি রিসোর্স সম্পর্কে জানেন যা আপনাকে সাহায্য করেছে? এই পৃষ্ঠাটি সম্পাদনা করুন এবং এটি যোগ করুন!_ +_আপনাকে সাহায্য করেছে এমন কোনো কমিউনিটি রিসোর্স সম্পর্কে জানেন? এই পেজটি এডিট করুন এবং এটি যোগ করুন!_ ## পরিশিষ্ট {#appendix} -আপনি যদি উপরের পাইথন স্পেকটিকে কোড হিসাবে চালাতে আগ্রহী হন তবে নিম্নলিখিত কোডটি আগে যুক্ত করা উচিত। +আপনি যদি উপরের পাইথন স্পেকটি কোড হিসেবে রান করতে আগ্রহী হন তবে নিচের কোডটি আগে যুক্ত করা উচিত। ```python import sha3, copy -# Assumes little endian bit ordering (same as Intel architectures) +# লিটল এন্ডিয়ান বিট অর্ডারিং ধরে নেওয়া হয় (ইন্টেল আর্কিটেকচারের মতো একই) def decode_int(s): return int(s[::-1].encode('hex'), 16) if s else 0 @@ -251,7 +248,7 @@ def serialize_cache(ds): serialize_dataset = serialize_cache -# sha3 hash function, outputs 64 bytes +# sha3 হ্যাস ফাংশন, ৬৪ বাইট আউটপুট দেয় def sha3_512(x): return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) @@ -270,7 +267,7 @@ def isprime(x): ### ডেটা সাইজ {#data-sizes} -নিম্নলিখিত লুকআপ টেবিলগুলো ডেটা সাইজ এবং ক্যাশে সাইজের প্রায় 2048টি সারণীবদ্ধ ইপক প্রদান করে। +নিচের লুকআপ টেবিলগুলো ডেটা সাইজ এবং ক্যাশ সাইজের প্রায় 2048 টি ট্যাবুলেটেড এপোক প্রদান করে। ```python def get_datasize(block_number): @@ -714,7 +711,7 @@ cache_sizes = [ 34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, 35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, 36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, -36961984, 37093312, 37223488, 37355072, 37617472, 37747904, +36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, 37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, 38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, 39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, @@ -1019,4 +1016,4 @@ cache_sizes = [ 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 284950208, 285081536] -``` +``` \ No newline at end of file diff --git a/public/content/translations/bn/ethereum-forks/index.md b/public/content/translations/bn/ethereum-forks/index.md new file mode 100644 index 00000000000..b9f9bb1b569 --- /dev/null +++ b/public/content/translations/bn/ethereum-forks/index.md @@ -0,0 +1,689 @@ +--- +title: "সমস্ত ইথিরিয়াম ফর্ক-এর টাইমলাইন (2014 থেকে বর্তমান)" +description: "ইথিরিয়াম ব্লকচেইন-এর একটি ইতিহাস, যার মধ্যে প্রধান মাইলফলক, রিলিজ এবং ফর্ক অন্তর্ভুক্ত রয়েছে।" +lang: bn +sidebarDepth: 1 +--- + +# সমস্ত ইথিরিয়াম ফর্ক-এর টাইমলাইন (2014 থেকে বর্তমান) {#the-history-of-ethereum} + +[Ethereum](/) ব্লকচেইন-এর সমস্ত প্রধান মাইলফলক, ফর্ক এবং আপডেটের একটি টাইমলাইন। + + + +ফর্ক হলো যখন নেটওয়ার্ক-এ বড় ধরনের প্রযুক্তিগত আপগ্রেড বা পরিবর্তন করার প্রয়োজন হয় – এগুলো সাধারণত [ইথিরিয়াম ইমপ্রুভমেন্ট প্রপোজাল (EIPs)](/eips/) থেকে আসে এবং প্রটোকল-এর "নিয়ম" পরিবর্তন করে। + +ঐতিহ্যবাহী, কেন্দ্রীয়ভাবে নিয়ন্ত্রিত সফটওয়্যারে যখন আপগ্রেডের প্রয়োজন হয়, তখন কোম্পানিটি শেষ-ব্যবহারকারীর জন্য কেবল একটি নতুন সংস্করণ প্রকাশ করে। ব্লকচেইন ভিন্নভাবে কাজ করে কারণ এর কোনো কেন্দ্রীয় মালিকানা নেই। নতুন ফর্ক নিয়মগুলো বাস্তবায়ন করতে [ইথিরিয়াম ক্লায়েন্ট](/developers/docs/nodes-and-clients/)-দের অবশ্যই তাদের সফটওয়্যার আপডেট করতে হবে। এছাড়া ব্লক প্রস্তুতকারকদের (প্রুফ-অফ-ওয়ার্ক জগতে মাইনার, প্রুফ-অফ-স্টেক জগতে ভ্যালিডেটরস) এবং নোড-গুলোকে অবশ্যই নতুন নিয়মের বিপরীতে ব্লক তৈরি এবং যাচাই করতে হবে। [কনসেন্সাস মেকানিজম সম্পর্কে আরও জানুন](/developers/docs/consensus-mechanisms/) + +এই নিয়ম পরিবর্তনগুলো নেটওয়ার্ক-এ একটি অস্থায়ী বিভাজন তৈরি করতে পারে। নতুন বা পুরোনো নিয়ম অনুযায়ী নতুন ব্লকস তৈরি হতে পারে। ফর্ক-এর বিষয়ে সাধারণত আগে থেকেই একমত হওয়া যায় যাতে ক্লায়েন্ট-রা একসাথে পরিবর্তনগুলো গ্রহণ করে এবং আপগ্রেডসহ ফর্ক-টি মূল চেইনে পরিণত হয়। তবে, বিরল ক্ষেত্রে, ফর্ক নিয়ে মতবিরোধের কারণে নেটওয়ার্ক স্থায়ীভাবে বিভক্ত হতে পারে – যার সবচেয়ে উল্লেখযোগ্য উদাহরণ হলো DAO ফর্ক-এর মাধ্যমে Ethereum Classic-এর সৃষ্টি। + + + + + +ইথিরিয়ামের অন্তর্নিহিত সফটওয়্যারটি দুটি অংশে বিভক্ত, যা [এক্সিকিউশন লেয়ার](/glossary/#execution-layer) এবং [কনসেন্সাস লেয়ার](/glossary/#consensus-layer) নামে পরিচিত। + +**এক্সিকিউশন আপগ্রেডের নামকরণ** + +2021 সাল থেকে, **এক্সিকিউশন লেয়ার**-এর আপগ্রেডগুলোর নামকরণ কালানুক্রমিকভাবে [পূর্ববর্তী Devcon এবং Devconnect-এর স্থানগুলোর](https://devcon.org/en/past-events/) শহরের নাম অনুসারে করা হয়: + +| আপগ্রেডের নাম | Devcon(nect) বছর | Devcon নম্বর | আপগ্রেডের তারিখ | +| -------------- | ----------------- | ------------- | ------------ | +| Berlin | 2014 | 0 | এপ্রিল 15, 2021 | +| London | 2015 | I | আগস্ট 5, 2021 | +| Shanghai | 2016 | II | এপ্রিল 12, 2023 | +| Cancun | 2017 | III | মার্চ 13, 2024 | +| Prague | 2018 | IV | মে 7, 2025 | +| Osaka | 2019 | V | ডিসেম্বর 3, 2025 | +| **Amsterdam** | 2022 | Devconnect | নির্ধারিত নয় - পরবর্তী | +| _Bogotá_ | 2022 | VI | নির্ধারিত নয় | +| _Istanbul_ | 2023 | Devconnect | নির্ধারিত নয় | +| _Bangkok_ | 2024 | VII | নির্ধারিত নয় | +| _Buenos Aires_ | 2025 | Devconnect | নির্ধারিত নয় | +| _Mumbai_ | 2026 | VIII | নির্ধারিত নয় | + +**কনসেন্সাস আপগ্রেডের নামকরণ** + +[বিকন চেইন](/glossary/#beacon-chain) চালু হওয়ার পর থেকে, **কনসেন্সাস লেয়ার**-এর আপগ্রেডগুলোর নামকরণ বর্ণানুক্রমিকভাবে শুরু হওয়া মহাকাশীয় নক্ষত্রের নাম অনুসারে করা হয়: + +| আপগ্রেডের নাম | আপগ্রেডের তারিখ | +| --------------------------------------------------------- | ------------ | +| বিকন চেইন জেনেসিস | ডিসেম্বর 1, 2020 | +| [Altair](https://en.wikipedia.org/wiki/Altair) | অক্টোবর 27, 2021 | +| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | সেপ্টেম্বর 6, 2022 | +| [Capella](https://en.wikipedia.org/wiki/Capella) | এপ্রিল 12, 2023 | +| [Deneb](https://en.wikipedia.org/wiki/Deneb) | মার্চ 13, 2024 | +| [Electra]() | মে 7, 2025 | +| [Fulu]() | ডিসেম্বর 3, 2025 | +| [**Gloas**](https://en.wikipedia.org/wiki/WASP-13) | নির্ধারিত নয় - পরবর্তী | +| [_Heze_](https://en.wikipedia.org/wiki/Zeta_Virginis) | নির্ধারিত নয় | + +**সম্মিলিত নামকরণ** + +এক্সিকিউশন এবং কনসেন্সাস আপগ্রেডগুলো প্রাথমিকভাবে ভিন্ন ভিন্ন সময়ে চালু করা হয়েছিল, কিন্তু 2022 সালে [The Merge](/roadmap/merge/)-এর পর এগুলো একই সাথে ডিপ্লয় করা হচ্ছে। এর ফলে, একটি একক সংযুক্ত শব্দ ব্যবহার করে এই আপগ্রেডগুলোকে সহজে উল্লেখ করার জন্য কথ্য পরিভাষা তৈরি হয়েছে। এটি _Shanghai-Capella_ আপগ্রেডের মাধ্যমে শুরু হয়েছিল, যা সাধারণত "**Shapella**" নামে পরিচিত, এবং পরবর্তী আপগ্রেডগুলোতেও এটি অব্যাহত রয়েছে। + +| এক্সিকিউশন আপগ্রেড | কনসেন্সাস আপগ্রেড | সংক্ষিপ্ত নাম | +| ----------------- | ----------------- | ------------- | +| Shanghai | Capella | "Shapella" | +| Cancun | Deneb | "Dencun" | +| Prague | Electra | "Pectra" | +| Osaka | Fulu | "Fusaka" | +| Amsterdam | Gloas | "Glamsterdam" | +| Bogotá | Heze | "Hegotá" | + + + +অতীতের কিছু বিশেষভাবে গুরুত্বপূর্ণ আপগ্রেড সম্পর্কে সরাসরি তথ্যে যান: [বিকন চেইন](/roadmap/beacon-chain/); [The Merge](/roadmap/merge/); এবং [EIP-1559](#london) + +ভবিষ্যতের প্রটোকল আপগ্রেড খুঁজছেন? [ইথিরিয়াম রোডম্যাপে আসন্ন আপগ্রেডগুলো সম্পর্কে জানুন](/roadmap/)। + + + +## 2025 {#2025} + +### Fulu-Osaka ("Fusaka") {#fusaka} + + + +[Fusaka সম্পর্কে আরও জানুন](/roadmap/fusaka/) + +### Prague-Electra ("Pectra") {#pectra} + + + +Prague-Electra ("Pectra") আপগ্রেডে ইথিরিয়াম প্রটোকল-এর বেশ কয়েকটি উন্নতি অন্তর্ভুক্ত ছিল যার লক্ষ্য ছিল সমস্ত ব্যবহারকারী, লেয়ার 2 নেটওয়ার্ক, স্টেকার এবং নোড অপারেটরদের অভিজ্ঞতা উন্নত করা। + +কম্পাউন্ডিং ভ্যালিডেটর একাউন্ট-এর মাধ্যমে স্টেকিং-এ একটি আপগ্রেড এসেছে, এবং এক্সিকিউশন উইথড্রয়াল এডড্রেস ব্যবহার করে স্টেক করা ফান্ডের ওপর নিয়ন্ত্রণ উন্নত হয়েছে। EIP-7251 একটি একক ভ্যালিডেটর-এর জন্য সর্বোচ্চ কার্যকরী ব্যালেন্স 2048-এ উন্নীত করেছে, যা স্টেকার-দের জন্য মূলধনের দক্ষতা বাড়িয়েছে। EIP-7002 একটি এক্সিকিউশন একাউন্ট-কে নিরাপদে ভ্যালিডেটর একশন ট্রিগার করতে সক্ষম করেছে, যার মধ্যে প্রস্থান করা বা ফান্ডের কিছু অংশ তুলে নেওয়া অন্তর্ভুক্ত, যা ETH স্টেকার-দের অভিজ্ঞতা উন্নত করার পাশাপাশি নোড অপারেটরদের জবাবদিহিতা জোরদার করতে সাহায্য করেছে। + +আপগ্রেডের অন্যান্য অংশগুলো সাধারণ ব্যবহারকারীদের অভিজ্ঞতা উন্নত করার ওপর দৃষ্টি নিবদ্ধ করেছে। EIP-7702 একটি সাধারণ নন-স্মার্ট-কন্ট্রাক্ট একাউন্ট ([EOA](/glossary/#eoa))-এর জন্য একটি স্মার্ট কন্ট্রাক্ট-এর মতো কোড এক্সিকিউট করার ক্ষমতা নিয়ে এসেছে। এটি ঐতিহ্যবাহী ইথিরিয়াম একাউন্ট-গুলোর জন্য অসীম নতুন কার্যকারিতা উন্মুক্ত করেছে, যেমন ট্রানজেকশন ব্যাচিং, গ্যাস স্পনসরশিপ, বিকল্প প্রমাণীকরণ, প্রোগ্রামেবল ব্যয়ের নিয়ন্ত্রণ, একাউন্ট রিকভারি মেকানিজম এবং আরও অনেক কিছু। + + + +উন্নত ব্যবহারকারীর অভিজ্ঞতা: + +
    +
  • EIP-7702 - EOA একাউন্ট কোড সেট করা
  • +
  • EIP-7691 - ব্লব থ্রুপুট বৃদ্ধি
  • +
  • EIP-7623 - কলডাটা খরচ বৃদ্ধি
  • +
  • EIP-7840 - EL কনফিগ ফাইলে ব্লব শিডিউল যোগ করা
  • +
+ +উন্নত স্টেকিং অভিজ্ঞতা: + +
    +
  • EIP-7251 - MAX_EFFECTIVE_BALANCE বৃদ্ধি
  • +
  • EIP-7002 - এক্সিকিউশন লেয়ার ট্রিগারযোগ্য প্রস্থান
  • +
  • EIP-7685 - সাধারণ উদ্দেশ্যে এক্সিকিউশন লেয়ার রিকোয়েস্ট
  • +
  • EIP-6110 - অনচেইন-এ ভ্যালিডেটর ডিপোজিট সরবরাহ
  • +
+ +প্রটোকল দক্ষতা এবং নিরাপত্তা উন্নতি: + +
    +
  • EIP-2537 - BLS12-381 কার্ভ অপারেশনের জন্য প্রিকম্পাইল
  • +
  • EIP-2935 - স্টেট-এ ঐতিহাসিক ব্লক হ্যাস সংরক্ষণ
  • +
  • EIP-7549 - কমিটি ইনডেক্স এটেস্টেশন-এর বাইরে সরানো
  • +
+ +
+ +- [Pectra.wtf](https://pectra.wtf) +- [কীভাবে Pectra স্টেকিং অভিজ্ঞতা উন্নত করবে](https://www.kiln.fi/post/next-ethereum-upgrade-how-pectra-will-enhance-the-staking-experience) +- [Electra আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/consensus-specs/tree/master/specs/electra/) +- [Prague-Electra ("Pectra") সাধারণ জিজ্ঞাসা](/roadmap/pectra/) + + + +## 2024 {#2024} + +### Cancun-Deneb ("Dencun") {#dencun} + + + +#### Cancun summary {#cancun-summary} + +Cancun আপগ্রেডে ইথিরিয়ামের _এক্সিকিউশন_-এর বেশ কিছু উন্নতি রয়েছে যার লক্ষ্য হলো স্কেলিং উন্নত করা, যা Deneb কনসেন্সাস আপগ্রেডের সাথে একত্রে কাজ করে। + +উল্লেখযোগ্যভাবে এর মধ্যে EIP-4844 অন্তর্ভুক্ত রয়েছে, যা **Proto-Danksharding** নামে পরিচিত, এটি লেয়ার 2 রোলআপস-এর জন্য ডাটা স্টোরেজের খরচ উল্লেখযোগ্যভাবে হ্রাস করে। এটি ডাটা "ব্লবস" প্রবর্তনের মাধ্যমে অর্জিত হয় যা রোলআপস-কে অল্প সময়ের জন্য মেইননেট-এ ডাটা পোস্ট করতে সক্ষম করে। এর ফলে লেয়ার 2 রোলআপস-এর ব্যবহারকারীদের জন্য লেনদেন ফি উল্লেখযোগ্যভাবে কমে যায়। + + + +
    +
  • EIP-1153 - ট্রানজিয়েন্ট স্টোরেজ অপকোড
  • +
  • EIP-4788 - EVM-এ বিকন ব্লক রুট
  • +
  • EIP-4844 - শার্ড ব্লব লেনদেন (Proto-Danksharding)
  • +
  • EIP-5656 - MCOPY - মেমরি কপি করার নির্দেশ
  • +
  • EIP-6780 - SELFDESTRUCT শুধুমাত্র একই লেনদেন-এ
  • +
  • EIP-7516 - BLOBBASEFEE অপকোড
  • +
+ +
+ +- [লেয়ার 2 রোলআপস](/layer-2/) +- [Proto-Danksharding](/roadmap/scaling/#proto-danksharding) +- [Danksharding](/roadmap/danksharding/) +- [Cancun আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) + +#### Deneb summary {#deneb-summary} + +Deneb আপগ্রেডে ইথিরিয়ামের _কনসেন্সাস_-এর বেশ কিছু উন্নতি রয়েছে যার লক্ষ্য হলো স্কেলিং উন্নত করা। এই আপগ্রেডটি Cancun এক্সিকিউশন আপগ্রেডের সাথে একত্রে আসে যাতে Proto-Danksharding (EIP-4844) সক্ষম করা যায়, এর পাশাপাশি বিকন চেইন-এর অন্যান্য উন্নতিও রয়েছে। + +আগে থেকে তৈরি করা স্বাক্ষরিত "স্বেচ্ছায় প্রস্থান বার্তা" আর মেয়াদোত্তীর্ণ হয় না, ফলে থার্ড-পার্টি নোড অপারেটরের সাথে ফান্ড স্টেকিং করা ব্যবহারকারীদের আরও বেশি নিয়ন্ত্রণ দেওয়া হয়। এই স্বাক্ষরিত প্রস্থান বার্তার মাধ্যমে, স্টেকার-রা নোড অপারেশন অর্পণ করতে পারে এবং একই সাথে যেকোনো সময় নিরাপদে প্রস্থান করার এবং তাদের ফান্ড তুলে নেওয়ার ক্ষমতা বজায় রাখতে পারে, কারও অনুমতির প্রয়োজন ছাড়াই। + +EIP-7514 ভ্যালিডেটরস-দের নেটওয়ার্ক-এ যোগদানের "চার্ন" রেট প্রতি এপোক-এ আট (8)-এ সীমাবদ্ধ করে ETH ইস্যুয়েন্স-কে আরও কঠোর করে। যেহেতু ETH ইস্যুয়েন্স মোট স্টেক করা ETH-এর সমানুপাতিক, তাই যোগদানকারী ভ্যালিডেটরস-এর সংখ্যা সীমিত করা নতুন ইস্যু করা ETH-এর _বৃদ্ধির হার_ সীমাবদ্ধ করে, পাশাপাশি নোড অপারেটরদের জন্য হার্ডওয়্যারের প্রয়োজনীয়তা হ্রাস করে, যা ডিসেন্ট্রালাইজড হতে সাহায্য করে। + + + +
    +
  • EIP-4788 - EVM-এ বিকন ব্লক রুট
  • +
  • EIP-4844 - শার্ড ব্লব লেনদেন
  • +
  • EIP-7044 - চিরস্থায়ীভাবে বৈধ স্বাক্ষরিত স্বেচ্ছায় প্রস্থান
  • +
  • EIP-7045 - সর্বোচ্চ এটেস্টেশন অন্তর্ভুক্তির স্লট বৃদ্ধি
  • +
  • EIP-7514 - সর্বোচ্চ এপোক চার্ন লিমিট যোগ করা
  • +
+ +
+ +- [Deneb আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/consensus-specs/tree/master/specs/deneb/) +- [Cancun-Deneb ("Dencun") সাধারণ জিজ্ঞাসা](/roadmap/dencun/) + + + +## 2023 {#2023} + +### Shanghai-Capella ("Shapella") {#shapella} + + + +#### Shanghai summary {#shanghai-summary} + +Shanghai আপগ্রেড এক্সিকিউশন লেয়ার-এ স্টেকিং উইথড্রয়াল নিয়ে এসেছে। Capella আপগ্রেডের সাথে একত্রে, এটি ব্লকস-কে উইথড্রয়াল অপারেশন গ্রহণ করতে সক্ষম করেছে, যা স্টেকার-দের বিকন চেইন থেকে এক্সিকিউশন লেয়ার-এ তাদের ETH তুলে নেওয়ার অনুমতি দেয়। + + + +
    +
  • EIP-3651COINBASE এডড্রেস ওয়ার্ম শুরু করে
  • +
  • EIP-3855নতুন PUSH0 নির্দেশ
  • +
  • EIP-3860লিমিট এবং মিটার ইনিটকোড
  • +
  • EIP-4895অপারেশন হিসেবে বিকন চেইন পুশ উইথড্রয়াল
  • +
  • EIP-6049 - SELFDESTRUCT বাতিল করা
  • +
+ +
+ +- [Shanghai আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) + +#### Capella summary {#capella-summary} + +Capella আপগ্রেড ছিল কনসেন্সাস লেয়ার (বিকন চেইন)-এর তৃতীয় প্রধান আপগ্রেড এবং এটি স্টেকিং উইথড্রয়াল সক্ষম করেছে। Capella এক্সিকিউশন লেয়ার আপগ্রেড, Shanghai-এর সাথে সমলয়ে ঘটেছিল এবং স্টেকিং উইথড্রয়াল কার্যকারিতা সক্ষম করেছিল। + +এই কনসেন্সাস লেয়ার আপগ্রেডটি সেই স্টেকার-দের জন্য ক্ষমতা নিয়ে এসেছে যারা তাদের প্রাথমিক ডিপোজিটের সাথে উইথড্রয়াল ক্রেডেনশিয়াল প্রদান করেনি, যার ফলে উইথড্রয়াল সক্ষম হয়। + +আপগ্রেডটি স্বয়ংক্রিয় একাউন্ট সুইপিং কার্যকারিতাও প্রদান করেছে, যা যেকোনো উপলব্ধ রিওয়ার্ড পেমেন্ট বা সম্পূর্ণ উইথড্রয়ালের জন্য ভ্যালিডেটর একাউন্ট-গুলোকে ক্রমাগত প্রসেস করে। + +- [স্টেকিং উইথড্রয়াল সম্পর্কে আরও জানুন](/staking/withdrawals/)। +- [Capella আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/consensus-specs/tree/master/specs/capella/) + + + +## 2022 {#2022} + +### Paris (The Merge) {#paris} + + + +#### Summary {#paris-summary} + +প্রুফ-অফ-ওয়ার্ক ব্লকচেইন 58750000000000000000000-এর একটি [টার্মিনাল টোটাল ডিফিকাল্টি](/glossary/#terminal-total-difficulty) অতিক্রম করার মাধ্যমে Paris আপগ্রেডটি ট্রিগার হয়েছিল। এটি 15 সেপ্টেম্বর 2022-এ 15537393 ব্লক-এ ঘটেছিল, যা পরবর্তী ব্লক-এ Paris আপগ্রেড ট্রিগার করে। Paris ছিল [The Merge](/roadmap/merge/) ট্রানজিশন - এর প্রধান বৈশিষ্ট্য ছিল [প্রুফ-অফ-ওয়ার্ক](/developers/docs/consensus-mechanisms/pow) মাইনিং এ্যালগরিদম এবং সংশ্লিষ্ট কনসেন্সাস লজিক বন্ধ করা এবং এর পরিবর্তে [প্রুফ-অফ-স্টেক](/developers/docs/consensus-mechanisms/pos) চালু করা। Paris নিজেই ছিল [এক্সিকিউশন ক্লায়েন্ট](/developers/docs/nodes-and-clients/#execution-clients)-দের জন্য একটি আপগ্রেড (কনসেন্সাস লেয়ার-এ Bellatrix-এর সমতুল্য) যা তাদের সংযুক্ত [কনসেন্সাস ক্লায়েন্ট](/developers/docs/nodes-and-clients/#consensus-clients)-দের কাছ থেকে নির্দেশ নিতে সক্ষম করেছিল। এর জন্য অভ্যন্তরীণ API মেথডগুলোর একটি নতুন সেট সক্রিয় করার প্রয়োজন ছিল, যা সম্মিলিতভাবে [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) নামে পরিচিত। এটি নিঃসন্দেহে [Homestead](#homestead)-এর পর ইথিরিয়ামের ইতিহাসে সবচেয়ে উল্লেখযোগ্য আপগ্রেড ছিল! + +- [Paris আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) + + + +
    +
  • EIP-3675কনসেন্সাস-কে প্রুফ-অফ-স্টেক-এ আপগ্রেড করা
  • +
  • EIP-4399DIFFICULTY অপকোড-কে PREVRANDAO দিয়ে প্রতিস্থাপন করা
  • +
+ +
+ +--- + +### Bellatrix {#bellatrix} + + + +#### Summary {#bellatrix-summary} + +Bellatrix আপগ্রেড ছিল [বিকন চেইন](/roadmap/beacon-chain)-এর জন্য দ্বিতীয় নির্ধারিত আপগ্রেড, যা চেইনটিকে [The Merge](/roadmap/merge/)-এর জন্য প্রস্তুত করে। এটি নিষ্ক্রিয়তা এবং স্ল্যাশিংযোগ্য অপরাধের জন্য ভ্যালিডেটর জরিমানাকে তাদের সম্পূর্ণ মূল্যে নিয়ে আসে। Bellatrix-এ ফর্ক চয়েস নিয়মের একটি আপডেটও অন্তর্ভুক্ত রয়েছে যাতে চেইনটিকে The Merge এবং শেষ প্রুফ-অফ-ওয়ার্ক ব্লক থেকে প্রথম প্রুফ-অফ-স্টেক ব্লক-এ ট্রানজিশনের জন্য প্রস্তুত করা যায়। এর মধ্যে কনসেন্সাস ক্লায়েন্ট-দের 58750000000000000000000-এর [টার্মিনাল টোটাল ডিফিকাল্টি](/glossary/#terminal-total-difficulty) সম্পর্কে সচেতন করা অন্তর্ভুক্ত। + +- [Bellatrix আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/consensus-specs/tree/master/specs/bellatrix) + +--- + +### Gray Glacier {#gray-glacier} + + + +#### Summary {#gray-glacier-summary} + +Gray Glacier নেটওয়ার্ক আপগ্রেড [ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb)-কে তিন মাস পিছিয়ে দিয়েছে। এই আপগ্রেডে এটিই একমাত্র পরিবর্তন, এবং এটি প্রকৃতির দিক থেকে [Arrow Glacier](#arrow-glacier) এবং [Muir Glacier](#muir-glacier) আপগ্রেডের মতো। [Byzantium](#byzantium), [Constantinople](#constantinople) এবং [London](#london) নেটওয়ার্ক আপগ্রেডেও একই ধরনের পরিবর্তন করা হয়েছে। + +- [EF ব্লগ - Gray Glacier আপগ্রেড ঘোষণা](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement) + + + +
    +
  • EIP-5133সেপ্টেম্বর 2022 পর্যন্ত ডিফিকাল্টি বোম্ব বিলম্বিত করে
  • +
+ +
+ + + +## 2021 {#2021} + +### Arrow Glacier {#arrow-glacier} + + + +#### Summary {#arrow-glacier-summary} + +Arrow Glacier নেটওয়ার্ক আপগ্রেড [ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb)-কে কয়েক মাস পিছিয়ে দিয়েছে। এই আপগ্রেডে এটিই একমাত্র পরিবর্তন, এবং এটি প্রকৃতির দিক থেকে [Muir Glacier](#muir-glacier) আপগ্রেডের মতো। [Byzantium](#byzantium), [Constantinople](#constantinople) এবং [London](#london) নেটওয়ার্ক আপগ্রেডেও একই ধরনের পরিবর্তন করা হয়েছে। + +- [EF ব্লগ - Arrow Glacier আপগ্রেড ঘোষণা](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement) +- [Ethereum Cat Herders - ইথিরিয়াম Arrow Glacier আপগ্রেড](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) + + + +
    +
  • EIP-4345জুন 2022 পর্যন্ত ডিফিকাল্টি বোম্ব বিলম্বিত করে
  • +
+ +
+ +--- + +### Altair {#altair} + + + +#### Summary {#altair-summary} + +Altair আপগ্রেড ছিল [বিকন চেইন](/roadmap/beacon-chain)-এর জন্য প্রথম নির্ধারিত আপগ্রেড। এটি "সিঙ্ক কমিটি"-এর জন্য সমর্থন যোগ করেছে—যা লাইট ক্লায়েন্ট-দের সক্ষম করে, এবং The Merge-এর দিকে উন্নয়ন অগ্রসর হওয়ার সাথে সাথে ভ্যালিডেটর নিষ্ক্রিয়তা এবং স্ল্যাশিং জরিমানা বাড়িয়েছে। + +- [Altair আপগ্রেড স্পেসিফিকেশন পড়ুন](https://github.com/ethereum/consensus-specs/tree/master/specs/altair) + +#### মজার তথ্য! {#altair-fun-fact} + +Altair ছিল প্রথম বড় নেটওয়ার্ক আপগ্রেড যার একটি নির্দিষ্ট রোলআউট সময় ছিল। এর আগের প্রতিটি আপগ্রেড প্রুফ-অফ-ওয়ার্ক চেইনে একটি ঘোষিত ব্লক নম্বরের ওপর ভিত্তি করে ছিল, যেখানে ব্লক-এর সময় পরিবর্তিত হয়। বিকন চেইন-এর জন্য প্রুফ-অফ-ওয়ার্ক সমাধানের প্রয়োজন নেই, এবং এর পরিবর্তে এটি একটি সময়-ভিত্তিক এপোক সিস্টেমে কাজ করে যা 32টি বারো-সেকেন্ডের "স্লট" নিয়ে গঠিত যেখানে ভ্যালিডেটরস ব্লকস প্রস্তাব করতে পারে। এই কারণেই আমরা ঠিক জানতাম কখন আমরা 74,240 এপোক-এ পৌঁছাব এবং Altair লাইভ হবে! + +- [ব্লক টাইম](/developers/docs/blocks/#block-time) + +--- + +### London {#london} + + + +#### Summary {#london-summary} + +London আপগ্রেড [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) চালু করেছে, যা ট্রানজেকশন ফি মার্কেট সংস্কার করেছে, এর পাশাপাশি গ্যাস রিফান্ড কীভাবে পরিচালনা করা হয় এবং [Ice Age](/glossary/#ice-age) শিডিউলে পরিবর্তন এনেছে। + +#### London আপগ্রেড / EIP-1559 কী ছিল? {#eip-1559} + +London আপগ্রেডের আগে, ইথিরিয়ামে নির্দিষ্ট আকারের ব্লকস ছিল। উচ্চ নেটওয়ার্ক চাহিদার সময়ে, এই ব্লকস পূর্ণ ক্ষমতায় কাজ করত। ফলস্বরূপ, ব্যবহারকারীদের প্রায়শই একটি ব্লক-এ অন্তর্ভুক্ত হওয়ার জন্য চাহিদা কমার অপেক্ষা করতে হতো, যা ব্যবহারকারীর খারাপ অভিজ্ঞতার দিকে পরিচালিত করত। London আপগ্রেড ইথিরিয়ামে পরিবর্তনশীল আকারের ব্লকস চালু করেছে। + +আগস্ট 2021-এর [London আপগ্রেড](/ethereum-forks/#london)-এর মাধ্যমে ইথিরিয়াম নেটওয়ার্ক-এ ট্রানজেকশন ফি গণনা করার পদ্ধতি পরিবর্তিত হয়েছে। London আপগ্রেডের আগে, `base` এবং `priority` ফি আলাদা না করেই ফি গণনা করা হতো, যা নিম্নরূপ: + +ধরা যাক Alice-কে Bob-কে 1 ETH দিতে হবে। লেনদেন-এ, গ্যাস লিমিট হলো 21,000 ইউনিট, এবং গ্যাস প্রাইস হলো 200 gwei। + +মোট ফি হতো: `গ্যাস ইউনিট (লিমিট) * প্রতি ইউনিটের গ্যাস প্রাইস` অর্থাৎ `21,000 * 200 = 4,200,000 gwei` বা 0.0042 ETH + +London আপগ্রেডে [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)-এর বাস্তবায়ন ট্রানজেকশন ফি মেকানিজমকে আরও জটিল করে তুলেছে, কিন্তু গ্যাস ফি-কে আরও অনুমানযোগ্য করে তুলেছে, যার ফলে একটি আরও দক্ষ ট্রানজেকশন ফি মার্কেট তৈরি হয়েছে। ব্যবহারকারীরা লেনদেন এক্সিকিউট করার জন্য তারা কত টাকা দিতে ইচ্ছুক তার সাথে সামঞ্জস্যপূর্ণ একটি `maxFeePerGas` দিয়ে লেনদেন জমা দিতে পারে, এই জেনে যে তারা গ্যাসের বাজার মূল্যের (`baseFeePerGas`) চেয়ে বেশি অর্থ প্রদান করবে না, এবং তাদের টিপ বাদ দিয়ে অতিরিক্ত যেকোনো অর্থ ফেরত পাবে। + +এই ভিডিওটি EIP-1559 এবং এর সুবিধাগুলো ব্যাখ্যা করে: [EIP-1559 ব্যাখ্যা করা হয়েছে](https://www.youtube.com/watch?v=MGemhK9t44Q) + +- [আপনি কি একজন ডিএ্যাপ ডেভেলপার? আপনার লাইব্রেরি এবং টুলিং আপগ্রেড করতে ভুলবেন না।](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) +- [ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2021/07/15/london-mainnet-announcement) +- [Ethereum Cat Herder-এর ব্যাখ্যামূলক লেখা পড়ুন](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) + + + +
    +
  • EIP-1559ট্রানজেকশন ফি মার্কেট উন্নত করে
  • +
  • EIP-3198একটি ব্লক থেকে BASEFEE ফেরত দেয়
  • +
  • EIP-3529 - EVM অপারেশনের জন্য গ্যাস রিফান্ড হ্রাস করে
  • +
  • EIP-3541 - 0xEF দিয়ে শুরু হওয়া কন্ট্রাক্ট ডিপ্লয় করা প্রতিরোধ করে
  • +
  • EIP-3554ডিসেম্বর 2021 পর্যন্ত Ice Age বিলম্বিত করে
  • +
+ +
+ +--- + +### Berlin {#berlin} + + + +#### Summary {#berlin-summary} + +Berlin আপগ্রেড নির্দিষ্ট EVM একশনের জন্য গ্যাস খরচ অপ্টিমাইজ করেছে, এবং একাধিক লেনদেন প্রকারের জন্য সমর্থন বাড়িয়েছে। + +- [ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement) +- [Ethereum Cat Herder-এর ব্যাখ্যামূলক লেখা পড়ুন](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) + + + +
    +
  • EIP-2565ModExp গ্যাস খরচ কমায়
  • +
  • EIP-2718একাধিক লেনদেন প্রকারের জন্য সহজ সমর্থন সক্ষম করে
  • +
  • EIP-2929স্টেট এক্সেস অপকোডের জন্য গ্যাস খরচ বৃদ্ধি করে
  • +
  • EIP-2930ঐচ্ছিক এক্সেস লিস্ট যোগ করে
  • +
+ +
+ + + +## 2020 {#2020} + +### Beacon Chain genesis {#beacon-chain-genesis} + + + +#### Summary {#beacon-chain-genesis-summary} + +নিরাপদে চালু হওয়ার জন্য [বিকন চেইন](/roadmap/beacon-chain/)-এর 32 স্টেক করা ETH-এর 16384টি ডিপোজিটের প্রয়োজন ছিল। এটি 27 নভেম্বর ঘটেছিল, এবং বিকন চেইন 1 ডিসেম্বর, 2020-এ ব্লকস তৈরি করা শুরু করে। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21) + + + বিকন চেইন + + +--- + +### Staking deposit contract deployed {#staking-deposit-contract} + + + +#### Summary {#deposit-contract-summary} + +স্টেকিং ডিপোজিট কন্টাক্ট ইথিরিয়াম ইকোসিস্টেমে [স্টেকিং](/glossary/#staking) চালু করেছে। যদিও এটি একটি [মেইননেট](/glossary/#mainnet) কন্ট্রাক্ট, এটি [বিকন চেইন](/roadmap/beacon-chain/) চালু করার টাইমলাইনের ওপর সরাসরি প্রভাব ফেলেছিল, যা একটি গুরুত্বপূর্ণ [ইথিরিয়াম আপগ্রেড](/roadmap/)। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19) + + + স্টেকিং + + +--- + +### Muir Glacier {#muir-glacier} + + + +#### Summary {#muir-glacier-summary} + +Muir Glacier ফর্ক [ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb)-এ একটি বিলম্ব চালু করেছে। [প্রুফ-অফ-ওয়ার্ক](/developers/docs/consensus-mechanisms/pow/) কনসেন্সাস মেকানিজম-এর ব্লক ডিফিকাল্টি বৃদ্ধি লেনদেন পাঠানো এবং ডিএ্যাপস ব্যবহারের জন্য অপেক্ষার সময় বাড়িয়ে ইথিরিয়ামের ব্যবহারযোগ্যতা হ্রাস করার হুমকি দিচ্ছিল। + +- [ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement) +- [Ethereum Cat Herder-এর ব্যাখ্যামূলক লেখা পড়ুন](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) + + + +
    +
  • EIP-2384ডিফিকাল্টি বোম্ব-কে আরও 4,000,000 ব্লকস, বা ~611 দিনের জন্য বিলম্বিত করে।
  • +
+ +
+ + + +## 2019 {#2019} + +### Istanbul {#istanbul} + + + +#### Summary {#istanbul-summary} + +Istanbul ফর্ক: + +- [ইথিরিয়াম ভার্চুয়াল মেশিন](/developers/docs/ethereum-stack/#ethereum-virtual-machine)-এ নির্দিষ্ট একশনের [গ্যাস](/glossary/#gas) খরচ অপ্টিমাইজ করেছে। +- ডিনায়াল-অফ-সার্ভিস এ্যাটাক প্রতিরোধ ক্ষমতা উন্নত করেছে। +- SNARKs এবং STARKs-এর ওপর ভিত্তি করে [লেয়ার 2 স্কেলিং](/developers/docs/scaling/#layer-2-scaling) সমাধানগুলোকে আরও পারফরম্যান্ট করেছে। +- ইথিরিয়াম এবং Zcash-কে ইন্টারঅপারেট করতে সক্ষম করেছে। +- কন্ট্রাক্ট-গুলোকে আরও সৃজনশীল ফাংশন চালু করার অনুমতি দিয়েছে। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement) + + + +
    +
  • EIP-152ইথিরিয়াম-কে Zcash-এর মতো গোপনীয়তা-সংরক্ষণকারী মুদ্রার সাথে কাজ করার অনুমতি দেয়।
  • +
  • EIP-1108[গ্যাস](/glossary/#gas) খরচ উন্নত করতে সস্তা ক্রিপ্টোগ্রাফি।
  • +
  • EIP-1344CHAINID [অপকোড](/developers/docs/ethereum-stack/#ethereum-virtual-machine) যোগ করে রিপ্লে এ্যাটাক থেকে ইথিরিয়াম-কে রক্ষা করে।
  • +
  • EIP-1884ব্যবহারের ওপর ভিত্তি করে অপকোড গ্যাস প্রাইস অপ্টিমাইজ করা।
  • +
  • EIP-2028ব্লকস-এ আরও ডাটা অনুমতি দিতে CallData-এর খরচ কমায় – যা [লেয়ার 2 স্কেলিং](/developers/docs/scaling/#layer-2-scaling)-এর জন্য ভালো।
  • +
  • EIP-2200অন্যান্য অপকোড গ্যাস প্রাইস পরিবর্তন।
  • +
+ +
+ +--- + +### Constantinople {#constantinople} + + + +#### Summary {#constantinople-summary} + +Constantinople ফর্ক: + +- ব্লক [মাইনিং](/developers/docs/consensus-mechanisms/pow/mining/) রিওয়ার্ড 3 থেকে 2 ETH-এ হ্রাস করেছে। +- [প্রুফ-অফ-স্টেক বাস্তবায়িত হওয়ার](#beacon-chain-genesis) আগে ব্লকচেইন যাতে ফ্রিজ না হয় তা নিশ্চিত করেছে। +- [ইথিরিয়াম ভার্চুয়াল মেশিন](/developers/docs/ethereum-stack/#ethereum-virtual-machine)-এ নির্দিষ্ট একশনের [গ্যাস](/glossary/#gas) খরচ অপ্টিমাইজ করেছে। +- এখনও তৈরি হয়নি এমন এডড্রেস-এর সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা যোগ করেছে। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement) + + + +
    +
  • EIP-145নির্দিষ্ট অনচেইন একশনের খরচ অপ্টিমাইজ করে।
  • +
  • EIP-1014আপনাকে এখনও তৈরি হয়নি এমন এডড্রেস-এর সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়।
  • +
  • EIP-1052অন্য কন্ট্রাক্ট-এর কোডের হ্যাস পুনরুদ্ধার করতে EXTCODEHASH নির্দেশ চালু করে।
  • +
  • EIP-1234প্রুফ-অফ-স্টেক-এর আগে ব্লকচেইন যাতে ফ্রিজ না হয় তা নিশ্চিত করে এবং ব্লক রিওয়ার্ড 3 থেকে 2 ETH-এ হ্রাস করে।
  • +
+ +
+ + + +## 2017 {#2017} + +### Byzantium {#byzantium} + + + +#### Summary {#byzantium-summary} + +Byzantium ফর্ক: + +- ব্লক [মাইনিং](/developers/docs/consensus-mechanisms/pow/mining/) রিওয়ার্ড 5 থেকে 3 ETH-এ হ্রাস করেছে। +- [ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb)-কে এক বছর বিলম্বিত করেছে। +- অন্যান্য কন্ট্রাক্ট-এ নন-স্টেট-চেঞ্জিং কল করার ক্ষমতা যোগ করেছে। +- [লেয়ার 2 স্কেলিং](/developers/docs/scaling/#layer-2-scaling)-এর অনুমতি দিতে নির্দিষ্ট ক্রিপ্টোগ্রাফি পদ্ধতি যোগ করেছে। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement) + + + +
    +
  • EIP-140REVERT অপকোড যোগ করে।
  • +
  • EIP-658সাফল্য বা ব্যর্থতা নির্দেশ করতে লেনদেন রসিদে স্ট্যাটাস ফিল্ড যোগ করা হয়েছে।
  • +
  • EIP-196[ZK-Snarks](/developers/docs/scaling/zk-rollups/)-এর অনুমতি দিতে এলিপটিক কার্ভ এবং স্কেলার মাল্টিপ্লিকেশন যোগ করে।
  • +
  • EIP-197[ZK-Snarks](/developers/docs/scaling/zk-rollups/)-এর অনুমতি দিতে এলিপটিক কার্ভ এবং স্কেলার মাল্টিপ্লিকেশন যোগ করে।
  • +
  • EIP-198RSA সিগনেচার ভেরিফিকেশন সক্ষম করে।
  • +
  • EIP-211পরিবর্তনশীল দৈর্ঘ্যের রিটার্ন ভ্যালুর জন্য সমর্থন যোগ করে।
  • +
  • EIP-214STATICCALL অপকোড যোগ করে, যা অন্যান্য কন্ট্রাক্ট-এ নন-স্টেট-চেঞ্জিং কলের অনুমতি দেয়।
  • +
  • EIP-100ডিফিকাল্টি এডজাস্টমেন্ট ফর্মুলা পরিবর্তন করে।
  • +
  • EIP-649[ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb)-কে 1 বছর বিলম্বিত করে এবং ব্লক রিওয়ার্ড 5 থেকে 3 ETH-এ হ্রাস করে।
  • +
+ +
+ + + +## 2016 {#2016} + +### Spurious Dragon {#spurious-dragon} + + + +#### Summary {#spurious-dragon-summary} + +Spurious Dragon ফর্ক ছিল নেটওয়ার্ক-এ ডিনায়াল অফ সার্ভিস (DoS) এ্যাটাকের (সেপ্টেম্বর/অক্টোবর 2016) দ্বিতীয় প্রতিক্রিয়া, যার মধ্যে অন্তর্ভুক্ত ছিল: + +- নেটওয়ার্ক-এ ভবিষ্যতের এ্যাটাক প্রতিরোধ করতে অপকোড প্রাইসিং টিউনিং করা। +- ব্লকচেইন স্টেট-এর "ডিব্লোট" সক্ষম করা। +- রিপ্লে এ্যাটাক প্রটেকশন যোগ করা। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon) + + + +
    +
  • EIP-155একটি ইথিরিয়াম চেইন থেকে লেনদেন-কে বিকল্প চেইনে রিব্রডকাস্ট হওয়া থেকে বাধা দেয়, উদাহরণস্বরূপ একটি টেস্টনেট লেনদেন মূল ইথিরিয়াম চেইনে রিপ্লে হওয়া।
  • +
  • EIP-160EXP অপকোডের দাম সমন্বয় করে – কম্পিউটেশনালি ব্যয়বহুল কন্ট্রাক্ট অপারেশনের মাধ্যমে নেটওয়ার্ক-কে ধীর করা আরও কঠিন করে তোলে।
  • +
  • EIP-161DOS এ্যাটাকের মাধ্যমে যোগ করা খালি একাউন্ট-গুলো অপসারণের অনুমতি দেয়।
  • +
  • EIP-170ব্লকচেইন-এ একটি কন্ট্রাক্ট-এর সর্বোচ্চ কোড সাইজ পরিবর্তন করে – 24576 বাইট-এ।
  • +
+ +
+ +--- + +### Tangerine whistle {#tangerine-whistle} + + + +#### Summary {#tangerine-whistle-summary} + +Tangerine Whistle ফর্ক ছিল নেটওয়ার্ক-এ ডিনায়াল অফ সার্ভিস (DoS) এ্যাটাকের (সেপ্টেম্বর/অক্টোবর 2016) প্রথম প্রতিক্রিয়া, যার মধ্যে অন্তর্ভুক্ত ছিল: + +- আন্ডারপ্রাইসড অপারেশন কোড সম্পর্কিত জরুরি নেটওয়ার্ক স্বাস্থ্য সমস্যাগুলোর সমাধান করা। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork) + + + +
    +
  • EIP-150স্প্যাম এ্যাটাক-এ ব্যবহার করা যেতে পারে এমন অপকোডগুলোর গ্যাস খরচ বৃদ্ধি করে।
  • +
  • EIP-158ইথিরিয়াম প্রটোকল-এর পূর্ববর্তী সংস্করণগুলোর ত্রুটির কারণে খুব কম খরচে স্টেট-এ রাখা বিপুল সংখ্যক খালি একাউন্ট অপসারণ করে স্টেট সাইজ হ্রাস করে।
  • +
+ +
+ +--- + +### DAO fork {#dao-fork} + + + +#### Summary {#dao-fork-summary} + +DAO ফর্ক ছিল [2016 DAO এ্যাটাক](https://www.coindesk.com/learn/understanding-the-dao-attack/)-এর প্রতিক্রিয়া যেখানে একটি হ্যাক-এ একটি অনিরাপদ [DAO](/glossary/#dao) কন্ট্রাক্ট থেকে 3.6 মিলিয়নেরও বেশি ETH চুরি হয়ে গিয়েছিল। ফর্ক-টি ত্রুটিপূর্ণ কন্ট্রাক্ট থেকে ফান্ডগুলোকে একটি [নতুন কন্ট্রাক্ট](https://eth.blockscout.com/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754)-এ স্থানান্তরিত করেছে যার একটি মাত্র ফাংশন ছিল: উইথড্র। যারা ফান্ড হারিয়েছিল তারা তাদের ওয়ালেট-এ থাকা প্রতি 100 DAO টোকেন-এর জন্য 1 ETH তুলে নিতে পারত। + +এই পদক্ষেপের ওপর ইথিরিয়াম কমিউনিটি ভোট দিয়েছিল। যেকোনো ETH হোল্ডার [একটি ভোটিং প্ল্যাটফর্ম](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)-এ একটি লেনদেন-এর মাধ্যমে ভোট দিতে সক্ষম হয়েছিল। ফর্ক করার সিদ্ধান্তটি 85%-এরও বেশি ভোটে পৌঁছেছিল। + +কিছু মাইনার ফর্ক করতে অস্বীকার করেছিল কারণ DAO ঘটনাটি প্রটোকল-এর কোনো ত্রুটি ছিল না। তারা পরবর্তীতে [Ethereum Classic](https://ethereumclassic.org/) গঠন করে। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2016/07/20/hard-fork-completed) + +--- + +### Homestead {#homestead} + + + +#### Summary {#homestead-summary} + +Homestead ফর্ক যা ভবিষ্যতের দিকে তাকিয়ে ছিল। এতে বেশ কয়েকটি প্রটোকল পরিবর্তন এবং একটি নেটওয়ার্কিং পরিবর্তন অন্তর্ভুক্ত ছিল যা ইথিরিয়াম-কে আরও নেটওয়ার্ক আপগ্রেড করার ক্ষমতা দিয়েছিল। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2016/02/29/homestead-release) + + + +
    +
  • EIP-2কন্ট্রাক্ট তৈরির প্রক্রিয়ায় সম্পাদনা করে।
  • +
  • EIP-7নতুন অপকোড যোগ করে: DELEGATECALL
  • +
  • EIP-8devp2p ফরোয়ার্ড কম্প্যাটিবিলিটি প্রয়োজনীয়তা চালু করে
  • +
+ +
+ + + +## 2015 {#2015} + +### Frontier thawing {#frontier-thawing} + + + +#### Summary {#frontier-thawing-summary} + +Frontier thawing ফর্ক প্রতি [ব্লক](/glossary/#block)-এ 5,000 [গ্যাস](/glossary/#gas) লিমিট তুলে নিয়েছে এবং ডিফল্ট গ্যাস প্রাইস 51 [gwei](/glossary/#gwei)-তে সেট করেছে। এটি লেনদেন-এর অনুমতি দিয়েছে – লেনদেন-এর জন্য 21,000 গ্যাস প্রয়োজন। [প্রুফ-অফ-স্টেক](/glossary/#pos)-এ ভবিষ্যতের হার্ড ফর্ক নিশ্চিত করতে [ডিফিকাল্টি বোম্ব](/glossary/#difficulty-bomb) চালু করা হয়েছিল। + +- [ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2015/08/04/the-thawing-frontier) +- [ইথিরিয়াম প্রটোকল আপডেট 1 পড়ুন](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1) + +--- + +### Frontier {#frontier} + + + +#### Summary {#frontier-summary} + +Frontier ছিল ইথিরিয়াম প্রজেক্টের একটি লাইভ, কিন্তু বেয়ারবোন বাস্তবায়ন। এটি সফল অলিম্পিক টেস্টিং পর্ব অনুসরণ করেছিল। এটি প্রযুক্তিগত ব্যবহারকারীদের, বিশেষ করে ডেভেলপারদের জন্য উদ্দিষ্ট ছিল। [ব্লকস](/glossary/#block)-এর একটি 5,000 [গ্যাস](/glossary/#gas) লিমিট ছিল। এই ‘thawing’ পিরিয়ড মাইনারদের তাদের অপারেশন শুরু করতে এবং প্রারম্ভিক গ্রহণকারীদের ‘তাড়াহুড়ো’ না করেই তাদের ক্লায়েন্ট ইনস্টল করতে সক্ষম করেছিল। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare) + + + +## 2014 {#2014} + +### Ether sale {#ether-sale} + + + +ইথার আনুষ্ঠানিকভাবে 42 দিনের জন্য বিক্রির জন্য উন্মুক্ত হয়েছিল। আপনি এটি BTC দিয়ে কিনতে পারতেন। + +[ইথিরিয়াম ফাউন্ডেশনের ঘোষণা পড়ুন](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale) + +--- + +### Yellowpaper released {#yellowpaper} + + + +ড. গ্যাভিন উড রচিত ইয়েলো পেপার হলো ইথিরিয়াম প্রটোকল-এর একটি প্রযুক্তিগত সংজ্ঞা। + +[ইয়েলো পেপার দেখুন](https://github.com/ethereum/yellowpaper) + + + +## 2013 {#2013} + +### Whitepaper released {#whitepaper} + + + +2015 সালে প্রজেক্টটি চালু হওয়ার আগে, 2013 সালে ইথিরিয়ামের প্রতিষ্ঠাতা ভিটালিক বুটেরিন দ্বারা প্রকাশিত পরিচায়ক পেপার। + + + হোয়াইটপেপার + \ No newline at end of file diff --git a/public/content/translations/bn/roadmap/fusaka/peerdas/index.md b/public/content/translations/bn/roadmap/fusaka/peerdas/index.md new file mode 100644 index 00000000000..5ef20535f7a --- /dev/null +++ b/public/content/translations/bn/roadmap/fusaka/peerdas/index.md @@ -0,0 +1,88 @@ +--- +title: PeerDAS +description: "ফুসাকা (Fusaka) ইথিরিয়াম প্রটোকল আপগ্রেডের অংশ হিসেবে PeerDAS সম্পর্কে জানুন" +lang: bn +--- + +# PeerDAS {#peer-das} + +[Ethereum](/) প্রটোকলটি [EIP-4844 এর মাধ্যমে ব্লব (blob) লেনদেন চালুর](/roadmap/danksharding/) পর থেকে এর সবচেয়ে উল্লেখযোগ্য স্কেলিং আপগ্রেডের মধ্য দিয়ে যাচ্ছে। [Fusaka আপগ্রেডের](/roadmap/fusaka/) অংশ হিসেবে, PeerDAS ব্লব ডাটা পরিচালনার একটি নতুন উপায় নিয়ে এসেছে, যা L2-গুলোর জন্য **[ডাটা এভেইলএবিলিটি (DA)](/developers/docs/data-availability/)** সক্ষমতা প্রায় বহুগুণ বাড়িয়ে দেয়। + +[ব্লব স্কেলিং রোডম্যাপ সম্পর্কে আরও জানুন](https://blog.ethereum.org/2025/08/22/protocol-update-002) + +## স্কেলিং {#scalability} + +ইথিরিয়ামের লক্ষ্য হলো বিশ্বের সবার জন্য একটি নিরপেক্ষ, সুরক্ষিত এবং ডিসেন্ট্রালাইজড প্ল্যাটফর্ম হওয়া। নেটওয়ার্কের ব্যবহার বাড়ার সাথে সাথে, নেটওয়ার্কের স্কেল, নিরাপত্তা এবং ডিসেন্ট্রালাইজেশনের ট্রাইলেমা (trilemma) বা ত্রিমুখী সমস্যার ভারসাম্য বজায় রাখা প্রয়োজন। ইথিরিয়াম যদি তার বর্তমান ডিজাইনের মধ্যেই নেটওয়ার্ক দ্বারা পরিচালিত ডাটা বৃদ্ধি করে, তবে এটি [যে নোডগুলোর ওপর ইথিরিয়াম তার ডিসেন্ট্রালাইজেশনের জন্য নির্ভর করে](/developers/docs/nodes-and-clients/), সেগুলোকে অতিরিক্ত চাপে ফেলার ঝুঁকিতে পড়বে। স্কেলিংয়ের জন্য এমন কঠোর মেকানিজম ডিজাইন প্রয়োজন যা আপস বা ট্রেড-অফগুলো (trade-offs) কমিয়ে আনে। + +এই লক্ষ্য অর্জনের অন্যতম কৌশল হলো সমস্ত লেনদেন [লেয়ার 1 (L1)](/glossary/#layer-1) মেইননেট-এ প্রসেস করার পরিবর্তে লেয়ার 2 স্কেলিং সলিউশনগুলোর একটি বৈচিত্র্যময় ইকোসিস্টেমের অনুমতি দেওয়া। [লেয়ার 2 (L2s)](/glossary/#layer-2) বা [রেলআপস](/glossary#rollups) তাদের নিজস্ব আলাদা চেইনে লেনদেন প্রসেস করে এবং ভেরিফিকেশন ও নিরাপত্তার জন্য ইথিরিয়াম ব্যবহার করে। শুধুমাত্র নিরাপত্তা-সংক্রান্ত গুরুত্বপূর্ণ কমিটমেন্টগুলো প্রকাশ করা এবং পেলোডগুলো (payloads) সংকুচিত করার মাধ্যমে L2-গুলো ইথিরিয়ামের DA সক্ষমতা আরও দক্ষতার সাথে ব্যবহার করতে পারে। এর ফলে, L1 নিরাপত্তার নিশ্চয়তার সাথে আপস না করেই কম ডাটা বহন করে, অন্যদিকে L2-গুলো কম গ্যাস খরচে আরও বেশি ব্যবহারকারী যুক্ত করতে পারে। প্রাথমিকভাবে, L2-গুলো সাধারণ লেনদেনে `calldata` হিসেবে ডাটা প্রকাশ করত, যা গ্যাসের জন্য L1 লেনদেনের সাথে প্রতিযোগিতা করত এবং বিপুল পরিমাণ ডাটা এভেইলএবিলিটির জন্য অবাস্তব ছিল। + +## প্রোটো-ড্যাংকশার্ডিং {#proto-danksharding} + +L2 স্কেলিংয়ের দিকে প্রথম বড় পদক্ষেপ ছিল ডেনকুন (Dencun) আপগ্রেড, যা [প্রোটো-ড্যাংকশার্ডিং](/roadmap/danksharding/) (EIP-4844) চালু করেছিল। এই আপগ্রেডটি রেলআপস-এর জন্য ব্লব (blobs) নামক একটি নতুন, বিশেষায়িত ডাটা টাইপ তৈরি করেছে। [ব্লব](/developers/docs/data-availability/blockchain-data-storage-strategies/#eip-4844-blobs) বা বাইনারি লার্জ অবজেক্ট (binary large objects) হলো আরবিট্রারি ডাটার ক্ষণস্থায়ী অংশ, যেগুলোর ইথিরিয়াম ভার্চুয়াল মেশিন (EVM) এক্সিকিউশনের প্রয়োজন হয় না এবং নোডগুলো এগুলোকে শুধুমাত্র সীমিত সময়ের জন্য সংরক্ষণ করে। এই আরও দক্ষ প্রসেসিং L2-গুলোকে ইথিরিয়ামে আরও বেশি ডাটা প্রকাশ করতে এবং আরও বেশি স্কেল করতে সাহায্য করেছে। + +স্কেলিংয়ের জন্য ইতিমধ্যে শক্তিশালী সুবিধা থাকা সত্ত্বেও, ব্লব ব্যবহার করা চূড়ান্ত লক্ষ্যের একটি অংশ মাত্র। বর্তমান প্রটোকলে, নেটওয়ার্কের প্রতিটি নোডকে এখনও প্রতিটি ব্লব ডাউনলোড করতে হয়। এর ফলে ব্যক্তিগত নোডগুলোর প্রয়োজনীয় ব্যান্ডউইথ একটি বাধা হয়ে দাঁড়ায়, কারণ ব্লবের সংখ্যা বাড়ার সাথে সাথে ডাউনলোড করার জন্য প্রয়োজনীয় ডাটার পরিমাণও সরাসরি বৃদ্ধি পায়। + +ইথিরিয়াম ডিসেন্ট্রালাইজেশনের ক্ষেত্রে কোনো আপস করে না, এবং ব্যান্ডউইথ হলো এর অন্যতম সংবেদনশীল বিষয়। এমনকি যাদের সামর্থ্য আছে তাদের জন্য শক্তিশালী কম্পিউটিং ব্যাপকভাবে উপলব্ধ থাকলেও, উন্নত দেশগুলোর (যেমন [জার্মানি](https://www.speedtest.net/global-index/germany), [বেলজিয়াম](https://www.speedtest.net/global-index/belgium), [অস্ট্রেলিয়া](https://www.speedtest.net/global-index/australia) বা [যুক্তরাষ্ট্র](https://www.speedtest.net/global-index/united-states)) অত্যন্ত শহুরে এলাকাগুলোতেও [আপলোড ব্যান্ডউইথের সীমাবদ্ধতা](https://www.speedtest.net/global-index) নোডগুলোকে শুধুমাত্র ডাটা সেন্টার থেকে চালানোর মধ্যে সীমাবদ্ধ করে দিতে পারে, যদি ব্যান্ডউইথের প্রয়োজনীয়তাগুলো সতর্কতার সাথে নিয়ন্ত্রণ করা না হয়। + +ব্লব বৃদ্ধির সাথে সাথে নোড অপারেটরদের ব্যান্ডউইথ এবং ডিস্ক স্পেসের প্রয়োজনীয়তা ক্রমশ বৃদ্ধি পায়। ব্লবের আকার এবং পরিমাণ এই সীমাবদ্ধতাগুলোর দ্বারা সীমিত। প্রতিটি ব্লব 128kb পর্যন্ত ডাটা বহন করতে পারে, যেখানে প্রতি ব্লকে গড়ে 6টি ব্লব থাকে। এটি ছিল ভবিষ্যতের এমন একটি ডিজাইনের দিকে প্রথম পদক্ষেপ, যা ব্লবগুলোকে আরও বেশি কার্যকর উপায়ে ব্যবহার করবে। + +## ডাটা এভেইলএবিলিটি স্যাম্পলিং {#das} + +[ডাটা এভেইলএবিলিটি](/developers/docs/data-availability/) হলো এই নিশ্চয়তা যে, চেইনটিকে স্বাধীনভাবে ভ্যালিডেট করার জন্য প্রয়োজনীয় সমস্ত ডাটা নেটওয়ার্কের সকল অংশগ্রহণকারীর কাছে অ্যাক্সেসযোগ্য। এটি নিশ্চিত করে যে ডাটা সম্পূর্ণভাবে প্রকাশিত হয়েছে এবং চেইনের নতুন স্টেট বা আগত লেনদেনগুলোকে ট্রাস্টলেসভাবে (trustlessly) যাচাই করতে ব্যবহার করা যেতে পারে। + +ইথিরিয়াম ব্লবগুলো একটি শক্তিশালী ডাটা এভেইলএবিলিটি গ্যারান্টি প্রদান করে যা L2-গুলোর নিরাপত্তা নিশ্চিত করে। এটি করার জন্য, ইথিরিয়াম নোডগুলোকে সম্পূর্ণ ব্লবগুলো ডাউনলোড এবং সংরক্ষণ করতে হয়। কিন্তু আমরা যদি নেটওয়ার্কে ব্লবগুলোকে আরও দক্ষতার সাথে বিতরণ করতে পারি এবং এই সীমাবদ্ধতা এড়াতে পারি, তবে কেমন হয়? + +ডাটা সংরক্ষণ এবং এর প্রাপ্যতা নিশ্চিত করার একটি ভিন্ন পদ্ধতি হলো **ডাটা এভেইলএবিলিটি স্যাম্পলিং (DAS)**। ইথিরিয়াম চালানো প্রতিটি কম্পিউটার প্রতিটি ব্লব সম্পূর্ণভাবে সংরক্ষণ করার পরিবর্তে, DAS একটি ডিসেন্ট্রালাইজড শ্রম বিভাজন (division of labor) চালু করে। এটি নোডগুলোর সম্পূর্ণ নেটওয়ার্ক জুড়ে ছোট, পরিচালনাযোগ্য কাজগুলো বিতরণ করে ডাটা প্রসেস করার বোঝা কমিয়ে দেয়। ব্লবগুলোকে বিভিন্ন অংশে ভাগ করা হয় এবং প্রতিটি নোড সমস্ত নোড জুড়ে অভিন্ন র্যান্ডম ডিস্ট্রিবিউশনের (uniform random distribution) জন্য একটি মেকানিজম ব্যবহার করে শুধুমাত্র কয়েকটি অংশ ডাউনলোড করে। + +এটি একটি নতুন সমস্যার জন্ম দেয়—ডাটার প্রাপ্যতা এবং অখণ্ডতা (integrity) প্রমাণ করা। যখন পৃথক নোডগুলো শুধুমাত্র ছোট ছোট অংশ ধারণ করে, তখন নেটওয়ার্ক কীভাবে গ্যারান্টি দিতে পারে যে ডাটা উপলব্ধ এবং এটি সম্পূর্ণ সঠিক? একটি ক্ষতিকারক নোড ভুয়া ডাটা প্রদান করতে পারে এবং সহজেই শক্তিশালী ডাটা এভেইলএবিলিটি গ্যারান্টি ভেঙে দিতে পারে! এখানেই ক্রিপ্টোগ্রাফি সাহায্য করতে আসে। + +ডাটার অখণ্ডতা নিশ্চিত করতে, EIP-4844 ইতিমধ্যেই KZG কমিটমেন্টের সাথে বাস্তবায়িত হয়েছিল। এগুলো হলো ক্রিপ্টোগ্রাফিক প্রমাণ যা নেটওয়ার্কে একটি নতুন ব্লব যোগ করার সময় তৈরি হয়। প্রতিটি ব্লকে একটি ছোট প্রমাণ অন্তর্ভুক্ত থাকে এবং নোডগুলো যাচাই করতে পারে যে প্রাপ্ত ব্লবগুলো ব্লকের KZG কমিটমেন্টের সাথে মিলে যায়। + +DAS হলো এমন একটি মেকানিজম যা এর ওপর ভিত্তি করে তৈরি হয় এবং নিশ্চিত করে যে ডাটা সঠিক এবং উপলব্ধ উভয়ই। স্যাম্পলিং হলো এমন একটি প্রক্রিয়া যেখানে একটি নোড ডাটার শুধুমাত্র একটি ছোট অংশের জন্য কোয়েরি করে এবং কমিটমেন্টের বিপরীতে এটি যাচাই করে। KZG হলো একটি পলিনোমিয়াল কমিটমেন্ট স্কিম (polynomial commitment scheme), যার মানে হলো পলিনোমিয়াল কার্ভের (polynomial curve) যেকোনো একক পয়েন্ট যাচাই করা যেতে পারে। পলিনোমিয়ালের শুধুমাত্র কয়েকটি পয়েন্ট চেক করার মাধ্যমে, স্যাম্পলিং করা ক্লায়েন্ট একটি শক্তিশালী সম্ভাব্য গ্যারান্টি পেতে পারে যে ডাটা উপলব্ধ রয়েছে। + +## PeerDAS {#peer-das} + +[PeerDAS (EIP-7594)](https://eips.ethereum.org/EIPS/eip-7594) হলো একটি নির্দিষ্ট প্রস্তাব যা ইথিরিয়ামে DAS মেকানিজম বাস্তবায়ন করে, যা সম্ভবত দ্য মার্জ (The Merge)-এর পর থেকে সবচেয়ে বড় আপগ্রেড। PeerDAS-কে ব্লব ডাটা প্রসারিত করার জন্য ডিজাইন করা হয়েছে, এটিকে কলামে ভাগ করে এবং নোডগুলোতে একটি সাবসেট বিতরণ করে। + +এটি অর্জনের জন্য ইথিরিয়াম কিছু চতুর গণিতের সাহায্য নেয়: এটি ব্লব ডাটায় রিড-সলোমন (Reed-Solomon) স্টাইলের ইরেজার কোডিং (erasure coding) প্রয়োগ করে। ব্লব ডাটাকে একটি পলিনোমিয়াল হিসেবে উপস্থাপন করা হয় যার সহগগুলো (coefficients) ডাটাকে এনকোড করে, তারপর একটি বর্ধিত ব্লব তৈরি করতে অতিরিক্ত পয়েন্টগুলোতে সেই পলিনোমিয়ালের মূল্যায়ন করে, যা মূল্যায়নের সংখ্যা দ্বিগুণ করে। এই অতিরিক্ত রিডানডেন্সি (redundancy) ইরেজার রিকভারি (erasure recovery) সক্ষম করে: এমনকি যদি কিছু মূল্যায়ন অনুপস্থিত থাকে, তবুও মূল ব্লবটি পুনর্গঠন করা যেতে পারে যতক্ষণ না বর্ধিত অংশগুলো সহ মোট ডাটার অন্তত অর্ধেক উপলব্ধ থাকে। + +![Extended polynomial](./polynomial.png) + +বাস্তবে, এই পলিনোমিয়ালের হাজার হাজার সহগ রয়েছে। KZG কমিটগুলো হলো কয়েক বাইটের মান, অনেকটা হ্যাস-এর মতো, যা সমস্ত নোডের কাছে পরিচিত। পর্যাপ্ত ডাটা পয়েন্ট ধারণকারী প্রতিটি নোড [দক্ষতার সাথে ব্লব ডাটার একটি সম্পূর্ণ সেট পুনর্গঠন করতে পারে](https://arxiv.org/abs/2207.11079)। + +> মজার তথ্য: ডিভিডি (DVD)-তেও একই কোডিং কৌশল ব্যবহার করা হতো। আপনি যদি একটি ডিভিডিতে আঁচড় কাটেন, তবুও প্লেয়ারটি এটি পড়তে সক্ষম হতো রিড-সলোমন কোডিংয়ের কারণে, যা পলিনোমিয়ালের অনুপস্থিত অংশগুলো যোগ করে। + +ঐতিহাসিকভাবে, ব্লকচেইনের ডাটা, তা ব্লকস হোক বা ব্লব, সমস্ত নোডে সম্প্রচার করা হতো। PeerDAS-এর স্প্লিট-অ্যান্ড-স্যাম্পল (split-and-sample) পদ্ধতির মাধ্যমে, সবাইকে সবকিছু সম্প্রচার করার আর প্রয়োজন নেই। ফুসাকা-পরবর্তী সময়ে, কনসেন্সাস লেয়ার নেটওয়ার্কিং গসিপ টপিক/সাবনেটে (gossip topics/subnets) সংগঠিত হয়: ব্লব কলামগুলোকে নির্দিষ্ট সাবনেটে বরাদ্দ করা হয়, এবং প্রতিটি নোড একটি পূর্বনির্ধারিত সাবসেটে সাবস্ক্রাইব করে এবং শুধুমাত্র সেই অংশগুলো সংরক্ষণ করে। + +PeerDAS-এর মাধ্যমে, বর্ধিত ব্লব ডাটাকে 128টি অংশে ভাগ করা হয় যাকে কলাম বলা হয়। এই নোডগুলোতে ডাটা বিতরণ করা হয় একটি ডেডিকেটেড গসিপ প্রটোকলের মাধ্যমে নির্দিষ্ট সাবনেটগুলোতে, যেগুলোতে তারা সাবস্ক্রাইব করে। নেটওয়ার্কের প্রতিটি সাধারণ নোড অন্তত 8টি র্যান্ডমভাবে নির্বাচিত কলাম সাবনেটে অংশগ্রহণ করে। 128টি সাবনেটের মধ্যে মাত্র 8টি থেকে ডাটা পাওয়ার অর্থ হলো এই ডিফল্ট নোডটি সমস্ত ডাটার মাত্র 1/16 অংশ পায়, কিন্তু যেহেতু ডাটাটি প্রসারিত করা হয়েছিল, তাই এটি মূল ডাটার 1/8 অংশ। + +এটি বর্তমানের “সবাই সবকিছু ডাউনলোড করে” স্কিমার তুলনায় 8 গুণ বেশি একটি নতুন তাত্ত্বিক স্কেলিং সীমার অনুমতি দেয়। নোডগুলো ব্লব কলাম পরিবেশনকারী বিভিন্ন র্যান্ডম সাবনেটে সাবস্ক্রাইব করার ফলে, এগুলোর সমানভাবে বিতরণ হওয়ার সম্ভাবনা খুব বেশি থাকে এবং তাই ডাটার প্রতিটি অংশ নেটওয়ার্কের কোথাও না কোথাও বিদ্যমান থাকে। ভ্যালিডেটরস চালানো নোডগুলোকে তাদের চালানো প্রতিটি ভ্যালিডেটরের সাথে আরও বেশি সাবনেটে সাবস্ক্রাইব করতে হয়। + +> প্রতিটি নোডের একটি অনন্য র্যান্ডমভাবে জেনারেট করা আইডি থাকে, এটি সাধারণত সংযোগের জন্য এর পাবলিক পরিচয় হিসেবে কাজ করে। PeerDAS-এ, এই নম্বরটি ব্যবহার করে নির্ধারণ করা হয় যে এটিকে কোন র্যান্ডম সেট সাবনেটগুলোতে সাবস্ক্রাইব করতে হবে, যার ফলে সমস্ত ব্লব ডাটার একটি অভিন্ন র্যান্ডম ডিস্ট্রিবিউশন তৈরি হয়। + +একবার একটি নোড সফলভাবে মূল ডাটা পুনর্গঠন করলে, এটি পুনরুদ্ধার করা কলামগুলোকে পুনরায় নেটওয়ার্কে বিতরণ করে, সক্রিয়ভাবে যেকোনো ডাটা গ্যাপ নিরাময় করে এবং সামগ্রিক সিস্টেমের স্থিতিস্থাপকতা (resilience) বাড়ায়। ≥4096 ETH সম্মিলিত ব্যালেন্সসহ ভ্যালিডেটরস-এর সাথে সংযুক্ত নোডগুলোকে অবশ্যই একটি সুপারনোড হতে হবে এবং তাই সমস্ত ডাটা কলাম সাবনেটে সাবস্ক্রাইব করতে হবে এবং সমস্ত কলাম সংরক্ষণ করতে হবে। এই সুপারনোডগুলো ক্রমাগত ডাটা গ্যাপ নিরাময় করবে। প্রটোকলের সম্ভাব্য স্ব-নিরাময় (self-healing) প্রকৃতি শক্তিশালী এভেইলএবিলিটি গ্যারান্টির অনুমতি দেয়, যেখানে শুধুমাত্র ডাটার কিছু অংশ ধারণকারী হোম অপারেটরদের সীমাবদ্ধ করে না। + +![Nodes subscribing to columns distributed via subnets](./subnets.png) + +উপরে বর্ণিত স্যাম্পলিং মেকানিজমের কারণে ব্লব ডাটার শুধুমাত্র একটি ছোট সাবসেট ধারণকারী যেকোনো নোড দ্বারা ডাটা এভেইলএবিলিটি নিশ্চিত করা যেতে পারে। এই প্রাপ্যতা প্রয়োগ করা হয়: ভ্যালিডেটরস-কে অবশ্যই নতুন ফর্ক-চয়েস (fork-choice) নিয়মগুলো অনুসরণ করতে হবে, যার অর্থ হলো তারা ডাটার প্রাপ্যতা যাচাই করার পরেই কেবল ব্লকস গ্রহণ করবে এবং ভোট দেবে। + +ব্যবহারকারীদের (বিশেষ করে L2 ব্যবহারকারীদের) ওপর এর সরাসরি প্রভাব হলো কম ফি। রোলআপ ডাটার জন্য 8 গুণ বেশি স্পেস থাকার কারণে, তাদের চেইনে ব্যবহারকারীর কার্যক্রম সময়ের সাথে সাথে আরও সস্তা হয়ে যায়। তবে ফুসাকা-পরবর্তী সময়ে ফি কমতে সময় লাগবে এবং এটি BPO-গুলোর ওপর নির্ভর করবে। + +## ব্লব-প্যারামিটার-অনলি (BPOs) {#bpo} + +নেটওয়ার্ক তাত্ত্বিকভাবে 8 গুণ বেশি ব্লব প্রসেস করতে সক্ষম হবে, তবে ব্লব বৃদ্ধি এমন একটি পরিবর্তন যা সঠিকভাবে পরীক্ষা করা এবং ধাপে ধাপে নিরাপদে কার্যকর করা প্রয়োজন। টেস্টনেট মেইননেট-এ ফিচারগুলো ডিপ্লয় করার জন্য যথেষ্ট আত্মবিশ্বাস প্রদান করে, তবে উল্লেখযোগ্যভাবে বেশি সংখ্যক ব্লব সক্ষম করার আগে আমাদের p2p নেটওয়ার্কের স্থিতিশীলতা নিশ্চিত করতে হবে। + +নেটওয়ার্ককে অতিরিক্ত চাপে না ফেলে প্রতি ব্লকে ব্লবের লক্ষ্যমাত্রা ধীরে ধীরে বাড়াতে, ফুসাকা **[ব্লব-প্যারামিটার-অনলি (BPO)](https://ethereum-magicians.org/t/blob-parameter-only-bpo-forks/22623)** ফর্ক চালু করেছে। সাধারণ ফর্ক-এর বিপরীতে যেগুলোর জন্য বিস্তৃত ইকোসিস্টেম সমন্বয়, চুক্তি এবং সফ্টওয়্যার আপডেটের প্রয়োজন হয়, [BPO (EIP-7892)](https://eips.ethereum.org/EIPS/eip-7892) হলো প্রি-প্রোগ্রাম করা আপগ্রেড যা কোনো হস্তক্ষেপ ছাড়াই সময়ের সাথে সাথে ব্লবের সর্বোচ্চ সংখ্যা বৃদ্ধি করে। + +এর মানে হলো ফুসাকা সক্রিয় হওয়ার এবং PeerDAS লাইভ হওয়ার পরপরই, ব্লবের সংখ্যা অপরিবর্তিত থাকবে। ব্লবের সংখ্যা প্রতি কয়েক সপ্তাহে দ্বিগুণ হতে শুরু করবে যতক্ষণ না এটি সর্বোচ্চ 48-এ পৌঁছায়, এই সময়ে ডেভেলপাররা নজর রাখবেন যাতে মেকানিজমটি প্রত্যাশা অনুযায়ী কাজ করে এবং নেটওয়ার্ক চালানো নোডগুলোর ওপর কোনো বিরূপ প্রভাব না ফেলে। + +## ভবিষ্যৎ দিকনির্দেশনা {#future-directions} + +PeerDAS হলো [FullDAS-এর বৃহত্তর স্কেলিং লক্ষ্যের দিকে](https://ethresear.ch/t/fulldas-towards-massive-scalability-with-32mb-blocks-and-beyond/19529) বা ড্যাংকশার্ডিংয়ের (Danksharding) একটি পদক্ষেপ মাত্র। যেখানে PeerDAS প্রতিটি ব্লবে আলাদাভাবে 1D ইরেজার কোডিং ব্যবহার করে, সেখানে সম্পূর্ণ ড্যাংকশার্ডিং ব্লব ডাটার সম্পূর্ণ ম্যাট্রিক্স জুড়ে আরও সম্পূর্ণ 2D ইরেজার কোডিং স্কিম ব্যবহার করবে। ডাটাকে দুই মাত্রায় (two dimensions) প্রসারিত করা আরও শক্তিশালী রিডানডেন্সি বৈশিষ্ট্য এবং আরও দক্ষ পুনর্গঠন ও যাচাইকরণ তৈরি করে। FullDAS বাস্তবায়নের জন্য অতিরিক্ত গবেষণার পাশাপাশি উল্লেখযোগ্য নেটওয়ার্ক এবং প্রটোকল অপ্টিমাইজেশনের প্রয়োজন হবে। + +## আরও পড়ুন {#further-reading} + +- [ফ্রান্সেসকো ডি'আমাতো (Francesco D'Amato) এর PeerDAS: পিয়ার ডাটা এভেইলএবিলিটি স্যাম্পলিং](https://www.youtube.com/watch?v=WOdpO1tH_Us) +- [ইথিরিয়ামের PeerDAS-এর একটি ডকুমেন্টেশন](https://eprint.iacr.org/2024/1362.pdf) +- [AGM ছাড়াই PeerDAS-এর নিরাপত্তা প্রমাণ করা](https://eprint.iacr.org/2025/1683) +- [PeerDAS, এর প্রভাব এবং ফুসাকা টেস্টিং নিয়ে ভিটালিক (Vitalik)](https://x.com/VitalikButerin/status/1970983281090085200) \ No newline at end of file diff --git a/public/content/translations/cs/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/cs/developers/docs/nodes-and-clients/node-architecture/index.md index 2e790d00727..cfce5a39edd 100644 --- a/public/content/translations/cs/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/cs/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: cs Uzel sítě Ethereum se skládá ze dvou klientů: [exekučního klienta](/developers/docs/nodes-and-clients/#execution-clients) a [konsensuálního klienta](/developers/docs/nodes-and-clients/#consensus-clients). Aby mohl uzel navrhnout nový blok, musí na něm také běžet [klient validátoru](#validators). -Když Ethereum používalo [důkaz prací](/developers/docs/consensus-mechanisms/pow/), stačil k provozování plného uzlu sítě Ethereum exekuční klient. Od zavedení [důkazu podílem](/developers/docs/consensus-mechanisms/pow/) se však musí exekuční klient používat společně s dalším softwarem, který se nazývá [konsensuální klient](/developers/docs/nodes-and-clients/#consensus-clients). +Když Ethereum používalo [důkaz prací](/developers/docs/consensus-mechanisms/pow/), stačil k provozování plného uzlu sítě Ethereum exekuční klient. Od zavedení [důkazu podílem](/developers/docs/consensus-mechanisms/pos/) se však musí exekuční klient používat společně s dalším softwarem, který se nazývá [konsensuální klient](/developers/docs/nodes-and-clients/#consensus-clients). Níže uvedený diagram znázorňuje vztah mezi dvěma klienty sítě Ethereum. Oba klienti se připojují ke svým vlastním sítím peer-to-peer (P2P). Jsou zapotřebí oddělené P2P sítě, protože exekuční klienti si přes svou P2P síť vyměňují transakce, což jim umožňuje spravovat jejich lokální transakční pool, zatímco konsensuální klienti si přes svou P2P síť vyměňují bloky, což umožňuje konsensus a růst řetězce. diff --git a/public/content/translations/de/ethereum-forks/index.md b/public/content/translations/de/ethereum-forks/index.md index 787e1e4b9c0..90a2a5fcdea 100644 --- a/public/content/translations/de/ethereum-forks/index.md +++ b/public/content/translations/de/ethereum-forks/index.md @@ -1,26 +1,191 @@ --- -title: Geschichte und Forks von Ethereum -description: "Eine Geschichte der Ethereum-Blockchain, einschließlich der wichtigsten Meilensteine, Veröffentlichungen und Abspaltungen." +title: Zeitachse aller Ethereum-Forks (2014 bis heute) +description: "Eine Geschichte der Ethereum-Blockchain einschließlich wichtiger Meilensteine, Veröffentlichungen und Forks." lang: de sidebarDepth: 1 --- -# Die Geschichte von Ethereum {#the-history-of-ethereum} +# Zeitachse aller Ethereum-Forks (2014 bis heute) {#the-history-of-ethereum} -Ein Zeitstrang aller wichtigsten Meilensteine, Forks und Aktualisierungen der Ethereum-Blockchain. +Eine Zeitachse aller wichtigen Meilensteine, Forks und Updates der [Ethereum](/)-Blockchain. - + -Forks entstehen, wenn größere technische Aktualisierungen oder Änderungen am Netzwerk vorgenommen werden müssen – sie gehen in der Regel aus [Ethereum-Verbesserungsvorschlägen (EIPs)](/eips/) hervor und ändern die „Regeln“ des Protokolls. +Forks treten auf, wenn größere technische Upgrades oder Änderungen am Netzwerk vorgenommen werden müssen – sie stammen typischerweise von [Ethereum-Verbesserungsvorschlägen (EIPs)](/eips/) und ändern die „Regeln“ des Protokolls. -Wenn für eine Standardsoftware eine Aktualisierung benötigt wird, veröffentlicht der Hersteller lediglich eine neue Version für den Endbenutzer. Blockchains arbeiten anders, da es keinen alleinigen Besitzer gibt. [Ethereum-Clients](/developers/docs/nodes-and-clients/) müssen ihre Software aktualisieren, um die neuen Fork-Regeln zu implementieren. Plus Block Ersteller (Miner in einer Proof-of-Work Umgebung, Validatoren in einer Proof-of-Stake Umgebung) und Nodes erstellen neue Blöcke und müssen diese, entsprechend der neuen Richtlinien, validieren. [Mehr zu Konsensmechanismen](/developers/docs/consensus-mechanisms/) -Diese Regeländerungen können eine vorübergehende Aufspaltung des Netzwerks verursachen. Neue Blöcke konnen nach den neuen oder den alten Regeln erzeugt werden. Forks werden in der Regel im Voraus vereinbart, damit die Clients die Änderungen einheitlich übernehmen und der Fork mit den Upgrades zur Main Chain wird. In seltenen Fällen können jedoch Meinungsverschiedenheiten über Forks dazu führen, dass das Netzwerk dauerhaft gespalten wird – am bekanntesten ist die Entstehung von Ethereum Classic durch den DAO Fork. +Wenn Upgrades in traditioneller, zentral gesteuerter Software benötigt werden, veröffentlicht das Unternehmen einfach eine neue Version für den Endbenutzer. Blockchains funktionieren anders, da es keinen zentralen Eigentümer gibt. [Ethereum-Clients](/developers/docs/nodes-and-clients/) müssen ihre Software aktualisieren, um die neuen Fork-Regeln zu implementieren. Außerdem müssen Block-Ersteller (Miner in einer Proof-of-Work-Welt, Validatoren in einer Proof-of-Stake-Welt) und Blockchain-Knoten Blöcke erstellen und nach den neuen Regeln validieren. [Mehr zu Konsensmechanismen](/developers/docs/consensus-mechanisms/) + +Diese Regeländerungen können zu einer vorübergehenden Spaltung im Netzwerk führen. Neue Blöcke könnten nach den neuen oder den alten Regeln produziert werden. Forks werden in der Regel im Voraus vereinbart, sodass Clients die Änderungen einstimmig übernehmen und der Fork mit den Upgrades zur Hauptkette wird. In seltenen Fällen können jedoch Meinungsverschiedenheiten über Forks dazu führen, dass sich das Netzwerk dauerhaft spaltet – am bekanntesten ist die Entstehung von Ethereum Classic durch den DAO-Fork. -Springen Sie direkt zu Informationen über einige besonders wichtige vergangene Upgrades: [Die Beacon Chain](/roadmap/beacon-chain/); [Die Zusammenführung](/roadmap/merge/); und [EIP-1559](#london) + + +Die Software, die Ethereum zugrunde liegt, besteht aus zwei Hälften, bekannt als die [Ausführungsebene](/glossary/#execution-layer) und die [Konsensebene](/glossary/#consensus-layer). + +**Benennung von Ausführungs-Upgrades** + +Seit 2021 werden Upgrades der **Ausführungsebene** nach den Städtenamen [früherer Devcon- und Devconnect-Standorte](https://devcon.org/en/past-events/) in chronologischer Reihenfolge benannt: + +| Upgrade-Name | Devcon(nect)-Jahr | Devcon-Nummer | Upgrade-Datum | +| -------------- | ----------------- | ------------- | ------------- | +| Berlin | 2014 | 0 | 15. Apr. 2021 | +| London | 2015 | I | 5. Aug. 2021 | +| Shanghai | 2016 | II | 12. Apr. 2023 | +| Cancun | 2017 | III | 13. März 2024 | +| Prague | 2018 | IV | 7. Mai 2025 | +| Osaka | 2019 | V | 3. Dez. 2025 | +| **Amsterdam** | 2022 | Devconnect | TBD - Nächstes| +| _Bogotá_ | 2022 | VI | TBD | +| _Istanbul_ | 2023 | Devconnect | TBD | +| _Bangkok_ | 2024 | VII | TBD | +| _Buenos Aires_ | 2025 | Devconnect | TBD | +| _Mumbai_ | 2026 | VIII | TBD | + +**Benennung von Konsens-Upgrades** + +Seit dem Start der [Beacon Chain](/glossary/#beacon-chain) werden Upgrades der **Konsensebene** nach Sternen benannt, deren Anfangsbuchstaben in alphabetischer Reihenfolge fortschreiten: + +| Upgrade-Name | Upgrade-Datum | +| --------------------------------------------------------- | ------------- | +| Beacon Chain Genesis | 1. Dez. 2020 | +| [Altair](https://en.wikipedia.org/wiki/Altair) | 27. Okt. 2021 | +| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | 6. Sep. 2022 | +| [Capella](https://en.wikipedia.org/wiki/Capella) | 12. Apr. 2023 | +| [Deneb](https://en.wikipedia.org/wiki/Deneb) | 13. März 2024 | +| [Electra]() | 7. Mai 2025 | +| [Fulu]() | 3. Dez. 2025 | +| [**Gloas**](https://en.wikipedia.org/wiki/WASP-13) | TBD - Nächstes| +| [_Heze_](https://en.wikipedia.org/wiki/Zeta_Virginis) | TBD | + +**Kombinierte Benennung** + +Die Ausführungs- und Konsens-Upgrades wurden anfangs zu unterschiedlichen Zeiten eingeführt, aber nach [The Merge](/roadmap/merge/) im Jahr 2022 wurden diese gleichzeitig bereitgestellt. Daher haben sich umgangssprachliche Begriffe entwickelt, um Verweise auf diese Upgrades mit einem einzigen zusammengezogenen Begriff zu vereinfachen. Dies begann mit dem _Shanghai-Capella_-Upgrade, das allgemein als „**Shapella**“ bezeichnet wird, und wird bei nachfolgenden Upgrades fortgesetzt. + +| Ausführungs-Upgrade | Konsens-Upgrade | Kurzname | +| ------------------- | --------------- | ------------- | +| Shanghai | Capella | "Shapella" | +| Cancun | Deneb | "Dencun" | +| Prague | Electra | "Pectra" | +| Osaka | Fulu | "Fusaka" | +| Amsterdam | Gloas | "Glamsterdam" | +| Bogotá | Heze | "Hegotá" | + + -Suchen Sie nach weiteren Protokoll-Upgrades? [Erfahren Sie mehr über anstehende Upgrades auf der Ethereum-Roadmap](/roadmap/). +Springen Sie direkt zu Informationen über einige der besonders wichtigen vergangenen Upgrades: [Die Beacon Chain](/roadmap/beacon-chain/); [The Merge](/roadmap/merge/); und [EIP-1559](#london) + +Suchen Sie nach zukünftigen Protokoll-Upgrades? [Erfahren Sie mehr über kommende Upgrades auf der Ethereum-Roadmap](/roadmap/). + + + +## 2025 {#2025} + +### Fulu-Osaka ("Fusaka") {#fusaka} + + + +[Mehr zu Fusaka](/roadmap/fusaka/) + +### Prague-Electra ("Pectra") {#pectra} + + + +Das Prague-Electra-Upgrade („Pectra“) umfasste mehrere Verbesserungen am Ethereum-Protokoll, die darauf abzielten, die Erfahrung für alle Benutzer, Ebene-2-Netzwerke, Staker und Blockchain-Knoten-Betreiber zu verbessern. + +Das Staking erhielt ein Upgrade mit sich verzinsenden Validator-Konten und einer verbesserten Kontrolle über eingesetzte Mittel (Stake) mithilfe der Ausführungs-Auszahlungsadresse. EIP-7251 erhöhte das maximale effektive Guthaben für einen einzelnen Validator auf 2048, was die Kapitaleffizienz für Staker verbesserte. EIP-7002 ermöglichte es einem Ausführungskonto, Validator-Aktionen sicher auszulösen, einschließlich des Ausstiegs oder der Auszahlung von Teilen der Mittel, was die Erfahrung für ETH-Staker verbesserte und gleichzeitig dazu beitrug, die Verantwortlichkeit für Blockchain-Knoten-Betreiber zu stärken. + +Andere Teile des Upgrades konzentrierten sich auf die Verbesserung der Erfahrung für reguläre Benutzer. EIP-7702 brachte die Möglichkeit für ein reguläres Konto ohne Smart Contract ([Extern verwaltetes Konto (EOA)](/glossary/#eoa)), Code ähnlich einem Smart Contract auszuführen. Dies eröffnete grenzenlose neue Funktionen für traditionelle Ethereum-Konten, wie z. B. Transaktionsbündelung, Gas-Sponsoring, alternative Authentifizierung, programmierbare Ausgabenkontrollen, Kontowiederherstellungsmechanismen und mehr. + + + +Bessere Benutzererfahrung: + +
    +
  • EIP-7702 - EOA-Kontocode festlegen
  • +
  • EIP-7691 - Erhöhung des Blob-Durchsatzes
  • +
  • EIP-7623 - Erhöhung der Calldata-Kosten
  • +
  • EIP-7840 - Blob-Zeitplan zu EL-Konfigurationsdateien hinzufügen
  • +
+ +Bessere Staking-Erfahrung: + +
    +
  • EIP-7251 - Erhöhung der MAX_EFFECTIVE_BALANCE
  • +
  • EIP-7002 - Über die Ausführungsebene auslösbare Ausstiege
  • +
  • EIP-7685 - Allgemeine Anfragen an die Ausführungsebene
  • +
  • EIP-6110 - Bereitstellung von Validator-Einzahlungen auf der Blockchain
  • +
+ +Verbesserungen der Protokolleffizienz und -sicherheit: + +
    +
  • EIP-2537 - Vorkompilierung für BLS12-381-Kurvenoperationen
  • +
  • EIP-2935 - Speichern historischer Block-Hashes im Zustand
  • +
  • EIP-7549 - Verschieben des Komitee-Index außerhalb der Bestätigungen
  • +
+ +
+ +- [Pectra.wtf](https://pectra.wtf) +- [Wie Pectra die Staking-Erfahrung verbessern wird](https://www.kiln.fi/post/next-ethereum-upgrade-how-pectra-will-enhance-the-staking-experience) +- [Lesen Sie die Spezifikationen des Electra-Upgrades](https://github.com/ethereum/consensus-specs/tree/master/specs/electra/) +- [Prague-Electra („Pectra“) FAQ](/roadmap/pectra/) + + + +## 2024 {#2024} + +### Cancun-Deneb ("Dencun") {#dencun} + + + +#### Cancun-Zusammenfassung {#cancun-summary} + +Das Cancun-Upgrade enthält eine Reihe von Verbesserungen an Ethereums _Ausführung_, die darauf abzielen, die Skalierung in Verbindung mit den Deneb-Konsens-Upgrades zu verbessern. + +Dazu gehört insbesondere EIP-4844, bekannt als **Proto-Danksharding**, das die Kosten für die Datenspeicherung für Ebene-2-Rollups erheblich senkt. Dies wird durch die Einführung von Daten-„Blobs“ erreicht, die es Rollups ermöglichen, Daten für kurze Zeit im Mainnet zu veröffentlichen. Dies führt zu deutlich niedrigeren Transaktionsgebühren für Benutzer von Ebene-2-Rollups. + + + +
    +
  • EIP-1153 - Transiente Speicher-Opcodes
  • +
  • EIP-4788 - Beacon-Block-Root in der EVM
  • +
  • EIP-4844 - Shard-Blob-Transaktionen (Proto-Danksharding)
  • +
  • EIP-5656 - MCOPY - Speicher-Kopierbefehl
  • +
  • EIP-6780 - SELFDESTRUCT nur in derselben Transaktion
  • +
  • EIP-7516 - BLOBBASEFEE-Opcode
  • +
+ +
+ +- [Ebene-2-Rollups](/layer-2/) +- [Proto-Danksharding](/roadmap/scaling/#proto-danksharding) +- [Danksharding](/roadmap/danksharding/) +- [Lesen Sie die Spezifikation des Cancun-Upgrades](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) + +#### Deneb-Zusammenfassung {#deneb-summary} + +Das Deneb-Upgrade enthält eine Reihe von Verbesserungen an Ethereums _Konsens_, die darauf abzielen, die Skalierung zu verbessern. Dieses Upgrade erfolgt in Verbindung mit den Cancun-Ausführungs-Upgrades, um Proto-Danksharding (EIP-4844) zu ermöglichen, zusammen mit anderen Verbesserungen an der Beacon Chain. + +Vorgenerierte signierte „freiwillige Ausstiegsnachrichten“ laufen nicht mehr ab, was Benutzern, die ihre Mittel bei einem Drittanbieter-Blockchain-Knoten-Betreiber staken, mehr Kontrolle gibt. Mit dieser signierten Ausstiegsnachricht können Staker den Betrieb des Blockchain-Knotens delegieren und gleichzeitig die Möglichkeit behalten, jederzeit sicher auszusteigen und ihre Mittel abzuheben, ohne jemanden um Erlaubnis bitten zu müssen. + +EIP-7514 bringt eine Verschärfung der Emission von ETH mit sich, indem die „Churn“-Rate, mit der Validatoren dem Netzwerk beitreten können, auf acht (8) pro Epoche begrenzt wird. Da die ETH-Emission proportional zu den gesamten gestakten ETH ist, begrenzt die Einschränkung der Anzahl der beitretenden Validatoren die _Wachstumsrate_ der neu ausgegebenen ETH, während gleichzeitig die Hardwareanforderungen für Blockchain-Knoten-Betreiber gesenkt werden, was der Dezentralisierung zugutekommt. + + + +
    +
  • EIP-4788 - Beacon-Block-Root in der EVM
  • +
  • EIP-4844 - Shard-Blob-Transaktionen
  • +
  • EIP-7044 - Dauerhaft gültige signierte freiwillige Ausstiege
  • +
  • EIP-7045 - Erhöhung des maximalen Bestätigungs-Inklusions-Slots
  • +
  • EIP-7514 - Hinzufügen eines maximalen Epochen-Churn-Limits
  • +
+ +
+ +- [Lesen Sie die Spezifikationen des Deneb-Upgrades](https://github.com/ethereum/consensus-specs/tree/master/specs/deneb/) +- [Cancun-Deneb („Dencun“) FAQ](/roadmap/dencun/) @@ -32,52 +197,52 @@ Suchen Sie nach weiteren Protokoll-Upgrades? [Erfahren Sie mehr über anstehende #### Shanghai-Zusammenfassung {#shanghai-summary} -Das Shanghai-Update ebnete den Weg für Staking-Auszahlungen auf der Ausführungsebene. Die Fusion mit dem Capella-Upgrade ermöglichte es Blöcken, Auszahlungen zu akzeptieren, wodurch Stakern erlaubt wurde, ihre ETH von der Beacon Chain auf der Ausführungsebene abzuheben. +Das Shanghai-Upgrade brachte Staking-Auszahlungen auf die Ausführungsebene. In Verbindung mit dem Capella-Upgrade ermöglichte dies Blöcken, Auszahlungsoperationen zu akzeptieren, was es Stakern erlaubt, ihre ETH von der Beacon Chain auf die Ausführungsebene abzuheben. - +
    -
  • EIP-3651Führt die COINBASE-Adresse ein
  • -
  • EIP-3855Neue PUSH0-Anweisung
  • -
  • EIP-3860Initcode-Größenlimit
  • -
  • EIP-4895Beacon Chain Push-Abhebungen als Operationen
  • -
  • EIP-6049Veraltet SELFDESTRUCT
  • +
  • EIP-3651Startet die COINBASE-Adresse warm
  • +
  • EIP-3855Neuer PUSH0-Befehl
  • +
  • EIP-3860Begrenzung und Messung des Initcodes
  • +
  • EIP-4895Beacon-Chain-Push-Auszahlungen als Operationen
  • +
  • EIP-6049 - Veraltung von SELFDESTRUCT
-- [Lesen Sie die Spezifikation für das Shanghai-Upgrade](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) +- [Lesen Sie die Spezifikation des Shanghai-Upgrades](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) #### Capella-Zusammenfassung {#capella-summary} -Das Capella-Update war das drittgrößte Upgrade für die Konsensebene (Beacon Chain) und ermöglichte Staking-Abhebungen. Mit Capella, das gleichzeitig mit dem Upgrade der Ausführungsebene, Shanghai, erfolgte, wurde die Staking-Abhebungsfunktion zur Verfügung gestellt. +Das Capella-Upgrade war das dritte große Upgrade der Konsensebene (Beacon Chain) und ermöglichte Staking-Auszahlungen. Capella fand synchron mit dem Upgrade der Ausführungsebene, Shanghai, statt und aktivierte die Staking-Auszahlungsfunktion. -Das Upgrade für die Konsensebene ermöglichte es Stakern, die bei der ersten Einzahlung keine Abhebungen vornehmen durften, Abhebungen vorzunehmen. +Dieses Upgrade der Konsensebene brachte Stakern, die bei ihrer anfänglichen Einzahlung keine Auszahlungsdaten angegeben hatten, die Möglichkeit, dies nachzuholen und so Auszahlungen zu ermöglichen. -Das Upgrade hat auch eine automatische Kontenbereinigungsfunktion bereitgestellt, die kontinuierlich Validator-Konten auf verfügbare Prämienzahlungen oder vollständige Abhebungen überprüft und verarbeitet. +Das Upgrade bot auch eine automatische Konto-Sweeping-Funktion, die Validator-Konten kontinuierlich auf verfügbare Belohnungszahlungen oder vollständige Auszahlungen verarbeitet. - [Mehr zu Staking-Auszahlungen](/staking/withdrawals/). -- [Lesen Sie die Spezifikationen für das Capella-Upgrade](https://github.com/ethereum/consensus-specs/tree/master/specs/capella/) +- [Lesen Sie die Spezifikationen des Capella-Upgrades](https://github.com/ethereum/consensus-specs/tree/master/specs/capella/) ## 2022 {#2022} -### Paris (Die Zusammenführung) {#paris} +### Paris (The Merge) {#paris} #### Zusammenfassung {#paris-summary} -Das Paris-Upgrade wurde durch das Erreichen einer [endgültigen Gesamtschwierigkeit](/glossary/#terminal-total-difficulty) von 58750000000000000000000 auf der Proof-of-Work-Blockchain ausgelöst. Dies geschah am 15. September 2022 im Block 15537393 und löste das Paris-Upgrade im nächsten Block aus. Paris war der Übergang zur [Zusammenführung (The Merge)](/roadmap/merge/) – seine wichtigste Funktion bestand darin, den [Proof-of-Work](/developers/docs/consensus-mechanisms/pow)-Mining-Algorithmus und die damit verbundene Konsenslogik abzuschalten und stattdessen [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos) einzuschalten. Paris selbst war ein Upgrade für die [Ausführungsclients](/developers/docs/nodes-and-clients/#execution-clients) (entspricht Bellatrix auf der Konsensebene), das ihnen ermöglichte, Anweisungen von ihren verbundenen [Konsensclients](/developers/docs/nodes-and-clients/#consensus-clients) entgegenzunehmen. Hierfür musste ein neuer Satz interner API-Methoden aktiviert werden, der gemeinsam als [Engine-API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) bekannt ist. Dies war wohl das bedeutendste Upgrade in der Geschichte von Ethereum seit [Homestead](#homestead)! +Das Paris-Upgrade wurde dadurch ausgelöst, dass die Proof-of-Work-Blockchain eine [terminale Gesamtschwierigkeit](/glossary/#terminal-total-difficulty) von 58750000000000000000000 überschritt. Dies geschah bei Block 15537393 am 15. September 2022 und löste das Paris-Upgrade im nächsten Block aus. Paris war der Übergang zu [The Merge](/roadmap/merge/) – sein Hauptmerkmal war das Abschalten des [Proof-of-Work](/developers/docs/consensus-mechanisms/pow)-Mining-Algorithmus und der zugehörigen Konsenslogik und stattdessen das Einschalten von [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos). Paris selbst war ein Upgrade für die [Ausführungs-Clients](/developers/docs/nodes-and-clients/#execution-clients) (äquivalent zu Bellatrix auf der Konsensebene), das es ihnen ermöglichte, Anweisungen von ihren verbundenen [Konsens-Clients](/developers/docs/nodes-and-clients/#consensus-clients) entgegenzunehmen. Dies erforderte die Aktivierung einer neuen Reihe interner API-Methoden, die zusammen als [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) bekannt sind. Dies war wohl das bedeutendste Upgrade in der Geschichte von Ethereum seit [Homestead](#homestead)! -- [Lesen Sie die Spezifikation für das Paris-Upgrade](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) +- [Lesen Sie die Spezifikation des Paris-Upgrades](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) - +
    -
  • EIP-3675Ermöglicht den Übergang des Ethereum-Netzwerks vom Konsensmechanismus Proof-of-Work (PoW) zum Proof-of-Stake (PoS).
  • -
  • EIP-4399 Die SCHWIERIGKEITEN mit der Wiederverwendung und Lesbarkeit des Opcodes werden durch den PREVRANDAO behoben
  • +
  • EIP-3675Upgrade des Konsenses auf Proof-of-Stake
  • +
  • EIP-4399Ersetzen des DIFFICULTY-Opcodes durch PREVRANDAO
@@ -90,7 +255,7 @@ Das Paris-Upgrade wurde durch das Erreichen einer [endgültigen Gesamtschwierigk #### Zusammenfassung {#bellatrix-summary} -Das Bellatrix-Upgrade war das zweite geplante Upgrade für die [Beacon Chain](/roadmap/beacon-chain), das die Blockchain auf die [die Zusammenführung](/roadmap/merge/) vorbereitete. Es setzt Validator-Strafen für Inaktivität und strafbare Vergehen auf alle ihre Werte. Bellatrix beinhaltet auch eine Aktualisierung der Fork-Choice-Regeln, um die Blockchain auf die Zusammenführung und den Übergang vom letzten Proof-of-Work-Block zum ersten Proof-of-Stake-Block vorzubereiten. Dies beinhaltet auch, dass die Konsensclients über die [Terminale Gesamtschwierigkeit](/glossary/#terminal-total-difficulty) von 58750000000000000000000 informiert werden. +Das Bellatrix-Upgrade war das zweite geplante Upgrade für die [Beacon Chain](/roadmap/beacon-chain), das die Chain auf [The Merge](/roadmap/merge/) vorbereitete. Es bringt die Validator-Strafen für Inaktivität und Slashing-Vergehen auf ihre vollen Werte. Bellatrix enthält auch ein Update der Fork-Choice-Regeln, um die Chain auf The Merge und den Übergang vom letzten Proof-of-Work-Block zum ersten Proof-of-Stake-Block vorzubereiten. Dazu gehört, dass Konsens-Clients auf die [terminale Gesamtschwierigkeit](/glossary/#terminal-total-difficulty) von 58750000000000000000000 aufmerksam gemacht werden. - [Lesen Sie die Spezifikation des Bellatrix-Upgrades](https://github.com/ethereum/consensus-specs/tree/master/specs/bellatrix) @@ -102,14 +267,14 @@ Das Bellatrix-Upgrade war das zweite geplante Upgrade für die [Beacon Chain](/r #### Zusammenfassung {#gray-glacier-summary} -Das Gray Glacier Netzwerk-Upgrade hat die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) um drei Monate nach hinten verschoben. Dies ist die einzige Änderung, die in diesem Upgrade eingeführt wurde, und ähnelt den [Arrow Glacier](#arrow-glacier) und [Muir Glacier](#muir-glacier) Upgrades. Ähnliche Änderungen wurden bei den Netzwerk-Upgrades [Byzantium](#byzantium),[Constantinople](#constantinople) und [London](#london) durchgeführt. +Das Gray-Glacier-Netzwerk-Upgrade verschob die [Schwierigkeitsbombe (Difficulty Bomb)](/glossary/#difficulty-bomb) um drei Monate nach hinten. Dies ist die einzige Änderung, die in diesem Upgrade eingeführt wurde, und ähnelt in ihrer Art den Upgrades [Arrow Glacier](#arrow-glacier) und [Muir Glacier](#muir-glacier). Ähnliche Änderungen wurden bei den Netzwerk-Upgrades [Byzantium](#byzantium), [Constantinople](#constantinople) und [London](#london) durchgeführt. -- [EF Blog - Gray Glacier Upgrade-Ankündigung](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement) +- [EF-Blog - Ankündigung des Gray-Glacier-Upgrades](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement) - +
    -
  • EIP-5133Verzögert die Explosion der Schwierigkeitsbombe bis Ende September 2022
  • +
  • EIP-5133verzögert die Schwierigkeitsbombe bis September 2022
@@ -124,12 +289,12 @@ Das Gray Glacier Netzwerk-Upgrade hat die [Schwierigkeitsbombe](/glossary/#diffi #### Zusammenfassung {#arrow-glacier-summary} -Das Arrow Glacier Netzwerk-Upgrade hat die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) um mehrere Monate nach hinten geschoben. Dies ist die einzige Änderung, die mit diesem Upgrade eingeführt wird, und ähnelt dem [Muir Glacier](#muir-glacier)-Upgrade. Ähnliche Änderungen wurden bei den Netzwerk-Upgrades [Byzantium](#byzantium),[Constantinople](#constantinople) und [London](#london) durchgeführt. +Das Arrow-Glacier-Netzwerk-Upgrade verschob die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) um mehrere Monate nach hinten. Dies ist die einzige Änderung, die in diesem Upgrade eingeführt wurde, und ähnelt in ihrer Art dem [Muir Glacier](#muir-glacier)-Upgrade. Ähnliche Änderungen wurden bei den Netzwerk-Upgrades [Byzantium](#byzantium), [Constantinople](#constantinople) und [London](#london) durchgeführt. -- [EF Blog – Ankündigung des Arrow Glacier-Upgrades](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement) -- [Ethereum Cat Herders – Ethereum Arrow Glacier-Upgrade](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) +- [EF-Blog - Ankündigung des Arrow-Glacier-Upgrades](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement) +- [Ethereum Cat Herders - Ethereum Arrow-Glacier-Upgrade](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) - +
  • EIP-4345verzögert die Schwierigkeitsbombe bis Juni 2022
  • @@ -145,13 +310,13 @@ Das Arrow Glacier Netzwerk-Upgrade hat die [Schwierigkeitsbombe](/glossary/#diff #### Zusammenfassung {#altair-summary} -Das Altair-Upgrade war das erste geplante Upgrade für die [Beacon Chain](/roadmap/beacon-chain). Es wurde die Unterstützung für „Sync-Komitees“ hinzugefügt, die leichte Clients aktivierte und die Strafen für Inaktivität und Slashing von Validatoren erhöht, da die Entwicklung der Zusammenführung voranschritt. +Das Altair-Upgrade war das erste geplante Upgrade für die [Beacon Chain](/roadmap/beacon-chain). Es fügte Unterstützung für „Sync-Komitees“ hinzu – was Light-Clients ermöglichte – und erhöhte die Strafen für Validator-Inaktivität und Slashing, während die Entwicklung in Richtung The Merge voranschritt. -- [Lesen Sie die Spezifikation zum Altair-Upgrade](https://github.com/ethereum/consensus-specs/tree/master/specs/altair) +- [Lesen Sie die Spezifikation des Altair-Upgrades](https://github.com/ethereum/consensus-specs/tree/master/specs/altair) -#### Wissenswertes! {#altair-fun-fact} +#### Fun Fact! {#altair-fun-fact} -Altair war das erste große Netzwerk-Upgrade, für das es einen genauen Einführungszeitpunkt gab. Jedes vorherige Upgrade basierte auf einer angegebenen Blocknummer auf der Proof-of-Work-Chain, bei der die Blockzeiten variieren. Die Beacon Chain erfordert kein Lösen von Proof-of-Work und arbeitet stattdessen mit einem zeitbasierten Epochensystem, das aus 32 zwölfsekündigen „Slots" besteht, in denen Validatoren Blöcke vorschlagen können. Deshalb wussten wir genau, wann wir Epoche 74.240 erreichen würden und Altair live gehen würde! +Altair war das erste große Netzwerk-Upgrade, das eine genaue Rollout-Zeit hatte. Jedes vorherige Upgrade basierte auf einer deklarierten Blocknummer auf der Proof-of-Work-Chain, bei der die Blockzeiten variieren. Die Beacon Chain erfordert keine Lösung für Proof-of-Work und arbeitet stattdessen mit einem zeitbasierten Epochensystem, das aus 32 zwölfsekündigen „Slots“ besteht, in denen Validatoren Blöcke vorschlagen können. Deshalb wussten wir genau, wann wir Epoche 74.240 erreichen würden und Altair live ging! - [Blockzeit](/developers/docs/blocks/#block-time) @@ -163,20 +328,34 @@ Altair war das erste große Netzwerk-Upgrade, für das es einen genauen Einführ #### Zusammenfassung {#london-summary} -Das London-Upgrade führte die [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) ein, das den Markt für Transaktionsgebühren reformierte sowie Änderungen bei der Handhabung von Gasrückerstattungen und dem [Ice-Age](/glossary/#ice-age)-Zeitplan beinhaltete. +Das London-Upgrade führte [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) ein, das den Transaktionsgebührenmarkt reformierte, zusammen mit Änderungen bei der Handhabung von Gas-Rückerstattungen und dem Zeitplan der [Eiszeit (Ice Age)](/glossary/#ice-age). -- [Sind Sie ein dApp-Entwickler? Bitte aktualisieren Sie Ihre Bibliotheken und Werkzeuge.](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) +#### Was war das London-Upgrade / EIP-1559? {#eip-1559} + +Vor dem London-Upgrade hatte Ethereum Blöcke mit fester Größe. In Zeiten hoher Netzwerknachfrage arbeiteten diese Blöcke mit voller Kapazität. Infolgedessen mussten Benutzer oft warten, bis die Nachfrage sank, um in einen Block aufgenommen zu werden, was zu einer schlechten Benutzererfahrung führte. Das London-Upgrade führte Blöcke mit variabler Größe in Ethereum ein. + +Die Art und Weise, wie Transaktionsgebühren im Ethereum-Netzwerk berechnet wurden, änderte sich mit [dem London-Upgrade](/ethereum-forks/#london) vom August 2021. Vor dem London-Upgrade wurden die Gebühren ohne Trennung von `base`- und `priority`-Gebühren wie folgt berechnet: + +Nehmen wir an, Alice musste Bob 1 ETH zahlen. In der Transaktion beträgt das Gaslimit 21.000 Einheiten und der Gaspreis 200 Gwei. + +Die Gesamtgebühr hätte betragen: `Gaseinheiten (Limit) * Gaspreis pro Einheit`, d. h. `21.000 * 200 = 4.200.000 Gwei` oder 0,0042 ETH + +Die Implementierung von [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) im London-Upgrade machte den Transaktionsgebührenmechanismus komplexer, aber die Gasgebühren vorhersehbarer, was zu einem effizienteren Transaktionsgebührenmarkt führte. Benutzer können Transaktionen mit einer `maxFeePerGas` einreichen, die dem entspricht, was sie für die Ausführung der Transaktion zu zahlen bereit sind, in dem Wissen, dass sie nicht mehr als den Marktpreis für Gas (`baseFeePerGas`) zahlen werden, und erhalten jeden Überschuss, abzüglich ihres Trinkgelds, zurückerstattet. + +Dieses Video erklärt EIP-1559 und die Vorteile, die es bringt: [EIP-1559 Erklärt](https://www.youtube.com/watch?v=MGemhK9t44Q) + +- [Sind Sie ein Dapp-Entwickler? Stellen Sie sicher, dass Sie Ihre Bibliotheken und Tools aktualisieren.](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) - [Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2021/07/15/london-mainnet-announcement) -- [Lesen Sie die Erklärung der Ethereum Cat Herder](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) +- [Lesen Sie die Erklärung der Ethereum Cat Herders](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) - +
      -
    • EIP-1559trägt zur Verbesserung der Marktbedingungen bei und senkt gleichzeitig die Transaktionsgebühren
    • -
    • EIP-3198zur Wiedergabe eines BASEFEE-Blockcodes
    • -
    • EIP-3529reduziert die Gasgebühren für EVM-Operationen
    • -
    • EIP-3541verhindert die Bereitstellung von Verträgen, verhindert, die mit 0xEF beginnen
    • -
    • EIP-3554plant, das Ice Age bis Dezember 2021 zu verlängern
    • +
    • EIP-1559verbessert den Transaktionsgebührenmarkt
    • +
    • EIP-3198gibt die BASEFEE aus einem Block zurück
    • +
    • EIP-3529 - reduziert Gas-Rückerstattungen für EVM-Operationen
    • +
    • EIP-3541 - verhindert die Bereitstellung von Verträgen, die mit 0xEF beginnen
    • +
    • EIP-3554verzögert die Eiszeit bis Dezember 2021
    @@ -189,18 +368,18 @@ Das London-Upgrade führte die [EIP-1559](https://eips.ethereum.org/EIPS/eip-155 #### Zusammenfassung {#berlin-summary} -Mit dem Berlin-Upgrade wurden die Gaskosten für bestimmte EVM-Aktionen optimiert und die Unterstützung für mehrere Transaktionsarten erweitert. +Das Berlin-Upgrade optimierte die Gaskosten für bestimmte EVM-Aktionen und erhöht die Unterstützung für mehrere Transaktionstypen. -- [Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement) -- [Lies die Erklärung der Ethereum Cat Herder](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) +- [Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement) +- [Lesen Sie die Erklärung der Ethereum Cat Herders](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) - +
      -
    • EIP-2565senkt die Gaskosten für ModExp
    • -
    • EIP-2718ermöglicht einen viel einfacheren Zugang zu den verschiedenen Transaktionsdiensten
    • -
    • EIP-2929Gaskostenerhöhung für Zustandszugriffs-Opcodes
    • -
    • EIP-2930fügt eine optionale Zugriffsliste hinzu
    • +
    • EIP-2565senkt die ModExp-Gaskosten
    • +
    • EIP-2718ermöglicht eine einfachere Unterstützung für mehrere Transaktionstypen
    • +
    • EIP-2929Erhöhung der Gaskosten für Zustandszugriffs-Opcodes
    • +
    • EIP-2930fügt optionale Zugriffslisten hinzu
    @@ -209,15 +388,15 @@ Mit dem Berlin-Upgrade wurden die Gaskosten für bestimmte EVM-Aktionen optimier ## 2020 {#2020} -### Entstehungsgeschichte der Beacon Chain {#beacon-chain-genesis} +### Beacon Chain Genesis {#beacon-chain-genesis} #### Zusammenfassung {#beacon-chain-genesis-summary} -Die [Beacon Chain](/roadmap/beacon-chain/) benötigte zum sicheren Betrieb 16.384 Einzahlungen von 32 gestakten ETH. Dazu kam es am 27. November, was bedeutet, dass die Beacon Chain am 1. Dezember 2020 mit der Erzeugung von Blöcken begann. Dies ist ein wichtiger erster Schritt zur Verwirklichung der [Ethereum-Vision](/roadmap/). +Die [Beacon Chain](/roadmap/beacon-chain/) benötigte 16.384 Einzahlungen von 32 gestakten ETH, um sicher zu starten. Dies geschah am 27. November, und die Beacon Chain begann am 1. Dezember 2020 mit der Produktion von Blöcken. -[Die Ankündigung der Ethereum Foundation lesen](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21) Die Beacon Chain @@ -225,15 +404,15 @@ Die [Beacon Chain](/roadmap/beacon-chain/) benötigte zum sicheren Betrieb 16.38 --- -### Staking-Einzahlungsvertrag bereitgestellt {#staking-deposit-contract} +### Staking deposit contract deployed {#staking-deposit-contract} #### Zusammenfassung {#deposit-contract-summary} -Mit dem Staking-Einzahlungsvertrag wurde [Staking](/glossary/#staking) im Ökosystem von Ethereum eingeführt. Obwohl es sich um einen [Mainnet](/glossary/#mainnet)-Vertrag handelt, hatte er einen direkten Einfluss auf den Zeitplan für die Einführung der [Beacon Chain](/roadmap/beacon-chain/), einem wichtigen [Ethereum-Upgrade](/roadmap/). +Der Staking-Einzahlungsvertrag führte das [Staking](/glossary/#staking) in das Ethereum-Ökosystem ein. Obwohl es sich um einen [Mainnet](/glossary/#mainnet)-Vertrag handelte, hatte er direkte Auswirkungen auf den Zeitplan für den Start der [Beacon Chain](/roadmap/beacon-chain/), einem wichtigen [Ethereum-Upgrade](/roadmap/). -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19) Staking @@ -247,15 +426,15 @@ Mit dem Staking-Einzahlungsvertrag wurde [Staking](/glossary/#staking) im Ökosy #### Zusammenfassung {#muir-glacier-summary} -Die Muir-Glacier-Fork führte eine Verzögerung in die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) ein. Erhöhungen der Blockschwierigkeitsstufe des [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/)-Konsensmechanismus drohten, die Nutzbarkeit von Ethereum zu verringern, indem die Wartezeiten für das Senden von Transaktionen und die Verwendung von dApps erhöht werden. +Der Muir-Glacier-Fork führte eine Verzögerung der [Schwierigkeitsbombe](/glossary/#difficulty-bomb) ein. Erhöhungen der Blockschwierigkeit des [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/)-Konsensmechanismus drohten die Nutzbarkeit von Ethereum zu verschlechtern, indem sie die Wartezeiten für das Senden von Transaktionen und die Nutzung von Dapps erhöhten. -- [Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement) -- [Lies die Erklärung der Ethereum Cat Herder](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) +- [Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement) +- [Lesen Sie die Erklärung der Ethereum Cat Herders](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) - +
      -
    • EIP-2384verzögert die Schwierigkeitsbombe um weitere 4.000.000 Blöcke, oder etwa 611 Tage.
    • +
    • EIP-2384verzögert die Schwierigkeitsbombe um weitere 4.000.000 Blöcke oder ~611 Tage.
    @@ -270,26 +449,25 @@ Die Muir-Glacier-Fork führte eine Verzögerung in die [Schwierigkeitsbombe](/gl #### Zusammenfassung {#istanbul-summary} -Die Istanbul-Fork: +Der Istanbul-Fork: -- Optimierte die [Gaskosten](/glossary/#gas) für bestimmte Aktionen in der [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine). -- Verbesserte Widerstandskraft gegen Denial-of-Service-Angriffe. -- Machte [Skalierungslösungen der Ebene 2](/developers/docs/scaling/#layer-2-scaling) basierend auf SNARKs und STARKs leistungsstärker. -- Aktivierte Ethereum und Zcash zur Interoperation. -- Ermöglichte Verträgen, kreativere Funktionen einzuführen. +- Optimierte die [Gas](/glossary/#gas)-Kosten bestimmter Aktionen in der [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine). +- Verbesserte die Widerstandsfähigkeit gegen Denial-of-Service-Angriffe. +- Machte [Ebene-2-Skalierungslösungen](/developers/docs/scaling/#layer-2-scaling) basierend auf SNARKs und STARKs leistungsfähiger. +- Ermöglichte die Interoperabilität von Ethereum und Zcash. +- Erlaubte Verträgen, kreativere Funktionen einzuführen. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement) - +
      -
    • EIP-152ermöglicht es dem Ethereum-Netzwerk, mit anonymen Währungen wie Zcash zu arbeiten, wodurch das Recht auf Privatsphäre geschützt werden kann.
    • -
    • EIP-1108eine günstigere Kryptographie zur Optimierung der [Gaskosten](/glossary/#gas).
    • -
    • EIP-1344schützt Ethereum vor Wiederholungsangriffen durch Hinzufügen des CHAINID [-Opcodes](/developers/docs/ethereum-stack/#ethereum-virtual-machine).
    • -
    • EIP-1884die Optimierung der Gaspreis-Verfahrenscodes auf der Grundlage des Gasverbrauchs.
    • -
    • EIP-2028reduziert die Kosten für „CallData“, mit dem Ziel, mehr Daten in den Blöcken zu implementieren – gut für [Layer-2-Skalierbarkeit](/developers/docs/scaling/#layer-2-scaling).
    • -
    • EIP-2200 -weitere Änderungen der Gaspreisverfahrenscodes.
    • +
    • EIP-152ermöglicht Ethereum die Zusammenarbeit mit datenschutzfreundlichen Währungen wie Zcash.
    • +
    • EIP-1108günstigere Kryptografie zur Verbesserung der [Gas](/glossary/#gas)-Kosten.
    • +
    • EIP-1344schützt Ethereum vor Replay-Angriffen durch Hinzufügen des CHAINID-[Opcodes](/developers/docs/ethereum-stack/#ethereum-virtual-machine).
    • +
    • EIP-1884Optimierung der Opcode-Gaspreise basierend auf dem Verbrauch.
    • +
    • EIP-2028reduziert die Kosten für CallData, um mehr Daten in Blöcken zu ermöglichen – gut für die [Ebene-2-Skalierung](/developers/docs/scaling/#layer-2-scaling).
    • +
    • EIP-2200weitere Änderungen der Opcode-Gaspreise.
    @@ -302,21 +480,22 @@ weitere Änderungen der Gaspreisverfahrenscodes. #### Zusammenfassung {#constantinople-summary} -Die Constantinople-Fork: +Der Constantinople-Fork: -- Sie stellte sicher, dass die Blockchain nicht einfrieren konnte, bevor der [Proof-of-Stake](#beacon-chain-genesis) implementiert wurde. -- Optimierte die [Gas-](/glossary/#gas)-Kosten für bestimmte Aktionen in der [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine). +- Reduzierte die [Block-Belohnung](/developers/docs/consensus-mechanisms/pow/mining/) für das Mining von 3 auf 2 ETH. +- Stellte sicher, dass die Blockchain nicht einfror, bevor [Proof-of-Stake implementiert wurde](#beacon-chain-genesis). +- Optimierte die [Gas](/glossary/#gas)-Kosten bestimmter Aktionen in der [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine). - Fügte die Möglichkeit hinzu, mit Adressen zu interagieren, die noch nicht erstellt wurden. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement) - +
      -
    • EIP-145optimiert die Kosten von bestimmten On-Chain-Aktionen.
    • -
    • EIP-1014erlaubt es Ihnen, Adressen zu verwenden, die noch nicht angelegt wurden.
    • -
    • EIP-1052optimiert die Kosten bestimmter On-Chain-Aktionen.
    • -
    • EIP-1234stellt sicher, dass die Blockchain vor dem Proof-of-Stake-Verfahren nicht eingefroren wird.
    • +
    • EIP-145optimiert die Kosten bestimmter Aktionen auf der Blockchain.
    • +
    • EIP-1014ermöglicht die Interaktion mit Adressen, die noch erstellt werden müssen.
    • +
    • EIP-1052führt den EXTCODEHASH-Befehl ein, um den Hash des Codes eines anderen Vertrags abzurufen.
    • +
    • EIP-1234stellt sicher, dass die Blockchain vor Proof-of-Stake nicht einfriert, und reduziert die Block-Belohnung von 3 auf 2 ETH.
    @@ -331,27 +510,27 @@ Die Constantinople-Fork: #### Zusammenfassung {#byzantium-summary} -Die Byzantium-Fork: +Der Byzantium-Fork: -- Reduzierte die Block-[Mining](/developers/docs/consensus-mechanisms/pow/mining/)-Prämien von 5 auf 3 ETH. +- Reduzierte die [Block-Belohnung](/developers/docs/consensus-mechanisms/pow/mining/) für das Mining von 5 auf 3 ETH. - Verzögerte die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) um ein Jahr. -- Fügte die Möglichkeit hinzu, nicht zustandsverändernde Aufrufe zu anderen Verträgen zu tätigen. -- Fügte bestimmte Kryptographie-Methoden hinzu, um [Layer-2-Skalierung](/developers/docs/scaling/#layer-2-scaling) zu ermöglichen. +- Fügte die Möglichkeit hinzu, nicht-zustandsändernde Aufrufe an andere Verträge durchzuführen. +- Fügte bestimmte Kryptografie-Methoden hinzu, um die [Ebene-2-Skalierung](/developers/docs/scaling/#layer-2-scaling) zu ermöglichen. -[Die Ankündigung der Ethereum Foundation lesen](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement) - +
      -
    • EIP-140integriert den Operationscode REVERT.
    • -
    • EIP-658Statusfeld zu Transaktionsbelegen hinzugefügt, Erfolg oder Misserfolg anzuzeigen.
    • -
    • EIP-196integriert die elliptische Kurve sowie die Multiplikation mit einem Skalar, die die Verwendung von [ZK-Snarks ](/developers/docs/scaling/zk-rollups/) ermöglichen.
    • +
    • EIP-140fügt den REVERT-Opcode hinzu.
    • +
    • EIP-658Statusfeld zu Transaktionsbelegen hinzugefügt, um Erfolg oder Misserfolg anzuzeigen.
    • +
    • EIP-196fügt elliptische Kurven und Skalarmultiplikation hinzu, um [ZK-Snarks](/developers/docs/scaling/zk-rollups/) zu ermöglichen.
    • EIP-197fügt elliptische Kurven und Skalarmultiplikation hinzu, um [ZK-Snarks](/developers/docs/scaling/zk-rollups/) zu ermöglichen.
    • -
    • EIP-198aktiviert Überprüfung der RSA-Signatur.
    • -
    • EIP-211fügt Unterstützung der Ausgabewerte eines Variableninhalts hinzu.
    • -
    • EIP-214integriert den Verfahrenscode, STATICCALL der nicht zustandsveränderte Aufrufe für andere Verträge erlaubt.
    • -
    • EIP-100ändert die Formel für die Einstellung des Schwierigkeitsgrades.
    • -
    • EIP-649verzögert die [ Schwierigkeitsbombe](/glossary/#difficulty-bomb) um ein Jahr und senkt die vollen Blockprämien von 5 auf 3 ETH.
    • +
    • EIP-198ermöglicht die RSA-Signaturüberprüfung.
    • +
    • EIP-211fügt Unterstützung für Rückgabewerte variabler Länge hinzu.
    • +
    • EIP-214fügt den STATICCALL-Opcode hinzu, der nicht-zustandsändernde Aufrufe an andere Verträge ermöglicht.
    • +
    • EIP-100ändert die Formel zur Anpassung der Schwierigkeit.
    • +
    • EIP-649verzögert die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) um 1 Jahr und reduziert die Block-Belohnung von 5 auf 3 ETH.
    @@ -366,63 +545,63 @@ Die Byzantium-Fork: #### Zusammenfassung {#spurious-dragon-summary} -Die Spurious-Dragon-Fork war die zweite Reaktion auf die Denial-of-Service(DoS)-Angriffe auf das Netzwerk (September/Oktober 2016), einschließlich: +Der Spurious-Dragon-Fork war die zweite Reaktion auf die Denial-of-Service-Angriffe (DoS) auf das Netzwerk (September/Oktober 2016), einschließlich: -- Abstimmen der Verfahrenscode-Preise, um zukünftige Angriffe auf das Netzwerk zu verhindern. -- Aktivierung von „Debloat“ (Wachstumsveringerung) für den Blockchain-Zustand. -- Hinzufügen von Replay-Angriffsschutz. +- Anpassung der Opcode-Preise, um zukünftige Angriffe auf das Netzwerk zu verhindern. +- Ermöglichung der „Entschlackung“ (Debloat) des Blockchain-Zustands. +- Hinzufügen von Schutz vor Replay-Angriffen. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon) - +
      -
    • EIP-155verhindert, dass Transaktionen von einer Ethereum-Blockchain wieder auf einer alternativen Blockchain gesendet werden. Beispiel: Eine Testnetz-Transaktion, die auf der Ethereum Haupt-Blockchain wiedergegeben wird.
    • -
    • EIP-160passt Preise des EXP-Verfahrenscodes an – und wirkt somit der Verlangsamung des Netzwerks durch rechenintensive Vertragsklauseln entgegen.
    • -
    • EIP-161ermöglicht das Löschen leerer Konten, die bei DOS-Attacken hinzugefügt wurden.
    • -
    • EIP-170ändert die maximale Codegröße, die ein Vertrag in der Blockchain haben kann, in 24576 Bytes.
    • +
    • EIP-155verhindert, dass Transaktionen von einer Ethereum-Chain auf einer alternativen Chain erneut gesendet werden, z. B. dass eine Testnet-Transaktion auf der Haupt-Ethereum-Chain wiederholt wird.
    • +
    • EIP-160passt die Preise des EXP-Opcodes an – macht es schwieriger, das Netzwerk durch rechenintensive Vertragsoperationen zu verlangsamen.
    • +
    • EIP-161ermöglicht das Entfernen leerer Konten, die durch die DOS-Angriffe hinzugefügt wurden.
    • +
    • EIP-170ändert die maximale Codegröße, die ein Vertrag auf der Blockchain haben kann – auf 24576 Bytes.
    --- -### Tangerine Whistle {#tangerine-whistle} +### Tangerine whistle {#tangerine-whistle} #### Zusammenfassung {#tangerine-whistle-summary} -Die Tangerine-Whistle-Fork war die erste Reaktion auf die Denial-of-Service(DoS)-Angriffe auf das Netzwerk (September/Oktober 2016), einschließlich: +Der Tangerine-Whistle-Fork war die erste Reaktion auf die Denial-of-Service-Angriffe (DoS) auf das Netzwerk (September/Oktober 2016), einschließlich: -- Lösung der dringenden Probleme im Bereich der Netzwerkgesundheit im Zusammenhang mit unterbewerteten Verfahrenscodes. +- Behebung dringender Probleme mit der Netzwerkgesundheit in Bezug auf zu niedrig bepreiste Operationscodes. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork) - +
      -
    • EIP-150erhöht die Gaskosten der Verfahrenscodes, die bei Spam-Attacken verwendet werden können.
    • -
    • EIP-158reduziert die Zustandsgröße, indem sie eine große Anzahl leerer Konten entfernt, die aufgrund von Fehlern in früheren Versionen des Ethereum-Protokolls ursprünglich minimale Transaktionsgebühren enthielten.
    • +
    • EIP-150erhöht die Gaskosten von Opcodes, die bei Spam-Angriffen verwendet werden können.
    • +
    • EIP-158reduziert die Zustandsgröße durch Entfernen einer großen Anzahl leerer Konten, die aufgrund von Fehlern in früheren Versionen des Ethereum-Protokolls zu sehr geringen Kosten in den Zustand eingefügt wurden.
    --- -### DAO-Fork {#dao-fork} +### DAO fork {#dao-fork} #### Zusammenfassung {#dao-fork-summary} -Die DAO-Abspaltung war eine Reaktion auf den [DAO-Angriff 2016](https://www.coindesk.com/learn/understanding-the-dao-attack/), bei dem einem unsicheren [DAO](/glossary/#dao)-Vertrag durch einen Hack über 3,6 Millionen ETH entzogen wurden. Die Fork verschiebt das Guthaben aus dem fehlerhaften Vertrag in einen [neuen Vertrag](https://etherscan.io/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754) mit einer einzigen Funktion: Abheben. Jeder, der Geld verloren hat, konnte 1 ETH für jeden 100 DAO-Token in seiner Wallet abheben. +Der DAO-Fork war eine Reaktion auf den [DAO-Angriff von 2016](https://www.coindesk.com/learn/understanding-the-dao-attack/), bei dem ein unsicherer [DAO](/glossary/#dao)-Vertrag bei einem Hack um über 3,6 Millionen ETH erleichtert wurde. Der Fork verschob die Mittel aus dem fehlerhaften Vertrag in einen [neuen Vertrag](https://eth.blockscout.com/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754) mit einer einzigen Funktion: Auszahlen (withdraw). Jeder, der Mittel verloren hatte, konnte 1 ETH für jeweils 100 DAO-Token in seinen Wallets abheben. -Über diese Vorgehensweise wurde seitens der Ethereum-Community abgestimmt. Jeder ETH-Inhaber konnte über eine Transaktion auf [, einer Abstimmungsplattform,](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/) abstimmen. Die Entscheidung für die Fork erhielt mehr als 85 % der Stimmen. +Über diese Vorgehensweise wurde von der Ethereum-Community abgestimmt. Jeder ETH-Inhaber konnte über eine Transaktion auf [einer Abstimmungsplattform](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/) abstimmen. Die Entscheidung für den Fork erreichte über 85 % der Stimmen. -Einige Miner weigerten sich, die Abspaltung mitzutragen, da der Vorfall des DAO keinen Fehler im Protokoll darstellte. Sie gründeten daraufhin [Ethereum Classic](https://ethereumclassic.org/). +Einige Miner weigerten sich, den Fork durchzuführen, da der DAO-Vorfall kein Fehler im Protokoll war. Sie gründeten daraufhin [Ethereum Classic](https://ethereumclassic.org/). -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/07/20/hard-fork-completed) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/07/20/hard-fork-completed) --- @@ -432,17 +611,16 @@ Einige Miner weigerten sich, die Abspaltung mitzutragen, da der Vorfall des DAO #### Zusammenfassung {#homestead-summary} -Die Homestead-Fork, die in die Zukunft schaute. Sie enthielt mehrere Protokolländerungen und eine Änderung des Netzwerks, die Ethereum die Möglichkeit gab, weitere Netzwerk-Upgrades durchzuführen. +Der Homestead-Fork, der in die Zukunft blickte. Er umfasste mehrere Protokolländerungen und eine Netzwerkänderung, die Ethereum die Möglichkeit gab, weitere Netzwerk-Upgrades durchzuführen. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/02/29/homestead-release) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2016/02/29/homestead-release) - +
      -
    • EIP-2ermöglicht es Bearbeitungen bei der Entwicklung von Smart Contracts vorzunehmen.
    • -
    • EIP-7 -führt einen neuen Verfahrenscode ein: DELEGATECALL
    • -
    • EIP-8präsentiert DEVP2P zur Erfüllung der Kompatibilitätsanforderungen
    • +
    • EIP-2nimmt Änderungen am Vertragserstellungsprozess vor.
    • +
    • EIP-7fügt neuen Opcode hinzu: DELEGATECALL
    • +
    • EIP-8führt devp2p-Vorwärtskompatibilitätsanforderungen ein
    @@ -451,16 +629,16 @@ führt einen neuen Verfahrenscode ein: DELEGATECALL ## 2015 {#2015} -### Frontier Thawing {#frontier-thawing} +### Frontier thawing {#frontier-thawing} #### Zusammenfassung {#frontier-thawing-summary} -Die Frontier-Thawing-Fork hob das 5.000 [Gas](/glossary/#gas)-Limit pro [Block](/glossary/#block) auf und setzte den Standardgaspreis auf 51 [gwei](/glossary/#gwei). Dies erlaubte Transaktionen – Transaktionen benötigen 21.000 Gas. Die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) wurde eingeführt, um eine zukünftige harte Abspaltung zu [Proof-of-Stake](/glossary/#pos) sicherzustellen. +Der Frontier-Thawing-Fork hob das Limit von 5.000 [Gas](/glossary/#gas) pro [Block](/glossary/#block) auf und setzte den Standard-Gaspreis auf 51 [Gwei](/glossary/#gwei). Dies ermöglichte Transaktionen – Transaktionen erfordern 21.000 Gas. Die [Schwierigkeitsbombe](/glossary/#difficulty-bomb) wurde eingeführt, um einen zukünftigen Hard-Fork zu [Proof-of-Stake](/glossary/#pos) sicherzustellen. -- [Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2015/08/04/the-thawing-frontier) -- [Lesen Sie das Ethereum Protokoll-Update 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1) +- [Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2015/08/04/the-thawing-frontier) +- [Lesen Sie das Ethereum-Protokoll-Update 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1) --- @@ -470,42 +648,42 @@ Die Frontier-Thawing-Fork hob das 5.000 [Gas](/glossary/#gas)-Limit pro [Block]( #### Zusammenfassung {#frontier-summary} -Frontier war live, aber soweit nur die Implementierung eines grundsätzlichen Rahmens des Ethereum-Projekts. Es folgte der erfolgreichen olympischen Testphase. Es war für technische Benutzer gedacht, speziell für Entwickler. [Blöcke](/glossary/#block) hatten ein [Gas](/glossary/#gas)-Limit von 5.000. Diese Zeit des „Auftauens" ermöglichte es den Minern, ihren Betrieb zu starten und für Early-Adopters, ihre Kunden zu installieren, ohne dies „überstürzen“ zu müssen. +Frontier war eine Live-, aber rudimentäre Implementierung des Ethereum-Projekts. Es folgte auf die erfolgreiche Olympic-Testphase. Es war für technische Benutzer, insbesondere Entwickler, gedacht. [Blöcke](/glossary/#block) hatten ein [Gaslimit](/glossary/#gas) von 5.000. Diese „Auftau“-Phase (Thawing) ermöglichte es Minern, ihren Betrieb aufzunehmen, und frühen Anwendern, ihre Clients zu installieren, ohne sich „beeilen“ zu müssen. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare) ## 2014 {#2014} -### Ether-Verkauf {#ether-sale} +### Ether sale {#ether-sale} -Ether ging offiziell 42 Tage lang in den Verkauf. Man konnte es mit BTC kaufen. +Ether ging offiziell für 42 Tage in den Verkauf. Man konnte es mit BTC kaufen. -[Lies die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale) +[Lesen Sie die Ankündigung der Ethereum Foundation](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale) --- -### Yellowpaper veröffentlicht {#yellowpaper} +### Yellowpaper released {#yellowpaper} -Das Yellowpaper, verfasst von Dr. Gavin Wood, ist eine technische Definition des Ethereum-Protokolls. +Das Yellow Paper, verfasst von Dr. Gavin Wood, ist eine technische Definition des Ethereum-Protokolls. -[Yellowpaper anzeigen](https://github.com/ethereum/yellowpaper) +[Sehen Sie sich das Yellow Paper an](https://github.com/ethereum/yellowpaper) ## 2013 {#2013} -### Whitepaper veröffentlicht {#whitepaper} +### Whitepaper released {#whitepaper} -Dieses einleitende Papier wurde ursprünglich 2013 von Vitalik Buterin, dem Gründer von Ethereum, vor dem Projektstart im Jahr 2015 veröffentlicht. +Das Einführungspapier, das 2013 von Vitalik Buterin, dem Gründer von Ethereum, vor dem Start des Projekts im Jahr 2015 veröffentlicht wurde. Whitepaper - +
    \ No newline at end of file diff --git a/public/content/translations/de/whitepaper/index.md b/public/content/translations/de/whitepaper/index.md index 2affb6145af..204493689c0 100644 --- a/public/content/translations/de/whitepaper/index.md +++ b/public/content/translations/de/whitepaper/index.md @@ -6,23 +6,21 @@ sidebarDepth: 2 hideEditButton: true --- -# Ethereum Whitepaper {#ethereum-whitepaper} - -_Diese einleitende Arbeit wurde ursprünglich 2014 von Vitalik Buterin, dem Gründer von [Ethereum](/what-is-ethereum/), vor dem Projektstart im Jahr 2015 veröffentlicht. Es ist erwähnenswert, dass sich Ethereum, wie viele gemeinschaftlich gesteuerte Open-Source-Softwareprojekte, seit seiner anfänglichen Einführung weiterentwickelt hat._ + -_Obwohl diese Arbeit schon einige Jahre alt ist, pflegen wir sie nach wie vor, weil sie weiterhin als nützliche Referenz und präzise Darstellung von Ethereum und seiner Vision dient. Um mehr über die neuesten Entwicklungen von Ethereum und dazu zu erfahren, wie Änderungen am Protokoll vorgenommen werden, empfehlen wir [diese Anleitung](/learn/)._ +_Obwohl schon einige Jahre alt, behalten wir das untenstehende Originaldokument bei, da es nach wie vor als nützliche Referenz und als zutreffende Darstellung von [Ethereum](/) und seiner Vision dient._ -[Forscher und Akademiker, die eine historische oder kanonische Version des Whitepapers [vom Dezember 2014] suchen, sollten diese PDF-Datei verwenden.](./whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) +# Ethereum Whitepaper {#ethereum-whitepaper} ## Eine Plattform der nächsten Generation für Smart Contracts und dezentralisierte Anwendungen {#a-next-generation-smart-contract-and-decentralized-application-platform} -Satoshi Nakamotos Entwicklung von Bitcoin im Jahr 2009 wurde oft als radikale Weiterentwicklung von Geld und Währung gefeiert, da es sich dabei um das erste Beispiel eines digitalen Assets handelt, das weder eine Besicherung noch einen "[intrinsischen Wert](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/)" oder einen zentralisierten Herausgeber oder Kontrolleur hat. Ein anderer, wohl wichtigerer Teil des Bitcoin-Experiments ist jedoch die zugrunde liegende Blockchain-Technologie als Instrument des verteilten Konsenses, und so verlagert sich die Aufmerksamkeit rasch auf diesen anderen Aspekt von Bitcoin. Zu den häufig zitierten alternativen Anwendungen der Blockchain-Technologie gehören die Verwendung digitaler Assets auf der Blockchain zur Darstellung benutzerdefinierter Währungen und Finanzinstrumente („[Colored Coins](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)“), das Eigentum an einem zugrunde liegenden physischen Gerät („[Smart Property](https://en.bitcoin.it/wiki/Smart_Property)“), nicht vertretbare Assets wie Domänennamen („[Namecoin](http://namecoin.org)“) sowie komplexere Anwendungen, bei denen digitale Assets direkt von einem Stück Code kontrolliert und beliebige Regeln ("[Smart Contracts](http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html)") oder sogar Blockchain-basierte „[dezentralisierte autonome Organisationen](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)“ (DAOs) implementiert werden. Ethereum beabsichtigt, eine Blockchain mit einer eingebauten, vollwertigen, Turing-kompletten Programmiersprache bereitzustellen, die zur Erstellung von „Verträgen“ verwendet werden kann, mit denen beliebige Statusübergangsfunktionen kodiert werden können, so dass Benutzer jedes der oben beschriebenen Systeme sowie viele andere, die wir uns noch nicht vorstellen können, erstellen können. Dazu muss nur eine entsprechende Logik in ein paar Zeilen Code geschrieben werden. +Satoshi Nakamotos Entwicklung von Bitcoin im Jahr 2009 wurde oft als radikale Weiterentwicklung von Geld und Währung gefeiert, da es sich dabei um das erste Beispiel eines digitalen Assets handelt, das weder eine Besicherung noch einen "[intrinsischen Wert](https://bitcoinmagazine.com/culture/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it)" oder einen zentralisierten Herausgeber oder Kontrolleur hat. Ein anderer, wohl wichtigerer Teil des Bitcoin-Experiments ist jedoch die zugrunde liegende Blockchain-Technologie als Instrument des verteilten Konsenses, und so verlagert sich die Aufmerksamkeit rasch auf diesen anderen Aspekt von Bitcoin. Zu den häufig zitierten alternativen Anwendungen der Blockchain-Technologie gehören die Verwendung digitaler Assets auf der Blockchain zur Darstellung benutzerdefinierter Währungen und Finanzinstrumente („[Colored Coins](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)“), das Eigentum an einem zugrunde liegenden physischen Gerät („[Smart Property](https://en.bitcoin.it/wiki/Smart_Property)“), nicht vertretbare Assets wie Domänennamen („[Namecoin](http://namecoin.org)“) sowie komplexere Anwendungen, bei denen digitale Assets direkt von einem Stück Code kontrolliert und beliebige Regeln ("[Smart Contracts](http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html)") oder sogar Blockchain-basierte „[dezentralisierte autonome Organisationen](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)“ (DAOs) implementiert werden. Ethereum beabsichtigt, eine Blockchain mit einer eingebauten, vollwertigen, Turing-kompletten Programmiersprache bereitzustellen, die zur Erstellung von „Verträgen“ verwendet werden kann, mit denen beliebige Statusübergangsfunktionen kodiert werden können, so dass Benutzer jedes der oben beschriebenen Systeme sowie viele andere, die wir uns noch nicht vorstellen können, erstellen können. Dazu muss nur eine entsprechende Logik in ein paar Zeilen Code geschrieben werden. ## Einführung in Bitcoin und bestehende Konzepte {#introduction-to-bitcoin-and-existing-concepts} ### Historie {#history} -Das Konzept der dezentralisierten digitalen Währung sowie alternativer Anwendungen wie Eigentumsregistern gibt es seit Jahrzehnten. Die anonymen E-Cash-Protokolle der 1980er und 1990er Jahre, die sich hauptsächlich auf ein kryptografisches Primitiv stützten, das als Chaumian Blinding bekannt ist, boten eine Währung mit einem hohen Maß an Datenschutz, aber die Protokolle konnten sich aufgrund ihrer Abhängigkeit von einem zentralisierten Vermittler größtenteils nicht durchsetzen. 1998 war Wei Dais [b-money](http://www.weidai.com/bmoney.txt) der erste Vorschlag, der die Idee der Geldschöpfung durch das Lösen von Rechenrätseln und einen dezentralen Konsens vorstellte, aber der Vorschlag enthielt nur wenige Details darüber, wie der dezentralisiertee Konsens tatsächlich umgesetzt werden könnte. 2005 stellte Hal Finney das Konzept der „[wiederverwendbaren Proofs of Work](https://nakamotoinstitute.org/finney/rpow/)“ vor, ein System, das Ideen von b-money zusammen mit Adam Backs schwierig zu berechnenden Hashcash-Puzzles verwendet, um ein Konzept für eine Kryptowährung zu schaffen, aber auch hier blieb es hinter dem Ideal zurück, da es sich auf vertrauenswürdige Rechner als Backend stützte. 2009 setzte Satoshi Nakamoto zum ersten Mal eine dezentralisierte Währung durch die Kombination von Kryptografie mit öffentlichem Schlüssel und einem Konsensalgorithmus zur Nachverfolgung der Eigentumsverhältnisse von Coins, dem sogenannten „Proof-of-Work“, in die Praxis umgesetzt. +Das Konzept der dezentralisierten digitalen Währung sowie alternativer Anwendungen wie Eigentumsregistern gibt es seit Jahrzehnten. Die anonymen E-Cash-Protokolle der 1980er und 1990er Jahre, die sich hauptsächlich auf ein kryptografisches Primitiv stützten, das als Chaumian Blinding bekannt ist, boten eine Währung mit einem hohen Maß an Datenschutz, aber die Protokolle konnten sich aufgrund ihrer Abhängigkeit von einem zentralisierten Vermittler größtenteils nicht durchsetzen. 1998 war Wei Dais [b-money](http://www.weidai.com/bmoney.txt) der erste Vorschlag, der die Idee der Geldschöpfung durch das Lösen von Rechenrätseln und einen dezentralen Konsens vorstellte, aber der Vorschlag enthielt nur wenige Details darüber, wie der dezentralisierte Konsens tatsächlich umgesetzt werden könnte. 2005 stellte Hal Finney das Konzept der „[wiederverwendbaren Proofs of Work](https://nakamotoinstitute.org/finney/rpow/)“ vor, ein System, das Ideen von b-money zusammen mit Adam Backs schwierig zu berechnenden Hashcash-Puzzles verwendet, um ein Konzept für eine Kryptowährung zu schaffen, aber auch hier blieb es hinter dem Ideal zurück, da es sich auf vertrauenswürdige Rechner als Backend stützte. 2009 setzte Satoshi Nakamoto zum ersten Mal eine dezentralisierte Währung durch die Kombination von Kryptografie mit öffentlichem Schlüssel und einem Konsensalgorithmus zur Nachverfolgung der Eigentumsverhältnisse von Coins, dem sogenannten „Proof-of-Work“, in die Praxis umgesetzt. Der Mechanismus hinter Proof-of-Work war ein Durchbruch in diesem Bereich, da er zwei Probleme gleichzeitig löste. Erstens bot er einen einfachen und einigermaßen effektiven Konsensalgorithmus, der es den Knoten im Netzwerk ermöglichte, sich gemeinsam auf eine Reihe kanonischer Aktualisierungen des Status des Bitcoin-Ledgers zu einigen. Zweitens wurde ein Mechanismus bereitgestellt, der den freien Eintritt in den Konsensprozess ermöglicht und das politische Problem der Entscheidung darüber, wer den Konsens beeinflussen darf, löst, während gleichzeitig Sybil-Angriffe verhindert werden. Dies geschieht, indem eine formale Barriere für die Teilnahme, wie z. B. das Erfordernis, als eindeutige Einheit auf einer bestimmten Liste registriert zu sein, durch eine wirtschaftliche Barriere ersetzt wird – das Gewicht eines einzelnen Knotens im Konsensabstimmungsprozess ist direkt proportional zur Rechenleistung, die der Knoten bereitstellt. Seitdem wurde ein alternativer Ansatz namens _Proof-of-Stake_ vorgeschlagen, bei dem die Gewichtung eines Knotens proportional zu seinen Währungsbeständen und nicht zu seinen Rechenressourcen erfolgt; die Erörterung der relativen Vorzüge der beiden Ansätze würde den Rahmen dieser Arbeit sprengen, aber es sei darauf hingewiesen, dass beide Ansätze als Rückgrat einer Kryptowährung dienen können. @@ -91,7 +89,7 @@ Der Algorithmus zur Überprüfung der Gültigkeit eines Blocks, ausgedrückt in Im Wesentlichen muss jede Transaktion im Block einen gültigen Statusübergang von dem ursprünglich kanonischen Status vor der Ausführung der Transaktion zu einem neuen Status bereitstellen. Beachten Sie, dass der Status auf keine Weise im Block kodiert ist; er ist eine reine Abstraktion, die sich der validierende Knoten merken muss und die nur (sicher) für einen Block berechnet werden kann, indem man vom Genesis-Status ausgeht und jede Transaktion in jedem Block nacheinander anwendet. Zusätzlich sei darauf hingewiesen, dass die Reihenfolge, in der der Miner Transaktionen in den Block einfügt, wichtig ist; wenn es zwei Transaktionen A und B in einem Block gibt, wobei B einen von A geschaffenen UTXO ausgibt, ist der Block gültig, wenn A vor B kommt, aber nicht umgekehrt. -Die einzige Gültigkeitsbedingung in der obigen Liste, die in anderen Systemen nicht vorkommt, ist die Erfordernis eines „Proof-of-Work“. Die genaue Bedingung ist, dass der Doppel-SHA256-Hash jedes Blocks, der als 256-Bit-Zahl behandelt wird, kleiner sein muss als ein dynamisch angepasstes Ziel, das zum Zeitpunkt der Erstellung dieses Dokuments ungefähr 2187 beträgt. Damit soll die Erstellung von Blöcken rechnerisch „erschwert“ werden, um zu verhindern, dass Sybill-Angreifer die gesamte Blockchain zu ihren Gunsten umgestalten. Da SHA256 als eine völlig unvorhersehbare Pseudozufallsfunktion konzipiert ist, kannst du einen gültigen Block nur durch Ausprobieren erstellen. Dabei erhöhst du wiederholt die Nonce und prüfst, ob der neue Hash passt. +Die einzige Gültigkeitsbedingung in der obigen Liste, die in anderen Systemen nicht vorkommt, ist die Erfordernis eines „Proof-of-Work“. Die genaue Bedingung ist, dass der Doppel-SHA256-Hash jedes Blocks, der als 256-Bit-Zahl behandelt wird, kleiner sein muss als ein dynamisch angepasstes Ziel, das zum Zeitpunkt der Erstellung dieses Dokuments ungefähr 2187 beträgt. Damit soll die Erstellung von Blöcken rechnerisch „erschwert“ werden, um zu verhindern, dass Sybil-Angreifer die gesamte Blockchain zu ihren Gunsten umgestalten. Da SHA256 als eine völlig unvorhersehbare Pseudozufallsfunktion konzipiert ist, kannst du einen gültigen Block nur durch Ausprobieren erstellen. Dabei erhöhst du wiederholt die Nonce und prüfst, ob der neue Hash passt. Bei der derzeitigen Zielvorgabe von ca. 2187 muss das Netz durchschnittlich ca. 269 Versuche unternehmen, bis ein gültiger Block gefunden wird; im Allgemeinen wird die Zielvorgabe vom Netzwerk alle 2016 Blöcke neu kalibriert, sodass im Durchschnitt alle zehn Minuten ein neuer Block von einem Knoten im Netzwerk erzeugt wird. Um die Miner für diese Rechenarbeit zu entschädigen, ist der Miner eines jeden Blocks berechtigt, eine Transaktion hinzuzufügen, die ihm 25 BTC aus dem Nichts zuweist. Außerdem: Wenn bei einer Transaktion der Gesamtnennwert in ihren Eingaben höher ist als in ihren Ausgaben, geht die Differenz als „Transaktionsgebühr“ ebenfalls an den Miner. Übrigens ist dies auch der einzige Mechanismus, mit dem BTC ausgegeben werden; der Genesis-Status enthielt überhaupt keine Coins. @@ -102,7 +100,7 @@ Um den Zweck des Minings besser zu verstehen, wollen wir untersuchen, was im Fal 3. Eine weitere Transaktion durchführen, die dieselben 100 BTC an ihn selbst sendet 4. Versuchen, das Netzwerk davon zu überzeugen, dass seine Transaktion an sich selbst zuerst kam. -Sobald Schritt (1) erfolgt ist, nimmt nach ein paar Minuten ein Miner die Transaktion in einen Block auf, beispielsweise in Block Nummer 270000. Nach etwa einer Stunde werden der Kette nach diesem Block fünf weitere Blöcke hinzugefügt worden sein, wobei jeder dieser Blöcke indirekt auf die Transaktion verweist und sie somit „bestätigt“. An diesem Punkt akzeptiert der Händler die Zahlung als abgeschlossen und liefert das Produkt; da wir davon ausgehen, dass es sich um eine digitale Ware handelt, erfolgt die Lieferung sofort. Nun erstellt der Angreifer eine weitere Transaktion, die die 100 BTC an ihn selbst sendet. Wenn der Angreifer sie einfach in die freie Wildbahn entlässt, wird die Transaktion nicht verarbeitet; Miner werden versuchen, `APPLY(S,TX)` auszuführen, und feststellen, dass `TX` ein UTXO verbraucht, das sich nicht mehr im Status befindet. Stattdessen erstellt der Angreifer eine „Abspaltung“ der Blockchain, indem er zu Beginn eine andere Version von Block 270000 mint, die auf denselben Block 269999 als übergeordneten Block verweist, aber mit der neuen Transaktion anstelle der alten. Da die Blockdaten unterschiedlich sind, muss der Proof-of-Work neu erstellt werden. Außerdem hat die neue Version des Blocks 270000 des Angreifers einen anderen Hash, sodass die ursprünglichen Blöcke 270001 bis 270005 nicht auf ihn „verweisen“; somit sind die ursprüngliche Kette und die neue Kette des Angreifers völlig getrennt. Die Regel besagt, dass bei einer Abspaltung die längste Blockchain als Wahrheit angesehen wird, sodass legitime Minder an der Kette 270005 arbeiten, während der Angreifer allein an der Kette 270000 arbeitet. Damit der Angreifer seine Blockchain zur längsten machen kann, müsste er über mehr Rechenleistung verfügen als der Rest des Netzwerks zusammen, um aufholen zu können (daher „51-%-Attacke“). +Sobald Schritt (1) erfolgt ist, nimmt nach ein paar Minuten ein Miner die Transaktion in einen Block auf, beispielsweise in Block Nummer 270000. Nach etwa einer Stunde werden der Kette nach diesem Block fünf weitere Blöcke hinzugefügt worden sein, wobei jeder dieser Blöcke indirekt auf die Transaktion verweist und sie somit „bestätigt“. An diesem Punkt akzeptiert der Händler die Zahlung als abgeschlossen und liefert das Produkt; da wir davon ausgehen, dass es sich um eine digitale Ware handelt, erfolgt die Lieferung sofort. Nun erstellt der Angreifer eine weitere Transaktion, die die 100 BTC an ihn selbst sendet. Wenn der Angreifer sie einfach in die freie Wildbahn entlässt, wird die Transaktion nicht verarbeitet; Miner werden versuchen, `APPLY(S,TX)` auszuführen, und feststellen, dass `TX` ein UTXO verbraucht, das sich nicht mehr im Status befindet. Stattdessen erstellt der Angreifer eine „Abspaltung“ der Blockchain, indem er zu Beginn eine andere Version von Block 270000 mint, die auf denselben Block 269999 als übergeordneten Block verweist, aber mit der neuen Transaktion anstelle der alten. Da die Blockdaten unterschiedlich sind, muss der Proof-of-Work neu erstellt werden. Außerdem hat die neue Version des Blocks 270000 des Angreifers einen anderen Hash, sodass die ursprünglichen Blöcke 270001 bis 270005 nicht auf ihn „verweisen“; somit sind die ursprüngliche Kette und die neue Kette des Angreifers völlig getrennt. Die Regel besagt, dass bei einer Abspaltung die längste Blockchain als Wahrheit angesehen wird, sodass legitime Miner an der Kette 270005 arbeiten, während der Angreifer allein an der Kette 270000 arbeitet. Damit der Angreifer seine Blockchain zur längsten machen kann, müsste er über mehr Rechenleistung verfügen als der Rest des Netzwerks zusammen, um aufholen zu können (daher „51-%-Attacke“). ### Merkle Trees {#merkle-trees} @@ -112,13 +110,13 @@ _Links: Es reicht aus, nur eine kleine Anzahl von Knoten in einem Merkle Tree zu _Rechts: Jeder Versuch, irgendeinen Teil des Merkle Tree zu ändern, führt letztendlich zu einer Inkonsistenz irgendwo in der Kette._ -Eine wichtige Eigenschaft der Skalierbarkeit von Bitcoin ist, dass der Block in einer mehrstufigen Datenstruktur gespeichert wird. Der „Hash“ eines Blocks ist eigentlich nur der Hash des Block-Headers, ein etwa 200 Byte großes Datenstück, das den Zeitstempel, die Nonce, den vorherigen Blocks-Hash und den Root-Hash einer Datenstruktur namens Merkle Tree enthält, der alle Transaktionen des Blocks speichert. Ein Merkle Tree ist eine Art Binärbaum, der aus einer Reihe von Knoten besteht. An einem Ende des Baumes befinden sich zahlreiche Blattknoten, die die zugrunde liegenden Daten enthalten. Dazwischen liegt eine Menge von Zwischenknoten, wobei jeder dieser Knoten der Hash seiner beiden untergeordneten Knoten ist. Am anderen Ende des Baumes befindet sich schließlich ein einzelner Wurzelknoten, ebenfalls aus dem Hash seiner beiden untergeordneten Knoten gebildet. Dieser Steht für die „Spitze“ des Baumes. Der Zweck des Merkle Tree besteht darin, dass die Daten eines Blocks stückweise geliefert werden können: Ein Knoten kann nur den Header eines Blocks aus einer Quelle herunterladen, den kleinen Teil des Baums, der für ihn relevant ist, aus einer anderen Quelle und dabei trotzdem sicher sein, dass alle Daten korrekt sind. Der Grund, warum dies funktioniert, ist, dass Hashes nach oben weitergegeben werden: Wenn ein böswilliger Benutzer versucht, eine gefälschte Transaktion am unteren Ende eines Merkle Trees einzutragen, führt diese Änderung zu einer Änderung des darüber liegenden Knotens und dann zu einer Änderung des darüber liegenden Knotens, wodurch schließlich die Wurzel des Baums und damit der Hash des Blocks geändert wird, was dazu führt, dass das Protokoll ihn als einen völlig anderen Block registriert (mit ziemlicher Sicherheit mit einem ungültigen Proof-of-Work). +Eine wichtige Eigenschaft der Skalierbarkeit von Bitcoin ist, dass der Block in einer mehrstufigen Datenstruktur gespeichert wird. Der „Hash“ eines Blocks ist eigentlich nur der Hash des Block-Headers, ein etwa 200 Byte großes Datenstück, das den Zeitstempel, die Nonce, den vorherigen Blocks-Hash und den Root-Hash einer Datenstruktur namens Merkle Tree enthält, der alle Transaktionen des Blocks speichert. Ein Merkle Tree ist eine Art Binärbaum, der aus einer Reihe von Knoten besteht. An einem Ende des Baumes befinden sich zahlreiche Blattknoten, die die zugrunde liegenden Daten enthalten. Dazwischen liegt eine Menge von Zwischenknoten, wobei jeder dieser Knoten der Hash seiner beiden untergeordneten Knoten ist. Am anderen Ende des Baumes befindet sich schließlich ein einzelner Wurzelknoten, ebenfalls aus dem Hash seiner beiden untergeordneten Knoten gebildet. Dieser steht für die „Spitze“ des Baumes. Der Zweck des Merkle Tree besteht darin, dass die Daten eines Blocks stückweise geliefert werden können: Ein Knoten kann nur den Header eines Blocks aus einer Quelle herunterladen, den kleinen Teil des Baums, der für ihn relevant ist, aus einer anderen Quelle und dabei trotzdem sicher sein, dass alle Daten korrekt sind. Der Grund, warum dies funktioniert, ist, dass Hashes nach oben weitergegeben werden: Wenn ein böswilliger Benutzer versucht, eine gefälschte Transaktion am unteren Ende eines Merkle Trees einzutragen, führt diese Änderung zu einer Änderung des darüber liegenden Knotens und dann zu einer Änderung des darüber liegenden Knotens, wodurch schließlich die Wurzel des Baums und damit der Hash des Blocks geändert wird, was dazu führt, dass das Protokoll ihn als einen völlig anderen Block registriert (mit ziemlicher Sicherheit mit einem ungültigen Proof-of-Work). Das Merkle Tree-Protokoll ist für die langfristige Nachhaltigkeit wohl unerlässlich. Ein „voller Knoten“ im Bitcoin-Netzwerk, also einer, der die Gesamtheit aller Blöcke speichert und verarbeitet, beansprucht im April 2014 etwa 15 GB Speicherplatz im Bitcoin-Netzwerk und wächst jeden Monat um über ein Gigabyte. Derzeit ist dies für einige Desktop-Computer und nicht für Smartphones machbar, und in Zukunft werden nur Unternehmen und Hobbybegeisterte teilnehmen können. Ein Protokoll, das als „vereinfachte Zahlungsverifizierung“ (SPV; Simplified Payment Verification) bekannt ist, ermöglicht die Existenz einer weiteren Klasse von Knoten, den sogenannten „leichten Knoten“, die die Block-Header herunterladen, den Proof-of-Work auf den Block-Headern überprüfen und dann nur die „Zweige“ herunterladen, die mit den für sie relevanten Transaktionen verbunden sind. Dadurch können leichte Knoten mit einer hohen Sicherheitsgarantie den Status jeder Bitcoin-Transaktion und ihren aktuellen Saldo ermitteln, während sie nur einen sehr kleinen Teil der gesamten Blockchain herunterladen. ### Alternative Blockchain-Anwendungen {#alternative-blockchain-applications} -Die Idee, den Grundgedanken der Blockchain auf andere Konzepte zu übertragen, hat ebenfalls eine lange Geschichte. 2005 veröffentlichte Nick Szabo das Konzept von „[sicheren Eigentumstiteln mit Eigentümerauthorität](https://nakamotoinstitute.org/secure-property-titles/)“ – ein Dokument, welches beschreibt, wie „neue Fortschritte in der replizierten Datenbanktechnologie“ ein Blockchain-basiertes Sytem für die Speicherung eines Registers darüber, wer der Eigentümer wovon ist, ermöglichen, wobei ein ausgeklügeltes Framework mit Konzepten wie Homesteading, Adverse Possession und georgischer Grundsteuer geschaffen wird. Leider gab es zu dieser Zeit kein effektives repliziertes Datenbanksystem, sodass das Protokoll nie in die Praxis umgesetzt wurde. Nach 2009, nachdem der dezentralisierte Konsens von Bitcoin entwickelt wurde, entstand jedoch schnell eine Reihe von alternativen Anwendungen. +Die Idee, den Grundgedanken der Blockchain auf andere Konzepte zu übertragen, hat ebenfalls eine lange Geschichte. 2005 veröffentlichte Nick Szabo das Konzept von „[sicheren Eigentumstiteln mit Eigentümerauthorität](https://nakamotoinstitute.org/library/secure-property-titles/)“ – ein Dokument, welches beschreibt, wie „neue Fortschritte in der replizierten Datenbanktechnologie“ ein Blockchain-basiertes System für die Speicherung eines Registers darüber, wer der Eigentümer wovon ist, ermöglichen, wobei ein ausgeklügeltes Framework mit Konzepten wie Homesteading, Adverse Possession und georgischer Grundsteuer geschaffen wird. Leider gab es zu dieser Zeit kein effektives repliziertes Datenbanksystem, sodass das Protokoll nie in die Praxis umgesetzt wurde. Nach 2009, nachdem der dezentralisierte Konsens von Bitcoin entwickelt wurde, entstand jedoch schnell eine Reihe von alternativen Anwendungen. - **Namecoin** – [Namecoin](https://namecoin.org/) wurde 2010 erschaffen und lässt sich am besten als eine dezentralisierte Datenbank zur Namensregistrierung beschrieben. In dezentralen Protokollen wie Tor, Bitcoin und BitMessage muss es eine Möglichkeit geben, Konten zu identifizieren, damit andere Leute mit ihnen interagieren können. Aber in allen bisherigen Lösungen ist der einzige verfügbare Identifikator ein pseudo-zufälliger Hash wie `1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy`. Im Idealfall möchte man ein Konto mit einem Namen wie „george“ haben können. Das Problem ist jedoch, dass, wenn eine Person ein Konto mit dem Namen „george“ einrichten kann, eine andere Person das gleiche Verfahren nutzen kann, um sich ebenfalls als „george“ zu registrieren und sich als diese Person auszugeben. Die einzige Lösung ist ein First-to-File-Paradigma, bei dem der erste Registrant erfolgreich ist und der zweite scheitert – ein Problem, das sich perfekt für das Bitcoin-Konsensprotokoll eignet. Namecoin ist die älteste und erfolgreichste Implementierung eines Namensregistrierungssystems, das auf einer solchen Idee beruht. - **Colored Coins** – [Colored Coins](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit) dienen als Protokoll, das die Möglichkeit bietet, eine eigene digitale Währung zu erschaffen oder – in dem wichtigen trivialen Fall einer Währung mit einer Einheit – digitale Token, auf der Bitcoin-Blockchain. Im Colored-Coins-Protokoll wird eine neue Währung „veröffentlicht“, indem man einem bestimmten Bitcoin-UTXO öffentlich eine Farbe zuweist. Das Protokoll definiert rekursiv die Farbe anderer UTXO als die gleiche wie die der Eingaben, die die Transaktion ausgegeben hat, welche diese erzeugte (bei Eingaben mit gemischten Farben gelten einige spezielle Regeln). Dies ermöglicht es den Benutzern, Wallets zu verwalten, die nur UTXO einer bestimmten Farbe enthalten, und sie wie ähnlich wie reguläre Bitcoins zu versenden und über die Blockchain zurückzuverfolgen, um die Farbe eines UTXO zu ermitteln, den sie erhalten haben. @@ -279,7 +277,7 @@ Unter dieser Voraussetzung würde der Hedging-Vertrag wie folgt aussehen: 1. Warten, bis Partei A 1000 Ether eingibt. 2. Warten, bis Partei B 1000 Ether eingibt. 3. Den USD-Wert von 1000 Ether, der durch das Abfragen des Datenfeed-Vertrags ermittelt wurde, im Speicher festhalten. Sagen wir, es sind x $. -4. Nach 30 Tagen A oder B erlauben, den Vertrag zu „ reaktivieren“, um x $ wertäquivalente Ether (berechnet durch erneutes Abfragen des Datenfeed-Vertrags, um den neuen Preis zu erhalten) an A und den Rest an B zu senden. +4. Nach 30 Tagen A oder B erlauben, den Vertrag zu „reaktivieren”, um x $ wertäquivalente Ether (berechnet durch erneutes Abfragen des Datenfeed-Vertrags, um den neuen Preis zu erhalten) an A und den Rest an B zu senden. Ein solcher Vertrag hätte ein erhebliches Potenzial im Kryptohandel. Eines der Hauptprobleme, die im Zusammenhang mit Kryptowährungen angeführt werden, ist die Tatsache, dass sie volatil sind; obwohl viele Benutzer und Händler die Sicherheit und Bequemlichkeit im Umgang mit kryptografischen Assets wünschen, möchten sie möglicherweise nicht riskieren, innerhalb eines einzigen Tages 23 % des Wertes ihrer Mittel zu verlieren. Bis jetzt war die häufigste vorgeschlagene Lösung durch Herausgeber unterstützte Assets; die Idee ist, dass ein Herausgeber eine Unterwährung schafft, in der er das Recht hat, Einheiten auszugeben und zurückzuziehen, und einem beliebigen Benutzer eine Einheit der Währung bereitstellt, der ihm (offline) eine Einheit eines bestimmten zugrunde liegenden Assets (z. B. Gold oder USD) gibt. Der Herausgeber verspricht dann, eine Einheit des zugrunde liegenden Assets an jeden zu liefern, der ihm eine Einheit des Krypto-Assets zurücksendet. Dieser Mechanismus ermöglicht es, jedes nicht-kryptografische Asset in ein kryptografisches Asset „aufzuwerten“, vorausgesetzt, dem Herausgeber kann vertraut werden. @@ -490,12 +488,12 @@ Das Konzept einer beliebigen Statusübergangsfunktion, wie es im Ethereum-Protok ### Weiterführende Informationen {#further-reading} -1. [Intrinsischer Wert](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/) +1. [Intrinsischer Wert](https://bitcoinmagazine.com/culture/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it) 2. [Smart Property](https://en.bitcoin.it/wiki/Smart_Property) 3. [Smart Contracts](https://en.bitcoin.it/wiki/Contracts) 4. [B-Money](http://www.weidai.com/bmoney.txt) 5. [Wiederverwendbare Proofs-of-Work](https://nakamotoinstitute.org/finney/rpow/) -6. [Sichere Eigentumstitel mit Eigentümerautorität](https://nakamotoinstitute.org/secure-property-titles/) +6. [Sichere Eigentumstitel mit Eigentümerautorität](https://nakamotoinstitute.org/library/secure-property-titles/) 7. [Bitcoin-Whitepaper](http://bitcoin.org/bitcoin.pdf) 8. [Namecoin](https://namecoin.org/) 9. [Zookos Dreieck](https://wikipedia.org/wiki/Zooko's_triangle) diff --git a/public/content/translations/es/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/es/developers/docs/nodes-and-clients/node-architecture/index.md index a5e3d2a277f..5a7b4a1fdb3 100644 --- a/public/content/translations/es/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/es/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: es Un nodo de Ethereum se compone de dos clientes: un [cliente de ejecución](/developers/docs/nodes-and-clients/#execution-clients) y un [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). Para que un nodo proponga un nuevo bloque, también debe ejecutar un [cliente validador](#validators). -Cuando Ethereum utilizaba la [prueba de trabajo](/developers/docs/consensus-mechanisms/pow/), un cliente de ejecución era suficiente para ejecutar un nodo de Ethereum completo. Sin embargo, desde la implementación de la [prueba de participación](/developers/docs/consensus-mechanisms/pow/), el cliente de ejecución debe utilizarse junto con otro software llamado [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). +Cuando Ethereum utilizaba la [prueba de trabajo](/developers/docs/consensus-mechanisms/pow/), un cliente de ejecución era suficiente para ejecutar un nodo de Ethereum completo. Sin embargo, desde la implementación de la [prueba de participación](/developers/docs/consensus-mechanisms/pos/), el cliente de ejecución debe utilizarse junto con otro software llamado [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). El siguiente diagrama muestra la relación entre los dos clientes Ethereum. Los dos clientes se conectan a sus respectivas redes entre pares (P2P). Se necesitan redes P2P separadas, ya que los clientes de ejecución envían transacciones con protocolo de intercambio de información (o Gossip) a través de su red P2P, lo que les permite administrar su reserva de transacciones local, mientras que los clientes de consenso envían por Gossip bloques de su red P2P, lo que permite el consenso y el crecimiento de la cadena. diff --git a/public/content/translations/es/restaking/index.md b/public/content/translations/es/restaking/index.md index 041093f3b94..0f5d1c9cd7d 100644 --- a/public/content/translations/es/restaking/index.md +++ b/public/content/translations/es/restaking/index.md @@ -144,7 +144,7 @@ Aunque los AVS ofrecen diferentes tasas, los Tokens Líquidos de Restaking (LRT)

    El cofundador de Ethereum está escribiendo…

    - Vitalik, el cofundador de Ethereum, advirtió sobre los riesgos potenciales del restaking en una publicación del blog de 2021 llamada Don't Overload Consensus. + Vitalik, el cofundador de Ethereum, advirtió sobre los riesgos potenciales del restaking en una publicación del blog de 2021 llamada Don't Overload Consensus.

    diff --git a/public/content/translations/fr/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/fr/developers/docs/nodes-and-clients/node-architecture/index.md index c26abb21058..f6c1d02ec45 100644 --- a/public/content/translations/fr/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/fr/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: fr Un nœud Ethereum est composé de deux clients : un [client d'exécution](/developers/docs/nodes-and-clients/#execution-clients) et un [client de consensus](/developers/docs/nodes-and-clients/#consensus-clients). Pour qu'un nœud propose un nouveau bloc, il doit également exécuter un [client validateur](#validators). -Lorsque Ethereum utilisait la [preuve de travail](/developers/docs/consensus-mechanisms/pow/), un client d'exécution était suffisant pour exécuter un nœud Ethereum complet. Cependant, depuis la mise en œuvre de la [preuve d'enjeu](/developers/docs/consensus-mechanisms/pow/), le client d'exécution doit être utilisé avec un autre logiciel appelé [client de consensus](/developers/docs/nodes-and-clients/#consensus-clients). +Lorsque Ethereum utilisait la [preuve de travail](/developers/docs/consensus-mechanisms/pow/), un client d'exécution était suffisant pour exécuter un nœud Ethereum complet. Cependant, depuis la mise en œuvre de la [preuve d'enjeu](/developers/docs/consensus-mechanisms/pos/), le client d'exécution doit être utilisé avec un autre logiciel appelé [client de consensus](/developers/docs/nodes-and-clients/#consensus-clients). Le diagramme ci-dessous montre la relation entre les deux clients Ethereum. Les deux clients se connectent à leurs propres réseaux peer-to-peer (P2P) respectifs. Des réseaux P2P séparés sont nécessaires car les clients d'exécution propagent les transactions sur leur réseau P2P, leur permettant de gérer leur pool de transactions local, tandis que les clients de consensus propagent les blocs sur leur réseau P2P, permettant le consensus et l'accroissement de la chaîne. diff --git a/public/content/translations/hi/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/hi/developers/docs/nodes-and-clients/node-architecture/index.md index dc611603ed5..e2068908422 100644 --- a/public/content/translations/hi/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/hi/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: hi एक एथेरियम नोड दो क्लाइंट से बना होता है: एक [निष्पादन क्लाइंट](/developers/docs/nodes-and-clients/#execution-clients) और एक [सहमति क्लाइंट](/developers/docs/nodes-and-clients/#consensus-clients)। एक नोड को एक नया ब्लॉक प्रस्तावित करने के लिए, उसे एक [सत्यापनकर्ता क्लाइंट](#validators) भी चलाना होगा। -जब एथेरियम [प्रूफ़-ऑफ़-वर्क](/developers/docs/consensus-mechanisms/pow/) का उपयोग कर रहा था, तो एक पूर्ण एथेरियम नोड चलाने के लिए एक निष्पादन क्लाइंट ही काफी था। हालांकि, [प्रूफ़-ऑफ़-स्टेक](/developers/docs/consensus-mechanisms/pow/) को लागू करने के बाद से, निष्पादन क्लाइंट का उपयोग [सहमति क्लाइंट](/developers/docs/nodes-and-clients/#consensus-clients) नामक सॉफ़्टवेयर के एक अन्य भाग के साथ किया जाना चाहिए। +जब एथेरियम [प्रूफ़-ऑफ़-वर्क](/developers/docs/consensus-mechanisms/pow/) का उपयोग कर रहा था, तो एक पूर्ण एथेरियम नोड चलाने के लिए एक निष्पादन क्लाइंट ही काफी था। हालांकि, [प्रूफ़-ऑफ़-स्टेक](/developers/docs/consensus-mechanisms/pos/) को लागू करने के बाद से, निष्पादन क्लाइंट का उपयोग [सहमति क्लाइंट](/developers/docs/nodes-and-clients/#consensus-clients) नामक सॉफ़्टवेयर के एक अन्य भाग के साथ किया जाना चाहिए। नीचे दिया गया आरेख दो एथेरियम क्लाइंट के बीच संबंध दिखाता है। दो क्लाइंट अपने स्वयं के संबंधित पीयर-टू-पीयर (P2P) नेटवर्क से जुड़ते हैं। अलग-अलग P2P नेटवर्क की आवश्यकता होती है क्योंकि निष्पादन ग्राहक अपने P2P नेटवर्क पर गपशप लेनदेन करते हैं, जिससे उन्हें अपने स्थानीय लेनदेन पूल का प्रबंधन करने में सक्षम बनाया जाता है, जबकि सहमति ग्राहक अपने P2P नेटवर्क पर गपशप ब्लॉक करते हैं, जिससे आम सहमति और श्रृंखला विकास को सक्षम किया जाता है। diff --git a/public/content/translations/hi/restaking/index.md b/public/content/translations/hi/restaking/index.md index 8e0b37d1e92..0281c93f369 100644 --- a/public/content/translations/hi/restaking/index.md +++ b/public/content/translations/hi/restaking/index.md @@ -144,7 +144,7 @@ buttons:

    एथेरियम सह-संस्थापक टाइप कर रहे हैं...

    - एथेरियम के सह-संस्थापक, विटालिक ने डोंट ओवरलोड कंसेंसस। नामक 2021 के एक ब्लॉग पोस्ट में रीस्टेकिंग के संभावित जोखिमों के बारे में चेतावनी दी। + एथेरियम के सह-संस्थापक, विटालिक ने डोंट ओवरलोड कंसेंसस। नामक 2021 के एक ब्लॉग पोस्ट में रीस्टेकिंग के संभावित जोखिमों के बारे में चेतावनी दी।

    diff --git a/public/content/translations/id/developers/docs/nodes-and-clients/index.md b/public/content/translations/id/developers/docs/nodes-and-clients/index.md index 620251aad60..eac3627bf31 100644 --- a/public/content/translations/id/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/id/developers/docs/nodes-and-clients/index.md @@ -1,305 +1,313 @@ --- title: Node dan klien -description: Gambaran umum tentang perangkat lunak node dan klien Ethereum, juga cara menyiapkan node dan mengapa Anda harus melakukannya. +description: Gambaran umum tentang node dan perangkat lunak klien Ethereum, ditambah cara menyiapkan node dan mengapa Anda harus melakukannya. lang: id sidebarDepth: 2 --- -Ethereum adalah jaringan komputer terdistribusi yang menjalankan perangkat lunak (dikenal sebagai node) yang dapat memverifikasi blok dan data transaksi. Anda memerlukan satu aplikasi, yang dikenal sebagai klien, pada perangkat Anda untuk "menjalankan" sebuah node. +[Ethereum](/) adalah jaringan komputer terdistribusi (dikenal sebagai node) yang menjalankan perangkat lunak yang dapat memverifikasi blok dan data transaksi. Perangkat lunak ini harus dijalankan di komputer Anda untuk mengubahnya menjadi node Ethereum. Ada dua perangkat lunak terpisah (dikenal sebagai 'klien') yang diperlukan untuk membentuk sebuah node. ## Prasyarat {#prerequisites} -Anda harus memahami konsep jaringan peer-to-peer dan [dasar-dasar EVM](/developers/docs/evm/) sebelum menggali lebih dalam dan menjalankan instance klien Ethereum Anda sendiri. Coba lihat [pengantar Ethereum](/developers/docs/intro-to-ethereum/) kami. +Anda harus memahami konsep jaringan peer-to-peer dan [dasar-dasar EVM](/developers/docs/evm/) sebelum menyelam lebih dalam dan menjalankan instans klien Ethereum Anda sendiri. Lihat [pengantar Ethereum](/developers/docs/intro-to-ethereum/) kami. + +Jika Anda baru mengenal topik node, kami sarankan untuk terlebih dahulu memeriksa pengantar ramah pengguna kami tentang [menjalankan node Ethereum](/run-a-node). ## Apa itu node dan klien? {#what-are-nodes-and-clients} -"Node" merujuk pada satu bagian perangkat lunak yang dikenal sebagai satu klien. Klien adalah implementasi Ethereum yang memverifikasi semua transaksi di setiap blok, menjaga jaringan tetap aman dan data tetap akurat. +"Node" adalah instans perangkat lunak klien Ethereum apa pun yang terhubung ke komputer lain yang juga menjalankan perangkat lunak Ethereum, membentuk sebuah jaringan. Klien adalah implementasi Ethereum yang memverifikasi data terhadap aturan protokol dan menjaga jaringan tetap aman. Sebuah node harus menjalankan dua klien: klien konsensus dan klien eksekusi. -Anda bisa melihat tampilan jaringan Ethereum secara nyata dengan melihat [peta node](https://etherscan.io/nodetracker) ini. +- Klien eksekusi (juga dikenal sebagai Mesin Eksekusi, klien EL atau sebelumnya klien Eth1) mendengarkan transaksi baru yang disiarkan di jaringan, mengeksekusinya di EVM, dan menyimpan status terbaru serta basis data dari semua data Ethereum saat ini. +- Klien konsensus (juga dikenal sebagai Beacon Node, klien CL atau sebelumnya klien Eth2) mengimplementasikan algoritma konsensus proof-of-stake, yang memungkinkan jaringan untuk mencapai kesepakatan berdasarkan data yang divalidasi dari klien eksekusi. Ada juga perangkat lunak ketiga, yang dikenal sebagai 'validator' yang dapat ditambahkan ke klien konsensus, memungkinkan node untuk berpartisipasi dalam mengamankan jaringan. -Ada banyak [klien Ethereum](/developers/docs/nodes-and-clients/#execution-clients), dalam berbagai bahasa pemrograman seperti Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim dan Java. Persamaan dari semua implementasi ini adalah semuanya mengikuti spesifikasi formal (pada awalnya [Yellow Paper Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf)). Spesifikasi ini mengatur bagaimana jaringan Ethereum dan blockchain berfungsi. +Klien-klien ini bekerja sama untuk melacak kepala rantai Ethereum dan memungkinkan pengguna untuk berinteraksi dengan jaringan Ethereum. Desain modular dengan beberapa perangkat lunak yang bekerja bersama disebut [kompleksitas terenkapsulasi](https://vitalik.eth.limo/general/2022/02/28/complexity.html). Pendekatan ini membuatnya lebih mudah untuk mengeksekusi [The Merge](/roadmap/merge) dengan mulus, membuat perangkat lunak klien lebih mudah dipelihara dan dikembangkan, dan memungkinkan penggunaan kembali klien individu, misalnya, dalam [ekosistem layer 2](/layer-2/). -![Klien eksekusi](./client-diagram.png) Diagram yang disederhanakan tentang apa saja fitur klien Ethereum. +![Coupled execution and consensus clients](./eth1eth2client.png) +Diagram yang disederhanakan dari klien eksekusi dan konsensus yang digabungkan. -## Jenis node {#node-types} +### Keragaman klien {#client-diversity} -Jika Anda ingin [menjalankan node sendiri](/developers/docs/nodes-and-clients/run-a-node/), Anda harus mengerti bahwa ada berbagai jenis node yang mengonsumsi data secara berbeda. Bahkan, klien dapat menjalankan 3 tipe node yang berbeda - ringan, penuh, dan arsip. Ada juga opsi strategi sinkronisasi berbeda yang memungkinkan waktu sinkronisasi yang lebih cepat. Sinkronisasi merujuk pada seberapa cepat prosesnya mendapat informasi paling terbaru pada state Ethereum. +Baik [klien eksekusi](/developers/docs/nodes-and-clients/#execution-clients) maupun [klien konsensus](/developers/docs/nodes-and-clients/#consensus-clients) ada dalam berbagai bahasa pemrograman yang dikembangkan oleh tim yang berbeda. -### Node penuh {#full-node} +Beberapa implementasi klien dapat membuat jaringan lebih kuat dengan mengurangi ketergantungannya pada satu basis kode. Tujuan idealnya adalah untuk mencapai keragaman tanpa ada klien yang mendominasi jaringan, sehingga menghilangkan potensi titik kegagalan tunggal. +Berbagai bahasa juga mengundang komunitas pengembang yang lebih luas dan memungkinkan mereka untuk membuat integrasi dalam bahasa pilihan mereka. -- Menyimpan data blockchain penuh. -- Berpartisipasi dalam validasi blok, memverifikasi semua blok dan state. -- Semua state bisa dikembangkan dari satu node penuh. -- Melayani jaringan dan menyediakan data sesuai permintaan. +Pelajari lebih lanjut tentang [keragaman klien](/developers/docs/nodes-and-clients/client-diversity/). -### Node Ringan {#light-node} +Kesamaan dari implementasi ini adalah semuanya mengikuti satu spesifikasi. Spesifikasi mendikte bagaimana jaringan dan blockchain Ethereum berfungsi. Setiap detail teknis didefinisikan dan spesifikasi dapat ditemukan sebagai: -- Menyimpan rantai header dan meminta semua hal lainnya. -- Bisa memverifikasi keabsahan data yang dibandingkan dengan root state dalam header blok. -- Berguna untuk perangkat dengan kapasitas rendah, seperti perangkat bawaan atau ponsel, yang tidak sanggup menyimpan data blokchain dalam ukuran gigabyte. +- Awalnya, [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Spesifikasi eksekusi](https://github.com/ethereum/execution-specs/) +- [Spesifikasi konsensus](https://github.com/ethereum/consensus-specs) +- [EIP](https://eips.ethereum.org/) yang diimplementasikan dalam berbagai [peningkatan jaringan](/ethereum-forks/) -### Node arsip {#archive-node} +### Melacak node di jaringan {#network-overview} -- Menyimpan semua data yang tersimpan dalam node penuh dan menyusun riwayat arsip state. Diperlukan jika Anda ingin menanyakan sesuatu seperti saldo akun pada blok #4.000.000, atau secara sederhana dan andal [menguji sekumpulan transaksi Anda sendiri tanpa menambangnya dengan mengggunakan OpenEthereum](https://openethereum.github.io/JSONRPC-trace-module#trace_callmany). -- Data ini mewakilkan unit terabita yang membuat node arsip kurang menarik bagi pengguna pada umumnya, tetapi dapat menolong untuk layanan seperti penjelajah blok, vendor dompet, dan analitik rantai. +Beberapa pelacak menawarkan gambaran umum waktu nyata dari node di jaringan Ethereum. Perhatikan bahwa karena sifat jaringan yang terdesentralisasi, perayap ini hanya dapat memberikan pandangan terbatas tentang jaringan dan mungkin melaporkan hasil yang berbeda. -Mensinkronisasikan klien di mode mana saja selain arsip akan menghasilkan data blockchain yang terpangkas. Ini berarti, tidak ada arsip untuk semua state riwayat, tetapi node penuh dapat menyusunnya sesuai permintaan. +- [Peta node](https://etherscan.io/nodetracker) oleh Etherscan +- [Ethernodes](https://ethernodes.org/) oleh Bitfly +- [Nodewatch](https://www.nodewatch.io/) oleh Chainsafe, merayapi node konsensus +- [Monitoreth](https://monitoreth.io/) - oleh MigaLabs, Alat pemantauan jaringan terdistribusi +- [Laporan Kesehatan Jaringan Mingguan](https://probelab.io) - oleh ProbeLab, Menggunakan [perayap Nebula](https://github.com/dennis-tra/nebula) dan alat lainnya -## Mengapa Anda harus menjalankan satu node Ethereum? {#why-should-i-run-an-ethereum-node} +## Jenis node {#node-types} -Menjalankan node memungkinkan Anda menggunakan Ethereum tanpa membutuhkan kepercayaan dan secara privat sekaligus Anda mendukung ekosistem. +Jika Anda ingin [menjalankan node Anda sendiri](/developers/docs/nodes-and-clients/run-a-node/), Anda harus memahami bahwa ada berbagai jenis node yang mengonsumsi data secara berbeda. Faktanya, klien dapat menjalankan tiga jenis node yang berbeda: light, full, dan archive. Ada juga opsi strategi sinkronisasi yang berbeda yang memungkinkan waktu sinkronisasi lebih cepat. Sinkronisasi mengacu pada seberapa cepat ia bisa mendapatkan informasi paling mutakhir tentang status Ethereum. -### Keuntungan untuk Anda {#benefits-to-you} +### Full node {#full-node} -Menjalankan node sendiri memungkinkan Anda menggunakan Ethereum dengan cara yang benar-benar privat, mandiri, dan tidak membutuhkan kepercayaan. Anda tidak perlu mempercayai jaringan karena Anda bisa memverifikasi data sendiri dengan klien Anda. "Jangan percaya, lakukan verifikasi" adalah mantra blockchain yang populer. +Full node melakukan validasi blok demi blok dari blockchain, termasuk mengunduh dan memverifikasi badan blok dan data status untuk setiap blok. Ada berbagai kelas full node - beberapa mulai dari blok genesis dan memverifikasi setiap blok dalam seluruh sejarah blockchain. Yang lain memulai verifikasi mereka pada blok yang lebih baru yang mereka percayai valid (misalnya, 'snap sync' Geth). Terlepas dari mana verifikasi dimulai, full node hanya menyimpan salinan lokal dari data yang relatif baru (biasanya 128 blok terbaru), memungkinkan data lama dihapus untuk menghemat ruang disk. Data lama dapat dibuat ulang saat dibutuhkan. -- Node Anda memverifikasi semua transaksi dan blok dibandingkan dengan aturan konsensus itu sendiri. Ini berarti Anda tidak harus mengandalkan node lain dalam jaringan atau sepenuhnya mempercayainya. -- Anda tidak akan harus membocorkan alamat dan saldo Anda ke node acak. Semua hal bisa dicek dengan klien Anda sendiri. -- Dapp Anda bisa lebih aman dan privat jika Anda menggunakan node Anda sendiri. [MetaMask](https://metamask.io), [MyEtherWallet](https://myetherwallet.com) and some other wallets can be easily pointed to your own local node. -- Anda dapat memrogram endpoint RPC kustom Anda sendiri. -- Anda dapat menghubungkan node Anda dengan menggunakan **Komunikasi Antar Proes (IPC)** atau menulis kembali node untuk memuat program Anda sebagai plugin. Ini menghasilkan latensi yang rendah, yang diperlukan untuk menggantikan transaksi Anda secepat mungkin (maksudnya frontrunning). +- Menyimpan data blockchain penuh (meskipun ini dipangkas secara berkala sehingga full node tidak menyimpan semua data status kembali ke genesis) +- Berpartisipasi dalam validasi blok, memverifikasi semua blok dan status. +- Semua status dapat diambil dari penyimpanan lokal atau dibuat ulang dari 'snapshot' oleh full node. +- Melayani jaringan dan menyediakan data berdasarkan permintaan. -![Bagaimana Anda mengakses Ethereum lewat aplikasi dan node Anda](./nodes.png) +### Archive node {#archive-node} -### Keuntungan jaringan {#network-benefits} +Archive node adalah full node yang memverifikasi setiap blok dari genesis dan tidak pernah menghapus data apa pun yang diunduh. -Sebuah kumpulan node beragam penting untuk kesehatan, keamanan dan ketahanan operasional Ethereum. +- Menyimpan semua yang disimpan di full node dan membangun arsip status historis. Ini diperlukan jika Anda ingin menanyakan sesuatu seperti saldo akun pada blok #4.000.000, atau sekadar dan secara andal menguji set transaksi Anda sendiri tanpa memvalidasinya menggunakan pelacakan. +- Data ini mewakili unit terabyte, yang membuat archive node kurang menarik bagi pengguna rata-rata tetapi bisa berguna untuk layanan seperti penjelajah blok, vendor dompet, dan analitik rantai. -- Mereka menyediakan akses ke data blockchain untuk klien lightweight yang bergantung pada data tersebut. Pada puncak tinggi penggunaan, harus ada node penuh yang cukup untuk membantu sinkronisasi node ringan. Node ringan tidak menyimpan seluruh blockchain, melainkan memverifikasi data lewat [root state dalam header blok](/developers/docs/blocks/#block-anatomy). Mereka bisa meminta lebih banyak informasi dari blok jika mereka membutuhkannya. -- Node penuh melaksanakan aturan konsensus bukti kerja sehingga mereka tidak bisa ditipu untuk menerima blok yang tidak mengikutinya. Ini menyediakan keamanan ekstra dalam jaringan karena jika semua node berjenis node ringan, yang tidak melakukan verifikasi penuh, penambang bisa menyerang jaringan dan, sebagai contoh, membuat blok dengan imbalan yang lebih tinggi. +Menyinkronkan klien dalam mode apa pun selain archive akan menghasilkan data blockchain yang dipangkas. Ini berarti, tidak ada arsip dari semua status historis tetapi full node dapat membangunnya sesuai permintaan. -Jika Anda menjalankan node penuh, seluruh jaringan Ethereum mendapat keuntungan darinya. +Pelajari lebih lanjut tentang [Archive node](/developers/docs/nodes-and-clients/archive-nodes). -## Menjalankan node milik Anda sendiri {#running-your-own-node} +### Light node {#light-node} -Tertarik menjalankan klien Ethereum Anda sendiri? +Alih-alih mengunduh setiap blok, light node hanya mengunduh header blok. Header ini berisi informasi ringkasan tentang isi blok. Informasi lain apa pun yang dibutuhkan light node diminta dari full node. Light node kemudian dapat secara independen memverifikasi data yang mereka terima terhadap akar status di header blok. Light node memungkinkan pengguna untuk berpartisipasi dalam jaringan Ethereum tanpa perangkat keras yang kuat atau bandwidth tinggi yang diperlukan untuk menjalankan full node. Pada akhirnya, light node mungkin berjalan di ponsel atau perangkat tertanam. Light node tidak berpartisipasi dalam konsensus (yaitu, mereka tidak bisa menjadi validator), tetapi mereka dapat mengakses blockchain Ethereum dengan fungsionalitas dan jaminan keamanan yang sama seperti full node. -For a beginner-friendly introduction visit our [run a node](/run-a-node) page to learn more. +Klien light adalah area pengembangan aktif untuk Ethereum dan kami berharap dapat segera melihat klien light baru untuk lapisan konsensus dan lapisan eksekusi. +Ada juga rute potensial untuk menyediakan data klien light melalui [jaringan gosip](https://www.ethportal.net/). Ini menguntungkan karena jaringan gosip dapat mendukung jaringan light node tanpa memerlukan full node untuk melayani permintaan. -If you're more of a technical user, learn how to [spin up your own node](/developers/docs/nodes-and-clients/run-a-node/) with the command line! +Ethereum belum mendukung populasi light node yang besar, tetapi dukungan light node adalah area yang diharapkan berkembang pesat dalam waktu dekat. Secara khusus, klien seperti [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios), dan [LodeStar](https://lodestar.chainsafe.io/) saat ini sangat fokus pada light node. -### Proyek {#projects} +## Mengapa saya harus menjalankan node Ethereum? {#why-should-i-run-an-ethereum-node} -[**Pilih klien dan ikuti petunjuknya**](#clients) +Menjalankan node memungkinkan Anda untuk secara langsung, tanpa kepercayaan, dan secara pribadi menggunakan Ethereum sambil mendukung jaringan dengan menjaganya agar lebih kuat dan terdesentralisasi. -**ethnode -** **_Jalankan node Ethereum (Geth atau OpenEthereum) untuk pengembangan lokal._** +### Manfaat bagi Anda {#benefits-to-you} -- [GitHub](https://github.com/vrde/ethnode) +Menjalankan node Anda sendiri memungkinkan Anda untuk menggunakan Ethereum dengan cara yang pribadi, mandiri, dan tanpa kepercayaan. Anda tidak perlu memercayai jaringan karena Anda dapat memverifikasi data sendiri dengan klien Anda. "Jangan percaya, verifikasi" adalah mantra blockchain yang populer. -**DAppNode -** **_Sebuah sistem operasi GUI untuk menjalankan node Web3, yang mencakup Ethereum dan rantai suar, pada satu mesin khusus._** +- Node Anda memverifikasi semua transaksi dan blok terhadap aturan konsensus dengan sendirinya. Ini berarti Anda tidak perlu bergantung pada node lain di jaringan atau sepenuhnya memercayai mereka. +- Anda dapat menggunakan dompet Ethereum dengan node Anda sendiri. Anda dapat menggunakan dapps dengan lebih aman dan pribadi karena Anda tidak perlu membocorkan alamat dan saldo Anda ke perantara. Semuanya dapat diperiksa dengan klien Anda sendiri. [MetaMask](https://metamask.io), [Frame](https://frame.sh/), dan [banyak dompet lainnya](/wallets/find-wallet/) menawarkan impor RPC, yang memungkinkan mereka untuk menggunakan node Anda. +- Anda dapat menjalankan dan meng-host sendiri layanan lain yang bergantung pada data dari Ethereum. Misalnya, ini mungkin validator Beacon Chain, perangkat lunak seperti layer 2, infrastruktur, penjelajah blok, pemroses pembayaran, dll. +- Anda dapat menyediakan [titik akhir RPC](/developers/docs/apis/json-rpc/) kustom Anda sendiri. Anda bahkan dapat menawarkan titik akhir ini secara publik kepada komunitas untuk membantu mereka menghindari penyedia terpusat yang besar. +- Anda dapat terhubung ke node Anda menggunakan **Komunikasi Antar-proses (IPC)** atau menulis ulang node untuk memuat program Anda sebagai plugin. Ini memberikan latensi rendah, yang sangat membantu, mis., saat memproses banyak data menggunakan pustaka web3 atau saat Anda perlu mengganti transaksi Anda secepat mungkin (yaitu, frontrunning). +- Anda dapat secara langsung melakukan stake ETH untuk mengamankan jaringan dan mendapatkan hadiah. Lihat [mengunci solo](/staking/solo/) untuk memulai. -- [dappnode.io](https://dappnode.io) +![How you access Ethereum via your application and nodes](./nodes.png) -### Sumber Daya {#resources} +### Manfaat jaringan {#network-benefits} -- [Menjalankan Node Penuh Ethereum: Sebuah Panduan Lengkap](https://medium.com/coinmonks/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _7 November 2019 - Justin Leroux_ -- [Lembaran Cheat Konfigurasi Node](https://dev.to/5chdn/ethereum-node-configuration-modes-cheat-sheet-25l8) _5 Januari 2019 - Afri Schoeden_ -- [Cara Menginstal dan Menjalankan Node Geth](https://www.quiknode.io/guides/infrastructure/how-to-install-and-run-a-geth-node) _4 Okt 2020 - Sahil Sen_ -- [Cara Menginstal dan Menjalankan Node OpenEthereum (fka. Parity)](https://www.quiknode.io/guides/infrastructure/how-to-run-a-openethereum-ex-parity-client-node) _22 Sept 2020 - Sahil Sen_ +Serangkaian node yang beragam penting untuk kesehatan, keamanan, dan ketahanan operasional Ethereum. -## Alternatif {#alternatives} +- Full node menegakkan aturan konsensus sehingga mereka tidak dapat ditipu untuk menerima blok yang tidak mengikutinya. Ini memberikan keamanan ekstra di jaringan karena jika semua node adalah light node, yang tidak melakukan verifikasi penuh, validator dapat menyerang jaringan. +- Jika terjadi serangan yang mengatasi pertahanan kripto-ekonomi dari [proof-of-stake](/developers/docs/consensus-mechanisms/pos/#what-is-pos), pemulihan sosial dapat dilakukan oleh full node yang memilih untuk mengikuti rantai yang jujur. +- Lebih banyak node di jaringan menghasilkan jaringan yang lebih beragam dan kuat, tujuan akhir dari desentralisasi, yang memungkinkan sistem yang tahan sensor dan andal. +- Full node menyediakan akses ke data blockchain untuk klien ringan yang bergantung padanya. Light node tidak menyimpan seluruh blockchain, melainkan memverifikasi data melalui [akar status di header blok](/developers/docs/blocks/#block-anatomy). Mereka dapat meminta lebih banyak informasi dari full node jika mereka membutuhkannya. -Menjalankan node Anda sendiri dapat menjadi sulit dan Anda tidak selalu harus menjalankan instance Anda sendiri. Dalam kasus ini, Anda bisa menggunakan satu penyedia API pihak ketiga seperti [Infura](https://infura.io), [Alchemy](https://alchemyapi.io), atau [QuikNode](https://www.quiknode.io). Sebagai alternatifnya [ArchiveNode](https://archivenode.io/) adalah satu node Arsip yang didanai komunitas yang bertujuan membawa data arsip blockchain Ethereum kepada para pengembang independen yang sebaliknya tidak bisa mendapatkannya. For an overview of using these services, check out [nodes as a service](/developers/docs/nodes-and-clients/nodes-as-a-service/). +Jika Anda menjalankan full node, seluruh jaringan Ethereum mendapat manfaat darinya, bahkan jika Anda tidak menjalankan validator. -Jika seseorang menjalankan node Ethereum dengan API publik dalam komunitas Anda, Anda bisa merujuk dompet ringan Anda (seperti MetaMask) ke node komunitas [melalui RPC Kustom](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) dan mendapat lebih banyak privasi dari pada menggunakan beberapa pihak ketiga terpercaya acak. +## Menjalankan node Anda sendiri {#running-your-own-node} -Di sisi lain, jika Anda menjalankan satu klien, Anda bisa membagikannya dengan teman Anda yang mungkin membutuhkannya. +Tertarik untuk menjalankan klien Ethereum Anda sendiri? + +Untuk pengantar yang ramah pemula, kunjungi halaman [menjalankan node](/run-a-node) kami untuk mempelajari lebih lanjut. + +Jika Anda lebih merupakan pengguna teknis, selami lebih banyak detail dan opsi tentang cara [menyiapkan node Anda sendiri](/developers/docs/nodes-and-clients/run-a-node/). + +## Alternatif {#alternatives} -## Klien eksekusi (sebelumnya 'klien Eth1') {#execution-clients} +Menyiapkan node Anda sendiri dapat menghabiskan waktu dan sumber daya Anda, tetapi Anda tidak selalu perlu menjalankan instans Anda sendiri. Dalam hal ini, Anda dapat menggunakan penyedia API pihak ketiga. Untuk gambaran umum tentang penggunaan layanan ini, lihat [node sebagai layanan](/developers/docs/nodes-and-clients/nodes-as-a-service/). -Komunitas Ethereum memelihara beberapa klien eksekusi sumber terbuka (sebelumnya dikenal sebagai 'klien Eth1', atau 'klien Ethereum'), yang dikembangkan oleh berbagai tim menggunakan beragam bahasa pemrograman. Ini membuat jaringan lebih kuat dan lebih beragam. Tujuan idealnya adalah untuk mencapai keberagaman tanpa dominasi klien mana pun sehingga ini menurunkan jumlah titik kegagalan mana pun. +Jika seseorang menjalankan node Ethereum dengan API publik di komunitas Anda, Anda dapat mengarahkan dompet Anda ke node komunitas melalui RPC Kustom dan mendapatkan lebih banyak privasi daripada dengan pihak ketiga tepercaya yang acak. -Tabel ini meringkaskan berbagai jenis klien. Semuanya telah lulus [pengujian klien](https://github.com/ethereum/tests) dan secara aktif dipertahankan agar tetap yang terbaru dengan peningkatan jaringan. +Di sisi lain, jika Anda menjalankan klien, Anda dapat membagikannya dengan teman-teman Anda yang mungkin membutuhkannya. -| Klien | Bahasa | Sistem operasi | Jaringan | Strategi sinkronisasi | Pemotongan state | -| ------------------------------------------------------------------------- | -------- | --------------------- | -------------------------------------------------------- | --------------------- | ---------------- | -| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Jaringan Utama, Görli, Rinkeby, Ropsten | Snap, Full | Arsip, Dipotong | -| [Nethermind](http://nethermind.io/) | C#, .NET | Linux, Windows, macOS | Jaringan Utama, Görli, Ropsten, Rinkeby, dan banyak lagi | Fast, Beam, Archive | Arsip, Dipotong | -| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Rinkeby, Ropsten, Görli, and more | Cepat, Penuh | Arsip, Dipotong | -| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Jaringan Utama, Görli, Rinkeby, Ropsten | Full | Arsip, Dipotong | -| [OpenEthereum (Deprecated)](https://github.com/openethereum/openethereum) | Rust | Linux, Windows, macOS | Jaringan Utama, Kovan, Ropsten, dan banyak lagi | Warp, Penuh | Arsip, Dipotong | +## Klien eksekusi {#execution-clients} -**Perhatikan bahwa OpenEthereum [telah menjadi usang](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) dan tidak lagi dipertahankan.** Gunakan dengan hati-hati dan lebih baik beralih ke implementasi klien lainnya. +Komunitas Ethereum memelihara beberapa klien eksekusi sumber terbuka (sebelumnya dikenal sebagai 'klien Eth1', atau hanya 'klien Ethereum'), yang dikembangkan oleh tim yang berbeda menggunakan bahasa pemrograman yang berbeda. Ini membuat jaringan lebih kuat dan lebih [beragam](/developers/docs/nodes-and-clients/client-diversity/). Tujuan idealnya adalah untuk mencapai keragaman tanpa ada klien yang mendominasi untuk mengurangi titik kegagalan tunggal. -Untuk informasi lebih lanjut tentang jaringan yang didukung, baca tentang [jaringan Ethereum](/developers/docs/networks/). +Tabel ini merangkum klien yang berbeda. Semuanya lulus [pengujian klien](https://github.com/ethereum/tests) dan dipelihara secara aktif untuk tetap diperbarui dengan peningkatan jaringan. -### Manfaat dari impelementasi berbeda {#advantages-of-different-implementations} +| Klien | Bahasa | Sistem operasi | Jaringan | Strategi sinkronisasi | Pemangkasan status | +| ------------------------------------------------------------------------ | ---------- | --------------------- | ------------------------- | -------------------------------------------------------------- | ------------------ | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Hoodi | [Snap](#snap-sync), [Full](#full-sync) | Archive, Dipangkas | +| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Mainnet, Sepolia, Hoodi | [Snap](#snap-sync) (tanpa melayani), Fast, [Full](#full-sync) | Archive, Dipangkas | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Hoodi | [Snap](#snap-sync), [Fast](#fast-sync), [Full](#full-sync) | Archive, Dipangkas | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Hoodi | [Full](#full-sync) | Archive, Dipangkas | +| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Mainnet, Sepolia, Hoodi | [Full](#full-sync) | Archive, Dipangkas | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Hoodi | [Full](#full-sync) | Dipangkas | -Setiap klien mempunyai kasus penggunaan dan keuntungan yang unik, jadi Anda harus memilih salah satu berdasarkan preferensi Anda sendiri. Keberagaman memungkinkan implementasi difokuskan pada fitur dan audiens pengguna berbeda. Anda mungkin ingin memilih satu klien berdasarkan fitur, dukungan, bahasa pemrograman, atau lisensi. +Untuk informasi lebih lanjut tentang jaringan yang didukung, bacalah tentang [jaringan Ethereum](/developers/docs/networks/). -#### Go Ethereum {#geth} +Setiap klien memiliki kasus penggunaan dan keuntungan yang unik, jadi Anda harus memilih satu berdasarkan preferensi Anda sendiri. Keragaman memungkinkan implementasi difokuskan pada fitur dan audiens pengguna yang berbeda. Anda mungkin ingin memilih klien berdasarkan fitur, dukungan, bahasa pemrograman, atau lisensi. -Go Ethereum (singkatannya Geth) adalah satu dari implementasi original protokol Ethereum. Saat ini, Geth adalah klien yang paling tersebar luas dengan basis pengguna terbesar dan keberagaman perangkat untuk para pengguna dan pengembang. Geth ditulis dalam Go, yang adalah sumber terbuka penuh dan terlisensi di bawah GNU LGPL v3. +### Besu {#besu} -#### OpenEthereum {#openethereum} +Hyperledger Besu adalah klien Ethereum tingkat perusahaan untuk jaringan publik dan berizin. Ini menjalankan semua fitur Mainnet Ethereum, dari pelacakan hingga GraphQL, memiliki pemantauan ekstensif dan didukung oleh ConsenSys, baik di saluran komunitas terbuka maupun melalui SLA komersial untuk perusahaan. Ini ditulis dalam Java dan dilisensikan di bawah Apache 2.0. -OpenEthereum adalah sebuah klien Ethereum cepat, kaya akan fitur, dan berbasis CLI tingkat lanjut. Dibangun guna menyediakan infrastruktur penting untuk layanan cepat dan dapat diandalkan yang membutuhkan sinkronisasi cepat dan uptime maksimum. Tujuan OpenEthereum adalah menjadi klien Ethereum tercepat, paling ringan, dan paling aman. Menyediakan basis kode yang bersih dan modular untuk: +[Dokumentasi](https://besu.hyperledger.org/en/stable/) ekstensif Besu akan memandu Anda melalui semua detail tentang fitur dan pengaturannya. -- kostumisasi yang mudah. -- integrasi ringan ke dalam layanan atau produk. -- memori minimal dan jejak penyimpanan. +### Erigon {#erigon} -OpenEthereum dikembangkan menggunakan bahasa pemrograman Rust canggih dan terlisensi di bawah GPLv3. +Erigon, sebelumnya dikenal sebagai Turbo-Geth, dimulai sebagai fork dari Go Ethereum yang berorientasi pada kecepatan dan efisiensi ruang disk. Erigon adalah implementasi Ethereum yang sepenuhnya diarsiteki ulang, saat ini ditulis dalam Go tetapi dengan implementasi dalam bahasa lain yang sedang dikembangkan. Tujuan Erigon adalah untuk menyediakan implementasi Ethereum yang lebih cepat, lebih modular, dan lebih dioptimalkan. Ini dapat melakukan sinkronisasi archive node penuh menggunakan sekitar 2TB ruang disk, dalam waktu kurang dari 3 hari. -**Perhatikan bahwa OpenEthereum [telah menjadi usang](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) dan tidak lagi dipertahankan.** Gunakan dengan hati-hati dan lebih baik beralih ke implementasi klien lainnya. +### Go Ethereum {#geth} -#### Nethermind {#nethermind} +Go Ethereum (disingkat Geth) adalah salah satu implementasi asli dari protokol Ethereum. Saat ini, ini adalah klien yang paling tersebar luas dengan basis pengguna terbesar dan berbagai perkakas untuk pengguna dan pengembang. Ini ditulis dalam Go, sepenuhnya sumber terbuka dan dilisensikan di bawah GNU LGPL v3. -Nethermind adalah satu implementasi Ethereum yang dibuat dengan tumpukan teknologi C# .NET, beroperasi pada semua platform utama termasuk ARM. Implementasi ini menawarkan kinerja luar biasa dengan: +Pelajari lebih lanjut tentang Geth di [dokumentasinya](https://geth.ethereum.org/docs). + +### Nethermind {#nethermind} + +Nethermind adalah implementasi Ethereum yang dibuat dengan tumpukan teknologi C# .NET, dilisensikan dengan LGPL-3.0, berjalan di semua platform utama termasuk ARM. Ini menawarkan kinerja luar biasa dengan: - mesin virtual yang dioptimalkan -- akses state -- jaringan dan fitur yang kaya seperti dasbor Prometheus/Graphana, dukungan logging perusahaan seq, pelacakan JSON RPC, dan plugin analitik. +- akses status +- jaringan dan fitur kaya seperti dasbor Prometheus/Grafana, dukungan pencatatan perusahaan seq, pelacakan JSON-RPC, dan plugin analitik. -Nethermind juga mempunyai [dokumentasi detil](https://docs.nethermind.io), dukungan pengembang yang kuat, komunitasi daring dan dukungan 24/7 yang tersedia untuk para pengguna premium. +Nethermind juga memiliki [dokumentasi terperinci](https://docs.nethermind.io), dukungan pengembang yang kuat, komunitas online, dan dukungan 24/7 yang tersedia untuk pengguna premium. -#### Besu {#besu} +### Reth {#reth} -Hyperledger Besu adalah klien Ethereum standar perusahaan untuk jaringan publik dan berizin. Ia menjalankan seluruh fitur Jaringan Utama Ethereum, mulai dari pelacakan hingga GraphQL, memiliki pengawasan ektensif dan didukung oleh ConsenSys, baik di kanal komunitas terbuka maupun melalui SLA komersial untuk perusahaan. Ditulis dalam Java dan berlisensi Apache 2.0. +Reth (singkatan dari Rust Ethereum) adalah implementasi full node Ethereum yang difokuskan untuk menjadi ramah pengguna, sangat modular, cepat, dan efisien. Reth awalnya dibangun dan didorong maju oleh Paradigm, dan dilisensikan di bawah lisensi Apache dan MIT. -#### Erigon {#erigon} +Reth siap produksi, dan cocok untuk penggunaan di lingkungan yang sangat penting seperti mengunci atau layanan dengan waktu aktif tinggi. Berkinerja baik dalam kasus penggunaan di mana kinerja tinggi dengan margin besar diperlukan seperti RPC, MEV, pengindeksan, simulasi, dan aktivitas P2P. -Erigon, yang sebelumnya dikenal sebagai Erigon, adalah sebuah fork Go Ethereum yang diarahkan untuk efisiensi kecepatan dan pemakaian ruangan cakram. Erigon adalah sebuah implementasi yang sepenuhnya di buat kembali di Ethereum, yang saat ini ditulis dalam Go dengan implementasi dalam bahasa pemograman lain yang direncanakan. Tujuan Erigon adalah menyediakan implementasi Ethereum yang lebih cepat, lebih modular, dan lebih teroptimisasi. Ia dapat melakukan sinkronisasi node arsip penuh dengan menggunakan kurang dari 2 TB ruangan cakram, dalam waktu kurang dari 3 hari +Pelajari lebih lanjut dengan memeriksa [Buku Reth](https://reth.rs/), atau [repo GitHub Reth](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth). -### Mode sinkronisasi {#sync-modes} +### Dalam pengembangan {#execution-in-development} -Untuk mengikuti dan memverifikasi data saat ini di jaringan, klien Ethereum perlu melakukan sinkronisasi dengan state jaringan terkini. Ini dilakukan dengan mengunduh data dari para rekan sejawat, yang secara kriptografik memverifikasi integritas mereka, dan membangun basis data blockchain lokal. +Klien-klien ini masih dalam tahap awal pengembangan dan belum direkomendasikan untuk penggunaan produksi. -Mode sinkronisasi mewakili pendekatan berbeda terhadap proses ini dengan berbagai pertukaran. Klien juga bervariasi dalam implementasi algoritma sinkronisasinya. Mengaculah selalu pada dokumentasi resmi dari klien pilihan Anda untuk spesifikasi tentang implementasi. +#### EthereumJS {#ethereumjs} -#### Gambaran umum strategi {#overview-of-strategies} +Klien Eksekusi EthereumJS (EthereumJS) ditulis dalam TypeScript dan terdiri dari sejumlah paket, termasuk primitif inti Ethereum yang diwakili oleh kelas Blok, Transaksi, dan Merkle-Patricia Trie serta komponen klien inti termasuk implementasi Mesin Virtual Ethereum (EVM), kelas blockchain, dan tumpukan jaringan DevP2P. -Tinjauan umum pendekatan sinkronisasi yang digunakan dalam klien untuk Jaringan Utama: +Pelajari lebih lanjut tentang hal itu dengan membaca [dokumentasinya](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) -##### Sinkonisasi penuh +## Klien konsensus {#consensus-clients} -Sinkronisasi penuh mengunduh semua blok (termasuk header, transaksi, dan bukti pembayaran) dan menghasilkan state blockchain yang terus bertambah dengan mengeksekusi setiap blok dari blok genesis. +Ada beberapa klien konsensus (sebelumnya dikenal sebagai klien 'Eth2') untuk mendukung [peningkatan konsensus](/roadmap/beacon-chain/). Mereka bertanggung jawab atas semua logika terkait konsensus termasuk algoritma pilihan fork, memproses pengesahan, dan mengelola hadiah serta penalti [proof-of-stake](/developers/docs/consensus-mechanisms/pos). -- Meminimalkan kepercayaan dan menawarkan keamanan tertinggi dengan memverifikasi setiap transaksi. -- Dengan meningkatnya jumlah transaksi, butuh waktu berhari-hari hingga berminggu-minggu untuk memroses semua transaksi. +| Klien | Bahasa | Sistem operasi | Jaringan | +| ------------------------------------------------------------- | ---------- | --------------------- | --------------------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Hoodi, Pyrmont, Sepolia, dan lainnya | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Hoodi, Sepolia, dan lainnya | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Hoodi, Sepolia, dan lainnya | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Hoodi, Pyrmont, Sepolia, dan lainnya | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Hoodi, Sepolia, dan lainnya | +| [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Hoodi, Sepolia, dan lainnya | -##### Sinkronisasi cepat +### Lighthouse {#lighthouse} -Sinkronisasi cepat mengunduh semua blok (termasuk header, transaksi dan bukti pembayaran), memverifikasi semua header, dan mengunduh state dan memverifikasinya dengan membandingkannya terhadap header. +Lighthouse adalah implementasi klien konsensus yang ditulis dalam Rust di bawah lisensi Apache-2.0. Ini dipelihara oleh Sigma Prime dan telah stabil serta siap produksi sejak genesis Beacon Chain. Ini diandalkan oleh berbagai perusahaan, kolam staking, dan individu. Ini bertujuan untuk menjadi aman, berkinerja, dan dapat dioperasikan di berbagai lingkungan, dari PC desktop hingga penerapan otomatis yang canggih. -- Mengandalkan keamanan mekanisme konsensus. -- Sinkronisasi memakan waktu hanya beberapa jam. +Dokumentasi dapat ditemukan di [Buku Lighthouse](https://lighthouse-book.sigmaprime.io/) -##### Sinkronisasi ringan +### Lodestar {#lodestar} -Mode klien ringan mengunduh semua header blok, data blok, dan memverifikasi beberapa secara acak. Hanya menyinkronkan ujung rantai dari pos pemeriksaan terpercaya. +Lodestar adalah implementasi klien konsensus siap produksi yang ditulis dalam Typescript di bawah lisensi LGPL-3.0. Ini dipelihara oleh ChainSafe Systems dan merupakan klien konsensus terbaru untuk staker solo, pengembang, dan peneliti. Lodestar terdiri dari beacon node dan klien validator yang didukung oleh implementasi JavaScript dari protokol Ethereum. Lodestar bertujuan untuk meningkatkan kegunaan Ethereum dengan klien light, memperluas aksesibilitas ke kelompok pengembang yang lebih besar, dan berkontribusi lebih lanjut pada keragaman ekosistem. -- Hanya mengambil state terbaru saat mengandalkan kepercayaan pada pengembang dan mekanisme konsensus. -- Klien siap dipakai dengan state jaringan saat ini dalam beberapa menit. +Informasi lebih lanjut dapat ditemukan di [situs web Lodestar](https://lodestar.chainsafe.io/) -[Lebih lanjut tentang klien Ringan](https://www.parity.io/blog/what-is-a-light-client/) +### Nimbus {#nimbus} -##### Sinkronisasi snap +Nimbus adalah implementasi klien konsensus yang ditulis dalam Nim di bawah lisensi Apache-2.0. Ini adalah klien siap produksi yang digunakan oleh staker solo dan kolam staking. Nimbus dirancang untuk efisiensi sumber daya, membuatnya mudah dijalankan pada perangkat dengan sumber daya terbatas dan infrastruktur perusahaan dengan kemudahan yang sama, tanpa mengorbankan stabilitas atau kinerja hadiah. Jejak sumber daya yang lebih ringan berarti klien memiliki margin keamanan yang lebih besar saat jaringan berada di bawah tekanan. -Diimplementasikan oleh Geth. Dengan menggunakan foto - foto dinamis yang disediakan oleh para rekan sejawat, ia mengambilkan semua data akun dan penyimpanan tanpa mengunduh node trie menengah dan kemudian menyusun ulang trie Merkle secara lokal. +Pelajari lebih lanjut di [dokumen Nimbus](https://nimbus.guide/) -- Strategi sinkronisasi tercepat yang dikembangkan oleh Geth, yang saat ini adalah versi defaultnya -- Menghemat pemakaian ruangan cakram dan bandwidth jaringan tanpa mengorbankan aspek keamanan. +### Prysm {#prysm} -[Lebih lanjut tentang Snap](https://github.com/ethereum/devp2p/blob/master/caps/snap.md) +Prysm adalah klien konsensus sumber terbuka berfitur lengkap yang ditulis dalam Go di bawah lisensi GPL-3.0. Ini menampilkan UI aplikasi web opsional dan memprioritaskan pengalaman pengguna, dokumentasi, dan konfigurabilitas untuk pengguna stake-at-home dan institusional. -##### Sinkronisasi warp +Kunjungi [dokumen Prysm](https://prysm.offchainlabs.com/docs/) untuk mempelajari lebih lanjut. -Diimplementasikan oleh OpenEthereum. Node secara teratur menghasilkan foto state konsensus yang penting dan rekan sejawat mana pun dapat mengambilkan foto ini di jaringan, yang memungkinkan sinkronisasi cepat dari titik ini. +### Teku {#teku} -- Mode sinkronisasi OpenEthereum yang tercepat dan default mengandalkan foto statis yang disediakan oleh para rekan sejawat. -- Strategi yang mirip dengan sinkronisasi snap, tetapi tanpa manfaat keamanan tertentu. +Teku adalah salah satu klien genesis Beacon Chain asli. Di samping tujuan biasa (keamanan, ketahanan, stabilitas, kegunaan, kinerja), Teku secara khusus bertujuan untuk sepenuhnya mematuhi semua berbagai standar klien konsensus. -[Lebih lanjut tentang Warp](https://openethereum.github.io/Beginner-Introduction#warping---no-warp) +Teku menawarkan opsi penerapan yang sangat fleksibel. Beacon node dan klien validator dapat dijalankan bersama sebagai satu proses, yang sangat nyaman untuk staker solo, atau node dapat dijalankan secara terpisah untuk operasi mengunci yang canggih. Selain itu, Teku sepenuhnya dapat dioperasikan dengan [Web3Signer](https://github.com/ConsenSys/web3signer/) untuk keamanan kunci penandatanganan dan perlindungan pemotongan. -##### Sinkronisasi beam +Teku ditulis dalam Java dan dilisensikan di bawah Apache 2.0. Ini dikembangkan oleh tim Protokol di ConsenSys yang juga bertanggung jawab atas Besu dan Web3Signer. Pelajari lebih lanjut di [dokumen Teku](https://docs.teku.consensys.net/en/latest/). -Diimplementasikan oleh Nethermind dan Trinity. Berfungsi seperti sinkronisasi cepat tetapi juga mengunduh data yang diperlukan untuk mengeksekusi blok terkini, yang memungkinkan Anda membuat query terhadap rantai dalam beberapa menit pertama sejak dimulai. +### Grandine {#grandine} -- Menyinkronkan state terlebih dahulu dan memungkinkan Anda membuat kueri terhadap RPC dalam waktu beberapa menit. -- Masih dalam tahap pengembangan dan belum sepenuhnya bisa diandalkan, sinkronisasi latar belakang diperlambat dan respons RPC mungkin gagal. +Grandine adalah implementasi klien konsensus, yang ditulis dalam Rust di bawah lisensi GPL-3.0. Ini dipelihara oleh Tim Inti Grandine dan cepat, berkinerja tinggi, serta ringan. Ini cocok untuk berbagai staker dari staker solo yang berjalan pada perangkat bersumber daya rendah seperti Raspberry Pi hingga staker institusional besar yang menjalankan puluhan ribu validator. -[Lebih lanjut tentang Beam](https://medium.com/@jason.carver/intro-to-beam-sync-a0fd168be14a) +Dokumentasi dapat ditemukan di [Buku Grandine](https://docs.grandine.io/) -#### Pengaturan di klien {#client-setup} +## Mode sinkronisasi {#sync-modes} -Klien menawarkan opsi konfigurasi yang kaya untuk menyesuaikan dengan kebutuhan Anda. Pilih salah satu yang paling sesuai dengan Anda berdasarkan tingkat keamanan, data yang tersedia, dan biayanya. Selain algoritma sinkronisasi, Anda juga dapat menentukan pemangkasan berbagai jenis data lama. Pemangkasan memungkinkan penghapusan data lama, contohnya menghilangkan node trie state yang tidak dapat dicapai dari blok terkini. +Untuk mengikuti dan memverifikasi data saat ini di jaringan, klien Ethereum perlu menyinkronkan dengan status jaringan terbaru. Ini dilakukan dengan mengunduh data dari rekan, memverifikasi integritasnya secara kriptografi, dan membangun basis data blockchain lokal. -Perhatikan dokumentasi klien atau halaman bantuan untuk menemukan mode sinkronisasi mana yang merupakan opsi defaultnya. Anda dapat menentukan tipe sinkronisasi yang lebih disukai ketika Anda melakukan penyiapan, dalam cara: +Mode sinkronisasi mewakili pendekatan yang berbeda untuk proses ini dengan berbagai pertukaran. Klien juga bervariasi dalam implementasi algoritma sinkronisasi mereka. Selalu merujuk ke dokumentasi resmi dari klien pilihan Anda untuk spesifikasi implementasi. -**Menyiapkan sinkronisasi ringan di [GETH](https://geth.ethereum.org/) atau [ERIGON](https://github.com/ledgerwatch/erigon)** +### Mode sinkronisasi lapisan eksekusi {#execution-layer-sync-modes} -`geth --syncmode "light"` +Lapisan eksekusi dapat dijalankan dalam mode yang berbeda agar sesuai dengan kasus penggunaan yang berbeda, dari mengeksekusi ulang status dunia blockchain hingga hanya menyinkronkan dengan ujung rantai dari pos pemeriksaan tepercaya. -**Menyiapkan sinkronisasi penuh dengan arsip di [Besu](https://besu.hyperledger.org/)** +#### Sinkronisasi penuh {#full-sync} -`besu --sync-mode=FULL` +Sinkronisasi penuh mengunduh semua blok (termasuk header dan badan blok) dan membuat ulang status blockchain secara bertahap dengan mengeksekusi setiap blok dari genesis. -Sama seperti konfigurasi lainnya, ia dapat ditentukan dengan bendera startup atau dalam berkas konfigurasi. Contoh lainnya adalah [Nethermind](https://docs.nethermind.io/) yang mendorong Anda untuk memilih konfigurasi pada saat inisiasi pertama dan membuat berkas konfigurasi. +- Meminimalkan kepercayaan dan menawarkan keamanan tertinggi dengan memverifikasi setiap transaksi. +- Dengan meningkatnya jumlah transaksi, dibutuhkan waktu berhari-hari hingga berminggu-minggu untuk memproses semua transaksi. -## Klien konsensus (sebelumnya klien 'Eth2') {#consensus-clients} +[Archive node](#archive-node) melakukan sinkronisasi penuh untuk membangun (dan mempertahankan) riwayat lengkap perubahan status yang dibuat oleh setiap transaksi di setiap blok. -Ada beberapa klien konsensus (sebelumnya dikenal sebagai klien 'Eth2') untuk mendukung [peningkatan konsensus](/roadmap/beacon-chain/). They are running the Beacon Chain and will provide proof-of-stake consensus mechanism to execution clients after [The Merge](/roadmap/merge/). +#### Sinkronisasi cepat {#fast-sync} -| Klien | Bahasa | Sistem operasi | Jaringan | -| ----------------------------------------------------------- | ---------- | --------------------- | ------------------------------------ | -| [Teku](https://pegasys.tech/teku) | Java | Linux, Windows, macOS | Rantai Suar, Goerli | -| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Rantai Suar, Goerli | -| [Lighthouse](https://lighthouse-book.sigmaprime.io/) | Rust | Linux, Windows, macOS | Rantai Suar, Goerli, Pyrmont | -| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Rantai Suar, Goerli | -| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Rantai Suar, Gnosis, Goerli, Pyrmont | +Seperti sinkronisasi penuh, sinkronisasi cepat mengunduh semua blok (termasuk header, transaksi, dan tanda terima). Namun, alih-alih memproses ulang transaksi historis, sinkronisasi cepat bergantung pada tanda terima hingga mencapai kepala terbaru, ketika ia beralih ke mengimpor dan memproses blok untuk menyediakan full node. -## Perangkat keras {#hardware} +- Strategi fast sync. +- Mengurangi permintaan pemrosesan demi penggunaan bandwidth. -Kebutuhan perangkat keras berbeda untuk tiap klien tapi secara umum tidak terlalu tinggi karena node hanya perlu terus dalam kondisi tersinkronisasi. Jangan merancukannya dengan penambangan yang memerlukan lebih banyak daya komputasi. Akan tetapi, waktu sinkronisasi dan performa memang meningkat dengan perangkat keras yang lebih kuat. Bergantung kebutuhan dan keinginan Anda, Ethereum dapat dijalankan pada komputer, server rumah, komputer papan tunggal, atau server privat virtual di cloud. +#### Snap sync {#snap-sync} -Satu cara mudah untuk menjalankan node Anda sendiri adalah menggunakan kotak 'colokkan dan jalankan' seperti [DAppNode](https://dappnode.io/). Menyediakan perangkat keras untuk menjalankan klien dan apllikasi yang bergantung padanya dengan antar muka pengguna sederhana. +Snap sync juga memverifikasi rantai blok demi blok. Namun, alih-alih memulai dari blok genesis, snap sync dimulai pada pos pemeriksaan 'tepercaya' yang lebih baru yang diketahui menjadi bagian dari blockchain yang sebenarnya. Node menyimpan pos pemeriksaan berkala sambil menghapus data yang lebih lama dari usia tertentu. Snapshot ini digunakan untuk membuat ulang data status sesuai kebutuhan, daripada menyimpannya selamanya. -### Persyaratan {#requirements} +- Strategi sinkronisasi tercepat, saat ini menjadi default di Mainnet Ethereum. +- Menghemat banyak penggunaan disk dan bandwidth jaringan tanpa mengorbankan keamanan. -Sebelum menginstal klien apa pun, pastikan komputer Anda punya sumber daya yang cukup untuk menjalankannya. Persayaratan minimum dan disarankan bisa ditemukan di bawah, akan tetapi bagian kuncinya adalah kapasitas penyimpanan disk. Menyinkronisasikan blockchain Ethereum sangat bergantung banyak pada input/output. Sangat disarankan untuk memiliki satu solid-state drive (SSD). Untuk menjalankan satu klien Ethereum pada HDD, Anda akan membutuhkan paling sedikit 8GB RAM untuk digunakan sebagai cache. +[Lebih lanjut tentang snap sync](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). -#### Persayaratan minimum {#recommended-specifications} +#### Light sync {#light-sync} -- CPU dengan 2+ inti -- RAM dengan ukuran minimum 4GB dengan satu SSD, 8 GB+ jika Anda punya satu HDD -- Bandwidth dengan kecepatan 8 MBit/d +Mode klien light mengunduh semua header blok, data blok, dan memverifikasi beberapa secara acak. Hanya menyinkronkan ujung rantai dari pos pemeriksaan tepercaya. -#### Spesifikasi yang direkomendasikan {#recommended-specifications} +- Hanya mendapatkan status terbaru sambil mengandalkan kepercayaan pada pengembang dan mekanisme konsensus. +- Klien siap digunakan dengan status jaringan saat ini dalam beberapa menit. -- CPU cepat dengan 4+ inti -- RAM berukuran 16 GB+ -- SSD cepat dengan kapasitas penyimpanan paling sedikit 500 GB -- Bandwidth dengan kecepatan 25+ MBit/d +**NB** Light sync belum berfungsi dengan Ethereum proof-of-stake - versi baru dari light sync akan segera dirilis! -Mode sinkronisasi yang Anda pilih akan mempengaruhi persyaratan ukuran ruangan cakram, tapi kami telah memperkirakan ruangan cakram yang akan Anda perlukan untuk setiap klien di bawah ini. +[Lebih lanjut tentang klien light](/developers/docs/nodes-and-clients/light-clients/) -| Klien | Ukuran disk (sinkronisasi cepat) | Ukuran disk (arsip penuh) | -| ------------ | -------------------------------- | ------------------------- | -| Geth | 400GB+ | 6TB+ | -| OpenEthereum | 280GB+ | 6TB+ | -| Nethermind | 200GB+ | 5TB+ | -| Besu | 750GB+ | 5TB+ | -| Erigon | N/A | 1TB+ | +### Mode sinkronisasi lapisan konsensus {#consensus-layer-sync-modes} -- Catatan: Erigon tidak melakukan Sinkronisasi Cepat, tapi Pemangkasan Penuh masih memungkinkan (\~500GB) +#### Optimistic sync {#optimistic-sync} -Bagan ini menunjukkan bagaimana persyaratan kapasitas penyimpanan selalu berubah. Untuk data Geth dan Parity yang paling terbaru, lihat [data sinkronisasi penuh](https://etherscan.io/chartsync/chaindefault) dan [ data sinkronisasi arsip](https://etherscan.io/chartsync/chainarchive). +Optimistic sync adalah strategi sinkronisasi pasca-penggabungan yang dirancang untuk menjadi opt-in dan kompatibel ke belakang, memungkinkan node eksekusi untuk menyinkronkan melalui metode yang sudah mapan. Mesin eksekusi dapat _secara optimis_ mengimpor blok beacon tanpa memverifikasinya sepenuhnya, menemukan kepala terbaru, dan kemudian mulai menyinkronkan rantai dengan metode di atas. Kemudian, setelah klien eksekusi menyusul, ia akan memberi tahu klien konsensus tentang validitas transaksi di Beacon Chain. -### Ethereum pada komputer papan tunggal {#ethereum-on-a-single-board-computer} +[Lebih lanjut tentang optimistic sync](https://github.com/ethereum/consensus-specs/blob/master/sync/optimistic.md) -Cara paling nyaman dan murah untuk menjalankan node Ethereum adalah menggunakan komputer papan tungggal dengan arstitektur ARM seperti Raspberry Pi. [Ethereum di ARM](https://twitter.com/EthereumOnARM) menyediakan gambar dari klien Geth, Parity, Nethermind, dan Besu. Ini adalah tutorial sederhana tentang [bagaimana menyusun dan menyiapkan klien ARM](/developers/tutorials/run-node-raspberry-pi/). +#### Checkpoint sync {#checkpoint-sync} -Perangkat kecil, terjangkau dan efisien seperti ini, ideal untuk menjalankan node di rumah. +Checkpoint sync, juga dikenal sebagai sinkronisasi subjektivitas lemah, menciptakan pengalaman pengguna yang unggul untuk menyinkronkan Beacon Node. Ini didasarkan pada asumsi [subjektivitas lemah](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) yang memungkinkan sinkronisasi Beacon Chain dari pos pemeriksaan subjektivitas lemah baru-baru ini alih-alih genesis. Checkpoint sync membuat waktu sinkronisasi awal secara signifikan lebih cepat dengan asumsi kepercayaan yang serupa dengan sinkronisasi dari [genesis](/glossary/#genesis-block). -## Bacaan lebih lanjut {#further-reading} +Dalam praktiknya, ini berarti node Anda terhubung ke layanan jarak jauh untuk mengunduh status final terbaru dan terus memverifikasi data dari titik tersebut. Pihak ketiga yang menyediakan data dipercaya dan harus dipilih dengan cermat. + +Lebih lanjut tentang [checkpoint sync](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice) -Ada banyak informasi tentang klien Ethereum di internet. Berikut adalah beberapa sumber daya yang mungkin bisa membantu. +## Bacaan lebih lanjut {#further-reading} - [Ethereum 101 - Bagian 2 - Memahami Node](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, 13 Februari 2019_ -- [Menjalankan Node Penuh Ethereum: Panduan bagi Mereka yang Hampir Tidak Termotivasi](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 November 2019_ -- [Menganalisis persyaratan perangkat keras untuk menjadi node tervalidasi penuh Ethereum](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 September 2018_ -- [Menjalankan Node Hyperledger Besu di Jaringan Utama Ethereum: Keuntungan, Persyaratan, dan Penyiapan](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 Mei 2020_ +- [Menjalankan Full Node Ethereum: Panduan untuk yang Kurang Termotivasi](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 November 2019_ ## Topik terkait {#related-topics} @@ -308,4 +316,4 @@ Ada banyak informasi tentang klien Ethereum di internet. Berikut adalah beberapa ## Tutorial terkait {#related-tutorials} -- [Ubah Raspberry Pi 4 Anda menjadi node validator cukup dengan mem-flash kartu MicroSD – Panduan instalasi](/developers/tutorials/run-node-raspberry-pi/) _– Flash Raspberry Pi 4, colokkan kabel ethernet, hubungkan SSD dan nyalakan perangkat untuk mengubah Raspberry Pi 4 menjadi node penuh Ethereum yang menjalankan lapisan eksekusi (Jaringan Utama) dan / atau lapisan konsensus (Rantai Suar / validator)._ +- [Ubah Raspberry Pi 4 Anda menjadi node validator hanya dengan mem-flash kartu MicroSD – Panduan instalasi](/developers/tutorials/run-node-raspberry-pi/) _– Flash Raspberry Pi 4 Anda, colokkan kabel ethernet, sambungkan disk SSD, dan nyalakan perangkat untuk mengubah Raspberry Pi 4 menjadi full node Ethereum yang menjalankan lapisan eksekusi (Mainnet) dan / atau lapisan konsensus (Beacon Chain / validator)._ \ No newline at end of file diff --git a/public/content/translations/id/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/id/developers/docs/nodes-and-clients/node-architecture/index.md index d23846dcd62..807c4a00c49 100644 --- a/public/content/translations/id/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/id/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: id Sebuah node Ethereum terdiri dari dua klien: [klien eksekusi](/developers/docs/nodes-and-clients/#execution-clients) dan [klien konsensus](/developers/docs/nodes-and-clients/#consensus-clients). Agar sebuah node dapat mengusulkan blok baru, node tersebut juga harus menjalankan [klien validator](#validators). -Ketika Ethereum menggunakan [proof-of-work](/developers/docs/consensus-mechanisms/pow/), klien eksekusi sudah cukup untuk menjalankan node Ethereum penuh. Namun, sejak menerapkan [proof-of-stake](/developers/docs/consensus-mechanisms/pow/), klien eksekusi harus digunakan bersama dengan perangkat lunak lain yang disebut [klien konsensus](/developers/docs/nodes-and-clients/#consensus-clients). +Ketika Ethereum menggunakan [proof-of-work](/developers/docs/consensus-mechanisms/pow/), klien eksekusi sudah cukup untuk menjalankan node Ethereum penuh. Namun, sejak menerapkan [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), klien eksekusi harus digunakan bersama dengan perangkat lunak lain yang disebut [klien konsensus](/developers/docs/nodes-and-clients/#consensus-clients). Diagram di bawah ini menunjukkan hubungan antara kedua klien Ethereum. Kedua klien terhubung ke jaringan peer-to-peer (P2P) masing-masing. Jaringan P2P yang terpisah diperlukan karena klien eksekusi menyebarkan (gossip) transaksi melalui jaringan P2P mereka, memungkinkan mereka untuk mengelola kumpulan transaksi lokal mereka, sementara klien konsensus menyebarkan blok melalui jaringan P2P mereka, memungkinkan konsensus dan pertumbuhan rantai. diff --git a/public/content/translations/id/roadmap/glamsterdam/index.md b/public/content/translations/id/roadmap/glamsterdam/index.md index 5198cc2eccb..6506e536668 100644 --- a/public/content/translations/id/roadmap/glamsterdam/index.md +++ b/public/content/translations/id/roadmap/glamsterdam/index.md @@ -9,7 +9,7 @@ lang: id -Glamsterdam adalah peningkatan Ethereum yang akan datang yang direncanakan untuk H1 2026 +Glamsterdam adalah peningkatan Ethereum mendatang yang direncanakan untuk Semester 1 2026 Peningkatan Glamsterdam hanyalah satu langkah dalam tujuan pengembangan jangka panjang Ethereum. Pelajari lebih lanjut tentang [peta jalan protokol](/roadmap/) dan [peningkatan sebelumnya](/ethereum-forks/). @@ -17,13 +17,13 @@ Peningkatan Glamsterdam hanyalah satu langkah dalam tujuan pengembangan jangka p -Peningkatan Glamsterdam [Ethereum](/) yang akan datang dirancang untuk membuka jalan bagi generasi peningkatan berikutnya. Glamsterdam dinamai dari kombinasi "Amsterdam" (peningkatan lapisan eksekusi, dinamai berdasarkan lokasi Devconnect sebelumnya) dan "Gloas" (peningkatan lapisan konsensus, dinamai berdasarkan nama bintang). +Peningkatan Glamsterdam [Ethereum](/) yang akan datang dirancang untuk membuka jalan bagi generasi peningkatan skala berikutnya. Glamsterdam dinamai dari kombinasi "Amsterdam" (peningkatan lapisan eksekusi, dinamai dari lokasi Devconnect sebelumnya) dan "Gloas" (peningkatan lapisan konsensus, dinamai dari sebuah bintang). -Mengikuti kemajuan yang dibuat dalam peningkatan [Fusaka](/roadmap/fusaka/), Glamsterdam berfokus pada peningkatan L1 dengan mengatur ulang bagaimana jaringan memproses transaksi dan mengelola basis data yang berkembang, yang secara fundamental memperbarui cara Ethereum membuat dan memverifikasi blok. +Mengikuti kemajuan yang dicapai dalam peningkatan [Fusaka](/roadmap/fusaka/), Glamsterdam berfokus pada peningkatan skala L1 dengan mengatur ulang cara jaringan memproses transaksi dan mengelola basis datanya yang terus berkembang, secara mendasar memperbarui cara Ethereum membuat dan memverifikasi blok. -Sementara Fusaka berfokus pada penyempurnaan mendasar, Glamsterdam memajukan tujuan "Peningkatan L1" dan "Peningkatan Blob" dengan mengabadikan pemisahan tugas antara berbagai peserta jaringan, dan memperkenalkan cara yang lebih efisien untuk menangani data untuk mempersiapkan [status](/glossary/#state) untuk paralelisasi throughput tinggi. +Sementara Fusaka berfokus pada penyempurnaan dasar, Glamsterdam memajukan tujuan "Tingkatkan Skala L1" dan "Tingkatkan Skala Blob" dengan mengabadikan pemisahan tugas di antara berbagai peserta jaringan, dan memperkenalkan cara yang lebih efisien untuk menangani data guna mempersiapkan [status](/glossary/#state) untuk paralelisasi throughput tinggi. -Peningkatan ini memastikan Ethereum tetap cepat, terjangkau, dan terdesentralisasi karena menangani lebih banyak aktivitas, sambil menjaga persyaratan perangkat keras tetap dapat dikelola bagi orang-orang yang menjalankan [node](/glossary/#node) di rumah. +Peningkatan ini memastikan Ethereum tetap cepat, terjangkau, dan terdesentralisasi saat menangani lebih banyak aktivitas, sambil menjaga persyaratan perangkat keras tetap dapat dikelola bagi orang-orang yang menjalankan [node](/glossary/#node) di rumah. @@ -41,59 +41,59 @@ Jika Anda ingin menambahkan EIP yang sedang dipertimbangkan untuk Glamsterdam, t Peningkatan Glamsterdam berpusat pada tiga tujuan utama: -- Mempercepat pemrosesan (paralelisasi): Mengatur ulang cara jaringan mencatat dependensi data, sehingga dapat memproses banyak transaksi secara aman pada saat yang sama, bukan dalam urutan satu per satu yang lambat. -- Memperluas kapasitas: Membagi pekerjaan berat dalam membuat dan memverifikasi blok, memberikan jaringan lebih banyak waktu untuk menyebarkan data dalam jumlah yang lebih besar tanpa melambat. -- Mencegah pembengkakan basis data (keberlanjutan): Menyesuaikan biaya jaringan agar secara akurat mencerminkan biaya perangkat keras jangka panjang untuk menyimpan data baru, membuka blokir peningkatan batas gas di masa depan sambil mencegah penurunan kinerja perangkat keras. +- Mempercepat pemrosesan (paralelisasi): Mengatur ulang cara jaringan mencatat dependensi data, sehingga dapat memproses banyak transaksi secara bersamaan dengan aman alih-alih dalam urutan satu per satu yang lambat. +- Memperluas kapasitas: Membagi tugas berat dalam membuat dan memverifikasi blok, memberi jaringan lebih banyak waktu untuk menyebarkan jumlah data yang lebih besar tanpa melambat. +- Mencegah pembengkakan basis data (keberlanjutan): Menyesuaikan biaya jaringan untuk secara akurat mencerminkan biaya perangkat keras jangka panjang dari penyimpanan data baru, membuka blokir peningkatan batas gas di masa mendatang sambil mencegah penurunan kinerja perangkat keras. Singkatnya, Glamsterdam akan memperkenalkan perubahan struktural untuk memastikan bahwa seiring dengan peningkatan kapasitas jaringan, jaringan tersebut tetap berkelanjutan dan kinerjanya tetap tinggi. -## Peningkatan L1 & pemrosesan paralel {#scale-l1} +## Tingkatkan skala L1 & pemrosesan paralel {#scale-l1} -Peningkatan L1 yang berarti memerlukan perpindahan dari asumsi kepercayaan di luar protokol dan batasan eksekusi serial. Glamsterdam mengatasi hal ini dengan mengabadikan pemisahan tugas-tugas pembangunan blok tertentu dan memperkenalkan struktur data baru yang memungkinkan jaringan untuk mempersiapkan pemrosesan paralel. +Peningkatan skala L1 yang bermakna membutuhkan peralihan dari asumsi kepercayaan di luar protokol dan batasan eksekusi serial. Glamsterdam mengatasi hal ini dengan mengabadikan pemisahan tugas pembuatan blok tertentu dan memperkenalkan struktur data baru yang memungkinkan jaringan bersiap untuk pemrosesan paralel. -### Proposal utama: Pemisahan Pengusul-Pembangun yang Diabadikan (ePBS) {#epbs} +### Proposal utama: Enshrined Proposer-Builder Separation (ePBS) {#epbs} - Menghapus asumsi kepercayaan di luar protokol dan ketergantungan pada relai pihak ketiga -- Mendukung peningkatan L1 dengan mengizinkan muatan yang jauh lebih besar melalui jendela propagasi yang diperluas -- Memperkenalkan pembayaran pembangun tanpa kepercayaan langsung ke dalam protokol +- Mendukung peningkatan skala L1 dengan memungkinkan payload yang jauh lebih besar melalui jendela propagasi yang diperpanjang +- Memperkenalkan pembayaran pembangun tanpa kepercayaan (trustless) langsung ke dalam protokol -Saat ini, proses mengusulkan dan membangun blok mencakup serah terima antara pengusul blok dan pembangun blok. Hubungan antara pengusul dan pembangun bukanlah bagian dari protokol inti Ethereum, sehingga bergantung pada middleware pihak ketiga yang tepercaya, perangkat lunak (relai), dan kepercayaan di luar protokol antar entitas. +Saat ini, proses pengusulan dan pembuatan blok mencakup penyerahan antara pengusul blok dan pembangun blok. Hubungan antara pengusul dan pembangun bukanlah bagian dari protokol inti Ethereum, sehingga bergantung pada middleware pihak ketiga tepercaya, perangkat lunak (relai), dan kepercayaan di luar protokol antar entitas. -Hubungan di luar protokol antara pengusul dan pembangun juga menciptakan "jalur panas" selama validasi blok yang memaksa [validator](/glossary/#validator) untuk bergegas melalui siaran dan eksekusi transaksi dalam jendela 2 detik yang ketat, membatasi berapa banyak data yang dapat ditangani oleh jaringan. +Hubungan di luar protokol antara pengusul dan pembangun juga menciptakan "jalur panas" selama validasi blok yang memaksa [validator](/glossary/#validator) untuk bergegas melalui penyiaran dan eksekusi transaksi dalam jendela 2 detik yang ketat, membatasi seberapa banyak data yang dapat ditangani jaringan. -**Pemisahan Pengusul-Pembangun yang Diabadikan (ePBS, atau EIP-7732)** secara formal memisahkan pekerjaan pengusul (yang memilih blok konsensus) dari pembangun (yang merakit muatan eksekusi), mengabadikan serah terima ini langsung ke dalam protokol. +**Enshrined Proposer-Builder Separation (ePBS, atau EIP-7732)** secara formal memisahkan pekerjaan pengusul (yang memilih blok konsensus) dari pembangun (yang merakit payload eksekusi), mengabadikan penyerahan ini langsung ke dalam protokol. -Membangun pertukaran tanpa kepercayaan dari muatan blok untuk pembayaran langsung ke dalam protokol menghilangkan kebutuhan akan middleware pihak ketiga (seperti MEV-Boost). Namun, pembangun dan pengusul mungkin masih memilih untuk menggunakan relai atau middleware di luar protokol untuk fitur-fitur kompleks yang belum menjadi bagian dari protokol inti. +Membangun pertukaran payload blok tanpa kepercayaan untuk pembayaran langsung ke dalam protokol menghilangkan kebutuhan akan middleware pihak ketiga (seperti MEV-Boost). Namun, pembangun dan pengusul mungkin masih memilih untuk menggunakan relai atau middleware di luar protokol untuk fitur kompleks yang belum menjadi bagian dari protokol inti. -Untuk mengatasi kemacetan "jalur panas", ePBS juga memperkenalkan Komite Ketepatan Waktu Muatan (PTC) dan logika tenggat waktu ganda, yang memungkinkan validator untuk mengesahkan blok konsensus dan ketepatan waktu muatan eksekusi secara terpisah untuk memaksimalkan keluaran. +Untuk mengatasi hambatan "jalur panas", ePBS juga memperkenalkan Payload Timeliness Committee (PTC) dan logika tenggat waktu ganda, yang memungkinkan validator untuk mengesahkan blok konsensus dan ketepatan waktu payload eksekusi secara terpisah untuk memaksimalkan throughput. -Memisahkan peran pengusul dan pembangun pada tingkat protokol memperluas jendela propagasi (atau waktu yang tersedia untuk menyebarkan data ke seluruh jaringan) dari 2 detik menjadi sekitar 9 detik. +Memisahkan peran pengusul dan pembangun di tingkat protokol memperluas jendela propagasi (atau waktu yang tersedia untuk menyebarkan data ke seluruh jaringan) dari 2 detik menjadi sekitar 9 detik. -Dengan mengganti middleware dan relai di luar protokol dengan mekanik dalam protokol, ePBS mengurangi ketergantungan kepercayaan dan memungkinkan Ethereum untuk memproses data dalam jumlah yang jauh lebih besar secara aman (seperti lebih banyak blob untuk [layer 2](/glossary/#layer-2)) tanpa membebani jaringan. +Dengan mengganti middleware dan relai di luar protokol dengan mekanika di dalam protokol, ePBS mengurangi ketergantungan kepercayaan dan memungkinkan Ethereum untuk memproses jumlah data yang jauh lebih besar dengan aman (seperti lebih banyak blob untuk [layer 2](/glossary/#layer-2)) tanpa membebani jaringan. -**Sumber Daya**: [Spesifikasi teknis EIP-7732](https://eips.ethereum.org/EIPS/eip-7732) +**Sumber daya**: [Spesifikasi teknis EIP-7732](https://eips.ethereum.org/EIPS/eip-7732) -### Proposal utama: Daftar Akses Tingkat Blok (BALs) {#bals} +### Proposal utama: Block-Level Access Lists (BALs) {#bals} -- Menghilangkan kemacetan pemrosesan berurutan dengan menyediakan peta awal dari semua dependensi transaksi, mempersiapkan panggung bagi validator untuk memproses banyak transaksi secara paralel alih-alih satu per satu +- Menghilangkan hambatan pemrosesan berurutan dengan menyediakan peta awal dari semua dependensi transaksi, menyiapkan panggung bagi validator untuk memproses banyak transaksi secara paralel alih-alih satu per satu - Memungkinkan node untuk memperbarui catatan mereka dengan membaca hasil akhir tanpa perlu memutar ulang setiap transaksi (sinkronisasi tanpa eksekusi), membuatnya jauh lebih cepat untuk menyinkronkan node ke jaringan -- Menghilangkan tebakan, memungkinkan validator untuk memuat semua data yang diperlukan sekaligus alih-alih menemukannya langkah demi langkah, yang membuat validasi menjadi lebih cepat +- Menghilangkan tebakan, memungkinkan validator untuk memuat semua data yang diperlukan sekaligus alih-alih menemukannya selangkah demi selangkah, yang membuat validasi jauh lebih cepat -Ethereum saat ini seperti jalan satu lajur; karena jaringan tidak tahu data apa yang akan dibutuhkan atau diubah oleh suatu transaksi (seperti akun mana yang akan disentuh oleh suatu transaksi) hingga transaksi tersebut dijalankan, validator harus memproses transaksi satu per satu dalam baris yang ketat dan berurutan. Jika mereka mencoba memproses transaksi sekaligus, tanpa mengetahui dependensi ini, dua transaksi mungkin secara tidak sengaja mencoba mengubah data yang sama persis pada saat yang sama, menyebabkan kesalahan. +Ethereum saat ini seperti jalan satu jalur; karena jaringan tidak tahu data apa yang akan dibutuhkan atau diubah oleh transaksi (seperti akun mana yang akan disentuh transaksi) sampai transaksi dijalankan, validator harus memproses transaksi satu per satu dalam garis berurutan yang ketat. Jika mereka mencoba memproses transaksi sekaligus, tanpa mengetahui dependensi ini, dua transaksi mungkin secara tidak sengaja mencoba mengubah data yang sama persis pada saat yang sama, menyebabkan kesalahan. -**Daftar Akses Tingkat Blok (BALs, atau EIP-7928)** seperti peta yang disertakan di setiap blok, memberitahu jaringan bagian mana dari basis data yang akan diakses sebelum pekerjaan dimulai. BAL memerlukan setiap blok untuk menyertakan hash dari setiap perubahan akun yang akan disentuh oleh transaksi, bersama dengan hasil akhir dari perubahan tersebut (catatan hash dari semua akses status dan nilai pasca-eksekusi). +**Block-Level Access Lists (BALs, atau EIP-7928)** seperti peta yang disertakan dalam setiap blok, memberi tahu jaringan bagian mana dari basis data yang akan diakses sebelum pekerjaan dimulai. BALs mengharuskan setiap blok untuk menyertakan hash dari setiap perubahan akun yang akan disentuh transaksi, bersama dengan hasil akhir dari perubahan tersebut (catatan hash dari semua akses status dan nilai pasca-eksekusi). -Karena memberikan visibilitas instan ke transaksi mana yang tidak tumpang tindih, BAL memungkinkan node untuk melakukan pembacaan disk secara paralel, mengambil informasi untuk banyak transaksi secara bersamaan. Jaringan dapat dengan aman mengelompokkan transaksi yang tidak terkait dan memprosesnya secara paralel. +Karena mereka memberikan visibilitas instan ke transaksi mana yang tidak tumpang tindih, BALs memungkinkan node untuk melakukan pembacaan disk paralel, mengambil informasi untuk banyak transaksi secara bersamaan. Jaringan dapat dengan aman mengelompokkan transaksi yang tidak terkait dan memprosesnya secara paralel. -Karena BAL menyertakan hasil akhir transaksi (nilai pasca-eksekusi), ketika node jaringan perlu menyinkronkan ke status jaringan saat ini, mereka dapat menyalin hasil akhir tersebut untuk memperbarui catatan mereka. Validator tidak perlu lagi memutar ulang semua transaksi yang rumit dari awal untuk mengetahui apa yang terjadi, sehingga lebih cepat dan lebih mudah bagi node baru untuk bergabung dengan jaringan. +Karena BAL menyertakan hasil akhir transaksi (nilai pasca-eksekusi), ketika node jaringan perlu menyinkronkan ke status jaringan saat ini, mereka dapat menyalin hasil akhir tersebut untuk memperbarui catatan mereka. Validator tidak perlu lagi memutar ulang semua transaksi rumit dari awal untuk mengetahui apa yang terjadi, membuatnya lebih cepat dan lebih mudah bagi node baru untuk bergabung dengan jaringan. -Pembacaan disk secara paralel yang dimungkinkan oleh BAL akan menjadi langkah signifikan menuju masa depan di mana Ethereum dapat memproses banyak transaksi sekaligus, secara signifikan meningkatkan kecepatan jaringan. +Pembacaan disk paralel yang diaktifkan oleh BALs akan menjadi langkah signifikan menuju masa depan di mana Ethereum dapat memproses banyak transaksi sekaligus, secara signifikan meningkatkan kecepatan jaringan. -#### Pertukaran Daftar Akses Blok eth/71 {#bale} +#### eth/71 Block Access List Exchange {#bale} -Pertukaran Daftar Akses Blok (eth/71 atau EIP-8159) adalah pendamping jaringan langsung untuk daftar akses tingkat blok. Sementara BAL membuka eksekusi paralel, eth/71 meningkatkan protokol peer-to-peer untuk memungkinkan node benar-benar berbagi daftar ini melalui jaringan. Mengimplementasikan pertukaran daftar akses blok akan memungkinkan sinkronisasi yang lebih cepat dan memungkinkan node untuk melakukan pembaruan status tanpa eksekusi. +Block Access List Exchange (eth/71 atau EIP-8159) adalah pendamping jaringan langsung untuk daftar akses tingkat blok. Sementara BALs membuka kunci eksekusi paralel, eth/71 meningkatkan protokol peer-to-peer untuk memungkinkan node benar-benar membagikan daftar ini melalui jaringan. Menerapkan pertukaran daftar akses blok akan memungkinkan sinkronisasi yang lebih cepat dan memungkinkan node untuk melakukan pembaruan status tanpa eksekusi. **Sumber daya**: @@ -102,197 +102,197 @@ Pertukaran Daftar Akses Blok (eth/71 atau EIP-8159) adalah pendamping jaringan l ## Keberlanjutan jaringan {#network-sustainability} -Seiring pertumbuhan jaringan Ethereum yang lebih cepat, penting untuk memastikan bahwa biaya penggunaannya sesuai dengan keausan pada perangkat keras yang menjalankan Ethereum. Jaringan perlu meningkatkan batas kapasitas keseluruhannya agar dapat melakukan peningkatan dan memproses lebih banyak transaksi dengan aman. +Seiring pertumbuhan jaringan Ethereum yang lebih cepat, penting untuk memastikan bahwa biaya penggunaannya sesuai dengan keausan pada perangkat keras yang menjalankan Ethereum. Jaringan perlu meningkatkan batas kapasitas keseluruhannya agar dapat meningkatkan skala dengan aman dan memproses lebih banyak transaksi. ### Peningkatan biaya gas pembuatan status {#state-creation-gas-cost-increase} -- Memastikan bahwa biaya untuk membuat akun atau kontrak pintar baru secara akurat mencerminkan beban jangka panjang yang mereka bebankan pada basis data Ethereum -- Secara otomatis menyesuaikan biaya pembuatan data ini berdasarkan kapasitas jaringan secara keseluruhan, menargetkan tingkat pertumbuhan yang aman dan dapat diprediksi sehingga perangkat keras fisik standar dapat terus menjalankan jaringan -- Memisahkan akuntansi untuk biaya spesifik ini ke reservoir baru, menghapus batas transaksi lama dan memungkinkan pengembang untuk menyebarkan aplikasi yang lebih besar dan lebih kompleks +- Memastikan bahwa biaya untuk membuat akun baru atau kontrak pintar secara akurat mencerminkan beban jangka panjang yang mereka tempatkan pada basis data Ethereum +- Secara otomatis menyesuaikan biaya pembuatan data ini berdasarkan kapasitas keseluruhan jaringan, menargetkan tingkat pertumbuhan yang aman dan dapat diprediksi sehingga perangkat keras fisik standar dapat terus menjalankan jaringan +- Memisahkan akuntansi untuk biaya spesifik ini ke reservoir baru, menghapus batas transaksi lama dan memungkinkan pengembang untuk menerapkan aplikasi yang lebih besar dan lebih kompleks -Menambahkan akun baru, token, dan [kontrak pintar](/glossary/#smart-contract) menciptakan data permanen (dikenal sebagai "status") yang harus disimpan tanpa batas oleh setiap komputer yang menjalankan jaringan. Biaya saat ini untuk menambah atau membaca data ini tidak konsisten dan tidak selalu mencerminkan beban penyimpanan jangka panjang yang sebenarnya mereka bebankan pada perangkat keras jaringan. +Menambahkan akun, token, dan [kontrak pintar](/glossary/#smart-contract) baru menciptakan data permanen (dikenal sebagai "status") yang harus disimpan tanpa batas waktu oleh setiap komputer yang menjalankan jaringan. Biaya saat ini untuk menambahkan atau membaca data ini tidak konsisten dan belum tentu mencerminkan beban penyimpanan jangka panjang yang sebenarnya yang mereka tempatkan pada perangkat keras jaringan. -Beberapa tindakan yang menciptakan status di Ethereum, seperti membuat akun baru atau menyebarkan kontrak pintar besar, biayanya relatif rendah dibandingkan dengan ruang penyimpanan permanen yang mereka gunakan di node jaringan, misalnya, penyebaran kontrak jauh lebih murah per bita daripada membuat ruang penyimpanan. +Beberapa tindakan yang menciptakan status di Ethereum, seperti membuat akun baru atau menerapkan kontrak pintar yang besar, memiliki biaya yang relatif rendah dibandingkan dengan ruang penyimpanan permanen yang mereka gunakan pada node jaringan, misalnya, penerapan kontrak secara signifikan lebih murah per byte daripada membuat slot penyimpanan. -Tanpa penyesuaian, status Ethereum dapat tumbuh hampir 200 GiB per tahun jika jaringan melakukan peningkatan hingga batas gas 100 Juta, yang pada akhirnya akan melampaui perangkat keras biasa. +Tanpa penyesuaian, status Ethereum dapat tumbuh hampir 200 GiB setahun jika jaringan ditingkatkan ke batas gas 100M, yang pada akhirnya melampaui perangkat keras umum. -**Peningkatan biaya gas pembuatan status (atau EIP-8037)** menyelaraskan biaya dengan mengikatnya pada ukuran sebenarnya dari data yang dibuat, memperbarui biaya sehingga sebanding dengan jumlah data permanen yang dibuat atau diakses oleh suatu operasi. +**Peningkatan biaya gas pembuatan status (atau EIP-8037)** menyelaraskan biaya dengan mengaitkannya pada ukuran sebenarnya dari data yang dibuat, memperbarui biaya sehingga proporsional dengan jumlah data permanen yang dibuat atau diakses oleh suatu operasi. -EIP-8037 juga memperkenalkan model reservoir untuk mengelola biaya ini secara lebih dapat diprediksi; biaya gas status mengambil dari `state_gas_reservoir` terlebih dahulu, dan opcode `GAS` hanya mengembalikan `gas_left`, mencegah frame eksekusi salah menghitung gas yang tersedia. +EIP-8037 juga memperkenalkan model reservoir untuk mengelola biaya ini dengan lebih dapat diprediksi; biaya gas status ditarik dari `state_gas_reservoir` terlebih dahulu, dan opcode `GAS` hanya mengembalikan `gas_left`, mencegah bingkai eksekusi salah menghitung gas yang tersedia. -Sebelum EIP-8037, baik pekerjaan komputasi (pemrosesan aktif) maupun penyimpanan data permanen (menyimpan kontrak pintar ke basis data jaringan) berbagi batas gas yang sama. Model reservoir membagi akuntansi: batas gas untuk pekerjaan komputasi aktual transaksi (pemrosesan) dan untuk penyimpanan data jangka panjang (gas status). Memisahkan keduanya membantu mencegah ukuran data aplikasi yang besar melampaui batas gas; selama pengembang menyediakan dana yang cukup untuk mengisi reservoir untuk penyimpanan data, mereka dapat menyebarkan kontrak pintar yang jauh lebih besar dan lebih kompleks. +Sebelum EIP-8037, baik pekerjaan komputasi (pemrosesan aktif) maupun penyimpanan data permanen (menyimpan kontrak pintar ke basis data jaringan) berbagi batas gas yang sama. Model reservoir membagi akuntansi: batas gas untuk pekerjaan komputasi aktual dari transaksi (pemrosesan) dan untuk penyimpanan data jangka panjang (gas status). Memisahkan keduanya membantu mencegah ukuran data aplikasi yang sangat besar dari membatasi batas gas; selama pengembang menyediakan dana yang cukup untuk mengisi reservoir untuk penyimpanan data, mereka dapat menerapkan kontrak pintar yang jauh lebih besar dan lebih kompleks. -Penetapan harga penyimpanan data yang lebih akurat dan dapat diprediksi akan membantu Ethereum meningkatkan kecepatan dan kapasitasnya dengan aman tanpa membuat basis data membengkak. Keberlanjutan ini akan memungkinkan operator node untuk terus menggunakan perangkat keras yang (relatif) terjangkau untuk tahun-tahun mendatang, menjaga agar mengunci dari rumah tetap dapat diakses untuk mempertahankan desentralisasi jaringan. +Menetapkan harga penyimpanan data dengan lebih akurat dan dapat diprediksi akan membantu Ethereum meningkatkan kecepatan dan kapasitasnya dengan aman tanpa membengkakkan basis data. Keberlanjutan ini akan memungkinkan operator node untuk terus menggunakan perangkat keras yang (relatif) terjangkau selama bertahun-tahun yang akan datang, menjaga mengunci di rumah tetap dapat diakses untuk mempertahankan desentralisasi jaringan. -**Sumber Daya**: [Spesifikasi teknis EIP-8037](https://eips.ethereum.org/EIPS/eip-8037) +**Sumber daya**: [Spesifikasi teknis EIP-8037](https://eips.ethereum.org/EIPS/eip-8037) -### Pembaruan biaya gas akses-status {#state-access-gas-cost-update} +### Pembaruan biaya gas akses status {#state-access-gas-cost-update} -- Meningkatkan biaya gas saat aplikasi membaca atau memperbarui informasi yang disimpan secara permanen di Ethereum (opcode akses-status) agar sesuai dengan pekerjaan komputasi yang dibutuhkan oleh perintah ini -- Memperkuat ketahanan jaringan dengan mencegah serangan penolakan layanan yang mengeksploitasi operasi pembacaan data yang murah secara artifisial +- Meningkatkan biaya gas ketika aplikasi membaca atau memperbarui informasi yang disimpan secara permanen di Ethereum (opcode akses status) agar secara akurat sesuai dengan pekerjaan komputasi yang dibutuhkan perintah ini +- Memperkuat ketahanan jaringan dengan mencegah serangan penolakan layanan (denial-of-service) yang mengeksploitasi operasi pembacaan data yang secara artifisial murah -Seiring pertumbuhan status Ethereum, tindakan mencari dan membaca data lama ("akses status") menjadi lebih berat dan lebih lambat untuk diproses oleh node. Biaya untuk tindakan ini tetap sama meskipun sekarang sedikit lebih mahal untuk mencari informasi (dalam hal daya komputasi). +Seiring dengan pertumbuhan status Ethereum, tindakan mencari dan membaca data lama ("akses status") menjadi lebih berat dan lebih lambat untuk diproses oleh node. Biaya untuk tindakan ini tetap sama meskipun sekarang sedikit lebih mahal untuk mencari informasi (dalam hal daya komputasi). -Akibatnya, beberapa perintah spesifik saat ini harganya terlalu rendah dibandingkan dengan pekerjaan yang dipaksakan pada sebuah node. `EXTCODESIZE` dan `EXTCODECOPY` dihargai terlalu rendah, misalnya, karena mereka memerlukan dua pembacaan basis data terpisah—satu untuk objek akun, dan yang kedua untuk ukuran kode atau kode bita yang sebenarnya. +Akibatnya, beberapa perintah spesifik saat ini dihargai terlalu rendah relatif terhadap pekerjaan yang mereka paksakan untuk dilakukan oleh node. `EXTCODESIZE` dan `EXTCODECOPY` dihargai terlalu rendah, misalnya, karena mereka membutuhkan dua pembacaan basis data yang terpisah—satu untuk objek akun, dan yang kedua untuk ukuran kode aktual atau bytecode. -**Pembaruan biaya gas akses-status (atau EIP-8038)** meningkatkan konstanta gas untuk opcode akses-status, seperti mencari data akun dan kontrak, untuk menyelaraskan dengan kinerja perangkat keras modern dan ukuran status. +**Pembaruan biaya gas akses status (atau EIP-8038)** meningkatkan konstanta gas untuk opcode akses status, seperti mencari data akun dan kontrak, untuk menyelaraskan dengan kinerja perangkat keras modern dan ukuran status. -Menyelaraskan biaya akses-status juga membantu membuat Ethereum lebih tangguh. Karena tindakan pembacaan data yang berat ini murah secara artifisial, penyerang jahat dapat melakukan spam pada jaringan dengan ribuan permintaan data yang kompleks dalam satu blok sebelum mencapai batas biaya jaringan, yang berpotensi menyebabkan jaringan macet atau mogok (serangan penolakan layanan). Bahkan tanpa niat jahat, pengembang tidak didorong secara ekonomi untuk membangun aplikasi yang efisien jika membaca data jaringan terlalu murah. +Menyelaraskan biaya akses status juga membantu membuat Ethereum lebih tangguh. Karena tindakan pembacaan data yang berat ini secara artifisial murah, penyerang jahat dapat mengirim spam ke jaringan dengan ribuan permintaan data kompleks dalam satu blok sebelum mencapai batas biaya jaringan, yang berpotensi menyebabkan jaringan terhenti atau macet (serangan penolakan layanan). Bahkan tanpa niat jahat, pengembang tidak didorong secara ekonomi untuk membangun aplikasi yang efisien jika membaca data jaringan terlalu murah. -Dengan memberi harga tindakan akses-status secara lebih akurat, Ethereum dapat menjadi lebih tangguh terhadap perlambatan yang tidak disengaja atau disengaja, sementara menyelaraskan biaya jaringan dengan beban perangkat keras membuktikan fondasi yang lebih berkelanjutan untuk peningkatan batas gas di masa mendatang. +Dengan menetapkan harga tindakan akses status secara lebih akurat, Ethereum dapat menjadi lebih tangguh terhadap perlambatan yang tidak disengaja atau disengaja, sementara menyelaraskan biaya jaringan dengan beban perangkat keras membuktikan fondasi yang lebih berkelanjutan untuk peningkatan batas gas di masa mendatang. -**Sumber Daya**: [Spesifikasi teknis EIP-8038](https://eips.ethereum.org/EIPS/eip-8038) +**Sumber daya**: [Spesifikasi teknis EIP-8038](https://eips.ethereum.org/EIPS/eip-8038) ## Ketahanan jaringan -Penyempurnaan tugas validator dan proses keluar memastikan stabilitas jaringan selama peristiwa pemotongan massal dan mendemokratisasi likuiditas. Peningkatan ini membuat jaringan lebih stabil dan memastikan bahwa semua peserta, besar dan kecil, diperlakukan secara adil. +Penyempurnaan pada tugas validator dan proses keluar memastikan stabilitas jaringan selama peristiwa pemotongan massal dan mendemokratisasi likuiditas. Peningkatan ini membuat jaringan lebih stabil dan memastikan bahwa semua peserta, besar dan kecil, diperlakukan secara adil. ### Kecualikan validator yang dipotong dari pengusulan {#exclude-slashed-validators} -- Menghentikan validator yang dikenai sanksi (dipotong) agar tidak dipilih untuk mengusulkan blok di masa depan, menghilangkan slot yang terlewatkan yang dijamin -- Menjaga Ethereum berjalan dengan lancar dan andal, mencegah kemacetan parah dalam kasus peristiwa pemotongan massal +- Menghentikan validator yang dihukum (dipotong) agar tidak dipilih untuk mengusulkan blok di masa mendatang, menghilangkan jaminan slot yang terlewat +- Menjaga Ethereum berjalan lancar dan dapat diandalkan, mencegah kemacetan parah jika terjadi peristiwa pemotongan massal -Saat ini, bahkan jika validator dipotong (dikenai sanksi karena melanggar aturan atau tidak beroperasi seperti yang diharapkan), sistem mungkin masih memilih mereka untuk memimpin blok dalam waktu dekat ketika menghasilkan tinjauan pengusul di masa depan. +Saat ini, bahkan jika validator dipotong (dihukum karena melanggar aturan atau tidak beroperasi seperti yang diharapkan), sistem mungkin masih memilih mereka untuk memimpin blok dalam waktu dekat ketika menghasilkan pandangan ke depan pengusul di masa mendatang. -Karena blok dari pengusul yang dipotong secara otomatis ditolak sebagai tidak valid, ini menyebabkan jaringan kehilangan slot dan menunda pemulihan jaringan selama peristiwa pemotongan massal. +Karena blok dari pengusul yang dipotong secara otomatis ditolak sebagai tidak valid, hal ini menyebabkan jaringan melewatkan slot dan menunda pemulihan jaringan selama peristiwa pemotongan massal. -**Kecualikan validator yang dipotong dari pengusulan (atau EIP-8045)** hanya menyaring validator yang dipotong agar tidak dipilih untuk tugas di masa depan. Ini meningkatkan ketahanan rantai dengan memastikan hanya validator yang sehat yang dipilih untuk mengusulkan blok, mempertahankan kualitas layanan selama gangguan jaringan. +**Kecualikan validator yang dipotong dari pengusulan (atau EIP-8045)** secara sederhana menyaring validator yang dipotong agar tidak dipilih untuk tugas di masa mendatang. Ini meningkatkan ketahanan rantai dengan memastikan hanya validator yang sehat yang dipilih untuk mengusulkan blok, mempertahankan kualitas layanan selama gangguan jaringan. -**Sumber Daya**: [Spesifikasi teknis EIP-8045](https://eips.ethereum.org/EIPS/eip-8045) +**Sumber daya**: [Spesifikasi teknis EIP-8045](https://eips.ethereum.org/EIPS/eip-8045) -### Biarkan pintu keluar menggunakan antrean konsolidasi {#let-exits-use-the-consolidation-queue} +### Biarkan proses keluar menggunakan antrean konsolidasi {#let-exits-use-the-consolidation-queue} -- Menutup celah yang memungkinkan validator dengan saldo tinggi untuk keluar dari jaringan lebih cepat daripada validator yang lebih kecil melalui antrean konsolidasi -- Memungkinkan pintu keluar reguler meluap ke antrean kedua ini ketika memiliki kapasitas cadangan, mengurangi waktu penarikan dari mengunci selama periode volume tinggi +- Menutup celah yang memungkinkan validator bersaldo tinggi untuk keluar dari jaringan lebih cepat daripada validator yang lebih kecil melalui antrean konsolidasi +- Memungkinkan proses keluar reguler meluap ke antrean kedua ini ketika memiliki kapasitas cadangan, mengurangi waktu penarikan mengunci selama periode volume tinggi - Mempertahankan keamanan yang ketat untuk menghindari perubahan batas keamanan inti Ethereum atau melemahkan jaringan -Sejak [peningkatan Pectra](/roadmap/pectra) meningkatkan saldo efektif maksimum untuk validator Ethereum dari 32 ETH menjadi 2.048 ETH, celah teknis memungkinkan validator dengan saldo tinggi untuk keluar dari jaringan lebih cepat daripada validator yang lebih kecil melalui antrean konsolidasi. +Sejak [peningkatan Pectra](/roadmap/pectra) meningkatkan saldo efektif maksimum untuk validator Ethereum dari 32 ETH menjadi 2.048 ETH, celah teknis memungkinkan validator bersaldo tinggi untuk keluar dari jaringan lebih cepat daripada validator yang lebih kecil melalui antrean konsolidasi. -**Biarkan pintu keluar menggunakan antrean konsolidasi (atau EIP-8080)** mendemokratisasi antrean konsolidasi untuk semua pintu keluar mengunci, menciptakan satu baris yang adil untuk semua orang. +**Biarkan proses keluar menggunakan antrean konsolidasi (atau EIP-8080)** mendemokratisasi antrean konsolidasi untuk semua proses keluar mengunci, menciptakan satu antrean yang adil untuk semua orang. -Untuk menguraikan cara kerjanya saat ini: +Untuk merinci bagaimana ini bekerja saat ini: -- Batas churn Ethereum adalah batas keamanan pada tingkat di mana validator dapat masuk, keluar, atau menggabungkan (mengkonsolidasikan) ETH yang mereka stake, untuk memastikan keamanan jaringan tidak pernah goyah -- Karena konsolidasi validator adalah tindakan yang lebih berat dengan lebih banyak bagian yang bergerak daripada keluar validator standar, ia menghabiskan sebagian besar anggaran keamanan ini (batas churn) -- Secara spesifik, protokol menentukan bahwa biaya keamanan pasti dari satu pintu keluar standar adalah dua pertiga (2/3) dari biaya satu konsolidasi +- Batas churn Ethereum adalah batas keamanan pada tingkat di mana validator dapat masuk, keluar, atau menggabungkan (mengkonsolidasikan) ETH yang mereka stake, untuk memastikan keamanan jaringan tidak pernah tidak stabil +- Karena konsolidasi validator adalah tindakan yang lebih berat dengan lebih banyak bagian yang bergerak daripada proses keluar validator standar, ini memakan porsi yang lebih besar dari anggaran keamanan ini (batas churn) +- Secara khusus, protokol mendikte bahwa biaya keamanan yang tepat dari satu proses keluar standar adalah dua pertiga (2/3) dari biaya satu konsolidasi -Antrean keluar yang lebih adil akan memungkinkan keluar standar untuk meminjam ruang yang tidak terpakai dari antrean konsolidasi selama periode permintaan keluar yang tinggi, menerapkan nilai tukar "3 untuk 2" (untuk setiap 2 tempat konsolidasi yang tidak terpakai, jaringan dapat dengan aman memproses 3 keluar standar). Faktor churn 3/2 ini menyeimbangkan permintaan di seluruh antrean konsolidasi dan keluar. +Antrean keluar yang lebih adil akan memungkinkan proses keluar standar untuk meminjam ruang yang tidak terpakai dari antrean konsolidasi selama periode permintaan keluar yang tinggi, menerapkan nilai tukar "3 untuk 2" (untuk setiap 2 tempat konsolidasi yang tidak terpakai, jaringan dapat dengan aman memproses 3 proses keluar standar). Faktor churn 3/2 ini menyeimbangkan permintaan di seluruh antrean konsolidasi dan keluar. -Mendemokratisasi akses ke antrean konsolidasi akan meningkatkan kecepatan pengguna dapat keluar dari stake mereka selama periode permintaan tinggi hingga 2,5x, tanpa mengorbankan keamanan jaringan. +Mendemokratisasi akses ke antrean konsolidasi akan meningkatkan kecepatan pengguna untuk keluar dari stake mereka selama periode permintaan tinggi hingga 2,5x, tanpa mengorbankan keamanan jaringan. -**Sumber Daya**: [Spesifikasi teknis EIP-8080](https://eips.ethereum.org/EIPS/eip-8080) +**Sumber daya**: [Spesifikasi teknis EIP-8080](https://eips.ethereum.org/EIPS/eip-8080) -## Meningkatkan pengalaman pengguna & pengembang {#improve-user-developer-experience} +## Tingkatkan pengalaman pengguna & pengembang {#improve-user-developer-experience} -Peningkatan Glamsterdam Ethereum bertujuan untuk meningkatkan pengalaman pengguna, meningkatkan kemudahan penemuan data, dan menangani ukuran pesan yang meningkat untuk mencegah kegagalan sinkronisasi. Ini membuatnya lebih mudah untuk melacak apa yang terjadi onchain sambil mencegah hambatan teknis saat jaringan melakukan peningkatan. +Peningkatan Glamsterdam Ethereum bertujuan untuk meningkatkan pengalaman pengguna, meningkatkan kemampuan penemuan data, dan menangani peningkatan ukuran pesan untuk mencegah kegagalan sinkronisasi. Ini membuatnya lebih mudah untuk melacak apa yang terjadi onchain sambil mencegah gangguan teknis saat jaringan ditingkatkan skalanya. -### Mengurangi biaya gas transaksi intrinsik {#reduce-intrinsic-transaction-gas-costs} +### Kurangi biaya gas transaksi intrinsik {#reduce-intrinsic-transaction-gas-costs} -- Menurunkan biaya dasar untuk transaksi, mengurangi biaya keseluruhan pembayaran ETH asli sederhana -- Membuat transfer yang lebih kecil lebih terjangkau, meningkatkan kelayakan Ethereum sebagai media pertukaran rutin +- Menurunkan biaya dasar untuk transaksi, mengurangi biaya keseluruhan dari pembayaran ETH asli yang sederhana +- Membuat transfer yang lebih kecil menjadi lebih terjangkau, meningkatkan kelayakan Ethereum sebagai alat tukar rutin -Semua transaksi Ethereum memiliki biaya gas dasar tetap hari ini, terlepas dari seberapa sederhana atau kompleksnya untuk diproses. **Mengurangi gas transaksi intrinsik (atau EIP-2780)** mengusulkan pengurangan biaya dasar tersebut untuk membuat transfer ETH standar antar akun yang ada hingga **71% lebih murah**. +Semua transaksi Ethereum memiliki biaya gas dasar yang tetap saat ini, terlepas dari seberapa sederhana atau kompleksnya untuk diproses. **Kurangi gas transaksi intrinsik (atau EIP-2780)** mengusulkan pengurangan biaya dasar tersebut untuk membuat transfer ETH standar antara akun yang ada hingga **71% lebih murah**. -Mengurangi gas transaksi intrinsik bekerja dengan memecah biaya transaksi untuk mencerminkan hanya pekerjaan dasar dan esensial yang sebenarnya dilakukan oleh komputer yang menjalankan jaringan, seperti memverifikasi tanda tangan digital dan memperbarui saldo. Karena pembayaran ETH dasar tidak mengeksekusi kode yang kompleks atau membawa data tambahan, proposal ini akan mengurangi biayanya agar sesuai dengan jejaknya yang ringan. +Kurangi gas transaksi intrinsik bekerja dengan merinci biaya transaksi untuk mencerminkan hanya pekerjaan dasar dan penting yang sebenarnya dilakukan oleh komputer yang menjalankan jaringan, seperti memverifikasi tanda tangan digital dan memperbarui saldo. Karena pembayaran ETH dasar tidak mengeksekusi kode kompleks atau membawa data tambahan, proposal ini akan mengurangi biayanya agar sesuai dengan jejaknya yang ringan. -Proposal ini memperkenalkan pengecualian untuk membuat akun baru untuk menjaga agar biaya yang lebih rendah tidak membanjiri status jaringan. Jika transfer mengirimkan ETH ke alamat yang kosong dan tidak ada, jaringan harus membuat catatan baru yang permanen untuknya. Biaya tambahan gas ditambahkan untuk pembuatan akun tersebut untuk membantu menutupi beban penyimpanan jangka panjangnya. +Proposal ini memperkenalkan pengecualian untuk membuat akun baru guna menjaga agar biaya yang lebih rendah tidak membebani status jaringan. Jika transfer mengirimkan ETH ke alamat yang kosong dan tidak ada, jaringan harus membuat catatan baru yang permanen untuknya. Biaya tambahan gas ditambahkan untuk pembuatan akun tersebut guna membantu menutupi beban penyimpanan jangka panjangnya. -Bersama-sama, EIP-2780 bertujuan untuk membuat transfer sehari-hari antar akun yang ada lebih terjangkau sambil memastikan jaringan masih terlindungi dari pembengkakan basis data dengan memberi harga pertumbuhan status yang sebenarnya secara akurat. +Bersama-sama, EIP-2780 bertujuan untuk membuat transfer sehari-hari antara akun yang ada menjadi lebih terjangkau sambil memastikan jaringan tetap terlindungi dari pembengkakan basis data dengan menetapkan harga pertumbuhan status yang sebenarnya secara akurat. -**Sumber Daya**: [Spesifikasi teknis EIP-2780](https://eips.ethereum.org/EIPS/eip-2780) +**Sumber daya**: [Spesifikasi teknis EIP-2780](https://eips.ethereum.org/EIPS/eip-2780) -### Penyebaran Awal Pabrik Deterministik {#deterministic-factory-predeploy} +### Deterministic Factory Predeploy {#deterministic-factory-predeploy} -- Memberikan pengembang cara asli untuk menyebarkan aplikasi dan dompet kontrak pintar ke alamat yang sama persis di berbagai rantai -- Memungkinkan pengguna untuk memiliki alamat dompet pintar yang sama di beberapa jaringan layer 2 (L2), mengurangi beban kognitif, mengurangi kebingungan, dan mengurangi risiko kehilangan dana secara tidak sengaja -- Menggantikan solusi yang saat ini digunakan pengembang untuk mencapai paritas ini, membuatnya lebih mudah dan lebih aman untuk membangun dompet dan aplikasi multi-rantai +- Memberi pengembang cara asli untuk menerapkan aplikasi dan dompet kontrak pintar ke alamat yang sama persis di berbagai rantai +- Memungkinkan pengguna untuk memiliki alamat dompet pintar yang sama di beberapa jaringan layer 2 (L2), mengurangi beban kognitif, mengurangi kebingungan, dan mengurangi risiko kehilangan dana yang tidak disengaja +- Menggantikan solusi sementara yang saat ini digunakan pengembang untuk mencapai paritas ini, membuatnya lebih mudah dan lebih aman untuk membangun dompet dan aplikasi multi-rantai -Jika pengguna memiliki dompet kontrak pintar hari ini dengan akun di beberapa rantai yang kompatibel dengan Mesin Virtual Ethereum (EVM), mereka seringkali berakhir dengan alamat yang sama sekali berbeda di jaringan yang berbeda. Ini tidak hanya membingungkan, tetapi juga dapat menyebabkan kehilangan dana secara tidak sengaja. +Jika pengguna memiliki dompet kontrak pintar saat ini dengan akun di beberapa rantai yang kompatibel dengan Mesin Virtual Ethereum (EVM), mereka sering kali berakhir dengan alamat yang sama sekali berbeda di jaringan yang berbeda. Ini tidak hanya membingungkan, tetapi dapat menyebabkan hilangnya dana secara tidak disengaja. -**Penyebaran Awal Pabrik Deterministik (atau EIP-7997)** memberikan pengembang cara bawaan dan asli untuk menyebarkan aplikasi terdesentralisasi dan dompet kontrak pintar mereka ke alamat yang sama persis di berbagai rantai EVM, termasuk Mainnet Ethereum, jaringan layer 2 (L2), dan banyak lagi. Jika diadopsi, ini akan memungkinkan pengguna untuk memiliki alamat yang sama persis di setiap rantai yang berpartisipasi, secara signifikan mengurangi beban kognitif dan potensi kesalahan pengguna. +**Deterministic Factory Predeploy (atau EIP-7997)** memberi pengembang cara bawaan asli untuk menerapkan aplikasi terdesentralisasi dan dompet kontrak pintar mereka ke alamat yang sama persis di beberapa rantai EVM, termasuk mainnet Ethereum, jaringan layer 2 (L2), dan banyak lagi. Jika diadopsi, ini akan memungkinkan pengguna untuk memiliki alamat yang sama persis di setiap rantai yang berpartisipasi, secara signifikan mengurangi beban kognitif dan potensi kesalahan pengguna. -Penyebaran Awal Pabrik Deterministik bekerja dengan menempatkan program pabrik khusus yang minimal secara permanen di lokasi yang identik (khususnya, alamat 0x12) di setiap rantai yang kompatibel dengan EVM yang berpartisipasi. Tujuannya adalah untuk menyediakan kontrak pabrik standar universal yang dapat diadopsi oleh jaringan yang kompatibel dengan EVM; selama rantai EVM berpartisipasi dan mengadopsi standar ini, pengembang akan dapat menggunakannya untuk menyebarkan kontrak pintar mereka ke alamat yang sama persis di jaringan tersebut. +Deterministic Factory Predeploy bekerja dengan menempatkan program pabrik khusus yang minimal secara permanen di lokasi yang identik (khususnya, alamat 0x12) di setiap rantai yang kompatibel dengan EVM yang berpartisipasi. Tujuannya adalah untuk menyediakan kontrak pabrik standar universal yang dapat diadopsi oleh jaringan apa pun yang kompatibel dengan EVM; selama rantai EVM berpartisipasi dan mengadopsi standar ini, pengembang akan dapat menggunakannya untuk menerapkan kontrak pintar mereka ke alamat yang sama persis di jaringan tersebut. -Standardisasi ini menyederhanakan pembangunan dan pengelolaan aplikasi lintas rantai untuk pengembang dan ekosistem yang lebih luas. Pengembang tidak perlu lagi membuat kode khusus untuk rantai tertentu untuk menghubungkan perangkat lunak mereka di berbagai jaringan, melainkan menggunakan pabrik universal ini untuk menghasilkan alamat yang sama persis untuk aplikasi mereka di mana saja. Selain itu, penjelajah blok, layanan pelacakan, dan dompet dapat dengan lebih mudah mengidentifikasi dan menautkan aplikasi dan akun ini di berbagai rantai, menciptakan lingkungan multi-rantai yang lebih terpadu dan mulus untuk semua peserta berbasis Ethereum. +Standardisasi ini menyederhanakan pembuatan dan pengelolaan aplikasi lintas rantai untuk pengembang dan ekosistem yang lebih luas. Pengembang tidak perlu lagi membangun kode khusus rantai untuk menautkan perangkat lunak mereka bersama-sama di berbagai jaringan, melainkan menggunakan pabrik universal ini untuk menghasilkan alamat yang sama persis untuk aplikasi mereka di mana saja. Selain itu, penjelajah blok, layanan pelacakan, dan dompet dapat dengan lebih mudah mengidentifikasi dan menautkan aplikasi dan akun ini di berbagai rantai, menciptakan lingkungan multi-rantai yang lebih terpadu dan mulus untuk semua peserta berbasis Ethereum. -**Sumber Daya**: [Spesifikasi teknis EIP-7997](https://eips.ethereum.org/EIPS/eip-7997) +**Sumber daya**: [Spesifikasi teknis EIP-7997](https://eips.ethereum.org/EIPS/eip-7997) -### Transfer dan pembakaran ETH mengeluarkan log {#eth-transfers-and-burns-emit-a-log} +### Transfer dan pembakaran ETH memancarkan log {#eth-transfers-and-burns-emit-a-log} - Secara otomatis menghasilkan catatan permanen (log) setiap kali ETH ditransfer atau dibakar - Memperbaiki titik buta historis yang memungkinkan aplikasi, bursa, dan jembatan untuk mendeteksi deposit pengguna secara andal tanpa alat pelacakan ad-hoc -Berbeda dengan token (ERC-20), transfer ETH reguler antar kontrak pintar tidak mengeluarkan tanda terima yang jelas (log standar), sehingga sulit dilacak oleh bursa dan aplikasi. +Tidak seperti token (ERC-20), transfer ETH reguler antara kontrak pintar tidak memancarkan tanda terima yang jelas (log standar), membuatnya sulit dilacak oleh bursa dan aplikasi. -Transfer dan pembakaran ETH mengeluarkan log (atau EIP-7708) mewajibkan jaringan untuk mengeluarkan peristiwa log standar setiap kali sejumlah ETH yang tidak nol dipindahkan atau dibakar. +Transfer dan pembakaran ETH memancarkan log (atau EIP-7708) mewajibkan jaringan untuk memancarkan peristiwa log standar setiap kali jumlah ETH yang bukan nol dipindahkan atau dibakar. -Ini akan membuatnya jauh lebih mudah dan lebih dapat diandalkan bagi dompet, bursa, dan operator jembatan untuk melacak deposit dan pergerakan secara akurat tanpa peralatan khusus. +Ini akan membuatnya jauh lebih mudah dan lebih andal bagi dompet, bursa, dan operator jembatan untuk melacak deposit dan pergerakan secara akurat tanpa perkakas khusus. -**Sumber Daya**: [Spesifikasi teknis EIP-7708](https://eips.ethereum.org/EIPS/eip-7708) +**Sumber daya**: [Spesifikasi teknis EIP-7708](https://eips.ethereum.org/EIPS/eip-7708) -### Daftar tanda terima blok parsial eth/70 {#eth-70-partial-block-receipt-lists} +### eth/70 partial block receipt lists {#eth-70-partial-block-receipt-lists} -Seiring dengan meningkatnya jumlah pekerjaan yang dapat dilakukan Ethereum, daftar tanda terima untuk tindakan tersebut (catatan data dari transaksi ini) menjadi sangat besar sehingga berpotensi menyebabkan node jaringan gagal saat mencoba menyinkronkan data satu sama lain. +Saat kita meningkatkan jumlah pekerjaan yang dapat dilakukan Ethereum, daftar tanda terima untuk tindakan tersebut (catatan data dari transaksi ini) menjadi sangat besar sehingga berpotensi menyebabkan node jaringan gagal saat mencoba menyinkronkan data satu sama lain. -Daftar tanda terima blok parsial eth/70 (atau EIP-7975) memperkenalkan cara baru bagi node untuk berkomunikasi satu sama lain (eth/70) yang memungkinkan daftar besar ini dipecah menjadi bagian-bagian yang lebih kecil dan lebih mudah dikelola. eth/70 memperkenalkan sistem paginasi untuk protokol komunikasi jaringan yang memungkinkan node untuk memecah daftar tanda terima blok dan dengan aman meminta data dalam potongan yang lebih kecil dan lebih mudah dikelola. +eth/70 partial block receipt lists (atau EIP-7975) memperkenalkan cara baru bagi node untuk berbicara satu sama lain (eth/70) yang memungkinkan daftar besar ini dipecah menjadi bagian-bagian yang lebih kecil dan lebih mudah dikelola. eth/70 memperkenalkan sistem paginasi untuk protokol komunikasi jaringan yang memungkinkan node untuk memecah daftar tanda terima blok dan dengan aman meminta data dalam potongan yang lebih kecil dan lebih mudah dikelola. -Perubahan ini akan mencegah kegagalan sinkronisasi jaringan selama periode aktivitas padat. Pada akhirnya, ini membuka jalan bagi Ethereum untuk meningkatkan kapasitas bloknya, dan memproses lebih banyak transaksi per blok di masa depan, tanpa membebani perangkat keras fisik yang menyinkronkan rantai. +Perubahan ini akan mencegah kegagalan sinkronisasi jaringan selama periode aktivitas padat. Pada akhirnya, ini membuka jalan bagi Ethereum untuk meningkatkan kapasitas bloknya, dan memproses lebih banyak transaksi per blok di masa mendatang, tanpa membebani perangkat keras fisik yang menyinkronkan rantai. -**Sumber Daya**: [Spesifikasi teknis EIP-7975](https://eips.ethereum.org/EIPS/eip-7975) +**Sumber daya**: [Spesifikasi teknis EIP-7975](https://eips.ethereum.org/EIPS/eip-7975) ## Bacaan lebih lanjut {#further-reading} - [Peta jalan Ethereum](/roadmap/) - [Forkcast: Glamsterdam](https://forkcast.org/upgrade/glamsterdam) -- [Meta EIP Glamsterdam](https://eips.ethereum.org/EIPS/eip-7773) +- [Glamsterdam Meta EIP](https://eips.ethereum.org/EIPS/eip-7773) - [Pengumuman blog Pembaruan Prioritas Protokol untuk 2026](https://blog.ethereum.org/2026/02/18/protocol-priorities-update-2026) -- [Podcast The Daily Gwei Refuel - Ethereum pasca-kuantum, Glamsterdam akan datang](https://www.youtube.com/watch?v=qx9sd50uQjQ) +- [Podcast The Daily Gwei Refuel - Ethereum Pasca-kuantum, Glamsterdam akan datang](https://www.youtube.com/watch?v=qx9sd50uQjQ) ## FAQ {#faq} -### Bagaimana cara mengonversi ETH setelah hard fork Glamsterdam? {#how-can-eth-be-converted-after-the-hardfork} +### Bagaimana ETH dapat dikonversi setelah hard fork Glamsterdam? {#how-can-eth-be-converted-after-the-hardfork} -- **Tidak Ada Tindakan yang Diperlukan untuk ETH Anda**: Tidak perlu mengonversi atau meningkatkan ETH Anda setelah peningkatan Glamsterdam. Saldo akun Anda akan tetap sama, dan ETH yang Anda miliki saat ini akan tetap dapat diakses dalam bentuknya yang ada setelah hard fork. -- **Waspada penipuan!** **siapa pun yang menginstruksikan Anda untuk "meningkatkan" ETH Anda sedang mencoba menipu Anda.** Tidak ada yang perlu Anda lakukan sehubungan dengan peningkatan ini. Aset milik anda tidak akan terpengaruh sama sekali. Ingat, tetap terinformasi adalah pertahanan terbaik untuk melawan penipuan. +- **Tidak Ada Tindakan yang Diperlukan untuk ETH Anda**: Tidak perlu mengonversi atau meningkatkan ETH Anda setelah peningkatan Glamsterdam. Saldo akun Anda akan tetap sama, dan ETH yang Anda pegang saat ini akan tetap dapat diakses dalam bentuknya yang ada setelah hard fork. +- **Waspadalah terhadap penipuan!**  **siapa pun yang menginstruksikan Anda untuk "meningkatkan" ETH Anda sedang mencoba menipu Anda.** Tidak ada yang perlu Anda lakukan sehubungan dengan peningkatan ini. Aset Anda akan tetap sama sekali tidak terpengaruh. Ingat, tetap mendapat informasi adalah pertahanan terbaik terhadap penipuan. [Lebih lanjut tentang mengenali dan menghindari penipuan](/security/) ### Apakah peningkatan Glamsterdam memengaruhi semua node dan validator Ethereum? {#does-the-glamsterdam-upgrade-affect-all-ethereum-nodes-and-validators} -Ya, peningkatan Glamsterdam memerlukan pembaruan pada [klien eksekusi dan klien konsensus](/developers/docs/nodes-and-clients/). Karena peningkatan ini memperkenalkan Pemisahan Pengusul-Pembangun yang Diabadikan (ePBS), operator node perlu memastikan klien mereka diperbarui untuk menangani cara-cara baru blok dibangun, divalidasi, dan disahkan oleh jaringan. +Ya, peningkatan Glamsterdam memerlukan pembaruan pada [klien eksekusi dan klien konsensus](/developers/docs/nodes-and-clients/). Karena peningkatan ini memperkenalkan Enshrined Proposer-Builder Separation (ePBS), operator node perlu memastikan klien mereka diperbarui untuk menangani cara baru blok dibangun, divalidasi, dan disahkan oleh jaringan. -Semua klien utama Ethereum akan merilis versi yang mendukung hard fork yang ditandai sebagai prioritas tinggi. Anda dapat terus mengikuti kapan rilis ini akan tersedia di repositori GitHub klien, [saluran Discord](https://ethstaker.org/support) mereka, [Discord EthStaker](https://dsc.gg/ethstaker), atau dengan berlangganan blog Ethereum untuk pembaruan protokol. +Semua klien Ethereum utama akan merilis versi yang mendukung hard fork yang ditandai sebagai prioritas tinggi. Anda dapat mengikuti kapan rilis ini akan tersedia di repositori GitHub klien, [saluran Discord](https://ethstaker.org/support) mereka, [Discord EthStaker](https://dsc.gg/ethstaker), atau dengan berlangganan blog Ethereum untuk pembaruan protokol. -Untuk menjaga sinkronisasi dengan jaringan Ethereum setelah upgrade, operator node harus memastikan bahwa mereka menjalankan versi client yang didukung. Perlu dicatat bahwa informasi mengenai rilis client bersifat sensitif terhadap waktu, sehingga pengguna harus merujuk pada pembaruan terbaru untuk mendapatkan detail yang paling terkini. +Untuk mempertahankan sinkronisasi dengan jaringan Ethereum pasca-peningkatan, operator node harus memastikan mereka menjalankan versi klien yang didukung. Perhatikan bahwa informasi tentang rilis klien sensitif terhadap waktu, dan pengguna harus merujuk ke pembaruan terbaru untuk detail paling terkini. -### Sebagai seorang staker, apa yang perlu saya lakukan untuk peningkatan Glamsterdam? {#as-a-staker-what-do-i-need-to-do-for-the-glamsterdam-upgrade} +### Sebagai staker, apa yang perlu saya lakukan untuk peningkatan Glamsterdam? {#as-a-staker-what-do-i-need-to-do-for-the-glamsterdam-upgrade} -Seperti setiap peningkatan jaringan, pastikan untuk memperbarui klien Anda ke versi terbaru yang ditandai dengan dukungan Glamsterdam. Ikuti pembaruan di milis dan [Pengumuman Protokol di Blog EF](https://blog.ethereum.org/category/protocol) untuk mendapatkan informasi tentang rilis. +Seperti halnya setiap peningkatan jaringan, pastikan untuk memperbarui klien Anda ke versi terbaru yang ditandai dengan dukungan Glamsterdam. Ikuti pembaruan di milis dan [Pengumuman Protokol di Blog EF](https://blog.ethereum.org/category/protocol) untuk mendapatkan informasi tentang rilis. -Untuk memvalidasi pengaturan Anda sebelum Glamsterdam diaktifkan di Mainnet, Anda dapat menjalankan validator di testnet. Percabangan jaringan percobaan juga diumumkan di milis dan blog. +Untuk memvalidasi penyiapan Anda sebelum Glamsterdam diaktifkan di mainnet, Anda dapat menjalankan validator di testnet. Fork testnet juga diumumkan di milis dan blog. -### Peningkatan apa yang akan disertakan Glamsterdam untuk peningkatan L1? {#what-improvements-will-glamsterdam-include-for-l1-scaling} +### Peningkatan apa yang akan disertakan Glamsterdam untuk peningkatan skala L1? {#what-improvements-will-glamsterdam-include-for-l1-scaling} -Fitur utamanya adalah ePBS (EIP-7732), yang memisahkan tugas berat memvalidasi transaksi jaringan dari tugas mencapai konsensus. Ini memperluas jendela propagasi data dari 2 detik menjadi sekitar 9 detik, membuka kemampuan Ethereum untuk menangani keluaran transaksi yang jauh lebih tinggi dengan aman dan mengakomodasi lebih banyak blob data untuk jaringan layer 2. +Fitur utamanya adalah ePBS (EIP-7732), yang memisahkan tugas berat memvalidasi transaksi jaringan dari tugas mencapai konsensus. Ini memperluas jendela propagasi data dari 2 detik menjadi sekitar 9 detik, membuka blokir kemampuan Ethereum untuk menangani throughput transaksi yang jauh lebih tinggi dengan aman dan mengakomodasi lebih banyak blob data untuk jaringan layer 2. -### Akankah Glamsterdam menurunkan biaya di Ethereum (layer 1)? {#will-glamsterdam-lower-fees-on-ethereum-layer-1} +### Apakah Glamsterdam akan menurunkan biaya di Ethereum (layer 1)? {#will-glamsterdam-lower-fees-on-ethereum-layer-1} -Ya, Glamsterdam kemungkinan besar akan mengurangi biaya untuk pengguna sehari-hari! Mengurangi gas transaksi intrinsik (atau EIP-2780) mengurangi biaya dasar untuk mengirim ETH, membuat ETH jauh lebih murah untuk digunakan dalam pembayaran sehari-hari. +Ya, Glamsterdam kemungkinan besar akan mengurangi biaya untuk pengguna sehari-hari! Kurangi gas transaksi intrinsik (atau EIP-2780) mengurangi biaya dasar untuk mengirim ETH, membuat ETH jauh lebih murah untuk digunakan untuk pembayaran sehari-hari. -Selain itu, untuk keberlanjutan jangka panjang, Glamsterdam memperkenalkan Daftar Akses Tingkat Blok (BALs). Ini memungkinkan pemrosesan paralel dan mempersiapkan L1 untuk menangani batas gas keseluruhan yang lebih tinggi dengan aman di masa depan, yang kemungkinan akan mengurangi biaya gas per transaksi seiring dengan bertambahnya kapasitas. +Selain itu, untuk keberlanjutan jangka panjang, Glamsterdam memperkenalkan Block-Level Access Lists (BALs). Ini memungkinkan pemrosesan paralel dan mempersiapkan L1 untuk menangani batas gas keseluruhan yang lebih tinggi dengan aman di masa mendatang, yang kemungkinan akan mengurangi biaya gas per transaksi seiring dengan pertumbuhan kapasitas. -### Apakah akan ada perubahan pada kontrak pintar saya yang sudah ada pasca-Glamsterdam? {#will-my-smart-contracts-change} +### Apakah akan ada perubahan pada kontrak pintar saya yang ada pasca-Glamsterdam? {#will-my-smart-contracts-change} Kontrak yang ada akan terus berfungsi normal setelah Glamsterdam. Pengembang kemungkinan akan mendapatkan beberapa alat baru dan harus meninjau penggunaan gas mereka: -- Peningkatan ukuran kontrak maksimum (atau EIP-7954) memungkinkan pengembang untuk menyebarkan aplikasi yang lebih besar, meningkatkan batas ukuran kontrak maksimum dari sekitar 24KiB menjadi 32KiB. -- Penyebaran awal pabrik deterministik (atau EIP-7997) memperkenalkan kontrak pabrik universal bawaan. Ini memungkinkan pengembang untuk menyebarkan aplikasi dan dompet kontrak pintar mereka ke alamat yang sama persis di semua rantai EVM yang berpartisipasi. -- Jika aplikasi Anda mengandalkan pelacakan kompleks untuk menemukan transfer ETH, transfer ETH dan pembakaran yang mengeluarkan log (atau EIP-7708) akan memungkinkan Anda untuk beralih menggunakan log untuk akuntansi yang lebih sederhana dan andal. -- Peningkatan biaya gas pembuatan status (atau EIP-8037) dan pembaruan biaya gas akses-status (atau EIP-8038) memperkenalkan model keberlanjutan baru yang akan mengubah biaya penyebaran kontrak tertentu, karena pembuatan akun baru atau penyimpanan permanen akan memiliki biaya yang dapat disesuaikan secara dinamis. +- Tingkatkan ukuran kontrak maksimum (atau EIP-7954) memungkinkan pengembang untuk menerapkan aplikasi yang lebih besar, menaikkan batas ukuran kontrak maksimum dari sekitar 24KiB menjadi 32KiB. +- Deterministic factory predeploy (atau EIP-7997) memperkenalkan kontrak pabrik bawaan yang universal. Ini memungkinkan pengembang untuk menerapkan aplikasi dan dompet kontrak pintar mereka ke alamat yang sama persis di semua rantai EVM yang berpartisipasi. +- Jika aplikasi Anda bergantung pada pelacakan kompleks untuk menemukan transfer ETH, transfer dan pembakaran ETH memancarkan log (atau EIP-7708) akan memungkinkan Anda untuk beralih menggunakan log untuk akuntansi yang lebih sederhana dan andal. +- Peningkatan biaya gas pembuatan status (atau EIP-8037) dan pembaruan biaya gas akses status (atau EIP-8038) memperkenalkan model keberlanjutan baru yang akan mengubah biaya penerapan kontrak tertentu, karena membuat akun baru atau penyimpanan permanen akan memiliki biaya yang menyesuaikan secara dinamis. ### Bagaimana Glamsterdam akan memengaruhi penyimpanan node dan persyaratan perangkat keras? {#how-will-glamsterdam-affect-node-storage-and-hardware-requirements} -Beberapa EIP yang sedang dipertimbangkan untuk Glamsterdam mengatasi jurang kinerja pertumbuhan status: +Beberapa EIP yang sedang dipertimbangkan untuk Glamsterdam mengatasi jurang kinerja dari pertumbuhan status: - Peningkatan biaya gas pembuatan status (atau EIP-8037) memperkenalkan model penetapan harga dinamis untuk menargetkan tingkat pertumbuhan basis data status sebesar 100 GiB/tahun, memastikan perangkat keras fisik standar dapat terus menjalankan jaringan secara efisien. -- Daftar tanda terima blok parsial eth/70 (atau EIP-7975) memungkinkan node untuk meminta tanda terima blok yang dipaginasi, yang memecah daftar tanda terima blok yang sarat data menjadi potongan-potongan yang lebih kecil untuk mencegah crash dan sinkronisasi saat Ethereum melakukan peningkatan. +- eth/70 partial block receipt lists (atau EIP-7975) memungkinkan node untuk meminta tanda terima blok yang dipaginasi, yang memecah daftar tanda terima blok yang padat data menjadi potongan-potongan yang lebih kecil untuk mencegah kerusakan dan sinkronisasi saat Ethereum ditingkatkan skalanya. \ No newline at end of file diff --git a/public/content/translations/id/roadmap/merge/index.md b/public/content/translations/id/roadmap/merge/index.md index 5c7234d2fb2..bfabf4c8d4e 100644 --- a/public/content/translations/id/roadmap/merge/index.md +++ b/public/content/translations/id/roadmap/merge/index.md @@ -1,233 +1,233 @@ --- -title: Penggabungan -description: Pelajari tentang Penggabungan - ketika Jaringan Utama Ethereum mengadopsi bukti taruhan. +title: The Merge +description: Pelajari tentang The Merge - ketika Mainnet Ethereum mengadopsi proof-of-stake. lang: id template: upgrade image: /images/upgrades/merge.png -alt: -summaryPoint1: Jaringan Utama Ethereum menggunakan bukti taruhan, tetapi tidak selalu demikian. -summaryPoint2: Peningkatan dari mekanisme bukti kerja yang asli menjadi bukti taruhan disebut Penggabungan. -summaryPoint3: Penggabungan mengacu pada penggabungan Jaringan Utama Ethereum asli dengan rantai blok bukti taruhan terpisah yang disebut Rantai Suar, yang sekarang ada sebagai satu rantai. -summaryPoint4: Penggabungan ini mengurangi konsumsi energi Ethereum sebesar ~99,95%. +alt: +summaryPoint1: Mainnet Ethereum menggunakan proof-of-stake, tetapi tidak selalu demikian. +summaryPoint2: Peningkatan dari mekanisme proof-of-work asli ke proof-of-stake disebut The Merge. +summaryPoint3: The Merge merujuk pada penggabungan Mainnet Ethereum asli dengan blockchain proof-of-stake terpisah yang disebut Beacon Chain, yang kini ada sebagai satu rantai. +summaryPoint4: The Merge mengurangi konsumsi energi Ethereum sebesar ~99,95%. --- - Penggabungan telah dilaksanakan pada tanggal 15 September 2022. Hal ini menyelesaikan transisi Ethereum ke konsensus bukti taruhan, yang secara resmi tidak lagi menggunakan bukti kerja dan mengurangi konsumsi energi sebesar ~99,95%. + The Merge dieksekusi pada 15 September 2022. Ini menyelesaikan transisi Ethereum ke konsensus proof-of-stake, secara resmi menghentikan penggunaan proof-of-work dan mengurangi konsumsi energi sebesar ~99,95%. -## Apa itu Penggabungan? {#what-is-the-merge} +## Apa itu The Merge? {#what-is-the-merge} -Penggabungan adalah penyatuan lapisan eksekusi asli Ethereum (Jaringan Utama yang telah ada sejak [genesis](/ethereum-forks/#frontier)) dengan lapisan konsensus bukti taruhan baru, Rantai Suar. Ini menghilangkan kebutuhan akan penambangan yang boros energi dan sebagai gantinya memungkinkan jaringan untuk diamankan menggunakan ETH yang dipertaruhkan. Ini adalah langkah yang sangat menarik dalam mewujudkan visi Ethereum - skalabilitas, keamanan, dan keberlanjutan yang lebih baik. +The Merge adalah penggabungan lapisan eksekusi asli Ethereum (Mainnet yang telah ada sejak [genesis](/ethereum-forks/#frontier)) dengan lapisan konsensus proof-of-stake barunya, Beacon Chain. Ini menghilangkan kebutuhan akan penambangan yang padat energi dan sebaliknya memungkinkan jaringan diamankan menggunakan ETH yang dikunci. Ini adalah langkah yang benar-benar menarik dalam mewujudkan visi [Ethereum](/)—lebih banyak skalabilitas, keamanan, dan keberlanjutan. -Pada awalnya, [Rantai Suar](/roadmap/beacon-chain/) dikirim secara terpisah dari [Jaringan Utama](/glossary/#mainnet). Jaringan Utama Ethereum - dengan semua akun, saldo, kontrak pintar, dan status rantai blok - tetap diamankan oleh [bukti kerja](/developers/docs/consensus-mechanisms/pow/), bahkan saat Rantai Suar berjalan paralel menggunakan [bukti taruhan](/developers/docs/consensus-mechanisms/pos/). Penggabungan adalah saat kedua sistem ini akhirnya digabungkan, dan bukti kerja digantikan secara permanen oleh bukti taruhan. +Awalnya, [Beacon Chain](/roadmap/beacon-chain/) diluncurkan secara terpisah dari [Mainnet](/glossary/#mainnet). Mainnet Ethereum - dengan semua akun, saldo, kontrak pintar, dan status blockchain-nya - terus diamankan oleh [proof-of-work](/developers/docs/consensus-mechanisms/pow/), bahkan ketika Beacon Chain berjalan secara paralel menggunakan [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge adalah saat kedua sistem ini akhirnya bersatu, dan proof-of-work secara permanen digantikan oleh proof-of-stake. -Bayangkan Ethereum adalah sebuah pesawat luar angkasa yang diluncurkan sebelum cukup siap untuk melakukan perjalanan antarbintang. Dengan Rantai Suar, komunitas membuat mesin baru dan lambung kapal yang dikeraskan. Setelah pengujian yang signifikan, tiba saatnya untuk menukar mesin baru dengan mesin lama di tengah penerbangan. Penggabungan mesin baru yang lebih efisien ke dalam kapal yang sudah ada memungkinkannya untuk menjelajah beberapa tahun cahaya dan menjelajahi alam semesta. +Bayangkan Ethereum adalah pesawat luar angkasa yang diluncurkan sebelum benar-benar siap untuk perjalanan antarbintang. Dengan Beacon Chain, komunitas membangun mesin baru dan lambung yang diperkuat. Setelah pengujian yang signifikan, tiba saatnya untuk menukar mesin baru dengan yang lama di tengah penerbangan. Ini menggabungkan mesin baru yang lebih efisien ke dalam pesawat yang ada, memungkinkannya untuk menempuh tahun cahaya yang serius dan menjelajahi alam semesta. -## Penggabungan dengan Jaringan Utama {#merging-with-mainnet} +## Bergabung dengan Mainnet {#merging-with-mainnet} -Bukti kerja mengamankan Jaringan Utama Ethereum dari awal hingga Penggabungan. Hal ini memungkinkan rantai blok Ethereum yang kita semua kenal hadir pada bulan Juli 2015 dengan semua fitur-fiturnya yang sudah tidak asing lagi - transaksi, kontrak pintar, akun, dll. +Proof-of-work mengamankan Mainnet Ethereum dari genesis hingga The Merge. Ini memungkinkan blockchain Ethereum yang biasa kita gunakan mulai ada pada Juli 2015 dengan semua fitur yang sudah dikenal—transaksi, kontrak pintar, akun, dll. -Sepanjang sejarah Ethereum, para pengembang mempersiapkan diri untuk transisi dari bukti kerja ke bukti taruhan. Pada tanggal 1 Desember 2020, Rantai Suar dibuat sebagai rantai blok yang terpisah dari Jaringan Utama, berjalan secara paralel. +Sepanjang sejarah Ethereum, para pengembang bersiap untuk transisi akhir dari proof-of-work ke proof-of-stake. Pada 1 Desember 2020, Beacon Chain dibuat sebagai blockchain terpisah dari Mainnet, berjalan secara paralel. -Rantai Suar pada awalnya tidak memproses transaksi Jaringan Utama. Sebaliknya, ia mencapai konsensus tentang keadaannya sendiri dengan menyetujui validator aktif dan saldo akun mereka. Setelah pengujian ekstensif, tiba saatnya bagi Rantai Suar untuk mencapai konsensus pada data dunia nyata. Setelah Penggabungan, Rantai Suar menjadi mesin konsensus untuk semua data jaringan, termasuk transaksi lapisan eksekusi dan saldo akun. +Beacon Chain pada awalnya tidak memproses transaksi Mainnet. Sebaliknya, ia mencapai konsensus pada statusnya sendiri dengan menyetujui validator aktif dan saldo akun mereka. Setelah pengujian ekstensif, tiba saatnya bagi Beacon Chain untuk mencapai konsensus pada data dunia nyata. Setelah The Merge, Beacon Chain menjadi mesin konsensus untuk semua data jaringan, termasuk transaksi lapisan eksekusi dan saldo akun. -Penggabungan ini merupakan peralihan resmi untuk menggunakan Rantai Suar sebagai mesin produksi blok. Penambangan tidak lagi menjadi sarana untuk menghasilkan blok yang valid. Sebagai gantinya, validator bukti taruhan telah mengadopsi peran ini dan sekarang bertanggung jawab untuk memproses keabsahan semua transaksi dan mengusulkan blok. +The Merge mewakili peralihan resmi untuk menggunakan Beacon Chain sebagai mesin produksi blok. Penambangan tidak lagi menjadi sarana untuk memproduksi blok yang valid. Sebaliknya, validator proof-of-stake telah mengadopsi peran ini dan sekarang bertanggung jawab untuk memproses validitas semua transaksi dan mengusulkan blok. -Tidak ada sejarah yang hilang dalam Penggabungan. Ketika Jaringan Utama bergabung dengan Rantai Suar, Jaringan Utama juga menggabungkan seluruh sejarah transaksi Ethereum. +Tidak ada riwayat yang hilang dalam The Merge. Saat Mainnet bergabung dengan Beacon Chain, ia juga menggabungkan seluruh riwayat transaksional Ethereum. -Transisi ke bukti taruhan ini mengubah cara penerbitan ether. Pelajari lebih lanjut tentang [pengeluaran ether sebelum dan setelah Penggabungan](/roadmap/merge/issuance/). +Transisi ke proof-of-stake ini mengubah cara ether diterbitkan. Pelajari lebih lanjut tentang [penerbitan ether sebelum dan sesudah The Merge](/roadmap/merge/issuance/). ### Pengguna dan pemegang {#users-holders} -**Penggabungan tidak mengubah apa pun bagi pemegang/pengguna.** +**The Merge tidak mengubah apa pun bagi pemegang/pengguna.** -_Ini patut diulang_: Sebagai pengguna atau pemegang ETH atau aset digital lainnya di Ethereum, serta para staker non-simpul operator, **Anda tidak perlu melakukan apa pun dengan dana atau dompet Anda untuk mempertimbangkan Penggabungan.** ETH tetaplah ETH. Tidak ada yang namanya "ETH lama"/"ETH baru" atau "ETH1"/"ETH2" dan dompet bekerja sama persis setelah Penggabungan seperti yang mereka lakukan sebelumnya - orang yang memberi tahu Anda sebaliknya kemungkinan besar adalah penipu. +_Ini perlu diulangi_: Sebagai pengguna atau pemegang ETH atau aset digital lainnya di Ethereum, serta staker yang tidak mengoperasikan node, **Anda tidak perlu melakukan apa pun dengan dana atau dompet Anda untuk memperhitungkan The Merge.** ETH tetaplah ETH. Tidak ada yang namanya "ETH lama"/"ETH baru" atau "ETH1"/"ETH2" dan dompet berfungsi persis sama setelah The Merge seperti sebelumnya—orang yang memberi tahu Anda sebaliknya kemungkinan besar adalah penipu. -Meskipun telah menukar bukti kerja, seluruh sejarah Ethereum sejak awal tetap utuh dan tidak diubah oleh transisi ke bukti taruhan. Semua dana yang tersimpan di dompet Anda sebelum Penggabungan masih dapat diakses setelah Penggabungan. **Tidak diperlukan tindakan untuk meningkatkan dari pihak Anda.** +Meskipun menukar proof-of-work, seluruh riwayat Ethereum sejak genesis tetap utuh dan tidak diubah oleh transisi ke proof-of-stake. Dana apa pun yang disimpan di dompet Anda sebelum The Merge masih dapat diakses setelah The Merge. **Tidak ada tindakan yang diperlukan untuk meningkatkan di pihak Anda.** [Lebih lanjut tentang keamanan Ethereum](/security/#eth2-token-scam) -### Operator simpul dan pengembang dapp {#node-operators-dapp-developers} +### Operator node dan pengembang dapp {#node-operators-dapp-developers} -Item-item tindakan utama meliputi: +Item tindakan utama meliputi: -1. Jalankan _kedua_ klien konsensus dan klien eksekusi; titik akhir pihak ketiga untuk mendapatkan data eksekusi tidak lagi berfungsi sejak Penggabungan. +1. Jalankan _kedua_ klien konsensus dan klien eksekusi; titik akhir pihak ketiga untuk mendapatkan data eksekusi tidak lagi berfungsi sejak The Merge. 2. Autentikasi klien eksekusi dan konsensus dengan rahasia JWT bersama sehingga mereka dapat berkomunikasi dengan aman. -3. Tetapkan alamat `penerima biaya` untuk menerima tips biaya transaksi/MEV yang Anda peroleh. +3. Tetapkan alamat `fee recipient` (penerima biaya) untuk menerima tip biaya transaksi/MEV yang Anda peroleh. -Tidak menyelesaikan dua hal pertama di atas akan mengakibatkan simpul Anda terlihat sebagai "offline" hingga kedua lapisan disinkronkan dan diautentikasi. +Tidak menyelesaikan dua item pertama di atas akan mengakibatkan node Anda terlihat sebagai "offline" hingga kedua lapisan disinkronkan dan diautentikasi. -Tidak menetapkan `penerima biaya` akan tetap memungkinkan validator Anda berperilaku seperti biasa, tetapi Anda akan kehilangan tips biaya yang tidak terbakar dan MEV yang seharusnya Anda dapatkan dari blok yang diajukan oleh validator Anda. +Tidak menetapkan `fee recipient` akan tetap memungkinkan validator Anda berperilaku seperti biasa, tetapi Anda akan kehilangan tip biaya yang tidak dibakar dan MEV apa pun yang seharusnya Anda peroleh di blok yang diusulkan validator Anda. -Hingga Penggabungan, klien eksekusi (seperti Geth, Erigon, Besu, atau Nethermind) sudah cukup untuk menerima, memvalidasi dengan benar, dan menyebarkan blok yang sedang digosipkan oleh jaringan. _Setelah Penggabungan_, validitas transaksi yang terkandung dalam muatan eksekusi sekarang juga bergantung pada validitas "blok konsensus" yang terkandung di dalamnya. +Hingga The Merge, klien eksekusi (seperti Geth, Erigon, Besu, atau Nethermind) sudah cukup untuk menerima, memvalidasi dengan benar, dan menyebarkan blok yang digosipkan oleh jaringan. _Setelah The Merge_, validitas transaksi yang terkandung dalam muatan eksekusi sekarang juga bergantung pada validitas "blok konsensus" di mana ia terkandung. -Sebagai hasilnya, sebuah simpul Ethereum penuh sekarang membutuhkan klien eksekusi dan klien konsensus. Kedua klien ini bekerja bersama menggunakan API Engine yang baru. API Engine memerlukan autentikasi menggunakan rahasia JWT, yang disediakan untuk kedua klien yang memungkinkan komunikasi yang aman. +Akibatnya, node Ethereum penuh sekarang membutuhkan klien eksekusi dan klien konsensus. Kedua klien ini bekerja sama menggunakan Engine API baru. Engine API memerlukan autentikasi menggunakan rahasia JWT, yang disediakan untuk kedua klien yang memungkinkan komunikasi yang aman. -Item-item tindakan utama meliputi: +Item tindakan utama meliputi: -- Menginstal klien konsensus selain klien eksekusi +- Instal klien konsensus selain klien eksekusi - Autentikasi klien eksekusi dan konsensus dengan rahasia JWT bersama sehingga mereka dapat berkomunikasi dengan aman satu sama lain. -Tidak menyelesaikan item di atas akan mengakibatkan simpul Anda tampak "offline" hingga kedua lapisan disinkronkan dan diautentikasi. +Tidak menyelesaikan item di atas akan mengakibatkan node Anda tampak "offline" hingga kedua lapisan disinkronkan dan diautentikasi. -Penggabungan disertai dengan perubahan konsensus, yang juga mencakup perubahan yang terkait dengan: +The Merge datang dengan perubahan pada konsensus, yang juga mencakup perubahan terkait dengan:
    • struktur blok
    • -
    • pengaturan waktu ruang/blok
    • +
    • waktu slot/blok
    • perubahan opcode
    • -
    • sumber keacakan di dalam rantai
    • -
    • konsep dari blok aman dan blok yang telah difinalisasi
    • +
    • sumber keacakan onchain
    • +
    • konsep safe head dan blok yang difinalisasi
    -Untuk informasi lebih lanjut, lihat tulisan blog ini oleh Tim Beiko tentang Bagaimana Penggabungan Memengaruhi Lapisan Aplikasi Ethereum. +Untuk informasi lebih lanjut, lihat postingan blog oleh Tim Beiko tentang Bagaimana The Merge Berdampak pada Lapisan Aplikasi Ethereum.
    -## Penggabungan dan konsumsi energi {#merge-and-energy} +## The Merge dan konsumsi energi {#merge-and-energy} -Penggabungan ini menandai berakhirnya bukti kerja untuk Ethereum dan memulai era Ethereum yang berkelanjutan dan ramah lingkungan. Konsumsi energi Ethereum turun sekitar 99,95%, menjadikan Ethereum sebagai rantai blok hijau. Pelajari lebih lanjut tentang [konsumsi energi Ethereum](/energy-consumption/). +The Merge menandai akhir dari proof-of-work untuk Ethereum dan memulai era Ethereum yang lebih berkelanjutan dan ramah lingkungan. Konsumsi energi Ethereum turun sekitar 99,95%, menjadikan Ethereum sebagai blockchain hijau. Pelajari lebih lanjut tentang [konsumsi energi Ethereum](/energy-consumption/). -## Penggabungan dan penskalaan {#merge-and-scaling} +## The Merge dan peningkatan {#merge-and-scaling} -Penggabungan juga membuka jalan untuk peningkatan skalabilitas lebih lanjut yang tidak mungkin dilakukan di bawah bukti kerja, mendekatkan Ethereum satu langkah lebih dekat untuk mencapai skala penuh, keamanan, dan keberlanjutan seperti yang diuraikan dalam [visi Ethereum](/roadmap/)nya. +The Merge juga menyiapkan panggung untuk peningkatan skalabilitas lebih lanjut yang tidak mungkin dilakukan di bawah proof-of-work, membawa Ethereum selangkah lebih dekat untuk mencapai skala penuh, keamanan, dan keberlanjutan yang sedang dibangun oleh [peta jalannya](/roadmap/). -## Kesalahpahaman tentang Penggabungan {#misconceptions} +## Kesalahpahaman tentang The Merge {#misconceptions} +title="Kesalahpahaman: "Menjalankan node membutuhkan staking 32 ETH."" +contentPreview="Salah. Siapa pun bebas untuk menyinkronkan salinan Ethereum yang diverifikasi sendiri (yaitu, menjalankan node). Tidak ada ETH yang diperlukan—tidak sebelum The Merge, tidak setelah The Merge, tidak akan pernah."> -Ada dua jenis simpul Ethereum: simpul yang dapat mengusulkan blok dan simpul yang tidak. +Ada dua jenis node Ethereum: node yang dapat mengusulkan blok dan node yang tidak. -Simpul yang mengusulkan blok hanya sejumlah kecil dari total simpul di Ethereum. Kategori ini mencakup simpul penambangan di bawah bukti kerja (proof-of-work/PoW) dan simpul validator di bawah bukti kepemilikan (proof-of-stake/PoS). Kategori ini membutuhkan sumber daya ekonomi (seperti kekuatan hash GPU dalam bukti kerja atau ETH yang dipertaruhkan dalam bukti taruhan) sebagai imbalan atas kemampuan untuk sesekali mengusulkan blok berikutnya dan mendapatkan imbalan protokol. +Node yang mengusulkan blok hanyalah sebagian kecil dari total node di Ethereum. Kategori ini mencakup node penambangan di bawah proof-of-work (PoW) dan node validator di bawah proof-of-stake (PoS). Kategori ini membutuhkan komitmen sumber daya ekonomi (seperti kekuatan hash GPU dalam proof-of-work atau ETH yang dikunci dalam proof-of-stake) dengan imbalan kemampuan untuk sesekali mengusulkan blok berikutnya dan mendapatkan hadiah protokol. -Simpul lain dalam jaringan (yaitu mayoritas) tidak perlu menyediakan sumber daya ekonomi apa pun di luar komputer kelas konsumen dengan penyimpanan yang tersedia sebesar 1-2 TB dan koneksi internet. Simpul-simpul ini tidak mengusulkan blok, tetapi mereka masih memiliki peran penting dalam mengamankan jaringan dengan meminta pertanggungjawaban dari semua pengusul blok dengan mendengarkan blok-blok baru dan memverifikasi keabsahannya pada saat kedatangan sesuai dengan aturan konsensus jaringan. Jika blok tersebut valid, simpul akan terus menyebarkannya melalui jaringan. Jika blok tidak valid karena alasan apa pun, perangkat lunak simpul akan mengabaikannya sebagai tidak valid dan menghentikan penyebarannya. +Node lain di jaringan (yaitu, mayoritas) tidak diharuskan untuk memberikan sumber daya ekonomi apa pun di luar komputer tingkat konsumen dengan penyimpanan yang tersedia 1-2 TB dan koneksi internet. Node ini tidak mengusulkan blok, tetapi mereka masih melayani peran penting dalam mengamankan jaringan dengan meminta pertanggungjawaban semua pengusul blok dengan mendengarkan blok baru dan memverifikasi validitasnya pada saat kedatangan sesuai dengan aturan konsensus jaringan. Jika blok tersebut valid, node terus menyebarkannya melalui jaringan. Jika blok tidak valid karena alasan apa pun, perangkat lunak node akan mengabaikannya sebagai tidak valid dan menghentikan penyebarannya. -Menjalankan simpul yang tidak memproduksi blok memungkinkan bagi siapa pun di bawah kedua mekanisme konsensus (bukti kerja atau bukti taruhan); ini sangat dianjurkan bagi semua pengguna jika mereka memiliki kemampuan. Menjalankan sebuah simpul sangat berharga bagi Ethereum dan memberikan manfaat tambahan bagi setiap individu yang menjalankannya, seperti peningkatan keamanan, privasi, dan ketahanan terhadap sensor. +Menjalankan node yang tidak memproduksi blok dimungkinkan bagi siapa saja di bawah mekanisme konsensus mana pun (proof-of-work atau proof-of-stake); ini sangat dianjurkan untuk semua pengguna jika mereka memiliki sarana. Menjalankan node sangat berharga bagi Ethereum dan memberikan manfaat tambahan bagi setiap individu yang menjalankannya, seperti peningkatan keamanan, privasi, dan ketahanan terhadap sensor. -Kemampuan bagi siapa pun untuk menjalankan simpul mereka sendiri adalah mutlak penting untuk menjaga desentralisasi jaringan Ethereum. +Kemampuan bagi siapa saja untuk menjalankan node mereka sendiri sangat penting untuk mempertahankan desentralisasi jaringan Ethereum. -[Lebih lanjut tentang menjalankan simpul Anda sendiri](/run-a-node/) +[Lebih lanjut tentang menjalankan node Anda sendiri](/run-a-node/) +title="Kesalahpahaman: "The Merge gagal mengurangi biaya gas."" +contentPreview="Salah. The Merge adalah perubahan mekanisme konsensus, bukan perluasan kapasitas jaringan, dan tidak pernah dimaksudkan untuk menurunkan biaya gas."> -Biaya gas adalah produk dari permintaan jaringan relatif terhadap kapasitas jaringan. Penggabungan tidak lagi menggunakan bukti kerja, beralih ke bukti taruhan untuk konsensus, tetapi tidak secara signifikan mengubah parameter apa pun yang secara langsung memengaruhi kapasitas atau keluaran jaringan. +Biaya gas adalah produk dari permintaan jaringan relatif terhadap kapasitas jaringan. The Merge menghentikan penggunaan proof-of-work, beralih ke proof-of-stake untuk konsensus, tetapi tidak secara signifikan mengubah parameter apa pun yang secara langsung memengaruhi kapasitas atau throughput jaringan. -Dengan peta perjalanan berbasis rollup, upaya difokuskan pada penskalaan aktivitas pengguna di [lapisan ke-2](/layer-2/), sambil memungkinkan Jaringan Utama lapisan ke-1 sebagai lapisan penyelesaian terdesentralisasi yang aman yang dioptimalkan untuk penyimpanan data rollup untuk membantu membuat transaksi rollup menjadi jauh lebih murah secara eksponensial. Transisi ke bukti taruhan merupakan langkah awal yang penting untuk mewujudkan hal ini. [Lebih lanjut tentang gas dan biaya.](/developers/docs/gas/) +Dengan peta jalan yang berpusat pada rollup, upaya difokuskan pada peningkatan aktivitas pengguna di [layer 2](/layer-2/), sambil mengaktifkan Mainnet layer 1 sebagai lapisan penyelesaian terdesentralisasi yang aman yang dioptimalkan untuk penyimpanan data rollup guna membantu membuat transaksi rollup secara eksponensial lebih murah. Transisi ke proof-of-stake adalah pendahulu penting untuk mewujudkan hal ini. [Lebih lanjut tentang gas dan biaya.](/developers/docs/gas/) -"Kecepatan" transaksi dapat diukur dengan beberapa cara, termasuk waktu untuk dimasukkan ke dalam blok dan waktu finalisasi. Kedua hal ini sedikit berubah, tetapi tidak begitu kentara bagi pengguna. +title="Kesalahpahaman: "Transaksi dipercepat secara substansial oleh The Merge."" +contentPreview="Salah. Meskipun ada sedikit perubahan, kecepatan transaksi sebagian besar sama di layer 1 sekarang seperti sebelum The Merge."> +"Kecepatan" transaksi dapat diukur dengan beberapa cara, termasuk waktu untuk dimasukkan ke dalam blok dan waktu untuk finalisasi. Keduanya sedikit berubah, tetapi tidak dengan cara yang akan diperhatikan pengguna. -Secara historis, pada bukti kerja, targetnya adalah memiliki blok baru setiap ~13,3 detik. Pada bukti taruhan, slot terjadi tepat setiap 12 detik, yang mana setiap slot merupakan kesempatan bagi validator untuk menerbitkan blok. Sebagian besar slot memiliki blok, tetapi belum tentu semuanya (misalnya, validator sedang offline). Pada bukti taruhan, blok diproduksi ~10% lebih sering dibandingkan dengan bukti kerja. Ini merupakan perubahan yang tidak terlalu signifikan dan kemungkinan tidak akan disadari oleh pengguna. +Secara historis, pada proof-of-work, targetnya adalah memiliki blok baru setiap ~13,3 detik. Di bawah proof-of-stake, slot terjadi tepat setiap 12 detik, yang masing-masing merupakan peluang bagi validator untuk menerbitkan blok. Sebagian besar slot memiliki blok, tetapi belum tentu semuanya (yaitu, validator sedang offline). Dalam proof-of-stake, blok diproduksi ~10% lebih sering daripada pada proof-of-work. Ini adalah perubahan yang cukup tidak signifikan dan tidak mungkin diperhatikan oleh pengguna. -Bukti taruhan memperkenalkan konsep finalitas transaksi yang sebelumnya tidak ada. Dalam bukti kerja, kemampuan untuk membalikkan sebuah blok menjadi lebih sulit secara eksponensial dengan setiap blok yang ditambang di atas transaksi, tetapi tidak pernah mencapai nol. Dalam bukti taruhan, blok digabungkan ke dalam periode waktu (rentang waktu 6,4 menit yang terdiri dari 32 peluang blok) yang akan dipilih oleh para validator. Ketika jangka waktu berakhir, para validator memberikan suara untuk memutuskan apakah jangka waktu tersebut 'dibenarkan' atau tidak. Jika validator setuju untuk membenarkan jangka waktu, maka epoch tersebut akan difinalisasi di jangka waktu berikutnya. Membatalkan transaksi yang telah difinalisasi tidak ekonomis karena akan memerlukan pengambilan dan pembakaran lebih dari sepertiga total ETH yang dipertaruhkan. +Proof-of-stake memperkenalkan konsep finalitas transaksi yang sebelumnya tidak ada. Dalam proof-of-work, kemampuan untuk membalikkan blok menjadi semakin sulit secara eksponensial dengan setiap blok yang ditambang di atas transaksi, tetapi tidak pernah benar-benar mencapai nol. Di bawah proof-of-stake, blok digabungkan ke dalam epoch (rentang waktu 6,4 menit yang berisi 32 peluang untuk blok) yang dipilih oleh validator. Saat epoch berakhir, validator memilih apakah akan menganggap epoch tersebut 'dibenarkan'. Jika validator setuju untuk membenarkan epoch, itu akan difinalisasi di epoch berikutnya. Membatalkan transaksi yang difinalisasi secara ekonomi tidak layak karena akan membutuhkan perolehan dan pembakaran lebih dari sepertiga dari total ETH yang dikunci. +title="Kesalahpahaman: "The Merge memungkinkan penarikan staking."" +contentPreview="Salah, tetapi penarikan staking sejak itu telah diaktifkan melalui peningkatan Shanghai/Capella."> -Awalnya setelah Penggabungan, para staker hanya dapat mengakses tip biaya dan MEV yang diperoleh sebagai hasil dari usulan blok. Imbalan ini dikreditkan ke akun non-penaruhan yang dikendalikan oleh validator (dikenal sebagai penerima biaya), dan tersedia segera. Imbalan ini terpisah dari imbalan protokol untuk menjalankan tugas validator. +Awalnya setelah The Merge, staker hanya dapat mengakses tip biaya dan MEV yang diperoleh sebagai hasil dari proposal blok. Hadiah ini dikreditkan ke akun non-staking yang dikendalikan oleh validator (dikenal sebagai fee recipient), dan segera tersedia. Hadiah ini terpisah dari hadiah protokol untuk melakukan tugas validator. -Sejak upgrade jaringan Shanghai/Capella, para staker sekarang dapat menunjuk alamat penarikan untuk mulai menerima pembayaran otomatis dari saldo penaruhan berlebihan (ETH di atas 32 dari imbalan protokol). Upgrade ini juga memungkinkan kemampuan bagi validator untuk membuka kunci dan mengklaim seluruh saldo saat keluar dari jaringan. +Sejak peningkatan jaringan Shanghai/Capella, staker sekarang dapat menunjuk alamat penarikan untuk mulai menerima pembayaran otomatis dari setiap kelebihan saldo staking (ETH di atas 32 dari hadiah protokol). Peningkatan ini juga memungkinkan kemampuan validator untuk membuka kunci dan mengklaim kembali seluruh saldonya saat keluar dari jaringan. [Lebih lanjut tentang penarikan staking](/staking/withdrawals/) -Sejak meningkatkan Shanghai/Capella mengizinkan penarikan, para validator memiliki insentif untuk menarik saldo penaruhan mereka yang melebihi 32 ETH, karena dana-dana tersebut tidak meningkatkan hasil dan sebaliknya terkunci. Tergantung pada APR (ditentukan oleh total ETH yang dipertaruhkan), mungkin ada insentif untuk keluar dari validatornya untuk mengklaim seluruh saldo atau bahkan mempertaruhkan lebih lagi menggunakan imbalannya untuk mendapatkan hasil lebih banyak. +title="Kesalahpahaman: "Sekarang setelah The Merge selesai, dan penarikan diaktifkan, staker dapat keluar semua sekaligus."" +contentPreview="Salah. Keluar validator dibatasi kecepatannya karena alasan keamanan."> +Karena peningkatan Shanghai/Capella mengaktifkan penarikan, validator diberi insentif untuk menarik saldo staking mereka di atas 32 ETH, karena dana ini tidak menambah hasil dan sebaliknya terkunci. Bergantung pada APR (ditentukan oleh total ETH yang dikunci), mereka mungkin diberi insentif untuk keluar dari validator mereka untuk mengklaim kembali seluruh saldo mereka atau berpotensi melakukan stake lebih banyak lagi menggunakan hadiah mereka untuk mendapatkan lebih banyak hasil. -Namun, perlu dicatat bahwa keluar penuh dari validator dibatasi oleh protokol, dan hanya sejumlah terbatas validator yang diizinkan keluar setiap jangka waktu (setiap 6,4 menit). Batas ini bervariasi tergantung pada jumlah validator aktif, tetapi berjumlah sekitar 0,33% dari total ETH yang dipertaruhkan dapat keluar dari jaringan dalam satu hari. +Peringatan penting di sini, keluar validator penuh dibatasi kecepatannya oleh protokol, dan hanya sejumlah validator yang dapat keluar per epoch (setiap 6,4 menit). Batas ini berfluktuasi tergantung pada jumlah validator aktif, tetapi mencapai sekitar 0,33% dari total ETH yang dikunci dapat dikeluarkan dari jaringan dalam satu hari. -Hal ini mencegah terjadinya pengeluaran dana penaruhan secara massal. Selain itu, hal ini mencegah penyerang potensial yang memiliki akses ke sebagian besar total ETH yang dipertaruhkan untuk melakukan pelanggaran yang dapat dipotong dan keluar/menarik semua saldo validator yang melanggar pada jangka waktu yang sama sebelum protokol dapat memberlakukan hukuman pemotongan. +Ini mencegah eksodus massal dana yang dikunci. Selain itu, ini mencegah penyerang potensial dengan akses ke sebagian besar dari total ETH yang dikunci dari melakukan pelanggaran yang dapat dipotong dan keluar/menarik semua saldo validator yang melanggar di epoch yang sama sebelum protokol dapat menegakkan hukuman pemotongan. -APR juga disengaja dinamis, memungkinkan pasar para staker untuk menyeimbangkan seberapa banyak mereka bersedia dibayar untuk membantu mengamankan jaringan. Jika tingkatnya terlalu rendah, maka validator akan keluar dengan batas kecepatan yang ditentukan oleh protokol. Secara perlahan ini akan meningkatkan APR bagi semua yang tetap tinggal, menarik staker baru atau yang kembali lagi. +APR juga sengaja dibuat dinamis, memungkinkan pasar staker untuk menyeimbangkan berapa banyak mereka bersedia dibayar untuk membantu mengamankan jaringan. Jika tarifnya terlalu rendah, maka validator akan keluar pada tingkat yang dibatasi oleh protokol. Secara bertahap ini akan menaikkan APR untuk semua orang yang tersisa, menarik staker baru atau yang kembali lagi. -## Apa yang akan terjadi pada 'Eth2'? {#eth2} +## Apa yang terjadi pada 'Eth2'? {#eth2} -Istilah 'Eth2' telah dihentikan penggunaannya. Setelah menggabungkan 'Eth1' dan 'Eth2' menjadi satu rantai tunggal, tidak ada lagi kebutuhan untuk membedakan antara dua jaringan Ethereum; hanya ada Ethereum. +Istilah 'Eth2' telah dihentikan. Setelah menggabungkan 'Eth1' dan 'Eth2' menjadi satu rantai, tidak perlu lagi membedakan antara dua jaringan Ethereum; yang ada hanyalah Ethereum. -Untuk mengurangi kebingungan, komunitas telah memperbarui istilah-istilah berikut ini: +Untuk membatasi kebingungan, komunitas telah memperbarui istilah-istilah ini: -- 'Eth1' sekarang adalah 'lapisan eksekusi', yang menangani transaksi dan eksekusi. -- 'Eth2' sekarang adalah 'lapisan konsensus', yang menangani konsensus bukti taruhan. +- 'Eth1' sekarang menjadi 'lapisan eksekusi', yang menangani transaksi dan eksekusi. +- 'Eth2' sekarang menjadi 'lapisan konsensus', yang menangani konsensus proof-of-stake. -Pembaruan terminologi ini hanya mengubah konvensi penamaan; ini tidak mengubah tujuan atau peta perjalanan Ethereum. +Pembaruan terminologi ini hanya mengubah konvensi penamaan; ini tidak mengubah tujuan atau peta jalan Ethereum. -[Pelajari selengkapnya tentang penamaan ulang 'Eth2'](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming) +[Pelajari lebih lanjut tentang penggantian nama 'Eth2'](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming) ## Hubungan antar peningkatan {#relationship-between-upgrades} -Semua peningkatan Ethereum saling terkait. Jadi mari kita ringkas bagaimana Penggabungan ini berhubungan dengan peningkatan lain. +Peningkatan Ethereum semuanya agak saling terkait. Jadi mari kita rekap bagaimana The Merge berhubungan dengan peningkatan lainnya. -### Penggabungan dan Rantai Suar {#merge-and-beacon-chain} +### The Merge dan Beacon Chain {#merge-and-beacon-chain} -Pengabungan mewakili adopsi resmi Rantai Suar sebagai lapisan konsensus baru untuk lapisan eksekusi Jaringan Utama asli. Sejak Penggabungan, para validator ditugaskan untuk mengamankan Jaringan Utama Ethereum, dan penambangan menggunakan [bukti kerja](/developers/docs/consensus-mechanisms/pow/) tidak lagi merupakan cara yang valid untuk produksi blok. +The Merge mewakili adopsi formal Beacon Chain sebagai lapisan konsensus baru ke lapisan eksekusi Mainnet asli. Sejak The Merge, validator ditugaskan untuk mengamankan Mainnet Ethereum, dan penambangan pada [proof-of-work](/developers/docs/consensus-mechanisms/pow/) tidak lagi menjadi sarana produksi blok yang valid. -Blok diusulkan dengan memvalidasi simpul yang telah mempertaruhkan ETH dengan imbalan hak untuk berpartisipasi dalam konsensus. Peningkatan ini menyiapkan panggung untuk peningkatan skalabilitas di masa depan, termasuk pecahan. +Blok sebaliknya diusulkan oleh node validasi yang telah men-stake ETH sebagai imbalan atas hak untuk berpartisipasi dalam konsensus. Peningkatan ini menyiapkan panggung untuk peningkatan skalabilitas di masa depan, termasuk sharding. - Rantai Suar + Beacon Chain -### Penggabungan dan peningkatan Shanghai {#merge-and-shanghai} +### The Merge dan peningkatan Shanghai {#merge-and-shanghai} -Untuk menyederhanakan dan memaksimalkan fokus pada transisi yang sukses ke bukti taruhan, peningkatan Penggabungan tidak menyertakan fitur-fitur tertentu yang telah diantisipasi seperti kemampuan untuk menarik ETH yang dipertaruhkan. Fungsionalitas ini diaktifkan secara terpisah dengan peningkatan Shanghai/Capella. +Untuk menyederhanakan dan memaksimalkan fokus pada transisi yang sukses ke proof-of-stake, peningkatan The Merge tidak menyertakan fitur tertentu yang diantisipasi seperti kemampuan untuk menarik ETH yang dikunci. Fungsionalitas ini diaktifkan secara terpisah dengan peningkatan Shanghai/Capella. -Bagi mereka yang ingin tahu, pelajari selengkapnya tentang [Apa yang Terjadi Setelah Penggabungan](https://youtu.be/7ggwLccuN5s?t=101), yang disajikan oleh Vitalik pada acara ETHGlobal April 2021. +Bagi yang penasaran, pelajari lebih lanjut tentang [Apa yang Terjadi Setelah The Merge](https://youtu.be/7ggwLccuN5s?t=101), yang dipresentasikan oleh Vitalik di acara ETHGlobal April 2021. -### Penggabungan dan pecahan {#merge-and-data-sharding} +### The Merge dan sharding {#merge-and-data-sharding} -Awalnya, rencananya adalah mengerjakan pecahan sebelum Penggabungan untuk mengatasi skalabilitas. Namun, dengan munculnya solusi penskalaan [lapisan ke-2](/layer-2/), prioritas berubah menjadi menggantikan bukti kerja dengan bukti taruhan terlebih dahulu. +Awalnya, rencananya adalah mengerjakan sharding sebelum The Merge untuk mengatasi skalabilitas. Namun, dengan ledakan [solusi peningkatan layer 2](/layer-2/), prioritas bergeser ke menukar proof-of-work ke proof-of-stake terlebih dahulu. -Rencana untuk pecahan berkembang dengan cepat, tetapi dengan munculnya dan keberhasilan teknologi lapisan ke-2 untuk meningkatkan eksekusi transaksi, rencana pecahan telah bergeser untuk menemukan cara yang paling optimal untuk mendistribusikan beban penyimpanan data panggilan terkompresi dari kontrak rollup, yang memungkinkan pertumbuhan kapasitas jaringan secara eksponensial. Hal ini tidak akan mungkin terjadi tanpa terlebih dahulu beralih ke bukti taruhan. +Rencana untuk sharding berkembang pesat, tetapi mengingat kebangkitan dan keberhasilan teknologi layer 2 untuk meningkatkan eksekusi transaksi, rencana sharding telah bergeser untuk menemukan cara paling optimal untuk mendistribusikan beban penyimpanan calldata terkompresi dari kontrak rollup, memungkinkan pertumbuhan eksponensial dalam kapasitas jaringan. Ini tidak akan mungkin terjadi tanpa terlebih dahulu beralih ke proof-of-stake. - Pecahan + Sharding ## Bacaan lebih lanjut {#further-reading} - + \ No newline at end of file diff --git a/public/content/translations/id/social-networks/index.md b/public/content/translations/id/social-networks/index.md index 2f40f1e4615..88233be63f7 100644 --- a/public/content/translations/id/social-networks/index.md +++ b/public/content/translations/id/social-networks/index.md @@ -11,7 +11,7 @@ summaryPoint2: Jaringan media sosial terdesentralisasi melindungi privasi penggu summaryPoint3: Token dan NFT menciptakan cara baru untuk memonetisasi konten. --- -Jejaring sosial memainkan peran besar dalam komunikasi dan interaksi kita sehari-hari. Namun, kontrol terpusat dari platform-platform ini telah menciptakan banyak masalah: pelanggaran data, pemadaman server, penghapusan platform (de-platforming), penyensoran, dan pelanggaran privasi adalah beberapa kompromi yang sering dilakukan oleh media sosial. Untuk mengatasi masalah ini, para pengembang membangun jejaring sosial di [Ethereum](). Jejaring sosial terdesentralisasi dapat memperbaiki banyak masalah dari platform jejaring sosial tradisional dan meningkatkan pengalaman pengguna secara keseluruhan. +Jejaring sosial memainkan peran besar dalam komunikasi dan interaksi kita sehari-hari. Namun, kontrol terpusat dari platform-platform ini telah menciptakan banyak masalah: pelanggaran data, pemadaman server, penghapusan platform (de-platforming), penyensoran, dan pelanggaran privasi adalah beberapa kompromi yang sering dilakukan oleh media sosial. Untuk mengatasi masalah ini, para pengembang membangun jejaring sosial di [Ethereum](/). Jejaring sosial terdesentralisasi dapat memperbaiki banyak masalah dari platform jejaring sosial tradisional dan meningkatkan pengalaman pengguna secara keseluruhan. ## Apa itu jejaring sosial terdesentralisasi? {#what-are-decentralized-social-networks} diff --git a/public/content/translations/it/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/it/developers/docs/nodes-and-clients/node-architecture/index.md index 16fc968c799..798f9462765 100644 --- a/public/content/translations/it/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/it/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: it Un nodo di Ethereum è composto da due client: un [client di esecuzione](/developers/docs/nodes-and-clients/#execution-clients) e un [client di consenso](/developers/docs/nodes-and-clients/#consensus-clients). Affinché un nodo possa proporre un nuovo blocco, deve anche eseguire un [client validatore](#validators). -Quando Ethereum utilizzava la [prova di lavoro](/developers/docs/consensus-mechanisms/pow/), un client di esecuzione era sufficiente per eseguire un nodo completo di Ethereum. Tuttavia, dall'implementazione della [prova di stake](/developers/docs/consensus-mechanisms/pow/), il client di esecuzione deve essere utilizzato insieme a un altro software chiamato [client di consenso](/developers/docs/nodes-and-clients/#consensus-clients). +Quando Ethereum utilizzava la [prova di lavoro](/developers/docs/consensus-mechanisms/pow/), un client di esecuzione era sufficiente per eseguire un nodo completo di Ethereum. Tuttavia, dall'implementazione della [prova di stake](/developers/docs/consensus-mechanisms/pos/), il client di esecuzione deve essere utilizzato insieme a un altro software chiamato [client di consenso](/developers/docs/nodes-and-clients/#consensus-clients). Il diagramma sottostante mostra la relazione tra i due client di Ethereum. I due client si connettono alle rispettive reti peer-to-peer (P2P). Sono necessarie reti P2P separate poiché i client di esecuzione diffondono le transazioni sulla loro rete P2P, consentendo loro di gestire il proprio pool di transazioni locale, mentre i client di consenso diffondono i blocchi sulla loro rete P2P, consentendo il consenso e la crescita della catena. diff --git a/public/content/translations/it/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/it/developers/tutorials/hello-world-smart-contract-fullstack/index.md index c9a583e8cbf..79da708a0ec 100644 --- a/public/content/translations/it/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/public/content/translations/it/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -1,90 +1,94 @@ --- -title: Contratto intelligente "Hello World" per principianti - full stack -description: Tutorial introduttivo su come scrivere e distribuire un semplice smart contract su Ethereum. +title: Contratto intelligente Hello World per principianti - Fullstack +description: Tutorial introduttivo sulla scrittura e la distribuzione di un semplice contratto intelligente su Ethereum. author: "nstrike2" +breadcrumb: Hello World fullstack tags: - - "solidity" - - "hardhat" - - "alchemy" - - "contratti intelligenti" - - "distribuzione" - - "blockexplorer" - - "frontend" - - "transazioni" + [ + "Solidity", + "Hardhat", + "Alchemy", + "contratti intelligenti", + "distribuzione", + "esploratore di blocchi", + "frontend", + "transazioni", + "framework", + ] skill: beginner -breadcrumb: "Hello World fullstack" lang: it published: 2021-10-25 --- -Questa guida fa per te se hai appena iniziato con lo sviluppo sulla blockchain e non sai da dove cominciare o come distribuire e interagire con i contratti intelligenti. Esamineremo la creazione e la distribuzione di un semplice contratto intelligente sulla rete di prova di Goerli, utilizzando [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org) e [Alchemy](https://alchemyapi.io/eth). +Questa guida fa per te se sei nuovo nello sviluppo su blockchain e non sai da dove iniziare o come distribuire e interagire con i contratti intelligenti. Ti guideremo attraverso la creazione e la distribuzione di un semplice contratto intelligente sulla rete di test di Goerli utilizzando [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org) e [Alchemy](https://alchemy.com/eth). -Per completare questo tutorial avrai bisogno di un conto di Alchemy. [Registrati per un conto gratuito](https://www.alchemy.com/). +Avrai bisogno di un account Alchemy per completare questo tutorial. [Registrati per un account gratuito](https://www.alchemy.com/). -Se in qualsiasi momento hai domande, non esitare a contattarci nel [Discord di Alchemy](https://discord.gg/gWuC7zB)! +Se hai domande in qualsiasi momento, non esitare a contattarci sul [Discord di Alchemy](https://discord.gg/gWuC7zB)! -## Parte 1- Crea e distribuisci il tuo contratto intelligente usando Hardhat {#part-1} +## Parte 1 - Creare e distribuire il tuo contratto intelligente usando Hardhat {#part-1} ### Connettersi alla rete di Ethereum {#connect-to-the-ethereum-network} -Esistono molti modi per effettuare richieste alla catena di Ethereum. Per semplicità, ci serviremo di un conto gratuito su Alchemy, una piattaforma per sviluppatori di blockchain e API che ci consentirà di comunicare con la catena di Ethereum senza dover eseguire noi stessi un nodo. Alchemy offre anche strumenti di monitoraggio e analisi per gli sviluppatori di cui ci serviremo in questo tutorial per comprendere al meglio l'andamento della distribuzione del nostro contratto intelligente. +Ci sono molti modi per effettuare richieste alla catena di Ethereum. Per semplicità, useremo un account gratuito su Alchemy, una piattaforma per sviluppatori blockchain e API che ci consente di comunicare con la catena di Ethereum senza eseguire un nodo noi stessi. Alchemy dispone anche di strumenti per sviluppatori per il monitoraggio e l'analisi; ne trarremo vantaggio in questo tutorial per capire cosa succede dietro le quinte nella distribuzione del nostro contratto intelligente. -### Crea la tua app e la chiave API {#create-your-app-and-api-key} +### Creare la tua app e la chiave API {#create-your-app-and-api-key} -Una volta creato un conto di Alchemy, puoi generare una chiave API creando un'app. Questo ti consentirà di effettuare richieste alla rete di prova di Goerli. Se non hai familiarità con le reti di prova puoi [leggere la guida di Alchemy alla scelta di una rete](https://docs.alchemyapi.io/guides/choosing-a-network). +Una volta creato un account Alchemy, puoi generare una chiave API creando un'app. Questo ti consentirà di effettuare richieste alla rete di test di Goerli. Se non hai familiarità con le reti di test, puoi [leggere la guida di Alchemy sulla scelta di una rete](https://www.alchemy.com/docs/choosing-a-web3-network). -Sul pannello di controllo di Alchemy, trova il menu a discesa delle **App** nella barra di navigazione e fai clic su su **Crea App**. +Nella dashboard di Alchemy, trova il menu a discesa **Apps** nella barra di navigazione e fai clic su **Create App**. -![Creare l'app Hello world](./hello-world-create-app.png) +![Hello world create app](./hello-world-create-app.png) -Nomina la tua app '_Hello World_' e scrivi una breve descrizione. Seleziona **Staging** come tuo ambiente e **Goerli** come tua rete. +Dai alla tua app il nome '_Hello World_' e scrivi una breve descrizione. Seleziona **Staging** come ambiente e **Goerli** come rete. -![Vista della creazione dell'app Hello world](./create-app-view-hello-world.png) +![create app view hello world](./create-app-view-hello-world.png) _Nota: assicurati di selezionare **Goerli**, altrimenti questo tutorial non funzionerà._ -Fa i clic su **Crea app**. La tua app apparirà nella tabella sottostante. +Fai clic su **Create app**. La tua app apparirà nella tabella sottostante. -### Crea un conto di Ethereum {#create-an-ethereum-account} +### Creare un account Ethereum {#create-an-ethereum-account} -Per inviare e ricevere transazioni, hai bisogno di un account di Ethereum. Useremo MetaMask, un portafoglio virtuale nel browser che permette agli utenti di gestire l'indirizzo del proprio conto di Ethereum. +Hai bisogno di un account Ethereum per inviare e ricevere transazioni. Useremo MetaMask, un portafoglio virtuale nel browser che consente agli utenti di gestire l'indirizzo del proprio account Ethereum. -Puoi scaricare e creare gratuitamente un conto di MetaMask [qui](https://metamask.io/download). Quando crei un account, o se ne possiedi già uno, assicurati di passare alla "rete di prova di Goerli" in alto a destra (così da non avere a che fare con denaro reale). +Puoi scaricare e creare un account MetaMask gratuitamente [qui](https://metamask.io/download). Quando crei un account, o se ne hai già uno, assicurati di passare alla "Goerli Test Network" in alto a destra (in modo da non avere a che fare con denaro reale). -### Fase 4: aggiungi ether da un Faucet {#step-4-add-ether-from-a-faucet} +### Passaggio 4: Aggiungere ether da un rubinetto {#step-4-add-ether-from-a-faucet} -Per distribuire il tuo contratto intelligente sulla rete di prova, avrai bisogno di alcuni ETH finti. Per ottenere ETH sulla rete di Goerli, vai ad un faucet di Goerli e immetti l'indirizzo del tuo conto di Goerli. Nota che, di recente, i faucet di Goerli possono essere un po' inaffidabili; consulta la [pagina delle reti di prova](/developers/docs/networks/#goerli) per un elenco di opzioni da provare: +Per distribuire il tuo contratto intelligente sulla rete di test, avrai bisogno di alcuni ETH finti. Per ottenere ETH sulla rete Goerli, vai a un rubinetto Goerli e inserisci l'indirizzo del tuo account Goerli. Nota che i rubinetti Goerli possono essere un po' inaffidabili ultimamente - vedi la [pagina delle reti di test](/developers/docs/networks/#goerli) per un elenco di opzioni da provare: -_Nota: a causa della congestione della rete, questa operazione potrebbe richiedere del tempo_ `` +_Nota: a causa della congestione della rete, questo potrebbe richiedere un po' di tempo._ +`` -### Fase 5: controlla il saldo {#step-5-check-your-balance} +### Passaggio 5: Controllare il tuo saldo {#step-5-check-your-balance} -Per ricontrollare che gli ETH siano nel tuo portafoglio, facciamo una richiesta [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) usando lo [strumento compositore di Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Questo restituirà l'importo di ETH nel nostro portafoglio. Per saperne di più consultate [il breve tutorial di Alchemy su come usare lo strumento compositore](https://youtu.be/r6sjRxBZJuU). +Per ricontrollare che gli ETH siano nel tuo portafoglio, facciamo una richiesta [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) usando lo [strumento composer di Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Questo restituirà la quantità di ETH nel nostro portafoglio. Per saperne di più dai un'occhiata al [breve tutorial di Alchemy su come usare lo strumento composer](https://youtu.be/r6sjRxBZJuU). -Inserisci l'indirizzo del tuo conto di MetaMask e fai clic su **Invia richiesta**. Vedrai una risposta simile al pezzetto di codice qui sotto. +Inserisci l'indirizzo del tuo account MetaMask e fai clic su **Send Request**. Vedrai una risposta simile al frammento di codice qui sotto. ```json { "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } ``` -> _Nota: questo risultato è in wei, non in ETH. Wei è usato come taglio più piccolo dell'ether._ +> _Nota: Questo risultato è in wei, non in ETH. Il wei è usato come la denominazione più piccola di ether._ -Meno male! I nostri soldi finti ci sono tutti. +Fiuu! I nostri soldi finti ci sono tutti. -### Fase 6: inizializza il progetto {#step-6-initialize-our-project} +### Passaggio 6: Inizializzare il nostro progetto {#step-6-initialize-our-project} -Per prima cosa dobbiamo creare una cartella per il nostro progetto. Passa alla tua riga di comando e inserisci quanto segue. +Per prima cosa, dovremo creare una cartella per il nostro progetto. Vai alla riga di comando e inserisci quanto segue. ``` mkdir hello-world cd hello-world ``` -Ora che siamo nella cartella del nostro progetto, useremo `npm init` per inizializzare il progetto. +Ora che siamo all'interno della cartella del nostro progetto, useremo `npm init` per inizializzare il progetto. -> Se non hai ancora installato npm, segui [queste istruzioni su come installare Node.js e npm](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm). +> Se non hai ancora installato npm, segui [queste istruzioni per installare Node.js e npm](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm). -Ai fini di questo tutorial, non ha importanza a come rispondi alle domande di inizializzazione. Per tuo riferimento, ecco come abbiamo fatto: +Ai fini di questo tutorial, non importa come rispondi alle domande di inizializzazione. Ecco come abbiamo fatto noi come riferimento: ``` package name: (hello-world) @@ -112,29 +116,29 @@ About to write to /Users/.../.../.../hello-world/package.json: } ``` -Approva il package.json e siamo pronti! +Approva il package.json e siamo pronti a partire! -### Passo 7: scarica Hardhat {#step-7-download-hardhat} +### Passaggio 7: Scaricare Hardhat {#step-7-download-hardhat} -Hardhat è un ambiente di sviluppo per compilare, distribuire, testare ed effettuare il debug del tuo software di Ethereum. Aiuta gli sviluppatori nella costruzione di contratti intelligenti e dapp localmente, prima di distribuirli alla catena. +Hardhat è un ambiente di sviluppo per compilare, distribuire, testare ed eseguire il debug del tuo software Ethereum. Aiuta gli sviluppatori nella creazione di contratti intelligenti e dApp localmente prima di distribuirli sulla catena live. -Nel nostro progetto `hello-world` esegui: +All'interno del nostro progetto `hello-world` esegui: ``` npm install --save-dev hardhat ``` -Dai un'occhiata a questa pagina per ulteriori dettagli sulle [istruzioni d'installazione](https://hardhat.org/getting-started/#overview). +Dai un'occhiata a questa pagina per maggiori dettagli sulle [istruzioni di installazione](https://hardhat.org/getting-started/#overview). -### Fase 8: crea un progetto Hardhat {#step-8-create-hardhat-project} +### Passaggio 8: Creare il progetto Hardhat {#step-8-create-hardhat-project} -All'interno della cartella di progetto `hello-world` esegui: +All'interno della cartella del nostro progetto `hello-world`, esegui: ``` npx hardhat ``` -Dovresti poi vedere un messaggio di benvenuto e l'opzione per selezionare cosa desideri fare. Seleziona “crea un hardhat.config.js vuoto”: +Dovresti quindi vedere un messaggio di benvenuto e l'opzione per selezionare cosa vuoi fare. Seleziona "create an empty hardhat.config.js": ``` 888 888 888 888 888 @@ -154,38 +158,38 @@ Create a sample project Quit ``` -Questo genererà un file `hardhat.config.js` nel progetto. Lo utilizzeremo più avanti nel tutorial per specificare la configurazione del nostro progetto. +Questo genererà un file `hardhat.config.js` nel progetto. Lo useremo più avanti nel tutorial per specificare la configurazione del nostro progetto. -### Fase 9: aggiungi le cartelle del progetto {#step-9-add-project-folders} +### Passaggio 9: Aggiungere le cartelle del progetto {#step-9-add-project-folders} -Per mantenere organizzato il nostro progetto, creiamo due nuove cartelle. Nella riga di comando, vai alla cartella di root del tuo progetto `hello-world` e digita: +Per mantenere il progetto organizzato, creiamo due nuove cartelle. Nella riga di comando, vai alla directory principale del tuo progetto `hello-world` e digita: ``` mkdir contracts mkdir scripts ``` -- `contracts/` è dove manterremo il file del codice del nostro smart contract hello world -- `scripts/` è dove manterremo gli script per distribuire e interagire con il nostro contratto +- `contracts/` è dove conserveremo il file di codice del nostro contratto intelligente hello world +- `scripts/` è dove conserveremo gli script per distribuire e interagire con il nostro contratto -### Fase 10: compila il nostro contratto {#step-10-write-our-contract} +### Passaggio 10: Scrivere il nostro contratto {#step-10-write-our-contract} -Potresti chiederti: quando scriveremo del codice? È arrivato il momento! +Potresti chiederti: quando scriveremo il codice? È arrivato il momento! -Apri il progetto hello-world nel tuo editor preferito. La maggior parte dei contratti intelligenti è scritta in Solidity, che useremo per scrivere il nostro contratto intelligente +Apri il progetto hello-world nel tuo editor preferito. I contratti intelligenti sono scritti più comunemente in Solidity, che useremo per scrivere il nostro contratto intelligente.‌ 1. Vai alla cartella `contracts` e crea un nuovo file chiamato `HelloWorld.sol` -2. Di seguito, un esempio del contratto intelligente Hello World che utilizzeremo per questo tutorial. Copia il contenuto seguente in un file `HelloWorld.sol`. +2. Di seguito è riportato un contratto intelligente Hello World di esempio che useremo per questo tutorial. Copia i contenuti sottostanti nel file `HelloWorld.sol`. -_Nota: assicurati di leggere i commenti per comprendere cosa fa questo contratto._ +_Nota: Assicurati di leggere i commenti per capire cosa fa questo contratto._ ``` -// Specifica la versione di Solidity, utilizzando il controllo delle versioni semantico. +// Specifies the version of Solidity, using semantic versioning. // Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma pragma solidity >=0.7.3; // Defines a contract named `HelloWorld`. -// Un contratto è una raccolta di funzioni e dati (il suo stato). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +// A contract is a collection of functions and data (its state). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html contract HelloWorld { //Emitted when update function is called @@ -193,11 +197,11 @@ contract HelloWorld { event UpdatedMessages(string oldStr, string newStr); // Declares a state variable `message` of type `string`. - // Le variabili di stato sono variabili con valori memorizzati in modo permanente nello spazio di archiviazione (storage) del contratto. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value. + // State variables are variables whose values are permanently stored in contract storage. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value. string public message; // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation. - // I costruttori sono utilizzati per inizializzare i dati del contratto. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + // Constructors are used to initialize the contract's data. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors constructor(string memory initMessage) { // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable). @@ -213,59 +217,59 @@ contract HelloWorld { } ``` -Questo è un contratto intelligente di base che memorizza un messaggio al momento della creazione. Può essere aggiornato richiamando la funzione `update`. +Questo è un contratto intelligente di base che memorizza un messaggio al momento della creazione. Può essere aggiornato chiamando la funzione `update`. -### Fase 11: connetti MetaMask e Alchemy al tuo progetto {#step-11-connect-metamask-alchemy-to-your-project} +### Passaggio 11: Connettere MetaMask e Alchemy al tuo progetto {#step-11-connect-metamask-alchemy-to-your-project} -Abbiamo creato un portafoglio di MetaMask, un conto di Alchemy e scritto il nostro contratto intelligente; è arrivato il momento di collegarli. +Abbiamo creato un portafoglio MetaMask, un account Alchemy e scritto il nostro contratto intelligente, ora è il momento di connettere i tre. -Ogni transazione inviata dal tuo portafoglio richiede una firma tramite la tua chiave privata univoca. Per fornire al nostro programma quest'autorizzazione, possiamo memorizzare in sicurezza la nostra chiave privata in un file di ambiente. Qui memorizzeremo anche una chiave API per Alchemy. +Ogni transazione inviata dal tuo portafoglio richiede una firma utilizzando la tua chiave privata univoca. Per fornire al nostro programma questa autorizzazione, possiamo archiviare in modo sicuro la nostra chiave privata in un file di ambiente. Qui memorizzeremo anche una chiave API per Alchemy. -> Per saperne di più sull'invio delle transazioni, dai un'occhiata a [questo tutorial](https://docs.alchemyapi.io/alchemy/tutorials/sending-transactions-using-web3-and-alchemy) sull'invio di transazioni usando web3. +> Per saperne di più sull'invio di transazioni, dai un'occhiata a [questo tutorial](https://www.alchemy.com/docs/hello-world-smart-contract#step-11-connect-metamask--alchemy-to-your-project) sull'invio di transazioni usando web3. -Prima, installa il pacchetto dotenv nella cartella del tuo progetto: +Per prima cosa, installa il pacchetto dotenv nella directory del tuo progetto: ``` npm install dotenv --save ``` -Quindi, crea un file `.env` nella cartella di root del progetto. Aggiungi nel file la tua chiave privata di MetaMask e l'URL HTTP dell'API Alchemy. +Quindi, crea un file `.env` nella directory principale del progetto. Aggiungi la tua chiave privata MetaMask e l'URL dell'API HTTP di Alchemy. -Il tuo file di ambiente deve essere nominato `.env` o non verrà riconosciuto come un file di ambiente. +Il tuo file di ambiente deve essere chiamato `.env` o non verrà riconosciuto come file di ambiente. -Non nominarlo `process.env` o `.env-custom` o in altro modo. +Non chiamarlo `process.env` o `.env-custom` o in qualsiasi altro modo. - Segui [queste istruzioni](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) per esportare la tua chiave privata -- Vedi sotto per ottenere l'URL dell'API di Alchemy HTTP +- Vedi sotto per ottenere l'URL dell'API HTTP di Alchemy -![Procedura dettagliata animata per ottenere una chiave API Alchemy](./get-alchemy-api-key.gif) +![Animated walkthrough of getting an Alchemy API key](./get-alchemy-api-key.gif) -Il tuo `.env` dovrebbe somigliare a questo: +Il tuo `.env` dovrebbe apparire così: ``` API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" PRIVATE_KEY = "your-metamask-private-key" ``` -Per connetterli realmente al nostro codice, faremo riferimento a queste variabili nel nostro file `hardhat.config.js` nella fase 13. +Per connetterli effettivamente al nostro codice, faremo riferimento a queste variabili nel nostro file `hardhat.config.js` al passaggio 13. -### Fase 12: installa Ethers.js {#step-12-install-ethersjs} +### Passaggio 12: Installare Ethers.js {#step-12-install-ethersjs} -Ethers.js è una libreria che rende più facile interagire ed effettuare richieste a Ethereum tramite wrapping dei metodi JSON-RPC standard con altri metodi più facili da usare. +Ethers.js è una libreria che semplifica l'interazione e l'effettuazione di richieste a Ethereum avvolgendo i [metodi JSON-RPC standard](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc) con metodi più intuitivi per l'utente. -Hardhat ci permette di integrare i [plugin](https://hardhat.org/plugins/) per avere strumenti aggiuntivi e funzionalità estese. Sfrutteremo il [plugin di Ethers](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) per la distribuzione del contratto. +Hardhat ci consente di integrare [plugin](https://hardhat.org/plugins/) per strumenti aggiuntivi e funzionalità estese. Sfrutteremo il [plugin Ethers](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) per la distribuzione del contratto. -Nella cartella del tuo progetto digita: +Nella directory del tuo progetto digita: ```bash npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" ``` -### Fase 13: aggiorna hardhat.config.js {#step-13-update-hardhat-configjs} +### Passaggio 13: Aggiornare hardhat.config.js {#step-13-update-hardhat-configjs} -Finora abbiamo aggiunto diverse dipendenze e plugin, ora dobbiamo aggiornare `hardhat.config.js` in modo che il nostro progetto li riconosca tutti. +Finora abbiamo aggiunto diverse dipendenze e plugin, ora dobbiamo aggiornare `hardhat.config.js` in modo che il nostro progetto li conosca tutti. -Aggiorna il tuo `hardhat.config.js` affinché somigli a questo: +Aggiorna il tuo `hardhat.config.js` in modo che appaia così: ```javascript /** @@ -290,9 +294,9 @@ module.exports = { } ``` -### Fase 14: compila il contratto {#step-14-compile-our-contract} +### Passaggio 14: Compilare il nostro contratto {#step-14-compile-our-contract} -Per assicurarti che tutto funzioni fino a questo punto, compila il contratto. L'attività di `compilazione` è una delle attività integrate di hardhat. +Per assicurarci che tutto funzioni finora, compiliamo il nostro contratto. L'attività `compile` è una delle attività integrate di hardhat. Dalla riga di comando esegui: @@ -300,19 +304,19 @@ Dalla riga di comando esegui: npx hardhat compile ``` -Potresti ricevere un avviso `SPDX license identifier not provided in source file`, ma non ti preoccupare, si spera che tutto il resto funzioni! Altrimenti, puoi sempre inviare un messaggio nel [Discord di Alchemy](https://discord.gg/u72VCg3). +Potresti ricevere un avviso su `SPDX license identifier not provided in source file`, ma non c'è bisogno di preoccuparsi di questo — si spera che tutto il resto sembri a posto! In caso contrario, puoi sempre inviare un messaggio nel [discord di Alchemy](https://discord.gg/u72VCg3). -### Fase 15: scrivi lo script di distribuzione {#step-15-write-our-deploy-script} +### Passaggio 15: Scrivere il nostro script di distribuzione {#step-15-write-our-deploy-script} -Ora che il nostro contratto è scritto e il nostro file di configurazione è pronto, è il momento di scrivere lo script di distribuzione del contratto. +Ora che il nostro contratto è stato scritto e il nostro file di configurazione è pronto, è il momento di scrivere il nostro script di distribuzione del contratto. -Vai alla cartella `script/` e crea un nuovo file chiamato `deploy.js`, aggiungendo i seguenti contenuti: +Vai alla cartella `scripts/` e crea un nuovo file chiamato `deploy.js`, aggiungendovi i seguenti contenuti: ```javascript async function main() { const HelloWorld = await ethers.getContractFactory("HelloWorld") - // Start deployment, returning a promise that resolves to a contract object + // Avvia il deployment, restituendo una promise che si risolve in un oggetto contratto const hello_world = await HelloWorld.deploy("Hello World!") console.log("Contract deployed to address:", hello_world.address) } @@ -325,59 +329,59 @@ main() }) ``` -Nel suo [tutorial sui Contratti](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) hardhat spiega in modo eccellente cosa fa ognuna di queste righe di codice nel loro, quindi riportiamo qui le loro spiegazioni. +Hardhat fa un lavoro straordinario nello spiegare cosa fa ciascuna di queste righe di codice nel loro [tutorial sui Contratti](https://hardhat.org/tutorial/testing-contracts.html#writing-tests), abbiamo adottato le loro spiegazioni qui. ```javascript const HelloWorld = await ethers.getContractFactory("HelloWorld") ``` -Un `ContractFactory` su ethers.js è un'astrazione usata per distribuire nuovi contratti intelligenti, quindi `HelloWorld` qui è una [fabbrica](https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)) di istanze del nostro contratto hello world. Usando il plugin `hardhat-ethers`, le istanze `ContractFactory` e `Contract` sono connesse di default al primo firmatario (proprietario). +Una `ContractFactory` in ethers.js è un'astrazione utilizzata per distribuire nuovi contratti intelligenti, quindi `HelloWorld` qui è una [fabbrica]() per le istanze del nostro contratto hello world. Quando si utilizza il plugin `hardhat-ethers`, le istanze `ContractFactory` e `Contract` sono connesse al primo firmatario (proprietario) per impostazione predefinita. ```javascript const hello_world = await HelloWorld.deploy() ``` -Chiamare `deploy()` su un `ContractFactory` avvierà la distribuzione e restituirà un `Promise` che si risolve in un oggetto `Contract`. Questo è l'oggetto che ha un metodo per ciascuna delle funzioni del nostro smart contract. +Chiamare `deploy()` su una `ContractFactory` avvierà la distribuzione e restituirà una `Promise` che si risolve in un oggetto `Contract`. Questo è l'oggetto che ha un metodo per ciascuna delle funzioni del nostro contratto intelligente. -### Fase 16: distribuisci il contratto {#step-16-deploy-our-contract} +### Passaggio 16: Distribuire il nostro contratto {#step-16-deploy-our-contract} -Siamo finalmente pronti a distribuire il nostro smart contract! Vai alla riga di comando ed esegui: +Siamo finalmente pronti per distribuire il nostro contratto intelligente! Vai alla riga di comando ed esegui: ```bash npx hardhat run scripts/deploy.js --network goerli ``` -Vorrai poi vedere qualcosa del genere: +Dovresti quindi vedere qualcosa di simile a: ```bash Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 ``` -**Salva questo indirizzo**. Lo useremo più avanti nel tutorial. +**Per favore, salva questo indirizzo**. Lo useremo più avanti nel tutorial. -Se andiamo all'[etherscan di Goerli](https://goerli.etherscan.io) e cerchiamo l'indirizzo del nostro contratto, dovremmo poter vedere che è stato distribuito correttamente. La transazione somiglierà a questa: +Se andiamo su [Goerli etherscan](https://goerli.etherscan.io) e cerchiamo l'indirizzo del nostro contratto, dovremmo essere in grado di vedere che è stato distribuito con successo. La transazione apparirà in questo modo: ![](./etherscan-contract.png) -L'indirizzo `From` dovrebbe corrispondere all'indirizzo del tuo conto di MetaMask mentre l'indirizzo `To` riporterà la dicitura **Creazione del contratto**. Se facciamo clic sulla transazione vedremo l'indirizzo del contratto nel campo `To`. +L'indirizzo `From` dovrebbe corrispondere all'indirizzo del tuo account MetaMask e l'indirizzo `To` indicherà **Contract Creation**. Se facciamo clic sulla transazione, vedremo l'indirizzo del nostro contratto nel campo `To`. ![](./etherscan-transaction.png) -Congratulazioni! Hai appena distribuito un contratto intelligente su una rete di prova di Ethereum. +Congratulazioni! Hai appena distribuito un contratto intelligente su una rete di test di Ethereum. -Per capire cosa sta succedendo, andiamo alla scheda Explorer nel nostro [dashboard di Alchemy](https://dashboard.alchemyapi.io/explorer). Se hai diverse app di Alchemy assicurati di filtrare per app e selezionare **Hello World**. +Per capire cosa succede dietro le quinte, andiamo alla scheda Explorer nella nostra [dashboard di Alchemy](https://dashboard.alchemy.com/explorer). Se hai più app Alchemy, assicurati di filtrare per app e seleziona **Hello World**. ![](./hello-world-explorer.png) -Qui vedrai numerosi metodi JSON-RPC che Harhat/Ethers ha creato dietro le quinte per noi quando abbiamo chiamato la funzione `.deploy()`. Due metodi importanti sono [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), che è la richiesta per scrivere il nostro contratto sulla catena di Goeli, e [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash), che è una richiesta di leggere le informazioni sulla nostra transazione in base all'hash. Per saperne di più sull'invio di transazioni, dai un'occhiata al [nostro tutorial sull'invio di transazioni usando Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/). +Qui vedrai una manciata di metodi JSON-RPC che Hardhat/Ethers ha creato dietro le quinte per noi quando abbiamo chiamato la funzione `.deploy()`. Due metodi importanti qui sono [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), che è la richiesta di scrivere il nostro contratto sulla catena Goerli, e [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash), che è una richiesta per leggere informazioni sulla nostra transazione dato l'hash. Per saperne di più sull'invio di transazioni, dai un'occhiata al [nostro tutorial sull'invio di transazioni usando Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/). -## Parte 2: interagisci con il tuo contratto intelligente {#part-2-interact-with-your-smart-contract} +## Parte 2: Interagire con il tuo contratto intelligente {#part-2-interact-with-your-smart-contract} -Adesso che abbiamo distribuito con successo un contratto intelligente nella rete di Goerli, impariamo come interagire con esso. +Ora che abbiamo distribuito con successo un contratto intelligente sulla rete Goerli, impariamo come interagirvi. -### Crea un file interact.js {#create-a-interactjs-file} +### Creare un file interact.js {#create-a-interactjs-file} -Questo è il file dove scriveremo il nostro script di interazione. Useremo la libreria Ethers.js che hai installato precedentemente nella Parte 1. +Questo è il file in cui scriveremo il nostro script di interazione. Utilizzeremo la libreria Ethers.js che hai installato in precedenza nella Parte 1. All'interno della cartella `scripts/`, crea un nuovo file chiamato `interact.js` e aggiungi il seguente codice: @@ -389,13 +393,13 @@ const PRIVATE_KEY = process.env.PRIVATE_KEY const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS ``` -### Aggiorna il tuo file .env {#update-your-env-file} +### Aggiornare il file .env {#update-your-env-file} -Useremo delle nuove variabili di ambiente, quindi dobbiamo definirle nel file `.env` che [abbiamo creato in precedenza](#step-11-connect-metamask-&-alchemy-to-your-project). +Utilizzeremo nuove variabili d'ambiente, quindi dobbiamo definirle nel file `.env` che [abbiamo creato in precedenza](#step-11-connect-metamask-&-alchemy-to-your-project). -Dovremo aggiungere una definizione per la nostra `CHIAVE_API` di Alchemy e il `CONTRACT_ADDRESS` dove è stato distribuito il tuo contratto intelligente. +Dovremo aggiungere una definizione per la nostra `API_KEY` di Alchemy e il `CONTRACT_ADDRESS` in cui è stato distribuito il tuo contratto intelligente. -Il tuo file `.env` dovrebbe assomigliare a questo: +Il tuo file `.env` dovrebbe avere un aspetto simile a questo: ```bash # .env @@ -406,36 +410,36 @@ PRIVATE_KEY = "" CONTRACT_ADDRESS = "0x" ``` -### Prendi l'ABI del tuo contratto {#grab-your-contract-ABI} +### Ottenere l'ABI del contratto {#grab-your-contract-ABI} -L'[ABI (Interfaccia Binaria dell'Applicazione)](/glossary/#abi) del nostro contratto è l'interfaccia per interagire con il nostro contratto intelligente. Hardhat genera automaticamente l'ABI e la salva in `HelloWorld.json`. Per usare l'ABI, dobbiamo analizzarne il contenuto aggiungendo le seguenti righe di codice al nostro file `interact.js`: +L'[ABI (Application Binary Interface)](/glossary/#abi) del nostro contratto è l'interfaccia per interagire con il nostro contratto intelligente. Hardhat genera automaticamente un'ABI e la salva in `HelloWorld.json`. Per utilizzare l'ABI, dovremo analizzarne i contenuti aggiungendo le seguenti righe di codice al nostro file `interact.js`: ```javascript // interact.js const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") ``` -Se vuoi vedere l'ABI, puoi stamparla nella tua console: +Se vuoi vedere l'ABI puoi stamparla nella tua console: ```javascript console.log(JSON.stringify(contract.abi)) ``` -Per vedere l'ABI stampata alla console, vai al terminale ed esegui: +Per vedere la tua ABI stampata nella console, vai al tuo terminale ed esegui: ```bash npx hardhat run scripts/interact.js ``` -### Crea un'istanza del tuo contratto {#create-an-instance-of-your-contract} +### Creare un'istanza del tuo contratto {#create-an-instance-of-your-contract} -Per interagire con il tuo contratto, dobbiamo creare un'istanza del contratto nel nostro codice. Per farlo con Ethers.js, dovremo lavorare con tre concetti: +Per interagire con il nostro contratto, dobbiamo creare un'istanza del contratto nel nostro codice. Per farlo con Ethers.js, dovremo lavorare con tre concetti: -1. Fornitore - un fornitore di nodi che consente l'accesso in lettura e scrittura alla blockchain -2. Firmatario - rappresenta un conto di Ethereum che può firmare transazioni -3. Contratto - un oggetto Ethers.js che rappresenta uno specifico contratto distribuito sulla catena +1. Provider: un provider di nodi che ti dà accesso in lettura e scrittura alla blockchain +2. Signer: rappresenta un account di Ethereum che può firmare transazioni +3. Contract: un oggetto Ethers.js che rappresenta un contratto specifico distribuito on-chain -Utilizzeremo l'ABI del contratto della fase precedente per creare la nostra istanza del contratto: +Utilizzeremo l'ABI del contratto del passaggio precedente per creare la nostra istanza del contratto: ```javascript // interact.js @@ -449,7 +453,7 @@ const alchemyProvider = new ethers.providers.AlchemyProvider( // Signer const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) -// Contract +// Contratto const helloWorldContract = new ethers.Contract( CONTRACT_ADDRESS, contract.abi, @@ -457,17 +461,15 @@ const helloWorldContract = new ethers.Contract( ) ``` -Per saperne di più su fornitori, firmatari e contratti consultare la [documentazione di ethers.js](https://docs.ethers.io/v5/). - -### Leggi il messaggio init {#read-the-init-message} +Scopri di più su Provider, Signer e Contract nella [documentazione di ethers.js](https://docs.ethers.io/v5/). -Ricordi quando abbiamo distribuito il nostro contratto con il `initMessage = "Hello world!"`? Ora andremo a leggere il messaggio memorizzato nel nostro contratto intelligente e a stamparlo nella console. +### Leggere il messaggio di inizializzazione {#read-the-init-message} -In JavaScript, quando si interagisce con le reti vengono usate funzioni asincrone. Per saperne di più sulle funzioni asincrone, [leggi questo articolo di Medium](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff). - -Usa il codice qui sotto per chiamare la funzione `message` nel nostro contratto intelligente e leggere il messaggio init: +Ricordi quando abbiamo distribuito il nostro contratto con `initMessage = "Hello world!"`? Ora leggeremo quel messaggio memorizzato nel nostro contratto intelligente e lo stamperemo nella console. +In JavaScript, le funzioni asincrone vengono utilizzate quando si interagisce con le reti. Per saperne di più sulle funzioni asincrone, [leggi questo articolo su Medium](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff). +Usa il codice sottostante per chiamare la funzione `message` nel nostro contratto intelligente e leggere il messaggio di inizializzazione: ```javascript // interact.js @@ -481,27 +483,19 @@ async function main() { main() ``` - -Dopo aver eseguito il file usando il comando `npx hardhat run scripts/interact.js` da terminale, dovremmo vedere questa risposta: - - +Dopo aver eseguito il file usando `npx hardhat run scripts/interact.js` nel terminale, dovremmo vedere questa risposta: ``` The message is: Hello world! ``` +Congratulazioni! Hai appena letto con successo i dati del contratto intelligente dalla blockchain di Ethereum, ottimo lavoro! -Congratulazioni! Hai appena letto con successo i dati dal contratto intelligente dalla blockchain Ethereum, complimenti! - - - -### Aggiorna il messaggio {#update-the-message} - -Invece di limitarci a leggere il messaggio, possiamo anche aggiornare il messaggio salvato nel nostro contratto intelligente usando la funzione `update`! Piuttosto forte, vero? - -Per aggiornare il messaggio, possiamo chiamare direttamente la funzione `update` nel nostro oggetto Contratto instanziato: +### Aggiornare il messaggio {#update-the-message} +Invece di leggere semplicemente il messaggio, possiamo anche aggiornare il messaggio salvato nel nostro contratto intelligente usando la funzione `update`! Fantastico, vero? +Per aggiornare il messaggio, possiamo chiamare direttamente la funzione `update` sul nostro oggetto Contract istanziato: ```javascript // interact.js @@ -519,19 +513,14 @@ async function main() { main() ``` +Nota che alla riga 11, effettuiamo una chiamata a `.wait()` sull'oggetto della transazione restituito. Questo assicura che il nostro script attenda che la transazione venga minata sulla blockchain prima di uscire dalla funzione. Se la chiamata `.wait()` non è inclusa, lo script potrebbe non vedere il valore `message` aggiornato nel contratto. -Da notare che alla riga 11, facciamo una chiamata a `.wait()` all'oggetto transazione restituito. Questo assicura che il nostro script aspetti che la transazione venga minata sulla blockchain prima di uscire dalla funzione. Se la chiamata `.wait()` non viene inclusa, lo script potrebbe non vedere il valore `message` aggiornato nel contratto. - - +### Leggere il nuovo messaggio {#read-the-new-message} -### Leggi il nuovo messaggio {#read-the-new-message} - -Ora dovresti essere capace di ripetere la [fase precedente](#read-the-init-message) per leggere il valore `message` aggiornato. Prenditi un momento e vedi se riesci ad apportare le modifiche necessarie per stampare il nuovo valore! +Dovresti essere in grado di ripetere il [passaggio precedente](#read-the-init-message) per leggere il valore `message` aggiornato. Prenditi un momento e vedi se riesci ad apportare le modifiche necessarie per stampare quel nuovo valore! Se hai bisogno di un suggerimento, ecco come dovrebbe apparire il tuo file `interact.js` a questo punto: - - ```javascript // interact.js @@ -547,10 +536,10 @@ const alchemyProvider = new ethers.providers.AlchemyProvider( API_KEY ) -// signer - you +// signer - tu const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) -// contract instance +// istanza del contratto const helloWorldContract = new ethers.Contract( CONTRACT_ADDRESS, contract.abi, @@ -572,49 +561,39 @@ async function main() { main() ``` - -Adesso esegui solo script e dovresti essere in grado di vedere il vecchio messaggio, lo stato di aggiornamento e il nuovo messaggio stampato sul tuo terminale! +Ora esegui semplicemente lo script e dovresti essere in grado di vedere il vecchio messaggio, lo stato di aggiornamento e il nuovo messaggio stampati nel tuo terminale! `npx hardhat run scripts/interact.js --network goerli` - - ``` The message is: Hello World! Updating the message... The new message is: This is the new message. ``` +Durante l'esecuzione di quello script, potresti notare che il passaggio `Updating the message...` impiega un po' di tempo a caricarsi prima che venga caricato il nuovo messaggio. Ciò è dovuto al processo di mining; se sei curioso di tracciare le transazioni mentre vengono minate, visita la [mempool di Alchemy](https://dashboard.alchemyapi.io/mempool) per vedere lo stato di una transazione. Se la transazione viene scartata, è anche utile controllare [Goerli Etherscan](https://goerli.etherscan.io) e cercare l'hash della tua transazione. -Durante l'esecuzione dello script, potresti notare che la fase `Updating the message...` richiede del tempo di caricamento prima che venga caricato il nuovo messaggio. Questo è dovuto al processo di mining; se sei curioso di tracciare le transazioni mentre vengono minate, visita la [mempool di Alchemy](https://dashboard.alchemyapi.io/mempool) per vedere lo stato di una transazione. Se la transazione viene eliminata, è sempre utile dare un'occhiata all'[Etherscan di Goerli](https://goerli.etherscan.io) e cercare l'hash della tua transazione. - +## Parte 3: Pubblicare il tuo contratto intelligente su Etherscan {#part-3-publish-your-smart-contract-to-etherscan} +Hai fatto tutto il duro lavoro per dare vita al tuo contratto intelligente; ora è il momento di condividerlo con il mondo! -## Parte 3: pubblica il tuo contratto intelligente su Etherscan {#part-3-publish-your-smart-contract-to-etherscan} +Verificando il tuo contratto intelligente su Etherscan, chiunque può visualizzare il tuo codice sorgente e interagire con il tuo contratto intelligente. Iniziamo! -Hai fatto tutto il lavoro duro per dare vita il tuo contratto intelligente, ora è arrivato il momento di condividerlo con il mondo! +### Passaggio 1: Generare una chiave API sul tuo account Etherscan {#step-1-generate-an-api-key-on-your-etherscan-account} -Verificando il tuo contratto intelligente su Etherscan, chiunque può vedere il codice sorgente e interagire con il tuo contratto intelligente. Iniziamo! +Una chiave API di Etherscan è necessaria per verificare che tu possieda il contratto intelligente che stai cercando di pubblicare. +Se non hai già un account Etherscan, [registrati per un account](https://etherscan.io/register). +Una volta effettuato l'accesso, trova il tuo nome utente nella barra di navigazione, passaci sopra con il mouse e seleziona il pulsante **My profile**. -### Fase 1: genera una chiave API nel tuo conto di Etherscan {#step-1-generate-an-api-key-on-your-etherscan-account} +Nella pagina del tuo profilo, dovresti vedere una barra di navigazione laterale. Dalla barra di navigazione laterale, seleziona **API Keys**. Successivamente, premi il pulsante "Add" per creare una nuova chiave API, dai alla tua app il nome **hello-world** e premi il pulsante **Create New API Key**. -La chiave API di Etherscan è necessaria per verificare che tu possieda il contratto intelligente che stai cercando di pubblicare. - -Se non hai ancora un conto di Etherscan [registrati per avere un conto](https://etherscan.io/register). - -Una volta effettuato l'accesso, cerca il tuo nome utente nella barra di navigazione, passaci sopra e seleziona il pulsante **Il mio profilo**. - -Nella tua pagina del profilo, dovresti vedere una barra di navigazione laterale. Dalla barra di navigazione laterale, seleziona **Chiavi API**. Quindi, premi il pulsante "Aggiungi" per creare una nuova chiave API, dai un nome alla tua app **hello-world** e premi il pulsante **Crea una nuova chiave API**. - -La tua nuova chiave API dovrebbe apparire nella tabella delle chiavi API. Copia la chiave API nei tuoi appunti. +La tua nuova chiave API dovrebbe apparire nella tabella delle chiavi API. Copia la chiave API negli appunti. Successivamente, dobbiamo aggiungere la chiave API di Etherscan al nostro file `.env`. -Dopo averla aggiunta, il file `.env` dovrebbe apparire così: - - +Dopo averla aggiunta, il tuo file `.env` dovrebbe apparire così: ```javascript API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" @@ -624,28 +603,18 @@ CONTRACT_ADDRESS = "your-contract-address" ETHERSCAN_API_KEY = "your-etherscan-key" ``` +### Contratti intelligenti distribuiti con Hardhat {#hardhat-deployed-smart-contracts} +#### Installare hardhat-etherscan {#install-hardhat-etherscan} - -### Contratti intelligenti distribuiti su Hardhat {#hardhat-deployed-smart-contracts} - - - -#### Installa hardhat-etherscan {#install-hardhat-etherscan} - -Pubblicare i tuoi contratti su Ethereum usando Hardhat è semplice. Per iniziare è necessario installare il plugin `hardhat-etherscan`. `hardhat-etherscan` verificherà automaticamente il codice sorgente e la ABI del contratto intelligente su Etherscan. Per aggiungerlo, esegui dalla cartella `hello-world`: - - +Pubblicare il tuo contratto su Etherscan usando Hardhat è semplice. Per iniziare, dovrai prima installare il plugin `hardhat-etherscan`. `hardhat-etherscan` verificherà automaticamente il codice sorgente e l'ABI del contratto intelligente su Etherscan. Per aggiungerlo, nella directory `hello-world` esegui: ```text npm install --save-dev @nomiclabs/hardhat-etherscan ``` - Una volta installato, includi la seguente dichiarazione in cima al tuo `hardhat.config.js` e aggiungi le opzioni di configurazione di Etherscan: - - ```javascript // hardhat.config.js @@ -666,34 +635,26 @@ module.exports = { }, }, etherscan: { - // Your API key for Etherscan - // Obtain one at https://etherscan.io/ + // La tua chiave API per Etherscan + // Ottienine una su https://etherscan.io/ apiKey: ETHERSCAN_API_KEY, }, } ``` +#### Verificare il tuo contratto intelligente su Etherscan {#verify-your-smart-contract-on-etherscan} +Assicurati che tutti i file siano salvati e che tutte le variabili `.env` siano configurate correttamente. - -#### Verifica il tuo contratto intelligente su Etherscan {#verify-your-smart-contract-on-etherscan} - -Assicurati che tutti i file siano stati salvati e che tutte le variabili `.env` siano correttamente configurate. - -Esegui l'attività `verify`, passando l'indirizzo del contratto e la rete dove è stato distribuito: - - +Esegui l'attività `verify`, passando l'indirizzo del contratto e la rete in cui è distribuito: ```text npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS 'Hello World!' ``` +Assicurati che `DEPLOYED_CONTRACT_ADDRESS` sia l'indirizzo del tuo contratto intelligente distribuito sulla rete di test di Goerli. Inoltre, l'argomento finale (`'Hello World!'`) deve essere lo stesso valore stringa utilizzato [durante il passaggio di distribuzione nella parte 1](#write-our-deploy-script). -Assicurati che `DEPLOYED_CONTRACT_ADDRESS` sia l'indirizzo del tuo contratto intelligente distribuito sulla rete di prova di Goerli. Inoltre, l'argomento finale (`'Hello World!'`) deve essere lo stesso valore di stringa usato [durante la fase di distribuzione nella parte 1](#write-our-deploy-script). - -Se tutto va bene, nel tuo terminale vedrai il seguente messaggio: - - +Se tutto va bene, vedrai il seguente messaggio nel tuo terminale: ```text Successfully submitted source code for contract @@ -705,90 +666,69 @@ Successfully verified contract HelloWorld on Etherscan. https://goerli.etherscan.io/address/#contracts ``` - Congratulazioni! Il codice del tuo contratto intelligente è su Etherscan! - - ### Dai un'occhiata al tuo contratto intelligente su Etherscan! {#check-out-your-smart-contract-on-etherscan} -Quando vai al link fornito nel tuo terminale, dovresti essere in grado di vedere il codice e l'ABI del tuo contratto intelligente pubblicati su Etherscan! - -**Fantastico: ce l'hai fatta! Ora chiunque può chiamare o scrivere sul tuo contratto intelligente! Non vediamo l'ora di vedere cosa svilupperai in futuro!** +Quando navighi al link fornito nel tuo terminale, dovresti essere in grado di vedere il codice del tuo contratto intelligente e l'ABI pubblicati su Etherscan! +**Evviva - ce l'hai fatta campione! Ora chiunque può chiamare o scrivere sul tuo contratto intelligente! Non vediamo l'ora di vedere cosa costruirai in futuro!** +## Parte 4 - Integrare il tuo contratto intelligente con il frontend {#part-4-integrating-your-smart-contract-with-the-frontend} -## Parte 4: integra il tuo contratto intelligente con il frontend {#part-4-integrating-your-smart-contract-with-the-frontend} +Alla fine di questo tutorial, saprai come: -Alla fine di questo tutorial, saprai: - -- Collegare un portafoglio di MetaMask alla tua dapp -- Leggere dati da un contratto intelligente usando le API [Web3 di Alchemy](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) +- Connettere un portafoglio MetaMask alla tua dApp +- Leggere i dati dal tuo contratto intelligente usando l'API di [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) - Firmare le transazioni di Ethereum usando MetaMask -Per questa dapp, useremo [React](https://reactjs.org/) come nostro framwork di frontend; tuttavia è importante notare che non dedicheremo molto tempo alla descrizione dei suoi fondamentali, poiché ci concentreremo principalmente sull'introduzione delle funzionalità web3 nel nostro progetto. - -Come prerequisito, è necessario avere una comprensione di React a livello principiante. In caso contrario, suggeriamo di completare il [tutorial Introduzione a React](https://reactjs.org/tutorial/tutorial.html) ufficiale. - +Per questa dApp, useremo [React](https://react.dev/) come nostro framework di frontend; tuttavia, è importante notare che non dedicheremo molto tempo ad analizzarne i fondamenti, poiché ci concentreremo principalmente sull'integrazione delle funzionalità Web3 nel nostro progetto. +Come prerequisito, dovresti avere una comprensione di livello base di React. In caso contrario, ti consigliamo di completare il [tutorial ufficiale di introduzione a React](https://react.dev/learn). -### Clonare i file iniziali {#clone-the-starter-files} +### Clonare i file di partenza {#clone-the-starter-files} -Per prima cosa, vai al [repository hello-world-part-four in Github](https://github.com/alchemyplatform/hello-world-part-four-tutorial) per ottenere i file iniziali per questo progetto e clona questo repository nella tua macchina in locale. +Per prima cosa, vai al [repository GitHub hello-world-part-four](https://github.com/alchemyplatform/hello-world-part-four-tutorial) per ottenere i file di partenza per questo progetto e clona questo repository sulla tua macchina locale. -Apri il repository clonato localmente. Si noti che contiene due cartelle `starter-files` e `completed`. +Apri il repository clonato localmente. Nota che contiene due cartelle: `starter-files` e `completed`. -- `starter-files`- **lavoreremo in questa cartella**, collegheremo l'interfaccia utente al tuo portafoglio di Ethereum e al contratto intelligente che abbiamo pubblicato nella [Parte 3](#part-3). -- `completed` contiene l'intero tutorial completato e deve essere usata solo come riferimento se ci si blocca. +- `starter-files` - **lavoreremo in questa directory**, connetteremo l'interfaccia utente al tuo portafoglio Ethereum e al contratto intelligente che abbiamo pubblicato su Etherscan nella [Parte 3](#part-3). +- `completed` contiene l'intero tutorial completato e dovrebbe essere usato solo come riferimento se rimani bloccato. -Quindi, apri la tua copia di `starter-files` con il tuo editor di codice preferito, e poi vai alla cartella `src`. +Successivamente, apri la tua copia di `starter-files` nel tuo editor di codice preferito, e poi naviga nella cartella `src`. -Tutto il codice che scriveremo sarà sotto la cartella `src`. Modificheremo il componente `HelloWorld.js` e i file Javascript `util/interact.js` per dare al nostro progetto la funzionalità Web3. +Tutto il codice che scriveremo risiederà nella cartella `src`. Modificheremo il componente `HelloWorld.js` e i file JavaScript `util/interact.js` per dare al nostro progetto funzionalità Web3. +### Dai un'occhiata ai file di partenza {#check-out-the-starter-files} +Prima di iniziare a programmare, esploriamo cosa ci viene fornito nei file di partenza. -### Dai un'occhiata ai file iniziali {#check-out-the-starter-files} - -Prima di iniziare a programmare, diamo un'occhiata a ciò che ci viene fornito nei file iniziali. - - - -#### Metti in funzione il tuo progetto di React {#get-your-react-project-running} - -Iniziamo eseguendo il progetto di React nel browser. La bellezza di React è che una volta eseguito il nostro progetto nel browser, ogni modifica che salviamo sarà aggiornata dal vivo nel browser. - -Per mettere il progetto in funzione, vai alla cartella di root della cartella `starter-files` ed esegui `npm install` nel terminale per installare le dipendenze del progetto: +#### Avviare il tuo progetto React {#get-your-react-project-running} +Iniziamo eseguendo il progetto React nel nostro browser. Il bello di React è che una volta che abbiamo il nostro progetto in esecuzione nel browser, qualsiasi modifica salvata verrà aggiornata in tempo reale nel browser. +Per avviare il progetto, naviga nella directory principale della cartella `starter-files` ed esegui `npm install` nel tuo terminale per installare le dipendenze del progetto: ```bash cd starter-files npm install ``` - -Una volta terminata l'installazione, esegui `npm start` nel terminale: - - +Una volta terminata l'installazione, esegui `npm start` nel tuo terminale: ```bash npm start ``` +Così facendo dovrebbe aprirsi [http://localhost:3000/](http://localhost:3000/) nel tuo browser, dove vedrai il frontend del nostro progetto. Dovrebbe consistere in un campo \(un posto per aggiornare il messaggio memorizzato nel tuo contratto intelligente\), un pulsante "Connect Wallet" e un pulsante "Update". -Così facendo, dovrebbe aprirsi [http://localhost:3000/](http://localhost:3000/) nel browser, dove vedrai il frontend per il nostro progetto. Dovrebbe consistere in un campo \(un posto per aggiornare il messaggio memorizzato nel tuo contratto intelligente\), il pulsante "Connetti portafoglio" e un pulsante "Aggiorna". - -Se provi a fare clic su uno dei pulsanti, noterai che non funzionano - questo perché devi ancora programmarne la funzionalità. - - +Se provi a cliccare su uno dei due pulsanti, noterai che non funzionano: questo perché dobbiamo ancora programmare la loro funzionalità. #### Il componente `HelloWorld.js` {#the-helloworld-js-component} -Torniamo la cartella `src` nell'editor e apriamo il file `HelloWorld.js`. È davvero importante comprendere tutto il contenuto di questo file, che è il componente principale di React su cui lavoreremo. - -All'inizio di questo file, noterai che abbiamo diverse dichiarazioni relative all'importazione che sono necessarie per far funzionare il nostro progetto, inclusa la libreria di React, gli hook useEffect ed useState, alcuni elementi da `./util/interact.js` (li descriveremo in dettaglio a breve!) e il logo di Alchemy. - +Torniamo nella cartella `src` nel nostro editor e apriamo il file `HelloWorld.js`. È importantissimo comprendere tutto ciò che si trova in questo file, poiché è il componente React principale su cui lavoreremo. +All'inizio di questo file, noterai che abbiamo diverse istruzioni di importazione necessarie per far funzionare il nostro progetto, tra cui la libreria React, gli hook useEffect e useState, alcuni elementi da `./util/interact.js` (li descriveremo più in dettaglio a breve!) e il logo di Alchemy. ```javascript // HelloWorld.js @@ -806,73 +746,64 @@ import { import alchemylogo from "./alchemylogo.svg" ``` - Successivamente, abbiamo le nostre variabili di stato che aggiorneremo dopo eventi specifici. - - ```javascript // HelloWorld.js -//State variables +// Variabili di stato const [walletAddress, setWallet] = useState("") const [status, setStatus] = useState("") const [message, setMessage] = useState("No connection to the network.") const [newMessage, setNewMessage] = useState("") ``` - -Ecco cosa rappresenta ciascuna variabile: +Ecco cosa rappresenta ciascuna delle variabili: - `walletAddress` - una stringa che memorizza l'indirizzo del portafoglio dell'utente -- `status`- una stringa che memorizza un messaggio utile che guida l'utente su come interagire con la dapp -- `message` - una stringa che memorizza il messaggio corrente nel contratto intelligente +- `status` - una stringa che memorizza un messaggio utile che guida l'utente su come interagire con la dApp +- `message` - una stringa che memorizza il messaggio attuale nel contratto intelligente - `newMessage` - una stringa che memorizza il nuovo messaggio che verrà scritto nel contratto intelligente -Dopo le variabili di stato, vedrai cinque funzioni non implementate: `useEffect` ,`addSmartContractListener`, `addWalletListener` , `connectWalletPressed` e `onUpdatePressed`. Illustreremo cosa fanno qui di seguito: - - +Dopo le variabili di stato, vedrai cinque funzioni non implementate: `useEffect`, `addSmartContractListener`, `addWalletListener`, `connectWalletPressed` e `onUpdatePressed`. Spiegheremo cosa fanno di seguito: ```javascript // HelloWorld.js -//called only once +// chiamato solo una volta useEffect(async () => { - //TODO: implement + // TODO: implementare }, []) function addSmartContractListener() { - //TODO: implement + // TODO: implementare } function addWalletListener() { - //TODO: implement + // TODO: implementare } const connectWalletPressed = async () => { - //TODO: implement + // TODO: implementare } const onUpdatePressed = async () => { - //TODO: implement + // TODO: implementare } ``` +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html) - questo è un hook di React che viene chiamato dopo il rendering del tuo componente. Poiché gli viene passata una prop array vuota `[]` \(vedi riga 4\), verrà chiamato solo al _primo_ rendering del componente. Qui caricheremo il messaggio attuale memorizzato nel nostro contratto intelligente, chiameremo i listener del nostro contratto intelligente e del portafoglio, e aggiorneremo la nostra interfaccia utente per riflettere se un portafoglio è già connesso. +- `addSmartContractListener` - questa funzione imposta un listener che osserverà l'evento `UpdatedMessages` del nostro contratto HelloWorld e aggiornerà la nostra interfaccia utente quando il messaggio viene modificato nel nostro contratto intelligente. +- `addWalletListener` - questa funzione imposta un listener che rileva i cambiamenti nello stato del portafoglio MetaMask dell'utente, come quando l'utente disconnette il proprio portafoglio o cambia indirizzo. +- `connectWalletPressed` - questa funzione verrà chiamata per connettere il portafoglio MetaMask dell'utente alla nostra dApp. +- `onUpdatePressed` - questa funzione verrà chiamata quando l'utente desidera aggiornare il messaggio memorizzato nel contratto intelligente. -- [`useEffect`](https://reactjs.org/docs/hooks-effect.html) - questo è un hook di React chiamato dopo il rendering del tuo componente. Poiché in essa viene passato un array vuoto `[]` \(vedi la riga 4\), sarà chiamata solo al _primo_ rendering del componente. Qui caricheremo il messaggio corrente memorizzato nel nostro contratto intelligente, chiameremo i listener del nostro contratto intelligente e del portafoglio e aggiorneremo la nostra interfaccia utente per riflettere se un portafoglio sia già connesso. -- `addSmartContractListener`- questa funzione configura un listener che osserverà l'evento `UpdatedMessages` del nostro contratto HelloWorld e aggiornerà la nostra interfaccia utente quando il messaggio è cambiato nel nostro contratto intelligente. -- `addWalletListener`- questa funzione configura un listener che rileva i cambiamenti nel portafoglio di MetaMask dell'utente, come quando un utente disconnette il suo portafoglio o cambia indirizzo. -- `connectWalletPressed`- questa funzione sarà chiamata per connettere il portafoglio di MetaMask dell'utente alla nostra dapp. -- `onUpdatePressed` - questa funzione sarà chiamata quando un utente vuole aggiornare il messaggio memorizzato nel contratto intelligente. - -Vicino alla fine di questo file, abbiamo l'UI del nostro componente. - - +Verso la fine di questo file, abbiamo l'interfaccia utente del nostro componente. ```javascript // HelloWorld.js -//the UI of our component +// l'interfaccia utente del nostro componente return (
    @@ -904,42 +835,39 @@ return ( -
    -
+ +
+ +
) ``` +Se esamini attentamente questo codice, noterai dove usiamo le nostre varie variabili di stato nella nostra interfaccia utente: -Se analizzi questo codice con attenzione, noterai dove usiamo le varie variabili di stato nella nostra interfaccia utente: - -- Nelle righe 6-12, se il portafoglio dell'utente è connesso \(ossia `walletAddress.length > 0`\), viene visualizzata una versione troncata del `walletAddress` dell'utente nel pulsante con ID "walletButton"; altrimenti si leggerà semplicemente "Connect Wallet". -- Nella riga 17, viene visualizzato il messaggio corrente memorizzato nel contratto intelligente, che è acquisito nella stringa `message`. -- Nelle righe 23-26, usiamo un [componente controllato](https://reactjs.org/docs/forms.html#controlled-components) per aggiornare la nostra variabile di stato `newMessage` quando l'input nel campo di testo cambia. - -Oltre alle variabili di stato, vedrai anche che le funzioni `connectWalletPressed` e `onUpdatePressed` vengono chiamate rispettivamente quando si fa clic sui pulsanti con ID `publishButton` e `walletButton`. +- Alle righe 6-12, se il portafoglio dell'utente è connesso \(cioè, `walletAddress.length > 0`\), mostriamo una versione troncata del `walletAddress` dell'utente nel pulsante con ID "walletButton"; altrimenti dice semplicemente "Connect Wallet". +- Alla riga 17, mostriamo il messaggio attuale memorizzato nel contratto intelligente, che è catturato nella stringa `message`. +- Alle righe 23-26, usiamo un [componente controllato](https://legacy.reactjs.org/docs/forms.html#controlled-components) per aggiornare la nostra variabile di stato `newMessage` quando l'input nel campo di testo cambia. -Infine vediamo dove viene aggiunto questo componente `HelloWorld.js`. +Oltre alle nostre variabili di stato, vedrai anche che le funzioni `connectWalletPressed` e `onUpdatePressed` vengono chiamate quando si clicca rispettivamente sui pulsanti con ID `publishButton` e `walletButton`. -Se vai al file `App.js`, che è il componente principale su React e che agisce come contenitore per tutti gli altri componenti, vedrai che il nostro componente `HelloWorld.js` è inserito alla riga 7. - -Per ultimo, ma non meno importante, diamo un'occhiata ad un altro file fornito, il file `interact.js`. +Infine, vediamo dove viene aggiunto questo componente `HelloWorld.js`. +Se vai al file `App.js`, che è il componente principale in React che funge da contenitore per tutti gli altri componenti, vedrai che il nostro componente `HelloWorld.js` è iniettato alla riga 7. +Ultimo ma non meno importante, diamo un'occhiata a un altro file fornito per te, il file `interact.js`. #### Il file `interact.js` {#the-interact-js-file} -Poiché vogliamo rispettare il paradigma [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), vorremo un file separato che contiene tutte le nostre funzioni per gestire la logica, i dati e le regole della nostra dapp, ed essere quindi in grado di esportare queste funzioni al nostro frontend \(il nostro componente`HelloWorld.js`\). - -👆🏽Questo è esattamente lo scopo del file `interact.js`! - -Vai alla cartella `util`nella tua directory `src`, e noterai che abbiamo incluso un file chiamato `interact.js` che conterrà tutte le funzioni e le variabili per l'interazione con il nostro contratto intelligente e con il portafoglio. +Poiché vogliamo attenerci al paradigma [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), vorremo un file separato che contenga tutte le nostre funzioni per gestire la logica, i dati e le regole della nostra dApp, per poi poter esportare quelle funzioni nel nostro frontend \(il nostro componente `HelloWorld.js`\). +👆🏽Questo è l'esatto scopo del nostro file `interact.js`! +Naviga nella cartella `util` nella tua directory `src`, e noterai che abbiamo incluso un file chiamato `interact.js` che conterrà tutte le nostre funzioni e variabili di interazione con il contratto intelligente e il portafoglio. ```javascript // interact.js -//export const helloWorldContract; +// export const helloWorldContract; export const loadCurrentMessage = async () => {} @@ -950,71 +878,55 @@ const getCurrentWalletConnected = async () => {} export const updateMessage = async (message) => {} ``` +Noterai all'inizio del file che abbiamo commentato l'oggetto `helloWorldContract`. Più avanti in questo tutorial, decommenteremo questo oggetto e istanzieremo il nostro contratto intelligente in questa variabile, che poi esporteremo nel nostro componente `HelloWorld.js`. -Noterai che all'inizio del file abbiamo commentato l'oggetto `helloWorldContract`. Più avanti in questo tutorial, toglieremo il commento a questo oggetto e istanzieremo il nostro contratto intelligente in questa variabile, che esporteremo poi nel nostro componente `HelloWorld.js`. - -Le quatto funzioni non implementate dopo il nostro oggetto `helloWorldContract` fanno quanto segue: +Le quattro funzioni non implementate dopo il nostro oggetto `helloWorldContract` fanno quanto segue: -- `loadCurrentMessage` - questa funzione gestisce la logica di caricamento del messaggio corrente salvato nel contratto intelligente. Effettuerà una chiamata _read (leggi)_ al contratto intelligente Hello World usando l'[API Web3 di Alchemy](https://github.com/alchemyplatform/alchemy-web3). -- `connectWallet` - questa funzione connette il MetaMask dell'utente alla nostra dapp. -- `getCurrentWalletConnected` - questa funzione verificherà se un conto di Ethereum è già connesso alla nostra dapp durante il caricamento della pagina e aggiornerà l'interfaccia utente di conseguenza. -- `updateMessage` - questa funzione aggiornerà il messaggio memorizzato nel contratto intelligente. Effettuerà una chiamata di _scrittura_ al contratto intelligente Hello World, quindi il portafoglio di MetaMask dell'utente dovrà firmare una transazione di Ethereum per aggiornare il messaggio. +- `loadCurrentMessage` - questa funzione gestisce la logica di caricamento del messaggio attuale memorizzato nel contratto intelligente. Effettuerà una chiamata di _lettura_ al contratto intelligente Hello World usando l'[API di Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3). +- `connectWallet` - questa funzione connetterà il MetaMask dell'utente alla nostra dApp. +- `getCurrentWalletConnected` - questa funzione controllerà se un account Ethereum è già connesso alla nostra dApp al caricamento della pagina e aggiornerà la nostra interfaccia utente di conseguenza. +- `updateMessage` - questa funzione aggiornerà il messaggio memorizzato nel contratto intelligente. Effettuerà una chiamata di _scrittura_ al contratto intelligente Hello World, quindi il portafoglio MetaMask dell'utente dovrà firmare una transazione di Ethereum per aggiornare il messaggio. -Ora che ci è chiaro con cosa stiamo lavorando, cerchiamo di capire come leggere il nostro contratto intelligente! +Ora che abbiamo capito con cosa stiamo lavorando, scopriamo come leggere dal nostro contratto intelligente! +### Passaggio 3: Leggere dal tuo contratto intelligente {#step-3-read-from-your-smart-contract} +Per leggere dal tuo contratto intelligente, dovrai configurare con successo: -### Fase 3: leggi il tuo contratto intelligente {#step-3-read-from-your-smart-contract} - -Per leggere il tuo contratto intelligente, dovrai configurare con successo: - -- Una connessione API alla catena Ethereum +- Una connessione API alla catena di Ethereum - Un'istanza caricata del tuo contratto intelligente - Una funzione per chiamare la funzione del tuo contratto intelligente -- Un listener per rilevare gli aggiornamenti quando i dati letti dal contratto intelligente cambiano - -Questo può sembrare un gran numero di passaggi, ma non preoccuparti! Ti spiegheremo come affrontarli passo dopo passo! :\) +- Un listener per osservare gli aggiornamenti quando i dati che stai leggendo dal contratto intelligente cambiano +Potrebbero sembrare molti passaggi, ma non preoccuparti! Ti guideremo su come eseguire ciascuno di essi passo dopo passo! :\) +#### Stabilire una connessione API alla catena di Ethereum {#establish-an-api-connection-to-the-ethereum-chain} -#### Stabilire una connessione API alla catena Ethereum {#establish-an-api-connection-to-the-ethereum-chain} - -Ricordi che nella seconda parte di questo tutorial abbiamo usato la nostra [chiave Web3 di Alchemy per leggere il nostro contratto intelligente](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? Ti servirà anche una chiave Web3 di Alchemy nella tua dapp per leggere dalla caena. - -Se non lo hai già, installa [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) andando nella cartella di root dei tuoi `starter-files` ed eseguendo il seguente comando nel tuo terminale: - +Ricordi come nella Parte 2 di questo tutorial, abbiamo usato la nostra [chiave di Alchemy Web3 per leggere dal nostro contratto intelligente](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? Avrai anche bisogno di una chiave di Alchemy Web3 nella tua dApp per leggere dalla catena. +Se non ce l'hai già, installa prima [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) navigando nella directory principale dei tuoi `starter-files` ed eseguendo quanto segue nel tuo terminale: ```text npm install @alch/alchemy-web3 ``` +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) è un wrapper attorno a [Web3.js](https://docs.web3js.org/), che fornisce metodi API migliorati e altri vantaggi cruciali per semplificarti la vita come sviluppatore web3. È progettato per richiedere una configurazione minima in modo da poter iniziare a usarlo subito nella tua app! -[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) è un wrapper intorno a[Web3.js](https://docs.web3js.org/) che fornisce metodi API migliorati e altri benefici fondamentale per semplificare la tua vita a uno sviluppatore web3. È progettato per richiedere una configurazione minima, così da poter iniziare a usarlo immediatamente nella tua app! - -Quindi, installa il pacchetto [dotenv](https://www.npmjs.com/package/dotenv) nella cartella del tuo progetto, in modo da avere un posto sicuro per memorizzare la nostra chiave API dopo averla ottenuta. - - +Quindi, installa il pacchetto [dotenv](https://www.npmjs.com/package/dotenv) nella directory del tuo progetto, in modo da avere un posto sicuro dove memorizzare la nostra chiave API dopo averla recuperata. ```text npm install dotenv --save ``` +Per la nostra dApp, **useremo la nostra chiave API Websockets** invece della nostra chiave API HTTP, poiché ci permetterà di impostare un listener che rileva quando il messaggio memorizzato nel contratto intelligente cambia. -Per la nostra dapp, **useremo la nostra chiave API Websockets** invece della nostra chiave API HTTP, perché ci permetterà di configurare un listener che rilevi quando il messaggio memorizzato nel contratto intelligente cambia. - -Una volta ottenuta la chiave API, crea un file `.env` nella tua cartella di root e aggiungici l'url di Alchemy Websockets. Successivamente, il tuo file `.env` dovrebbe avere il seguente aspetto: - - +Una volta che hai la tua chiave API, crea un file `.env` nella tua directory principale e aggiungi ad esso il tuo URL Websockets di Alchemy. Successivamente, il tuo file `.env` dovrebbe apparire così: ```javascript REACT_APP_ALCHEMY_KEY = wss://eth-goerli.ws.alchemyapi.io/v2/ ``` - -Ora siamo pronti a configurare il nostro endpoint Alchemy Web3 nella nostra dapp! Torniamo al nostro `interact.js`, che è contenuto nella cartella `util` e aggiungiamo il seguente codice all'inizio del file: - - +Ora, siamo pronti per configurare il nostro endpoint di Alchemy Web3 nella nostra dApp! Torniamo al nostro `interact.js`, che è annidato all'interno della nostra cartella `util` e aggiungiamo il seguente codice all'inizio del file: ```javascript // interact.js @@ -1024,33 +936,26 @@ const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY const { createAlchemyWeb3 } = require("@alch/alchemy-web3") const web3 = createAlchemyWeb3(alchemyKey) -//export const helloWorldContract; +// export const helloWorldContract; ``` - -Sopra, abbiamo prima importato la chiave Alchemy dal nostro file `.env` e poi passato la nostra `alchemyKey` a `createAlchemyWeb3` per stabilire il nostro endpoint di Alchemy Web3. +Sopra, abbiamo prima importato la chiave di Alchemy dal nostro file `.env` e poi passato la nostra `alchemyKey` a `createAlchemyWeb3` per stabilire il nostro endpoint di Alchemy Web3. Con questo endpoint pronto, è il momento di caricare il nostro contratto intelligente! +#### Caricare il tuo contratto intelligente Hello World {#loading-your-hello-world-smart-contract} - -#### Caricare il proprio contratto intelligente Hello World {#loading-your-hello-world-smart-contract} - -Per caricare il tuo contratto intelligente Hello World, sono necessari l'indirizzo e l'ABI del contratto, entrambi reperibili su Etherscan se hai completato la [Parte 3 di questo tutorial.](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) - - +Per caricare il tuo contratto intelligente Hello World, avrai bisogno del suo indirizzo del contratto e dell'ABI, entrambi i quali possono essere trovati su Etherscan se hai completato la [Parte 3 di questo tutorial.](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) #### Come ottenere l'ABI del tuo contratto da Etherscan {#how-to-get-your-contract-abi-from-etherscan} -Se hai saltato la Parte 3 di questo tutorial, puoi usare il contratto HelloWorld con l'indirizzo [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). La sua ABI si trova [qui](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). - -L'ABI di un contratto serve per specificare quale funzione invocherà un contratto, oltre che per garantire che la funzione restituirà i dati nel formato previsto. Una volta copiata la ABI del nostro contratto, salviamola come file JSON chiamato `contract-abi.json` nella cartella `src`. +Se hai saltato la Parte 3 di questo tutorial, puoi usare il contratto HelloWorld con indirizzo [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). La sua ABI può essere trovata [qui](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). -Il file contract-abi.json deve essere memorizzato nella cartella src. - -Con l'indirizzo del contratto, l'ABI e l'endpoint di Alchemy Web3, possiamo usare il [metodo del contratto](https://docs.web3js.org/api/web3-eth-contract/class/Contract) per caricare un'istanza del nostro contratto intelligente. Importa la ABI del contratto nel file `interact.js` e aggiungi l'indirizzo del tuo contratto. +Un'ABI del contratto è necessaria per specificare quale funzione invocherà un contratto, oltre a garantire che la funzione restituirà i dati nel formato che ti aspetti. Una volta copiata l'ABI del nostro contratto, salviamola come file JSON chiamato `contract-abi.json` nella tua directory `src`. +Il tuo contract-abi.json dovrebbe essere memorizzato nella tua cartella src. +Armati del nostro indirizzo del contratto, dell'ABI e dell'endpoint di Alchemy Web3, possiamo usare il [metodo contract](https://docs.web3js.org/api/web3-eth-contract/class/Contract) per caricare un'istanza del nostro contratto intelligente. Importa l'ABI del tuo contratto nel file `interact.js` e aggiungi l'indirizzo del tuo contratto. ```javascript // interact.js @@ -1059,10 +964,7 @@ const contractABI = require("../contract-abi.json") const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" ``` - -Ora possiamo finalmente eliminare il commento dalla nostra variabile `helloWorldContract` e caricare il contratto intelligente usando il nostro endpoint di AlchemyWeb3: - - +Ora possiamo finalmente decommentare la nostra variabile `helloWorldContract` e caricare il contratto intelligente usando il nostro endpoint di AlchemyWeb3: ```javascript // interact.js @@ -1072,10 +974,7 @@ export const helloWorldContract = new web3.eth.Contract( ) ``` - -Ricapitolando, le prime 12 righe del file `interact.js` dovrebbero avere questo aspetto: - - +Per riassumere, le prime 12 righe del tuo `interact.js` dovrebbero ora apparire così: ```javascript // interact.js @@ -1094,18 +993,13 @@ export const helloWorldContract = new web3.eth.Contract( ) ``` +Ora che abbiamo caricato il nostro contratto, possiamo implementare la nostra funzione `loadCurrentMessage`! -Ora che il nostro contratto è stato caricato, possiamo implementare la nostra funzione `loadCurrentMessage`! - - - -#### Implementare `loadCurrentMessage` nel proprio file `interact.js` {#implementing-loadCurrentMessage-in-your-interact-js-file} - -Questa funzione è semplicissima. Faremo una semplice invocazione asincrona web3 per leggere dal nostro contratto. La nostra funzione restituirà il messaggio memorizzato nel contratto intelligente: - -Aggiorna `loadCurrentMessage` nel tuo file `interact.js` come segue: +#### Implementare `loadCurrentMessage` nel tuo file `interact.js` {#implementing-loadCurrentMessage-in-your-interact-js-file} +Questa funzione è semplicissima. Faremo una semplice chiamata web3 asincrona per leggere dal nostro contratto. La nostra funzione restituirà il messaggio memorizzato nel contratto intelligente: +Aggiorna `loadCurrentMessage` nel tuo file `interact.js` con quanto segue: ```javascript // interact.js @@ -1116,70 +1010,60 @@ export const loadCurrentMessage = async () => { } ``` - -Poiché vogliamo visualizzare questo contratto intelligente nella nostra interfaccia utente, aggiorniamo la funzione `useEffect` nel nostro componente `HelloWorld.js` come segue: - - +Poiché vogliamo mostrare questo contratto intelligente nella nostra interfaccia utente, aggiorniamo la funzione `useEffect` nel nostro componente `HelloWorld.js` con quanto segue: ```javascript // HelloWorld.js -//called only once +// chiamato solo una volta useEffect(async () => { const message = await loadCurrentMessage() setMessage(message) }, []) ``` +Nota, vogliamo che il nostro `loadCurrentMessage` venga chiamato solo una volta durante il primo rendering del componente. Presto implementeremo `addSmartContractListener` per aggiornare automaticamente l'interfaccia utente dopo che il messaggio nel contratto intelligente cambia. -Si noti che vogliamo che il nostro `loadCurrentMessage` sia chiamato solo una volta durante il primo rendering del componente. Presto implementeremo `addSmartContractListener` per aggiornare automaticamente l'interfaccia utente dopo che il messaggio del contratto intelligente cambia. - -Prima di addentrarci nel nostro listener, diamo un'occhiata a ciò che abbiamo finora! Salva i file `HelloWorld.js` e `interact.js`, quindi vai su [http://localhost:3000/](http://localhost:3000/) - -Noterai che il messaggio corrente non dice più "Nessuna connessione alla rete". Riflette invece il messaggio memorizzato nel contratto intelligente. Pazzesco! - - - -#### L'interfaccia utente dovrebbe ora riflettere il messaggio memorizzato nel contratto intelligente {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} +Prima di immergerci nel nostro listener, diamo un'occhiata a ciò che abbiamo finora! Salva i tuoi file `HelloWorld.js` e `interact.js`, e poi vai su [http://localhost:3000/](http://localhost:3000/) -Ora, parlando di quel listener... +Noterai che il messaggio attuale non dice più "No connection to the network." Invece riflette il messaggio memorizzato nel contratto intelligente. Fantastico! +#### La tua interfaccia utente dovrebbe ora riflettere il messaggio memorizzato nel contratto intelligente {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} +Ora, a proposito di quel listener... -#### Implementa `addSmartContractListener` {#implement-addsmartcontractlistener} - -Se ripensi al file `HelloWorld.sol` che abbiamo scritto nella [Parte 1 di questa serie di tutorial](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract), ricorderai che c'è un evento del contratto intelligente chiamato `UpdatedMessages` che viene emesso dopo aver invocato la funzione `update` del nostro contratto intelligente \(vedi righe 9 e 27\): - +#### Implementare `addSmartContractListener` {#implement-addsmartcontractlistener} +Se ripensi al file `HelloWorld.sol` che abbiamo scritto nella [Parte 1 di questa serie di tutorial](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract), ricorderai che c'è un evento del contratto intelligente chiamato `UpdatedMessages` che viene emesso dopo che la funzione `update` del nostro contratto intelligente viene invocata \(vedi righe 9 e 27\): ```javascript // HelloWorld.sol -// Specifies the version of Solidity, using semantic versioning. -// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +// Specifica la versione di Solidity, usando il versionamento semantico. +// Scopri di più: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma pragma solidity ^0.7.3; -// Defines a contract named `HelloWorld`. -// Un contratto è una raccolta di funzioni e dati (il suo stato). Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +// Definisce un contratto chiamato `HelloWorld`. +// Un contratto è una raccolta di funzioni e dati (il suo stato). Una volta distribuito, un contratto risiede a un indirizzo specifico sulla blockchain di Ethereum. Scopri di più: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html contract HelloWorld { - //Emitted when update function is called - //Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen. + // Emesso quando viene chiamata la funzione di aggiornamento + // Gli eventi degli smart contract sono un modo per il tuo contratto di comunicare che qualcosa è successo sulla blockchain al front-end della tua app, che può essere in 'ascolto' di determinati eventi e agire quando si verificano. event UpdatedMessages(string oldStr, string newStr); - // Declares a state variable `message` of type `string`. - // Le variabili di stato sono variabili con valori memorizzati in modo permanente nello spazio di archiviazione (storage) del contratto. The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value. + // Dichiara una variabile di stato `message` di tipo `string`. + // Le variabili di stato sono variabili i cui valori sono memorizzati in modo permanente nell'archiviazione del contratto. La parola chiave `public` rende le variabili accessibili dall'esterno di un contratto e crea una funzione che altri contratti o client possono chiamare per accedere al valore. string public message; - // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation. - // I costruttori sono utilizzati per inizializzare i dati del contratto. Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + // Simile a molti linguaggi orientati agli oggetti basati su classi, un costruttore è una funzione speciale che viene eseguita solo alla creazione del contratto. + // I costruttori sono usati per inizializzare i dati del contratto. Scopri di più:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors constructor(string memory initMessage) { - // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable). + // Accetta un argomento stringa `initMessage` e imposta il valore nella variabile di archiviazione `message` del contratto). message = initMessage; } - // A public function that accepts a string argument and updates the `message` storage variable. + // Una funzione pubblica che accetta un argomento stringa e aggiorna la variabile di archiviazione `message`. function update(string memory newMessage) public { string memory oldMsg = message; message = newMessage; @@ -1188,14 +1072,11 @@ contract HelloWorld { } ``` +Gli eventi del contratto intelligente sono un modo per il tuo contratto di comunicare che qualcosa è successo \(cioè, c'è stato un _evento_\) sulla blockchain alla tua applicazione front-end, che può essere in 'ascolto' di eventi specifici e agire quando si verificano. -Gli eventi del contratto intelligente sono un modo per il contratto di comunicare che è successo qualcosa (cioè che c'è stato un _evento_) sulla blockchain alla tua applicazione front-end, che può essere "in ascolto" per eventi specifici e agire quando si verificano. - -La funzione `addSmartContractListener` sarà in ascolto specificamente per l'evento `UpdatedMessages` del nostro contratto intelligente Hello World e aggiornerà l'interfaccia utente per visualizzare il nuovo messaggio. - -Modifica `addSmartContractListener` come segue: - +La funzione `addSmartContractListener` ascolterà specificamente l'evento `UpdatedMessages` del nostro contratto intelligente Hello World e aggiornerà la nostra interfaccia utente per mostrare il nuovo messaggio. +Modifica `addSmartContractListener` con quanto segue: ```javascript // HelloWorld.js @@ -1213,15 +1094,12 @@ function addSmartContractListener() { } ``` - Analizziamo cosa succede quando il listener rileva un evento: -- Se si verifica un errore quando viene emesso l'evento, questo si rifletterà nell'interfaccia utente tramite la variabile di stato `status`. -- Altrimenti, si utilizzerà l'oggetto `data` restituito. `data.returnValues` è un array indicizzato a zero in cui il primo elemento dell'array memorizza il messaggio precedente e il secondo quello aggiornato. Complessivamente, in caso di evento concluso con successo, imposteremo la stringa `message` con il messaggio aggiornato, cancelleremo la stringa `newMessage` e aggiorneremo la variabile di stato `status` per rispecchiare il fatto che un nuovo messaggio è stato pubblicato sul nostro contratto intelligente. - -Infine, chiamiamo il nostro listener nella funzione `useEffect`, in modo che venga inizializzato al primo rendering del componente `HelloWorld.js`. Complessivamente, la funzione `useEffect` dovrebbe avere questo aspetto: - +- Se si verifica un errore quando l'evento viene emesso, si rifletterà nell'interfaccia utente tramite la nostra variabile di stato `status`. +- Altrimenti, useremo l'oggetto `data` restituito. `data.returnValues` è un array indicizzato a zero in cui il primo elemento nell'array memorizza il messaggio precedente e il secondo elemento memorizza quello aggiornato. Nel complesso, in caso di evento riuscito imposteremo la nostra stringa `message` al messaggio aggiornato, cancelleremo la stringa `newMessage` e aggiorneremo la nostra variabile di stato `status` per riflettere che un nuovo messaggio è stato pubblicato sul nostro contratto intelligente. +Infine, chiamiamo il nostro listener nella nostra funzione `useEffect` in modo che venga inizializzato al primo rendering del componente `HelloWorld.js`. Nel complesso, la tua funzione `useEffect` dovrebbe apparire così: ```javascript // HelloWorld.js @@ -1233,63 +1111,45 @@ useEffect(async () => { }, []) ``` +Ora che siamo in grado di leggere dal nostro contratto intelligente, sarebbe fantastico capire anche come scriverci! Tuttavia, per scrivere sulla nostra dApp, dobbiamo prima avere un portafoglio Ethereum connesso ad essa. -Ora che siamo in grado di leggere dal nostro contratto intelligente, sarebbe bello anche capire come scrivergli! Tuttavia, per scrivere alla nostra dapp, dobbiamo prima avere un portafoglio di Ethereum collegato ad essa. - -Quindi, ora ci occuperemo di configurare il nostro portafoglio di Ethereum (MetaMask) e di collegarlo alla nostra dapp! - +Quindi, in seguito affronteremo la configurazione del nostro portafoglio Ethereum \(MetaMask\) e poi la sua connessione alla nostra dApp! +### Passaggio 4: Configurare il tuo portafoglio Ethereum {#step-4-set-up-your-ethereum-wallet} -### Fase 4: configura il tuo portafoglio di Ethereum {#step-4-set-up-your-ethereum-wallet} +Per scrivere qualsiasi cosa sulla catena di Ethereum, gli utenti devono firmare le transazioni usando le chiavi private del loro portafoglio virtuale. Per questo tutorial, useremo [MetaMask](https://metamask.io/), un portafoglio virtuale nel browser usato per gestire l'indirizzo del tuo account Ethereum, poiché rende questa firma della transazione facilissima per l'utente finale. -Per scrivere qualsiasi cosa nella catena di Ethereum, gli utenti devono firmare le transazioni utilizzando le chiavi private del proprio portafoglio virtuale. Per questo tutorial, utilizzeremo [MetaMask](https://metamask.io/), un portafoglio virtuale nel browser utilizzato per gestire l'indirizzo del conto di Ethereum, in quanto rende la firma delle transazioni molto semplice per l'utente finale. +Se vuoi capire di più su come funzionano le transazioni su Ethereum, dai un'occhiata a [questa pagina](/developers/docs/transactions/) della fondazione Ethereum. -Se vuoi capire di più su come funzionano le transazioni su Ethereum, dai un'occhiata a [questa pagina](/developers/docs/transactions/) della Ethereum Foundation. +#### Scaricare MetaMask {#download-metamask} +Puoi scaricare e creare un account MetaMask gratuitamente [qui](https://metamask.io/download). Quando crei un account, o se hai già un account, assicurati di passare alla "Goerli Test Network" in alto a destra \(in modo da non avere a che fare con denaro reale\). +#### Aggiungere ether da un rubinetto {#add-ether-from-a-faucet} -#### Scarica MetaMask {#download-metamask} - -Puoi scaricare e creare gratuitamente un conto di MetaMask [qui](https://metamask.io/download). Quando crei un conto, o se ne possiedi già uno, assicurati di passare alla "rete di prova di Goerli" in alto a destra \(così da non avere a che fare con denaro reale\). - - - -#### Aggiungere ether da un Faucet {#add-ether-from-a-faucet} - -Per firmare una transazione sulla blockchain di Ethereum, abbiamo bisogno di un po' di Eth finti. Per ottenere Eth puoi andare su [FaucETH](https://fauceth.komputing.org) e inserire l'indirizzo del tuo conto di Goerli, cliccare su "Richiedi fondi", quindi selezionare "Rete di prova di Ethereum di Goerli" nel menu a discesa e infine fare clic di nuovo su "Richiedi fondi". Poco dopo, dovresti vedere gli Eth nel tuo conto di MetaMask! - - - -#### Verifica il tuo saldo {#check-your-balance} - -Per ricontrollare che ci sia il saldo, facciamo una richiesta [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) usando lo [strumento compositore di Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Questo restituirà l'importo di Eth nel tuo portafoglio. Dopo aver inserito l'indirizzo del tuo conto di MetaMask e aver cliccato “Invia richiesta”, dovresti vedere una risposta come questa: +Per firmare una transazione sulla blockchain di Ethereum, avremo bisogno di alcuni Eth finti. Per ottenere Eth puoi andare su [FaucETH](https://fauceth.komputing.org) e inserire l'indirizzo del tuo account Goerli, cliccare su "Request funds", poi selezionare "Ethereum Testnet Goerli" nel menu a discesa e infine cliccare di nuovo sul pulsante "Request funds". Dovresti vedere gli Eth nel tuo account MetaMask poco dopo! +#### Controllare il tuo saldo {#check-your-balance} +Per verificare che il nostro saldo sia presente, facciamo una richiesta [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) usando lo [strumento composer di Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Questo restituirà la quantità di Eth nel nostro portafoglio. Dopo aver inserito l'indirizzo del tuo account MetaMask e cliccato su "Send Request", dovresti vedere una risposta come questa: ```text {"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} ``` +**NOTA:** Questo risultato è in wei, non in eth. Il wei è usato come la più piccola denominazione di ether. La conversione da wei a eth è: 1 eth = 10¹⁸ wei. Quindi se convertiamo 0xde0b6b3a7640000 in decimale otteniamo 1\*10¹⁸ che equivale a 1 eth. -**NOTA:** Questo risultato è in wei non in eth. Wei è usato come taglio più piccolo dell'ether. La conversione da wei a eth è: 1 eth = 10¹⁸ wei. Quindi se convertiamo 0xde0b6b3a7640000 in decimali, otteniamo 1\*10¹⁸, pari a 1 eth. - -Meno male! I nostri soldi finti ci sono tutti! 🤑 - - - -### Fase 5: connetti MetaMask alla tua interfaccia utente {#step-5-connect-metamask-to-your-UI} - -Ora che il nostro portafoglio di MetaMask è configurato, connettiamo la nostra dapp! +Fiuu! I nostri soldi finti ci sono tutti! 🤑 +### Passaggio 5: Connettere MetaMask alla tua interfaccia utente {#step-5-connect-metamask-to-your-UI} +Ora che il nostro portafoglio MetaMask è configurato, connettiamo la nostra dApp ad esso! #### La funzione `connectWallet` {#the-connectWallet-function} -Nel nostro file `interact.js`, implementiamo la funzione `connectWallet`, che poi potremo chiamare nel nostro componente `HelloWorld.js`. - -Modifichiamo `connectWallet` come segue: - +Nel nostro file `interact.js`, implementiamo la funzione `connectWallet`, che potremo poi chiamare nel nostro componente `HelloWorld.js`. +Modifichiamo `connectWallet` con quanto segue: ```javascript // interact.js @@ -1330,66 +1190,56 @@ export const connectWallet = async () => { } ``` +Quindi cosa fa esattamente questo gigantesco blocco di codice? -Cosa fa esattamente questo enorme blocco di codice? - -Innanzitutto, controlla se `window.ethereum` sia abilitato nel browser. - -`window.ethereum` è un'API globale, iniettata da MetaMask e altri fornitori di portafogli, che consente ai siti web di richiedere i conti di Ethereum degli utenti. Se approvato, può leggere i dati dalle blockchain a cui l'utente è connesso e suggerire all'utente di firmare messaggi e transazioni. Dai un'occhiata alla [documentazione di MetaMask](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) per ulteriori informazioni! - -Se `window.ethereum` _non è_ presente, significa che MetaMask non è installato. Verrà quindi restituito un oggetto JSON in cui l'`address` restituito è una stringa vuota e l'oggetto JSX di `status` indica che l'utente deve installare MetaMask. +Beh, per prima cosa, controlla se `window.ethereum` è abilitato nel tuo browser. -Ora, se `window.ethereum` _è_ presente, le cose cominciano a farsi interessanti. +`window.ethereum` è un'API globale iniettata da MetaMask e da altri fornitori di portafogli che consente ai siti web di richiedere gli account Ethereum degli utenti. Se approvata, può leggere i dati dalle blockchain a cui l'utente è connesso e suggerire all'utente di firmare messaggi e transazioni. Dai un'occhiata alla [documentazione di MetaMask](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) per maggiori informazioni! -Usando una struttura try/catch, proveremo a connetterci a MetaMask chiamando [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts). Chiamare questa funzione aprirà MetaMask nel browser, dove sarà richiesto all'utente di connettere il proprio portafoglio alla tua dapp. +Se `window.ethereum` _non è_ presente, significa che MetaMask non è installato. Questo fa sì che venga restituito un oggetto JSON, in cui l'`address` restituito è una stringa vuota e l'oggetto JSX `status` comunica che l'utente deve installare MetaMask. -- Se l'utente sceglie di connettersi, il `method: "eth_requestAccounts"` restituirà un array contenente gli indirizzi di tutti gli account dell'utente connessi alla dapp. Nel complesso, la nostra funzione `connectWallet` restituirà un oggetto JSON contenente il _primo_ `address` in questo array \(vedi la riga 9\) e un messaggio di `status` che richiede all'utente di scrivere un messaggio nello smart contract. -- Se l'utente rifiuta la connessione, allora l'oggetto JSON conterrà una stringa vuota per l'`address` restituito e un messaggio di `status` che indica che l'utente ha rifiutato la connessione. +Ora, se `window.ethereum` _è_ presente, è qui che le cose si fanno interessanti. -Ora che abbiamo scritto questa funzione `connectWallet`, il passo successivo è chiamarla nel nostro componente `HelloWorld.js`. +Usando un ciclo try/catch, proveremo a connetterci a MetaMask chiamando [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts). Chiamare questa funzione aprirà MetaMask nel browser, per cui all'utente verrà richiesto di connettere il proprio portafoglio alla tua dApp. +- Se l'utente sceglie di connettersi, `method: "eth_requestAccounts"` restituirà un array che contiene tutti gli indirizzi degli account dell'utente che si sono connessi alla dApp. Nel complesso, la nostra funzione `connectWallet` restituirà un oggetto JSON che contiene il _primo_ `address` in questo array \(vedi riga 9\) e un messaggio di `status` che invita l'utente a scrivere un messaggio al contratto intelligente. +- Se l'utente rifiuta la connessione, l'oggetto JSON conterrà una stringa vuota per l'`address` restituito e un messaggio di `status` che riflette che l'utente ha rifiutato la connessione. +Ora che abbiamo scritto questa funzione `connectWallet`, il passaggio successivo è chiamarla nel nostro componente `HelloWorld.js`. -#### Aggiungi la funzione `connectWallet` al componente dell'interfaccia utente `HelloWorld.js` {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} - -Vai alla funzione `connectWalletPressed` in `HelloWorld.js` e aggiornala come segue: - +#### Aggiungere la funzione `connectWallet` al tuo componente dell'interfaccia utente `HelloWorld.js` {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} +Naviga alla funzione `connectWalletPressed` in `HelloWorld.js` e aggiornala con quanto segue: ```javascript -/ HelloWorld.js +// HelloWorld.js -const c= async () => { +const connectWalletPressed = async () => { const walletResponse = await connectWallet() setStatus(walletResponse.status) setWallet(walletResponse.address) } ``` +Noti come la maggior parte delle nostre funzionalità sia astratta dal nostro componente `HelloWorld.js` dal file `interact.js`? Questo per rispettare il paradigma M-V-C! -Nota come gran parte della nostra funzionalità è esterna al nostro componente `HelloWorld.js` dal file `interact.js`? Questo perché stiamo seguendo il modello M-V-C! - -In `connectWalletPressed`, creiamo semplicemente una chiamata d'attesa alla nostra funzione `connectWallet` importata e, usando la sua risposta, aggiorniamo le nostre variabili `status` e `walletAddress` tramite i loro hook di stato. - -Ora salviamo entrambi i file \(`HelloWorld.js` e `interact.js`\) e testiamo la nostra interfaccia utente. +In `connectWalletPressed`, facciamo semplicemente una chiamata await alla nostra funzione `connectWallet` importata e, usando la sua risposta, aggiorniamo le nostre variabili `status` e `walletAddress` tramite i loro hook di stato. -Apri il browser sulla pagina [http://localhost:3000/](http://localhost:3000/) e premi il pulsante "Connetti portafoglio" in alto a destra della pagina. +Ora, salviamo entrambi i file \(`HelloWorld.js` e `interact.js`\) e testiamo la nostra interfaccia utente finora. -Se hai MetaMask installato, ti dovrebbe essere richiesto di connettere il tuo portafoglio alla tua dapp. Accetta l'invito a connetterti. +Apri il tuo browser sulla pagina [http://localhost:3000/](http://localhost:3000/) e premi il pulsante "Connect Wallet" in alto a destra della pagina. -Dovresti vedere che il pulsante del portafoglio ora mostra che il tuo indirizzo è connesso! Sììììì 🔥 +Se hai MetaMask installato, ti dovrebbe essere richiesto di connettere il tuo portafoglio alla tua dApp. Accetta l'invito a connetterti. -Prova quindi a ricaricare la pagina... questo è strano. Il nostro pulsante del portafoglio ci sta richiedendo di connetterci a MetaMask, anche se è già connesso... - -Tuttavia, non temere! Possiamo facilmente risolvere questo problema implementando `getCurrentWalletConnected`, che verificherà se un indirizzo è già connesso alla nostra dapp e aggiornerà l'interfaccia utente di conseguenza! +Dovresti vedere che il pulsante del portafoglio ora riflette che il tuo indirizzo è connesso! Siiii 🔥 +Successivamente, prova ad aggiornare la pagina... questo è strano. Il nostro pulsante del portafoglio ci chiede di connettere MetaMask, anche se è già connesso... +Tuttavia, non temere! Possiamo facilmente risolvere il problema implementando `getCurrentWalletConnected`, che controllerà se un indirizzo è già connesso alla nostra dApp e aggiornerà la nostra interfaccia utente di conseguenza! #### La funzione `getCurrentWalletConnected` {#the-getcurrentwalletconnected-function} -Aggiorna la funzione `getCurrentWalletConnected` nel file `interact.js` come segue: - - +Aggiorna la tua funzione `getCurrentWalletConnected` nel file `interact.js` con quanto segue: ```javascript // interact.js @@ -1436,14 +1286,11 @@ export const getCurrentWalletConnected = async () => { } ``` +Questo codice è _molto_ simile alla funzione `connectWallet` che abbiamo appena scritto nel passaggio precedente. -Questo codice è _molto_ simile alla funzione `connectWallet` che abbiamo appena scritto nella fase precedente. - -La differenza principale è che, invece di chiamare il metodo `eth_requestAccounts`, che apre MetaMask perché l'utente connetta il proprio portafoglio, qui chiamiamo il metodo `eth_accounts` che, semplicemente, restituisce un insieme contenente gli indirizzi di MetaMask correntemente connessi alla nostra dapp. - -Per vedere questa funzione in azione, chiamiamola nella funzione `useEffect` del nostro componente `HelloWorld.js`: - +La differenza principale è che invece di chiamare il metodo `eth_requestAccounts`, che apre MetaMask affinché l'utente connetta il proprio portafoglio, qui chiamiamo il metodo `eth_accounts`, che restituisce semplicemente un array contenente gli indirizzi MetaMask attualmente connessi alla nostra dApp. +Per vedere questa funzione in azione, chiamiamola nella nostra funzione `useEffect` del nostro componente `HelloWorld.js`: ```javascript // HelloWorld.js @@ -1459,23 +1306,18 @@ useEffect(async () => { }, []) ``` +Nota, usiamo la risposta della nostra chiamata a `getCurrentWalletConnected` per aggiornare le nostre variabili di stato `walletAddress` e `status`. -Nota che stiamo usando la risposta alla nostra chiamata a `getCurrentWalletConnected` per aggiornare le nostre variabili di stato `walletAddress` e `status`. +Ora che hai aggiunto questo codice, proviamo ad aggiornare la finestra del nostro browser. -Ora che abbiamo aggiunto questo codice, proviamo ad aggiornare la finestra del browser. +Belloooo! Il pulsante dovrebbe dire che sei connesso e mostrare un'anteprima dell'indirizzo del tuo portafoglio connesso, anche dopo aver aggiornato! -Bellooooo! Il pulsante dovrebbe dire che sei connesso e mostrare un'anteprima dell'indirizzo del tuo portafoglio connesso, anche dopo un refresh! +#### Implementare `addWalletListener` {#implement-addwalletlistener} - - -#### Implementa `addWalletListener` {#implement-addwalletlistener} - -Il passaggio finale della configurazione del portafoglio della nostra dapp è implementare l'ascoltatore del portafoglio, così che la nostra UI si aggiorni al cambiamento dello stato del nostro portafoglio, ad esempio, quando l'utente si disconnette o cambia conto. +Il passaggio finale nella configurazione del portafoglio della nostra dApp è l'implementazione del listener del portafoglio in modo che la nostra interfaccia utente si aggiorni quando lo stato del nostro portafoglio cambia, come quando l'utente si disconnette o cambia account. Nel tuo file `HelloWorld.js`, modifica la tua funzione `addWalletListener` come segue: - - ```javascript // HelloWorld.js @@ -1503,16 +1345,13 @@ function addWalletListener() { } ``` +Scommetto che a questo punto non hai nemmeno bisogno del nostro aiuto per capire cosa sta succedendo qui, ma per completezza, analizziamolo rapidamente: -Scommetto che a questo punto non hai bisogno del nostro aiuto per capire cosa succede qui, ma per completezza di informazioni, vediamo di analizzare velocemente la situazione: - -- Per prima cosa, la nostra funzione verifica se `window.ethereum` è abilitata \(cioè se MetaMask è installato\). - - Se non lo è, impostiamo semplicemente la nostra variabile di stato `status`a una stringa JSX che richiede all'utente di installare MetaMask. - - Se è abilitato, configuriamo l'ascoltatore `window.ethereum.on("accountsChanged")` alla riga 3, affinché ascolti i cambiamenti di stato nel portafoglio di MetaMask, tra cui, quando l'utente connette un ulteriore conto alla dapp, cambia conto, o ne disconnette uno. Se è connesso almeno un conto, la variabile di stato `walletAddress` è aggiornata come primo conto nell'insieme `accounts`, restituito dall'ascoltatore. Altrimenti, `walletAddress` è impostato come una stringa vuota. - -Infine ma non meno importante, dobbiamo chiamare la funzione `useEffect`: - +- Per prima cosa, la nostra funzione controlla se `window.ethereum` è abilitato \(cioè, MetaMask è installato\). + - Se non lo è, impostiamo semplicemente la nostra variabile di stato `status` su una stringa JSX che invita l'utente a installare MetaMask. + - Se è abilitato, impostiamo il listener `window.ethereum.on("accountsChanged")` alla riga 3 che ascolta i cambiamenti di stato nel portafoglio MetaMask, che includono quando l'utente connette un account aggiuntivo alla dApp, cambia account o disconnette un account. Se c'è almeno un account connesso, la variabile di stato `walletAddress` viene aggiornata come il primo account nell'array `accounts` restituito dal listener. Altrimenti, `walletAddress` viene impostato come una stringa vuota. +Ultimo ma non meno importante, dobbiamo chiamarlo nella nostra funzione `useEffect`: ```javascript // HelloWorld.js @@ -1530,30 +1369,23 @@ useEffect(async () => { }, []) ``` +E questo è tutto! Abbiamo completato con successo la programmazione di tutte le funzionalità del nostro portafoglio! Ora passiamo al nostro ultimo compito: aggiornare il messaggio memorizzato nel nostro contratto intelligente! -E questo è tutto! Abbiamo completato con successo la programmazione di tutte le funzionalità del nostro portafoglio! Passiamo ora all'ultimo compito: aggiornare il messaggio memorizzato nel contratto intelligente! - - - -### Fase 6: implementa la funzione `updateMessage` {#step-6-implement-the-updateMessage-function} - -Bene, siamo in dirittura d'arrivo! Nel `updateMessage` del tuo file `interact.js`, faremo quanto segue: - -1. Assicurarci che il messaggio che vogliamo pubblicare nel nostro contratto intelligente sia valido -2. Firmare la transazione usando MetaMask -3. Chiamare questa funzione dal componente del frontend `HelloWorld.js` +### Passaggio 6: Implementare la funzione `updateMessage` {#step-6-implement-the-updateMessage-function} -Non ci vorrà molto; finiamo questa dapp! +Va bene ragazzi, siamo arrivati al rettilineo finale! In `updateMessage` del tuo file `interact.js`, faremo quanto segue: +1. Assicurarci che il messaggio che desideriamo pubblicare nel nostro contratto intelligente sia valido +2. Firmare la nostra transazione usando MetaMask +3. Chiamare questa funzione dal nostro componente frontend `HelloWorld.js` +Non ci vorrà molto; finiamo questa dApp! -#### Gestione degli errori d'input {#input-error-handling} - -Naturalmente, è utile avere una certa gestione degli errori di input all'inizio della funzione. - -Vorremo che la nostra funzione ci faccia sapere subito se non c'è un'estensione MetaMask installata, se non c'è un portafoglio connesso \(ossia `address` passato è una stringa vuota\) o se `message` è una stringa vuota. Aggiungiamo la seguente gestione degli errori a `updateMessage`: +#### Gestione degli errori di input {#input-error-handling} +Naturalmente, ha senso avere una sorta di gestione degli errori di input all'inizio della funzione. +Vorremo che la nostra funzione ritorni in anticipo se non c'è alcuna estensione MetaMask installata, non c'è alcun portafoglio connesso \(cioè, l'`address` passato è una stringa vuota\), o il `message` è una stringa vuota. Aggiungiamo la seguente gestione degli errori a `updateMessage`: ```javascript // interact.js @@ -1574,28 +1406,23 @@ export const updateMessage = async (address, message) => { } ``` +Ora che ha una corretta gestione degli errori di input, è il momento di firmare la transazione tramite MetaMask! -Ora che la gestione degli errori d'input è gestita correttamente, è tempo di firmare la transazione con MetaMask! - - - -#### Firmare la transazione {#signing-our-transaction} - -Se ti senti già a tuo agio con le transazioni web3 di Ethereum tradizionali, il codice che scriveremo in seguito ti risulterà molto familiare. Sotto il tuo codice di gestione degli errori di input, aggiungi quanto segue a `updateMessage`: - +#### Firmare la nostra transazione {#signing-our-transaction} +Se hai già familiarità con le tradizionali transazioni Ethereum web3, il codice che scriveremo di seguito ti sarà molto familiare. Sotto il tuo codice di gestione degli errori di input, aggiungi quanto segue a `updateMessage`: ```javascript // interact.js -//set up transaction parameters +// imposta i parametri della transazione const transactionParameters = { - to: contractAddress, // Required except during contract publications. - from: address, // must match user's active address. + to: contractAddress, // Obbligatorio tranne durante le pubblicazioni del contratto. + from: address, // deve corrispondere all'indirizzo attivo dell'utente. data: helloWorldContract.methods.update(message).encodeABI(), } -//sign the transaction +// firma la transazione try { const txHash = await window.ethereum.request({ method: "eth_sendTransaction", @@ -1621,29 +1448,26 @@ try { } ``` +Analizziamo cosa sta succedendo. Per prima cosa, impostiamo i parametri delle nostre transazioni, dove: -Analizziamo cosa sta accadendo. Per prima cosa importiamo i parametri delle transazioni, dove: - -- `to` specifica l'indirizzo del destinatario \(il nostro smart contract\) -- `from` specifica il firmatario della transazione, la variabile `address` che abbiamo passato nella nostra funzione +- `to` specifica l'indirizzo del destinatario \(il nostro contratto intelligente\) +- `from` specifica il firmatario della transazione, la variabile `address` che abbiamo passato alla nostra funzione - `data` contiene la chiamata al metodo `update` del nostro contratto intelligente Hello World, ricevendo la nostra variabile stringa `message` come input -Creiamo quindi una chiamata d'attesa, `window.ethereum.request` in cui chiediamo a MetaMask di firmare la transazione. Nota che, alle righe 11 e 12, stiamo specificando il nostro metodo eth, `eth_sendTransaction`, e passando i nostri `transactionParameters`. - -A questo punto, MetaMask si aprirà nel browser e richiederà all'utente di firmare o rifiutare la transazione. +Quindi, facciamo una chiamata await, `window.ethereum.request`, in cui chiediamo a MetaMask di firmare la transazione. Nota, alle righe 11 e 12, stiamo specificando il nostro metodo eth, `eth_sendTransaction` e passando i nostri `transactionParameters`. -- Se la transazione va a buon fine, la funzione restituirà un oggetto JSON in cui la stringa JSX `status` richiede all'utente di controllare Etherscan per ulteriori informazioni sulla sua transazione. -- Se la transazione non va a buon fine, la funzione restituirà un oggetto JSON in cui la stringa `status` trasmette il messaggio d'errore. - -Complessivamente, la nostra funzione `updateMessage` dovrebbe avere questo aspetto: +A questo punto, MetaMask si aprirà nel browser e chiederà all'utente di firmare o rifiutare la transazione. +- Se la transazione ha esito positivo, la funzione restituirà un oggetto JSON in cui la stringa JSX `status` invita l'utente a controllare Etherscan per maggiori informazioni sulla propria transazione. +- Se la transazione fallisce, la funzione restituirà un oggetto JSON in cui la stringa `status` trasmette il messaggio di errore. +Nel complesso, la nostra funzione `updateMessage` dovrebbe apparire così: ```javascript // interact.js export const updateMessage = async (address, message) => { - //input error handling + // gestione degli errori di input if (!window.ethereum || address === null) { return { status: @@ -1657,14 +1481,14 @@ export const updateMessage = async (address, message) => { } } - //set up transaction parameters + // imposta i parametri della transazione const transactionParameters = { - to: contractAddress, // Required except during contract publications. - from: address, // must match user's active address. + to: contractAddress, // Obbligatorio tranne durante le pubblicazioni del contratto. + from: address, // deve corrispondere all'indirizzo attivo dell'utente. data: helloWorldContract.methods.update(message).encodeABI(), } - //sign the transaction + // firma la transazione try { const txHash = await window.ethereum.request({ method: "eth_sendTransaction", @@ -1691,16 +1515,11 @@ export const updateMessage = async (address, message) => { } ``` +Ultimo ma non meno importante, dobbiamo connettere la nostra funzione `updateMessage` al nostro componente `HelloWorld.js`. -Infine, ma non meno importante, dobbiamo connettere la nostra funzione`updateMessage` al nostro componente `HelloWorld.js`. - - - -#### Connetti `updateMessage`al frontend `HelloWorld.js` {#connect-updatemessage-to-the-helloworld-js-frontend} - -La nostra funzione `onUpdatePressed` dovrebbe effettuare una chiamata d'attesa alla funzione `updateMessage` importata e modificare la variabile di stato `status` per riflettere se la transazione è andata o meno a buon fine: - +#### Connettere `updateMessage` al frontend `HelloWorld.js` {#connect-updatemessage-to-the-helloworld-js-frontend} +La nostra funzione `onUpdatePressed` dovrebbe fare una chiamata await alla funzione `updateMessage` importata e modificare la variabile di stato `status` per riflettere se la nostra transazione ha avuto successo o è fallita: ```javascript // HelloWorld.js @@ -1711,21 +1530,18 @@ const onUpdatePressed = async () => { } ``` +È super pulito e semplice. E indovina un po'... LA TUA DAPP È COMPLETA!!! -È super chiaro e semplice. E indovina un po'... LA TUA DAPP È COMPLETA!!! - -Prosegui e pova il pulsante **Aggiorna**! - - +Vai avanti e testa il pulsante **Update**! -### Crea la tua dapp personalizzata {#make-your-own-custom-dapp} +### Crea la tua dApp personalizzata {#make-your-own-custom-dapp} -Fantastico, sei arrivato alla fine del tutorial! Per ricapitolare, hai imparato a: +Wooooo, sei arrivato alla fine del tutorial! Per riassumere, hai imparato come: -- Collegare un portafoglio di MetaMask al tuo progetto dapp -- Leggere dati da un contratto intelligente usando le API [Web3 di Alchemy](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) +- Connettere un portafoglio MetaMask al tuo progetto dApp +- Leggere i dati dal tuo contratto intelligente usando l'API di [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) - Firmare le transazioni di Ethereum usando MetaMask -Ora hai tutti gli strumenti applicare le competenze apprese in questo tutorial per costruire il tuo progetto dapp! Come sempre, se hai domande, non esitare a contattarci per chiedere aiuto sul [Discord di Alchemy](https://discord.gg/gWuC7zB). 🧙‍♂️ +Ora sei completamente equipaggiato per applicare le competenze di questo tutorial per costruire il tuo progetto dApp personalizzato! Come sempre, se hai domande, non esitare a contattarci per ricevere aiuto nel [Discord di Alchemy](https://discord.gg/gWuC7zB). 🧙‍♂️ -Una volta completato questo tutorial, facci sapere come è stata la tua esperienza o se hai qualche feedback taggandoci su Twitter [@alchemyplatform](https://twitter.com/AlchemyPlatform)! +Una volta completato questo tutorial, facci sapere com'è stata la tua esperienza o se hai dei feedback taggandoci su Twitter [@alchemyplatform](https://twitter.com/AlchemyPlatform)! \ No newline at end of file diff --git a/public/content/translations/it/social-networks/index.md b/public/content/translations/it/social-networks/index.md index f2985f86e3c..5962af586fb 100644 --- a/public/content/translations/it/social-networks/index.md +++ b/public/content/translations/it/social-networks/index.md @@ -11,7 +11,7 @@ summaryPoint2: Le reti di social media decentralizzate proteggono la privacy deg summaryPoint3: I token e gli NFT creano nuovi modi per monetizzare i contenuti. --- -I social network svolgono un ruolo enorme nelle nostre comunicazioni e interazioni quotidiane. Tuttavia, il controllo centralizzato di queste piattaforme ha creato molti problemi: violazioni dei dati, interruzioni dei server, de-platforming, censura e violazioni della privacy sono alcuni dei compromessi che i social media spesso accettano. Per combattere questi problemi, gli sviluppatori stanno costruendo social network su [Ethereum](). I social network decentralizzati possono risolvere molti dei problemi delle piattaforme di social networking tradizionali e migliorare l'esperienza complessiva degli utenti. +I social network svolgono un ruolo enorme nelle nostre comunicazioni e interazioni quotidiane. Tuttavia, il controllo centralizzato di queste piattaforme ha creato molti problemi: violazioni dei dati, interruzioni dei server, de-platforming, censura e violazioni della privacy sono alcuni dei compromessi che i social media spesso accettano. Per combattere questi problemi, gli sviluppatori stanno costruendo social network su [Ethereum](/). I social network decentralizzati possono risolvere molti dei problemi delle piattaforme di social networking tradizionali e migliorare l'esperienza complessiva degli utenti. ## Cosa sono i social network decentralizzati? {#what-are-decentralized-social-networks} diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/node-architecture/index.md index 07d1670f67a..17a50fc950e 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: ja イーサリアムのノードは、[実行クライアント](/developers/docs/nodes-and-clients/#execution-clients)と[コンセンサスクライアント](/developers/docs/nodes-and-clients/#consensus-clients)の2つのクライアントで構成されています。 新しいブロックを提案するノードでは、[バリデータクライアント](#validators)も実行する必要があります。 -イーサリアムが[プルーフ・オブ・ワーク](/developers/docs/consensus-mechanisms/pow/)を採用していた頃は、実行クライアントだけで完全なイーサリアムノードを稼働させることができました。 しかし、[プルーフ・オブ・ステーク](/developers/docs/consensus-mechanisms/pow/)の実装以降、実行クライアントは[コンセンサスクライアント](/developers/docs/nodes-and-clients/#consensus-clients)と呼ばれる別のソフトウェアと併用しなければならなくなりました。 +イーサリアムが[プルーフ・オブ・ワーク](/developers/docs/consensus-mechanisms/pow/)を採用していた頃は、実行クライアントだけで完全なイーサリアムノードを稼働させることができました。 しかし、[プルーフ・オブ・ステーク](/developers/docs/consensus-mechanisms/pos/)の実装以降、実行クライアントは[コンセンサスクライアント](/developers/docs/nodes-and-clients/#consensus-clients)と呼ばれる別のソフトウェアと併用しなければならなくなりました。 以下の図は、2つのイーサリアムクライアント間の関係を示しています。 それぞれのクライアントは、独自のピアツーピア(P2P)・ネットワークに接続しています。 実行クライアントは、ピアツーピア・ネットワークでトランザクションをゴシップし、ローカルのトランザクションプールを管理することができます。一方、コンセンサスクライアントは、ピアツーピア・ネットワークでブロックをゴシップし、コンセンサスを確立し、チェーンの成長を促進します。そのため、別々のピアツーピア・ネットワークが必要になります。 diff --git a/public/content/translations/ko/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/ko/developers/docs/nodes-and-clients/node-architecture/index.md index 06a5daa4150..1eb4c454f0c 100644 --- a/public/content/translations/ko/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/ko/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: ko 이더리움 노드는 [실행 클라이언트](/developers/docs/nodes-and-clients/#execution-clients)와 [합의 클라이언트](/developers/docs/nodes-and-clients/#consensus-clients)의 두 클라이언트로 구성됩니다. 노드가 새 블록을 제안하려면 [검증자 클라이언트](#validators)도 실행해야 합니다. -이더리움이 [작업 증명](/developers/docs/consensus-mechanisms/pow/)을 사용했을 때에는 실행 클라이언트만으로도 전체 이더리움 노드를 실행하기에 충분했습니다. 그러나 [지분 증명](/developers/docs/consensus-mechanisms/pow/)이 구현된 이후에는 실행 클라이언트는 [합의 클라이언트](/developers/docs/nodes-and-clients/#consensus-clients)라는 다른 소프트웨어와 함께 사용되어야 합니다. +이더리움이 [작업 증명](/developers/docs/consensus-mechanisms/pow/)을 사용했을 때에는 실행 클라이언트만으로도 전체 이더리움 노드를 실행하기에 충분했습니다. 그러나 [지분 증명](/developers/docs/consensus-mechanisms/pos/)이 구현된 이후에는 실행 클라이언트는 [합의 클라이언트](/developers/docs/nodes-and-clients/#consensus-clients)라는 다른 소프트웨어와 함께 사용되어야 합니다. 아래 다이어그램은 두 이더리움 클라이언트 간의 관계를 보여줍니다. 두 클라이언트는 각자의 peer-to-peer (P2P) 네트워크에 연결됩니다. 실행 클라이언트는 P2P 네트워크를 통해 트랜잭션을 가십하여 로컬 트랜잭션 풀을 관리하고, 합의 클라이언트는 P2P 네트워크를 통해 블록을 가십하여 합의와 체인 성장을 가능하게 하므로 별도의 P2P 네트워크가 필요합니다. diff --git a/public/content/translations/ko/restaking/index.md b/public/content/translations/ko/restaking/index.md index 5480422f1a1..2a746a737a3 100644 --- a/public/content/translations/ko/restaking/index.md +++ b/public/content/translations/ko/restaking/index.md @@ -144,7 +144,7 @@ AVS마다 다른 이율을 제공하지만, eETH와 같은 유동성 리스테

이더리움 공동 창업자가 입력 중…

- 이더리움의 공동 창업자인 비탈릭은 2021년 블로그 게시물 합의에 과부하를 주지 마세요(Don't Overload Consensus)에서 리스테이킹의 잠재적 위험에 대해 경고했습니다. + 이더리움의 공동 창업자인 비탈릭은 2021년 블로그 게시물 합의에 과부하를 주지 마세요(Don't Overload Consensus)에서 리스테이킹의 잠재적 위험에 대해 경고했습니다.

diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md index f23448f0047..5de7511eeab 100644 --- a/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: mr एक इथेरियम नोड दोन क्लायंट्सनी बनलेला असतो: एक [एक्झिक्यूशन क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) आणि एक [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients). एखाद्या नोडला नवीन ब्लॉक प्रस्तावित करण्यासाठी, त्याला [व्हॅलिडेटर क्लायंट](#validators) देखील चालवणे आवश्यक आहे. -जेव्हा इथेरियम [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) वापरत होते, तेव्हा संपूर्ण इथेरियम नोड चालवण्यासाठी एक एक्झिक्यूशन क्लायंट पुरेसा होता. तथापि, [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pow/) लागू केल्यापासून, एक्झिक्यूशन क्लायंटला [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients) नावाच्या दुसऱ्या सॉफ्टवेअरसोबत वापरणे आवश्यक आहे. +जेव्हा इथेरियम [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) वापरत होते, तेव्हा संपूर्ण इथेरियम नोड चालवण्यासाठी एक एक्झिक्यूशन क्लायंट पुरेसा होता. तथापि, [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) लागू केल्यापासून, एक्झिक्यूशन क्लायंटला [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients) नावाच्या दुसऱ्या सॉफ्टवेअरसोबत वापरणे आवश्यक आहे. खालील आकृती दोन इथेरियम क्लायंट्समधील संबंध दर्शवते. हे दोन क्लायंट आपापल्या पीअर-टू-पीअर (P2P) नेटवर्कशी जोडले जातात. वेगवेगळे P2P नेटवर्क्स आवश्यक आहेत कारण एक्झिक्यूशन क्लायंट त्यांच्या P2P नेटवर्कवर व्यवहारांची देवाणघेवाण (गॉसिप) करतात, ज्यामुळे ते त्यांचे स्थानिक व्यवहार पूल व्यवस्थापित करू शकतात, तर कन्सेन्सस क्लायंट त्यांच्या P2P नेटवर्कवर ब्लॉक्सची देवाणघेवाण करतात, ज्यामुळे सहमती (कन्सेन्सस) आणि चेनची वाढ होते. diff --git a/public/content/translations/pl/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/pl/developers/docs/nodes-and-clients/node-architecture/index.md index 6543ef23338..6649162e223 100644 --- a/public/content/translations/pl/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/pl/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: pl Węzeł Ethereum składa się z dwóch klientów: [klienta wykonawczego](/developers/docs/nodes-and-clients/#execution-clients) i [klienta konsensusu](/developers/docs/nodes-and-clients/#consensus-clients). Aby węzeł mógł zaproponować nowy blok, musi również uruchomić [klienta walidatora](#validators). -Kiedy Ethereum korzystało z [proof-of-work](/developers/docs/consensus-mechanisms/pow/), do uruchomienia pełnego węzła Ethereum wystarczył klient wykonawczy. Jednak od czasu wdrożenia [proof-of-stake](/developers/docs/consensus-mechanisms/pow/), klient wykonawczy musi być używany wraz z innym oprogramowaniem zwanym [klientem konsensusu](/developers/docs/nodes-and-clients/#consensus-clients). +Kiedy Ethereum korzystało z [proof-of-work](/developers/docs/consensus-mechanisms/pow/), do uruchomienia pełnego węzła Ethereum wystarczył klient wykonawczy. Jednak od czasu wdrożenia [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), klient wykonawczy musi być używany wraz z innym oprogramowaniem zwanym [klientem konsensusu](/developers/docs/nodes-and-clients/#consensus-clients). Poniższy diagram pokazuje relację między tymi dwoma klientami Ethereum. Oba klienty łączą się z własną siecią peer-to-peer (P2P). Oddzielnie sieci P2P są potrzebne, ponieważ klienty wykonawcze plotkują transakcje po swojej sieci P2P co pozwala im na zarządzanie lokalną pulą transakcji, podczas gdy klienty konsensusu plotkują bloki po swojej sieci P2P co z kolei pozwala konsensus i rozrost łańcucha. diff --git a/public/content/translations/pt-br/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/pt-br/developers/docs/nodes-and-clients/node-architecture/index.md index 360ef33aac3..84c949a6edb 100644 --- a/public/content/translations/pt-br/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/pt-br/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: pt-br Um nó do Ethereum é composto por dois clientes: um [cliente de execução](/developers/docs/nodes-and-clients/#execution-clients) e um [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). Para um nó propor um novo bloco, ele também deve executar um [cliente validador](#validators). -Quando o Ethereum estava usando [prova de trabalho](/developers/docs/consensus-mechanisms/pow/), um cliente de execução era suficiente para executar um nó completo do Ethereum. No entanto, desde a implementação da [prova de participação](/developers/docs/consensus-mechanisms/pow/), o cliente de execução deve ser usado juntamente com outra parte do software chamada [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). +Quando o Ethereum estava usando [prova de trabalho](/developers/docs/consensus-mechanisms/pow/), um cliente de execução era suficiente para executar um nó completo do Ethereum. No entanto, desde a implementação da [prova de participação](/developers/docs/consensus-mechanisms/pos/), o cliente de execução deve ser usado juntamente com outra parte do software chamada [cliente de consenso](/developers/docs/nodes-and-clients/#consensus-clients). O diagrama abaixo mostra a relação entre os dois clientes Ethereum. Os dois clientes se conectam às suas respectivas redes ponto a ponto (P2P). As redes P2P separadas são necessárias à medida que os clientes de execução espalham transações em sua rede P2P, permitindo que eles gerenciem seu pool de transações local, enquanto os clientes de consenso distribuem blocos em sua rede P2P, permitindo consenso e crescimento da cadeia. diff --git a/public/content/translations/ru/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/ru/developers/docs/nodes-and-clients/node-architecture/index.md index ba02338173b..8df146126b6 100644 --- a/public/content/translations/ru/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/ru/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: ru Узел Ethereum состоит из двух клиентов: [клиента исполнения](/developers/docs/nodes-and-clients/#execution-clients) и [клиента консенсуса](/developers/docs/nodes-and-clients/#consensus-clients). Чтобы узел мог предложить новый блок, он также должен запустить [клиент валидатора](#validators). -Когда Ethereum использовал [доказательство работы](/developers/docs/consensus-mechanisms/pow/), для запуска полного узла Ethereum было достаточно клиента исполнения. Однако с момента внедрения [доказательства владения](/developers/docs/consensus-mechanisms/pow/) клиент исполнения должен использоваться вместе с другой программой, называемой [клиентом консенсуса](/developers/docs/nodes-and-clients/#consensus-clients). +Когда Ethereum использовал [доказательство работы](/developers/docs/consensus-mechanisms/pow/), для запуска полного узла Ethereum было достаточно клиента исполнения. Однако с момента внедрения [доказательства владения](/developers/docs/consensus-mechanisms/pos/) клиент исполнения должен использоваться вместе с другой программой, называемой [клиентом консенсуса](/developers/docs/nodes-and-clients/#consensus-clients). На диаграмме ниже показаны отношения между двумя клиентами Ethereum. Два клиента подключены к своим собственным одноранговым сетям (P2P) Отдельные P2P-сети необходимы, поскольку клиенты исполнения распространяют транзакции по своей P2P-сети, что позволяет им управлять своим локальными транзакциями, в то время как клиенты консенсуса обмениваются блоками по своей P2P-сети, что обеспечивает консенсус и рост цепочки. diff --git a/public/content/translations/ru/restaking/index.md b/public/content/translations/ru/restaking/index.md index 30d78f15002..d426eab2460 100644 --- a/public/content/translations/ru/restaking/index.md +++ b/public/content/translations/ru/restaking/index.md @@ -144,7 +144,7 @@ buttons:

Сооснователь Ethereum печатает…

- Виталик, сооснователь Ethereum, предупредил о потенциальных рисках рестейкинга в блог-посте 2021 года под названием «Не перегружайте консенсус». + Виталик, сооснователь Ethereum, предупредил о потенциальных рисках рестейкинга в блог-посте 2021 года под названием «Не перегружайте консенсус».

diff --git a/public/content/translations/ta/contributing/translation-program/translatathon/index.md b/public/content/translations/ta/contributing/translation-program/translatathon/index.md new file mode 100644 index 00000000000..e1c3c38e9b5 --- /dev/null +++ b/public/content/translations/ta/contributing/translation-program/translatathon/index.md @@ -0,0 +1,100 @@ +--- +title: 2025 ethereum.org Translatathon +lang: ta +template: translatathon +--- + + + + + + + +## அறிமுகம் {#introduction} + +[Ethereum](/) உள்ளடக்கம் மற்றும் ஆன்போர்டிங் ஆதாரங்கள், அவர்கள் பேசும் மொழியைப் பொருட்படுத்தாமல் அனைவருக்கும் அணுகக்கூடியதாக இருக்க வேண்டும் என்று நாங்கள் நம்புகிறோம். +இந்த இலக்கை நெருங்குவதற்கு, ethereum.org மொழிபெயர்ப்புத் திட்டம் என்பது இணையதளத்தை முடிந்தவரை பல மொழிகளில் மொழிபெயர்ப்பதற்கான ஒரு முயற்சியாகும். + +மொழிபெயர்ப்புத் திட்டத்தின் ஒரு பகுதியாக, குறைவான செயல்பாட்டிலுள்ள மொழிகளில் மொழிபெயர்ப்புப் பங்களிப்புகளை ஊக்குவிக்கவும், தளத்தில் கிடைக்கும் மொழிகளின் எண்ணிக்கை மற்றும் உள்ளடக்கத்தின் அளவை அதிகரிக்கவும், புதிய பங்களிப்பாளர்களை இணைக்கவும், எங்களின் தற்போதைய பங்களிப்பாளர்களுக்கு வெகுமதியளிக்கவும் நோக்கமாகக் கொண்ட எங்கள் மொழிபெயர்ப்புப் போட்டியான Translatathon-இன் 3-வது பதிப்பை நாங்கள் ஏற்பாடு செய்கிறோம். + +நீங்கள் ஆங்கிலம் அல்லாத வேறு மொழியைத் தாய்மொழியாகக் கொண்டவராகவும், பரிசுகளுக்காகப் போட்டியிடும் அதே வேளையில் Ethereum உள்ளடக்கத்தை மேலும் அணுகக்கூடியதாக மாற்ற உதவ விரும்பினால், மேலும் அறிய தொடர்ந்து படிக்கவும்! + +[ethereum.org மொழிபெயர்ப்புத் திட்டம் பற்றி மேலும் அறிக](/contributing/translation-program/) + +## காலவரிசை {#timeline} + +2025 Translatathon-க்கான முக்கிய தேதிகள் இதோ: + + + + + +## பங்கேற்க {#participate} + +![சமூகம் மற்றும் உலக உருண்டையின் படம்](./participate.png) + + + +

யார் பங்கேற்கலாம்?

+ 18 வயதுக்கு மேற்பட்ட, ஆங்கிலம் அல்லாத குறைந்தது ஒரு மொழியைத் தாய்மொழியாகக் கொண்ட மற்றும் ஆங்கிலத்தில் புலமை பெற்ற எவரும் பங்கேற்கலாம். +
+ +

நான் ஒரு மொழிபெயர்ப்பாளராக இருக்க வேண்டுமா?

+ இல்லை. நீங்கள் இருமொழி தெரிந்தவராக இருந்து, உங்களால் முடிந்தவரை மனித மொழிபெயர்ப்புகளைப் பரிந்துரைக்க வேண்டும் (இயந்திர மொழிபெயர்ப்பைப் பயன்படுத்துவது தடைசெய்யப்பட்டுள்ளது!), தொழில்முறை அனுபவம் எதுவும் தேவையில்லை. +
+
+ + + +

நான் எவ்வளவு நேரம் ஒதுக்க வேண்டும்?

+ நீங்கள் விரும்பும் அளவுக்கு. பரிசுகளுக்குத் தகுதிபெற குறைந்தபட்ச வரம்பு 1,000 மொழிபெயர்க்கப்பட்ட வார்த்தைகள் ஆகும், இதை முடிக்க சுமார் 2 மணிநேரம் ஆகலாம், அதே சமயம் சிறந்த பரிசுகளுக்காகப் போட்டியிடுவதற்கு அதிக நேரம் ஒதுக்க வேண்டியிருக்கும். +
+ +

எனக்கு Ethereum பற்றி தெரிந்திருக்க வேண்டுமா?

+ இல்லை. Ethereum பற்றித் தெரிந்திருப்பது உங்கள் உற்பத்தித்திறன் மற்றும் தரத்திற்கு உதவக்கூடும் என்றாலும், Translatathon ஒரு கற்றல் அனுபவமும்கூட, மேலும் பங்கேற்கும்போதே Ethereum பற்றி மேலும் அறிந்துகொள்ள அனைவரும் அழைக்கப்படுகிறார்கள். +
+
+ +மேலும் விவரங்களுக்கு, [முழுமையான விதிமுறைகள் மற்றும் நிபந்தனைகளைப் பார்க்கவும்](/contributing/translation-program/translatathon/terms-and-conditions) + +### படிப்படியான வழிமுறைகள் {#step-by-step-instructions} + + + +## பரிசுகள் {#prizes} + +| இடம் | பரிசுத் தொகை | +|---------------------|--------------| +| 1-வது இடம் | $4000 | +| 2-வது இடம் | $2500 | +| 3-வது இடம் | $1500 | +| 4-வது இடம் | $1100 | +| 5-வது இடம் | $1000 | +| 6-வது இடம் | $600 | +| 7-வது இடம் | $550 | +| 8-வது இடம் | $500 | +| 9-வது இடம் | $450 | +| 10-வது இடம் | $400 | +| 11 - 20-வது இடம் | $240 | +| 21 - 50-வது இடம் | $120 | +| 51 - 100-வது இடம் | $60 | +| 101 - 150-வது இடம் | $40 | +| மற்றவர்கள் | $20 | + +அனைத்துப் பரிசுகளும் ETH-இல் வழங்கப்படும். + + + + \ No newline at end of file diff --git a/public/content/translations/ta/developers/docs/apis/json-rpc/index.md b/public/content/translations/ta/developers/docs/apis/json-rpc/index.md new file mode 100644 index 00000000000..ed478a70972 --- /dev/null +++ b/public/content/translations/ta/developers/docs/apis/json-rpc/index.md @@ -0,0 +1,1895 @@ +--- +title: JSON-RPC API +description: "Ethereum கிளையண்டுகளுக்கான நிலையற்ற (stateless), குறைந்த எடையுள்ள ரிமோட் ப்ரொசீஜர் கால் (RPC) நெறிமுறை." +lang: ta +--- + +ஒரு மென்பொருள் பயன்பாடு [Ethereum](/) பிளாக்செயினுடன் தொடர்பு கொள்ள - பிளாக்செயின் தரவைப் படிப்பதன் மூலமாகவோ அல்லது நெட்வொர்க்கிற்கு பரிவர்த்தனைகளை அனுப்புவதன் மூலமாகவோ - அது ஒரு Ethereum நோடுடன் இணைக்கப்பட வேண்டும். + +இந்த நோக்கத்திற்காக, ஒவ்வொரு [Ethereum கிளையண்டும்](/developers/docs/nodes-and-clients/#execution-clients) ஒரு [JSON-RPC விவரக்குறிப்பை](https://github.com/ethereum/execution-apis) செயல்படுத்துகிறது, எனவே குறிப்பிட்ட நோடு அல்லது கிளையண்ட் செயலாக்கத்தைப் பொருட்படுத்தாமல் பயன்பாடுகள் நம்பியிருக்கக்கூடிய சீரான முறைகளின் தொகுப்பு உள்ளது. + +[JSON-RPC](https://www.jsonrpc.org/specification) என்பது நிலையற்ற, குறைந்த எடையுள்ள ரிமோட் ப்ரொசீஜர் கால் (RPC) நெறிமுறையாகும். இது பல தரவு கட்டமைப்புகளையும் அவற்றின் செயலாக்கத்தைச் சுற்றியுள்ள விதிகளையும் வரையறுக்கிறது. இது போக்குவரத்து சார்பற்றது (transport agnostic), அதாவது இதன் கருத்துகளை ஒரே செயல்முறைக்குள், சாக்கெட்டுகள் வழியாக, HTTP வழியாக அல்லது பல்வேறு செய்தி அனுப்பும் சூழல்களில் பயன்படுத்தலாம். இது JSON (RFC 4627) ஐ தரவு வடிவமாகப் பயன்படுத்துகிறது. + +## கிளையண்ட் செயலாக்கங்கள் {#client-implementations} + +JSON-RPC விவரக்குறிப்பைச் செயல்படுத்தும்போது Ethereum கிளையண்டுகள் ஒவ்வொன்றும் வெவ்வேறு நிரலாக்க மொழிகளைப் பயன்படுத்தலாம். குறிப்பிட்ட நிரலாக்க மொழிகள் தொடர்பான கூடுதல் விவரங்களுக்கு தனிப்பட்ட [கிளையண்ட் ஆவணங்களை](/developers/docs/nodes-and-clients/#execution-clients) பார்க்கவும். சமீபத்திய API ஆதரவு தகவலுக்கு ஒவ்வொரு கிளையண்டின் ஆவணங்களையும் சரிபார்க்க பரிந்துரைக்கிறோம். + +## வசதியான நூலகங்கள் {#convenience-libraries} + +JSON-RPC API மூலம் நீங்கள் நேரடியாக Ethereum கிளையண்டுகளுடன் தொடர்பு கொள்ளத் தேர்வுசெய்தாலும், dapp டெவலப்பர்களுக்கு பெரும்பாலும் எளிதான விருப்பங்கள் உள்ளன. JSON-RPC API-இன் மேல் ரேப்பர்களை (wrappers) வழங்க பல [JavaScript](/developers/docs/apis/javascript/#available-libraries) மற்றும் [பின்தள API](/developers/docs/apis/backend/#available-libraries) நூலகங்கள் உள்ளன. இந்த நூலகங்கள் மூலம், டெவலப்பர்கள் Ethereum உடன் தொடர்பு கொள்ளும் JSON-RPC கோரிக்கைகளை (பின்னணியில்) தொடங்க தங்களுக்கு விருப்பமான நிரலாக்க மொழியில் உள்ளுணர்வுள்ள, ஒரு-வரி முறைகளை எழுதலாம். + +## கருத்தொற்றுமை கிளையண்ட் APIகள் {#consensus-clients} + +இந்தப் பக்கம் முக்கியமாக Ethereum செயலாக்க கிளையண்டுகளால் பயன்படுத்தப்படும் JSON-RPC API-ஐக் கையாள்கிறது. இருப்பினும், கருத்தொற்றுமை கிளையண்டுகளும் ஒரு RPC API-ஐக் கொண்டுள்ளன, இது பயனர்களை நோடு பற்றிய தகவல்களை வினவவும், Beacon பிளாக்குகள், Beacon நிலை மற்றும் பிற கருத்தொற்றுமை தொடர்பான தகவல்களை நேரடியாக ஒரு நோடிலிருந்து கோரவும் அனுமதிக்கிறது. இந்த API [Beacon API வலைப்பக்கத்தில்](https://ethereum.github.io/beacon-APIs/#/) ஆவணப்படுத்தப்பட்டுள்ளது. + +ஒரு நோடிற்குள் கிளையண்டுகளுக்கு இடையேயான தகவல்தொடர்புக்கு ஒரு உள் API-யும் பயன்படுத்தப்படுகிறது - அதாவது, இது கருத்தொற்றுமை கிளையண்ட் மற்றும் செயலாக்க கிளையண்ட் ஆகியவை தரவை பரிமாறிக்கொள்ள உதவுகிறது. இது 'Engine API' என்று அழைக்கப்படுகிறது, மேலும் இதன் விவரக்குறிப்புகள் [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)-இல் கிடைக்கின்றன. + +## செயலாக்க கிளையண்ட் விவரக்குறிப்பு {#spec} + +[GitHub இல் முழுமையான JSON-RPC API விவரக்குறிப்பைப் படிக்கவும்](https://github.com/ethereum/execution-apis). இந்த API [Execution API வலைப்பக்கத்தில்](https://ethereum.github.io/execution-apis/) ஆவணப்படுத்தப்பட்டுள்ளது, மேலும் கிடைக்கக்கூடிய அனைத்து முறைகளையும் முயற்சிக்க ஒரு இன்ஸ்பெக்டரையும் (Inspector) உள்ளடக்கியுள்ளது. + +## மரபுகள் {#conventions} + +### ஹெக்ஸ் மதிப்பு குறியாக்கம் {#hex-encoding} + +JSON வழியாக இரண்டு முக்கிய தரவு வகைகள் அனுப்பப்படுகின்றன: வடிவமைக்கப்படாத பைட் வரிசைகள் (unformatted byte arrays) மற்றும் அளவுகள் (quantities). இரண்டும் ஹெக்ஸ் குறியாக்கத்துடன் அனுப்பப்படுகின்றன, ஆனால் வடிவமைப்பதற்கான வெவ்வேறு தேவைகளுடன். + +#### அளவுகள் {#quantities-encoding} + +அளவுகளை (முழு எண்கள், எண்கள்) குறியாக்கம் செய்யும் போது: ஹெக்ஸ் ஆக குறியாக்கம் செய்யவும், "0x" என்ற முன்னொட்டைச் சேர்க்கவும், இது மிகவும் சுருக்கமான பிரதிநிதித்துவமாகும் (சிறிய விதிவிலக்கு: பூஜ்ஜியம் "0x0" என குறிப்பிடப்பட வேண்டும்). + +இதோ சில எடுத்துக்காட்டுகள்: + +- 0x41 (தசமத்தில் 65) +- 0x400 (தசமத்தில் 1024) +- தவறு: 0x (எப்போதும் குறைந்தபட்சம் ஒரு இலக்கமாவது இருக்க வேண்டும் - பூஜ்ஜியம் "0x0" ஆகும்) +- தவறு: 0x0400 (முன்னணி பூஜ்ஜியங்கள் அனுமதிக்கப்படாது) +- தவறு: ff (0x முன்னொட்டு இருக்க வேண்டும்) + +### வடிவமைக்கப்படாத தரவு {#unformatted-data-encoding} + +வடிவமைக்கப்படாத தரவை (பைட் வரிசைகள், கணக்கு முகவரிகள், ஹாஷ்கள், பைட்கோட் வரிசைகள்) குறியாக்கம் செய்யும் போது: ஹெக்ஸ் ஆக குறியாக்கம் செய்யவும், "0x" என்ற முன்னொட்டைச் சேர்க்கவும், ஒரு பைட்டுக்கு இரண்டு ஹெக்ஸ் இலக்கங்கள் இருக்க வேண்டும். + +இதோ சில எடுத்துக்காட்டுகள்: + +- 0x41 (அளவு 1, "A") +- 0x004200 (அளவு 3, "0B0") +- 0x (அளவு 0, "") +- தவறு: 0xf0f0f (இரட்டைப்படை இலக்கங்களாக இருக்க வேண்டும்) +- தவறு: 004200 (0x முன்னொட்டு இருக்க வேண்டும்) + +### பிளாக் அளவுரு {#block-parameter} + +பின்வரும் முறைகள் பிளாக் அளவுருவைக் கொண்டுள்ளன: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +Ethereum இன் நிலையை வினவும் கோரிக்கைகள் செய்யப்படும்போது, வழங்கப்பட்ட பிளாக் அளவுரு பிளாக்கின் உயரத்தை தீர்மானிக்கிறது. + +பிளாக் அளவுருவுக்கு பின்வரும் விருப்பங்கள் சாத்தியமாகும்: + +- `HEX String` - ஒரு முழு எண் பிளாக் எண் +- `String "earliest"` - ஆரம்ப/ஜெனிசிஸ் பிளாக்கிற்கு +- `String "latest"` - சமீபத்திய முன்மொழியப்பட்ட பிளாக்கிற்கு +- `String "safe"` - சமீபத்திய பாதுகாப்பான தலைப்பு பிளாக்கிற்கு +- `String "finalized"` - சமீபத்திய இறுதி செய்யப்பட்ட பிளாக்கிற்கு +- `String "pending"` - நிலுவையில் உள்ள நிலை/பரிவர்த்தனைகளுக்கு + +## எடுத்துக்காட்டுகள் + +இந்தப் பக்கத்தில், கட்டளை வரி கருவியான [curl](https://curl.se) ஐப் பயன்படுத்தி தனிப்பட்ட JSON_RPC API எண்ட்பாயிண்ட்களை எப்படிப் பயன்படுத்துவது என்பதற்கான எடுத்துக்காட்டுகளை நாங்கள் வழங்குகிறோம். இந்தத் தனிப்பட்ட எண்ட்பாயிண்ட் எடுத்துக்காட்டுகள் கீழே உள்ள [Curl எடுத்துக்காட்டுகள்](#curl-examples) பிரிவில் காணப்படுகின்றன. பக்கத்தின் மேலும் கீழே, Geth நோடு, JSON_RPC API மற்றும் curl ஆகியவற்றைப் பயன்படுத்தி ஒரு ஸ்மார்ட் ஒப்பந்தத்தை தொகுத்து மற்றும் வரிசைப்படுத்துவதற்கான ஒரு [முழுமையான எடுத்துக்காட்டையும்](#usage-example) நாங்கள் வழங்குகிறோம். + +## Curl எடுத்துக்காட்டுகள் {#curl-examples} + +Ethereum முனையத்திற்கு [curl](https://curl.se) கோரிக்கைகளை அனுப்புவதன் மூலம் JSON_RPC API-ஐப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள் கீழே வழங்கப்பட்டுள்ளன. ஒவ்வொரு எடுத்துக்காட்டிலும் குறிப்பிட்ட எண்ட்பாயிண்ட், அதன் அளவுருக்கள், திரும்பும் வகை மற்றும் அது எவ்வாறு பயன்படுத்தப்பட வேண்டும் என்பதற்கான செயல்முறை எடுத்துக்காட்டு ஆகியவை அடங்கும். + +curl கோரிக்கைகள் உள்ளடக்க வகை (content type) தொடர்பான பிழைச் செய்தியை வழங்கக்கூடும். ஏனெனில் `--data` விருப்பம் உள்ளடக்க வகையை `application/x-www-form-urlencoded` என அமைக்கிறது. உங்கள் முனையம் இதைப் பற்றி புகாரளித்தால், அழைப்பின் தொடக்கத்தில் `-H "Content-Type: application/json"` என்பதை வைப்பதன் மூலம் தலைப்பை (header) கைமுறையாக அமைக்கவும். எடுத்துக்காட்டுகளில் URL/IP மற்றும் போர்ட் (port) கலவையும் சேர்க்கப்படவில்லை, இது curl-க்கு வழங்கப்படும் கடைசி வாதமாக (argument) இருக்க வேண்டும் (எ.கா., `127.0.0.1:8545`). இந்த கூடுதல் தரவுகளை உள்ளடக்கிய முழுமையான curl கோரிக்கை பின்வரும் வடிவத்தை எடுக்கும்: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## Gossip, நிலை, வரலாறு {#gossip-state-history} + +சில முக்கிய JSON-RPC முறைகளுக்கு Ethereum நெட்வொர்க்கிலிருந்து தரவு தேவைப்படுகிறது, மேலும் அவை மூன்று முக்கிய வகைகளாகப் பிரிக்கப்படுகின்றன: _Gossip, நிலை மற்றும் வரலாறு_. ஒவ்வொரு முறைக்கும் செல்ல இந்தப் பிரிவுகளில் உள்ள இணைப்புகளைப் பயன்படுத்தவும் அல்லது முறைகளின் முழுப் பட்டியலையும் ஆராய உள்ளடக்க அட்டவணையைப் பயன்படுத்தவும். + +### Gossip முறைகள் {#gossip-methods} + +> இந்த முறைகள் சங்கிலியின் தலையைக் கண்காணிக்கின்றன. இதன் மூலமாகவே பரிவர்த்தனைகள் நெட்வொர்க்கைச் சுற்றி வருகின்றன, தொகுதிகளுக்குள் நுழைகின்றன, மேலும் கிளையண்டுகள் புதிய தொகுதிகளைப் பற்றி அறிந்துகொள்கின்றன. + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### நிலை முறைகள் {#state_methods} + +> சேமிக்கப்பட்ட அனைத்து தரவுகளின் தற்போதைய நிலையைப் புகாரளிக்கும் முறைகள். "நிலை" (state) என்பது பகிரப்பட்ட ஒரு பெரிய RAM போன்றது, இதில் கணக்கு நிலுவைகள், ஒப்பந்தத் தரவு மற்றும் எரிவாயு (gas) மதிப்பீடுகள் ஆகியவை அடங்கும். + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### வரலாற்று முறைகள் {#history_methods} + +> தொடக்கத்திலிருந்து (genesis) ஒவ்வொரு தொகுதியின் வரலாற்றுப் பதிவுகளையும் பெறுகிறது. இது ஒரு பெரிய சேர்க்க-மட்டுமே (append-only) கோப்பைப் போன்றது, மேலும் இதில் அனைத்து தொகுதி தலைப்புகள், தொகுதி உடல்கள், அங்கிள் தொகுதிகள் (uncle blocks) மற்றும் பரிவர்த்தனை ரசீதுகள் ஆகியவை அடங்கும். + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC API Playground + +API முறைகளைக் கண்டறியவும், அவற்றைச் சோதித்துப் பார்க்கவும் நீங்கள் [playground கருவியைப்](https://ethereum-json-rpc.com) பயன்படுத்தலாம். பல்வேறு நோடு வழங்குநர்களால் எந்தெந்த முறைகள் மற்றும் நெட்வொர்க்குகள் ஆதரிக்கப்படுகின்றன என்பதையும் இது உங்களுக்குக் காட்டுகிறது. + +## JSON-RPC API முறைகள் {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +தற்போதைய கிளையண்ட் பதிப்பை வழங்குகிறது. + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`String` - தற்போதைய கிளையண்ட் பதிப்பு + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// முடிவு +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +கொடுக்கப்பட்ட தரவின் Keccak-256-ஐ (தரப்படுத்தப்பட்ட SHA3-256 _அல்ல_) வழங்குகிறது. + +**அளவுருக்கள்** + +1. `DATA` - SHA3 ஹாஷாக மாற்ற வேண்டிய தரவு + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**திரும்பப் பெறுபவை** + +`DATA` - கொடுக்கப்பட்ட சரத்தின் SHA3 முடிவு. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// முடிவு +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +தற்போதைய நெட்வொர்க் ஐடியை (network id) வழங்குகிறது. + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`String` - தற்போதைய நெட்வொர்க் ஐடி. + +தற்போதைய நெட்வொர்க் ஐடிகளின் முழுப் பட்டியல் [chainlist.org](https://chainlist.org) இல் கிடைக்கிறது. சில பொதுவானவை: + +- `1`: Ethereum Mainnet +- `11155111`: Sepolia testnet +- `560048` : Hoodi Testnet + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// முடிவு +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +கிளையண்ட் நெட்வொர்க் இணைப்புகளுக்காகச் சுறுசுறுப்பாகக் காத்திருந்தால் (listening) `true` என வழங்கும். + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`Boolean` - காத்திருக்கும்போது `true`, இல்லையெனில் `false`. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// முடிவு +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +தற்போது கிளையண்டுடன் இணைக்கப்பட்டுள்ள பியர்களின் (peers) எண்ணிக்கையை வழங்குகிறது. + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இணைக்கப்பட்ட பியர்களின் எண்ணிக்கையைக் குறிக்கும் முழு எண் (integer). + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// முடிவு +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +தற்போதைய Ethereum நெறிமுறைப் பதிப்பை (protocol version) வழங்குகிறது. இந்த முறை [Geth இல் கிடைக்காது](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924) என்பதை நினைவில் கொள்ளவும். + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`String` - தற்போதைய Ethereum நெறிமுறைப் பதிப்பு + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// முடிவு +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +ஒத்திசைவு நிலை (sync status) பற்றிய தரவுள்ள ஒரு ஆப்ஜெக்ட்டை அல்லது `false` என்பதை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +சரியான திரும்பப் பெறும் தரவு கிளையண்ட் செயலாக்கங்களுக்கு இடையே மாறுபடும். நோடு ஒத்திசைக்கப்படாதபோது அனைத்து கிளையண்டுகளும் `False` என்பதை வழங்கும், மேலும் அனைத்து கிளையண்டுகளும் பின்வரும் புலங்களை வழங்கும். + +`Object|Boolean`, ஒத்திசைவு நிலை தரவுள்ள ஒரு ஆப்ஜெக்ட் அல்லது ஒத்திசைக்கப்படாதபோது `FALSE`: + +- `startingBlock`: `QUANTITY` - இறக்குமதி தொடங்கிய பிளாக் (ஒத்திசைவு அதன் தலையை (head) அடைந்த பின்னரே மீட்டமைக்கப்படும்) +- `currentBlock`: `QUANTITY` - தற்போதைய பிளாக், eth_blockNumber போன்றதே +- `highestBlock`: `QUANTITY` - மதிப்பிடப்பட்ட மிக உயர்ந்த பிளாக் + +இருப்பினும், தனிப்பட்ட கிளையண்டுகள் கூடுதல் தரவையும் வழங்கலாம். எடுத்துக்காட்டாக Geth பின்வருவனவற்றை வழங்குகிறது: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "currentBlock": "0x3cf522", + "healedBytecodeBytes": "0x0", + "healedBytecodes": "0x0", + "healedTrienodes": "0x0", + "healingBytecode": "0x0", + "healingTrienodes": "0x0", + "highestBlock": "0x3e0e41", + "startingBlock": "0x3cbed5", + "syncedAccountBytes": "0x0", + "syncedAccounts": "0x0", + "syncedBytecodeBytes": "0x0", + "syncedBytecodes": "0x0", + "syncedStorage": "0x0", + "syncedStorageBytes": "0x0" + } +} +``` + +அதே சமயம் Besu வழங்குவது: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +மேலும் விவரங்களுக்கு உங்கள் குறிப்பிட்ட கிளையண்டின் ஆவணங்களைப் பார்க்கவும். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// அல்லது ஒத்திசைக்காத போது +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +கிளையண்ட் காயின்பேஸ் (coinbase) முகவரியை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +> **குறிப்பு:** இந்த முறை **v1.14.0** முதல் நீக்கப்பட்டுவிட்டது, இனி ஆதரிக்கப்படாது. இந்த முறையைப் பயன்படுத்த முயன்றால் "Method not supported" என்ற பிழை ஏற்படும். + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`DATA`, 20 பைட்டுகள் - தற்போதைய காயின்பேஸ் முகவரி. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// முடிவு +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +ரீப்ளே-பாதுகாக்கப்பட்ட (replay-protected) பரிவர்த்தனைகளில் கையொப்பமிடப் பயன்படுத்தப்படும் செயின் ஐடியை (chain ID) வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`chainId`, தற்போதைய செயின் ஐடியின் முழு எண்ணைக் குறிக்கும் சரமாக உள்ள ஹெக்ஸாடெசிமல் (hexadecimal) மதிப்பு. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// முடிவு +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +கிளையண்ட் சுறுசுறுப்பாகப் புதிய பிளாக்குகளை மைனிங் செய்தால் `true` என வழங்கும். இது ப்ரூஃப்-ஆஃப்-வொர்க் (proof-of-work) நெட்வொர்க்குகளுக்கு மட்டுமே `true` என வழங்கும், மேலும் [The Merge](/roadmap/merge/) முதல் சில கிளையண்டுகளில் கிடைக்காமல் போகலாம். + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`Boolean` - கிளையண்ட் மைனிங் செய்தால் `true` என வழங்கும், இல்லையெனில் `false`. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' + +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +நோடு மைனிங் செய்யும் வினாடிக்கு ஹாஷ்களின் எண்ணிக்கையை வழங்குகிறது. இது ப்ரூஃப்-ஆஃப்-வொர்க் நெட்வொர்க்குகளுக்கு மட்டுமே `true` என வழங்கும், மேலும் [The Merge](/roadmap/merge/) முதல் சில கிளையண்டுகளில் கிடைக்காமல் போகலாம். + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`QUANTITY` - வினாடிக்கு ஹாஷ்களின் எண்ணிக்கை. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// முடிவு +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +wei-இல் ஒரு கேஸிற்கான தற்போதைய விலையின் மதிப்பீட்டை வழங்குகிறது. எடுத்துக்காட்டாக, Besu கிளையண்ட் கடந்த 100 பிளாக்குகளை ஆராய்ந்து, இயல்பாகவே இடைநிலை கேஸ் யூனிட் விலையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`QUANTITY` - wei-இல் தற்போதைய கேஸ் விலையின் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// முடிவு +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 வெய் +} +``` + +### eth_accounts {#eth_accounts} + +கிளையண்டிற்குச் சொந்தமான முகவரிகளின் பட்டியலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`Array of DATA`, 20 பைட்டுகள் - கிளையண்டிற்குச் சொந்தமான முகவரிகள். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +மிகச் சமீபத்திய பிளாக்கின் எண்ணை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +ஏதுமில்லை + +**திரும்பப் பெறுபவை** + +`QUANTITY` - கிளையண்ட் இருக்கும் தற்போதைய பிளாக் எண்ணின் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// முடிவு +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +கொடுக்கப்பட்ட முகவரியில் உள்ள கணக்கின் இருப்பை (balance) வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 20 பைட்டுகள் - இருப்பைச் சரிபார்க்க வேண்டிய முகவரி. +2. `QUANTITY|TAG` - முழு எண் பிளாக் எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"`, அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - wei-இல் தற்போதைய இருப்பின் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +கொடுக்கப்பட்ட முகவரியில் உள்ள ஸ்டோரேஜ் (storage) நிலையிலிருந்து மதிப்பை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 20 பைட்டுகள் - ஸ்டோரேஜின் முகவரி. +2. `QUANTITY` - ஸ்டோரேஜில் உள்ள நிலையின் முழு எண். +3. `QUANTITY|TAG` - முழு எண் பிளாக் எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"`, `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +**திரும்பப் பெறுபவை** + +`DATA` - இந்த ஸ்டோரேஜ் நிலையில் உள்ள மதிப்பு. + +**எடுத்துக்காட்டு** +சரியான நிலையைக் கணக்கிடுவது மீட்டெடுக்க வேண்டிய ஸ்டோரேஜைப் பொறுத்தது. `0x391694e7e0b0cce554cb130d723a9d27458f9298` என்ற முகவரியால் `0x295a70b2de5e3953354a6a8344e616ed314d7251` இல் டெப்ளாய் செய்யப்பட்ட பின்வரும் ஒப்பந்தத்தைக் கவனியுங்கள். + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + constructor() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +pos0 இன் மதிப்பை மீட்டெடுப்பது நேரடியானது: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +மேப்பின் (map) ஒரு உறுப்பை மீட்டெடுப்பது கடினமானது. மேப்பில் உள்ள ஒரு உறுப்பின் நிலை இதைக் கொண்டு கணக்கிடப்படுகிறது: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +இதன் பொருள் pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] இல் ஸ்டோரேஜை மீட்டெடுக்க, நாம் நிலையைக் கணக்கிட வேண்டும்: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +web3 லைப்ரரியுடன் வரும் geth கன்சோலை இந்தக் கணக்கீட்டைச் செய்யப் பயன்படுத்தலாம்: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +இப்போது ஸ்டோரேஜைப் பெற: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +ஒரு முகவரியிலிருந்து _அனுப்பப்பட்ட_ பரிவர்த்தனைகளின் எண்ணிக்கையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 20 பைட்டுகள் - முகவரி. +2. `QUANTITY|TAG` - முழு எண் பிளாக் எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // சமீபத்திய தொகுதியில் உள்ள நிலை +] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இந்த முகவரியிலிருந்து அனுப்பப்பட்ட பரிவர்த்தனைகளின் எண்ணிக்கையைக் குறிக்கும் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +கொடுக்கப்பட்ட பிளாக் ஹாஷுடன் பொருந்தும் பிளாக்கிலிருந்து ஒரு பிளாக்கில் உள்ள பரிவர்த்தனைகளின் எண்ணிக்கையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - ஒரு பிளாக்கின் ஹாஷ் + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இந்தப் பிளாக்கில் உள்ள பரிவர்த்தனைகளின் எண்ணிக்கையைக் குறிக்கும் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +கொடுக்கப்பட்ட பிளாக் எண்ணுடன் பொருந்தும் பிளாக்கில் உள்ள பரிவர்த்தனைகளின் எண்ணிக்கையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `QUANTITY|TAG` - ஒரு பிளாக் எண்ணின் முழு எண், அல்லது `"earliest"`, `"latest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவில்](/developers/docs/apis/json-rpc/#block-parameter) உள்ளபடி. + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இந்தப் பிளாக்கில் உள்ள பரிவர்த்தனைகளின் எண்ணிக்கையைக் குறிக்கும் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +கொடுக்கப்பட்ட பிளாக் ஹாஷுடன் பொருந்தும் பிளாக்கிலிருந்து ஒரு பிளாக்கில் உள்ள அங்கிள்களின் (uncles) எண்ணிக்கையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - ஒரு பிளாக்கின் ஹாஷ் + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இந்தப் பிளாக்கில் உள்ள அங்கிள்களின் எண்ணிக்கையைக் குறிக்கும் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +கொடுக்கப்பட்ட பிளாக் எண்ணுடன் பொருந்தும் பிளாக்கிலிருந்து ஒரு பிளாக்கில் உள்ள அங்கிள்களின் எண்ணிக்கையை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `QUANTITY|TAG` - ஒரு பிளாக் எண்ணின் முழு எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +```js +params: [ + "0xe8", // 232 +] +``` + +**திரும்பப் பெறுபவை** + +`QUANTITY` - இந்தப் பிளாக்கில் உள்ள அங்கிள்களின் எண்ணிக்கையைக் குறிக்கும் முழு எண். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +கொடுக்கப்பட்ட முகவரியில் உள்ள குறியீட்டை (code) வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 20 பைட்டுகள் - முகவரி +2. `QUANTITY|TAG` - முழு எண் பிளாக் எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**திரும்பப் பெறுபவை** + +`DATA` - கொடுக்கப்பட்ட முகவரியிலிருந்து குறியீடு. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +`sign` முறையானது Ethereum-குறிப்பிட்ட கையொப்பத்தை இதைக் கொண்டு கணக்கிடுகிறது: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. + +செய்தியில் ஒரு முன்னொட்டைச் சேர்ப்பதன் மூலம், கணக்கிடப்பட்ட கையொப்பம் Ethereum-குறிப்பிட்ட கையொப்பமாக அடையாளம் காணக்கூடியதாகிறது. இது ஒரு தீங்கிழைக்கும் dapp தன்னிச்சையான தரவுகளில் (எ.கா., பரிவர்த்தனை) கையொப்பமிட்டு, பாதிக்கப்பட்டவரைப் போல ஆள்மாறாட்டம் செய்ய கையொப்பத்தைப் பயன்படுத்தும் தவறான பயன்பாட்டைத் தடுக்கிறது. + +குறிப்பு: கையொப்பமிட வேண்டிய முகவரி அன்லாக் (unlock) செய்யப்பட்டிருக்க வேண்டும். + +**அளவுருக்கள்** + +1. `DATA`, 20 பைட்டுகள் - முகவரி +2. `DATA`, N பைட்டுகள் - கையொப்பமிட வேண்டிய செய்தி + +**திரும்பப் பெறுபவை** + +`DATA`: கையொப்பம் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +[eth_sendRawTransaction](#eth_sendrawtransaction) ஐப் பயன்படுத்திப் பின்னர் நெட்வொர்க்கில் சமர்ப்பிக்கக்கூடிய ஒரு பரிவர்த்தனையில் கையொப்பமிடுகிறது. + +**அளவுருக்கள்** + +1. `Object` - பரிவர்த்தனை ஆப்ஜெக்ட் + +- `type`: +- `from`: `DATA`, 20 பைட்டுகள் - பரிவர்த்தனை அனுப்பப்படும் முகவரி. +- `to`: `DATA`, 20 பைட்டுகள் - (புதிய ஒப்பந்தத்தை உருவாக்கும்போது விருப்பத்திற்குரியது) பரிவர்த்தனை செலுத்தப்படும் முகவரி. +- `gas`: `QUANTITY` - (விருப்பத்திற்குரியது, இயல்புநிலை: 90000) பரிவர்த்தனை செயலாக்கத்திற்காக வழங்கப்பட்ட கேஸின் முழு எண். இது பயன்படுத்தப்படாத கேஸைத் திருப்பித் தரும். +- `gasPrice`: `QUANTITY` - (விருப்பத்திற்குரியது, இயல்புநிலை: தீர்மானிக்கப்பட-வேண்டியது) செலுத்தப்பட்ட ஒவ்வொரு கேஸிற்கும் பயன்படுத்தப்படும் gasPrice இன் முழு எண், Wei-இல். +- `value`: `QUANTITY` - (விருப்பத்திற்குரியது) இந்தப் பரிவர்த்தனையுடன் அனுப்பப்பட்ட மதிப்பின் முழு எண், Wei-இல். +- `data`: `DATA` - ஒரு ஒப்பந்தத்தின் தொகுக்கப்பட்ட குறியீடு அல்லது அழைக்கப்பட்ட முறை கையொப்பம் மற்றும் குறியிடப்பட்ட அளவுருக்களின் ஹாஷ். +- `nonce`: `QUANTITY` - (விருப்பத்திற்குரியது) ஒரு நான்ஸின் (nonce) முழு எண். இது அதே நான்ஸைப் பயன்படுத்தும் உங்களின் சொந்த நிலுவையிலுள்ள பரிவர்த்தனைகளை மேலெழுத (overwrite) அனுமதிக்கிறது. + +**திரும்பப் பெறுபவை** + +`DATA`, குறிப்பிட்ட கணக்கால் கையொப்பமிடப்பட்ட RLP-குறியிடப்பட்ட பரிவர்த்தனை ஆப்ஜெக்ட். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// முடிவு +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +தரவுப் புலத்தில் குறியீடு இருந்தால், புதிய செய்தி அழைப்புப் பரிவர்த்தனை அல்லது ஒப்பந்த உருவாக்கத்தை உருவாக்குகிறது, மேலும் `from` இல் குறிப்பிடப்பட்டுள்ள கணக்கைப் பயன்படுத்தி அதில் கையொப்பமிடுகிறது. + +**அளவுருக்கள்** + +1. `Object` - பரிவர்த்தனை ஆப்ஜெக்ட் + +- `from`: `DATA`, 20 பைட்டுகள் - பரிவர்த்தனை அனுப்பப்படும் முகவரி. +- `to`: `DATA`, 20 பைட்டுகள் - (புதிய ஒப்பந்தத்தை உருவாக்கும்போது விருப்பத்திற்குரியது) பரிவர்த்தனை செலுத்தப்படும் முகவரி. +- `gas`: `QUANTITY` - (விருப்பத்திற்குரியது, இயல்புநிலை: 90000) பரிவர்த்தனை செயலாக்கத்திற்காக வழங்கப்பட்ட கேஸின் முழு எண். இது பயன்படுத்தப்படாத கேஸைத் திருப்பித் தரும். +- `gasPrice`: `QUANTITY` - (விருப்பத்திற்குரியது, இயல்புநிலை: தீர்மானிக்கப்பட-வேண்டியது) செலுத்தப்பட்ட ஒவ்வொரு கேஸிற்கும் பயன்படுத்தப்படும் gasPrice இன் முழு எண். +- `value`: `QUANTITY` - (விருப்பத்திற்குரியது) இந்தப் பரிவர்த்தனையுடன் அனுப்பப்பட்ட மதிப்பின் முழு எண். +- `input`: `DATA` - ஒரு ஒப்பந்தத்தின் தொகுக்கப்பட்ட குறியீடு அல்லது அழைக்கப்பட்ட முறை கையொப்பம் மற்றும் குறியிடப்பட்ட அளவுருக்களின் ஹாஷ். +- `nonce`: `QUANTITY` - (விருப்பத்திற்குரியது) ஒரு நான்ஸின் முழு எண். இது அதே நான்ஸைப் பயன்படுத்தும் உங்களின் சொந்த நிலுவையிலுள்ள பரிவர்த்தனைகளை மேலெழுத அனுமதிக்கிறது. + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**திரும்பப் பெறுபவை** + +`DATA`, 32 பைட்டுகள் - பரிவர்த்தனை ஹாஷ், அல்லது பரிவர்த்தனை இன்னும் கிடைக்கவில்லை என்றால் பூஜ்ஜிய ஹாஷ். + +நீங்கள் ஒரு ஒப்பந்தத்தை உருவாக்கியபோது, பரிவர்த்தனை ஒரு பிளாக்கில் முன்மொழியப்பட்ட பிறகு, ஒப்பந்த முகவரியைப் பெற [eth_getTransactionReceipt](#eth_gettransactionreceipt) ஐப் பயன்படுத்தவும். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +கையொப்பமிடப்பட்ட பரிவர்த்தனைகளுக்கான புதிய செய்தி அழைப்புப் பரிவர்த்தனை அல்லது ஒப்பந்த உருவாக்கத்தை உருவாக்குகிறது. + +**அளவுருக்கள்** + +1. `DATA`, கையொப்பமிடப்பட்ட பரிவர்த்தனைத் தரவு. + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**திரும்பப் பெறுபவை** + +`DATA`, 32 பைட்டுகள் - பரிவர்த்தனை ஹாஷ், அல்லது பரிவர்த்தனை இன்னும் கிடைக்கவில்லை என்றால் பூஜ்ஜிய ஹாஷ். + +நீங்கள் ஒரு ஒப்பந்தத்தை உருவாக்கியபோது, பரிவர்த்தனை ஒரு பிளாக்கில் முன்மொழியப்பட்ட பிறகு, ஒப்பந்த முகவரியைப் பெற [eth_getTransactionReceipt](#eth_gettransactionreceipt) ஐப் பயன்படுத்தவும். + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +பிளாக்செயினில் ஒரு பரிவர்த்தனையை உருவாக்காமல் உடனடியாக ஒரு புதிய செய்தி அழைப்பைச் செயல்படுத்துகிறது. பெரும்பாலும் படிக்க-மட்டுமேயான (read-only) ஸ்மார்ட் ஒப்பந்தச் செயல்பாடுகளைச் செயல்படுத்தப் பயன்படுத்தப்படுகிறது, எடுத்துக்காட்டாக ERC-20 ஒப்பந்தத்திற்கான `balanceOf`. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `Object` - பரிவர்த்தனை அழைப்பு ஆப்ஜெக்ட் + +- `from`: `DATA`, 20 பைட்டுகள் - (விருப்பத்திற்குரியது) பரிவர்த்தனை அனுப்பப்படும் முகவரி. +- `to`: `DATA`, 20 பைட்டுகள் - பரிவர்த்தனை செலுத்தப்படும் முகவரி. +- `gas`: `QUANTITY` - (விருப்பத்திற்குரியது) பரிவர்த்தனை செயலாக்கத்திற்காக வழங்கப்பட்ட கேஸின் முழு எண். eth_call பூஜ்ஜிய கேஸைப் பயன்படுத்துகிறது, ஆனால் இந்த அளவுரு சில செயலாக்கங்களுக்குத் தேவைப்படலாம். +- `gasPrice`: `QUANTITY` - (விருப்பத்திற்குரியது) செலுத்தப்பட்ட ஒவ்வொரு கேஸிற்கும் பயன்படுத்தப்படும் gasPrice இன் முழு எண் +- `value`: `QUANTITY` - (விருப்பத்திற்குரியது) இந்தப் பரிவர்த்தனையுடன் அனுப்பப்பட்ட மதிப்பின் முழு எண் +- `input`: `DATA` - (விருப்பத்திற்குரியது) முறை கையொப்பம் மற்றும் குறியிடப்பட்ட அளவுருக்களின் ஹாஷ். விவரங்களுக்கு [Solidity ஆவணத்தில் உள்ள Ethereum Contract ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) ஐப் பார்க்கவும். + +2. `QUANTITY|TAG` - முழு எண் பிளாக் எண், அல்லது `"latest"`, `"earliest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவை](/developers/docs/apis/json-rpc/#block-parameter) பார்க்கவும் + +**திரும்பப் பெறுபவை** + +`DATA` - செயல்படுத்தப்பட்ட ஒப்பந்தத்தின் திரும்பப் பெறும் மதிப்பு. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +பரிவர்த்தனையை முடிக்க எவ்வளவு கேஸ் தேவை என்பதற்கான மதிப்பீட்டை உருவாக்கி வழங்குகிறது. பரிவர்த்தனை பிளாக்செயினில் சேர்க்கப்படாது. EVM இயக்கவியல் மற்றும் நோடு செயல்திறன் உள்ளிட்ட பல்வேறு காரணங்களுக்காக, பரிவர்த்தனையால் உண்மையில் பயன்படுத்தப்படும் கேஸின் அளவை விட மதிப்பீடு கணிசமாக அதிகமாக இருக்கலாம் என்பதை நினைவில் கொள்ளவும். + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +அனைத்துப் பண்புகளும் விருப்பத்திற்குரியவை என்பதைத் தவிர, [eth_call](#eth_call) அளவுருக்களைப் பார்க்கவும். கேஸ் வரம்பு எதுவும் குறிப்பிடப்படவில்லை என்றால், geth நிலுவையிலுள்ள பிளாக்கிலிருந்து பிளாக் கேஸ் வரம்பை மேல் வரம்பாகப் பயன்படுத்துகிறது. இதன் விளைவாக, கேஸின் அளவு நிலுவையிலுள்ள பிளாக் கேஸ் வரம்பை விட அதிகமாக இருக்கும்போது, அழைப்பு/பரிவர்த்தனையைச் செயல்படுத்தத் திரும்பப் பெறப்பட்ட மதிப்பீடு போதுமானதாக இருக்காது. + +**திரும்பப் பெறுபவை** + +`QUANTITY` - பயன்படுத்தப்பட்ட கேஸின் அளவு. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +ஹாஷ் மூலம் ஒரு பிளாக் பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - ஒரு பிளாக்கின் ஹாஷ். +2. `Boolean` - `true` எனில் இது முழுப் பரிவர்த்தனை ஆப்ஜெக்ட்டுகளை வழங்கும், `false` எனில் பரிவர்த்தனைகளின் ஹாஷ்களை மட்டுமே வழங்கும். + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**திரும்பப் பெறுபவை** + +`Object` - ஒரு பிளாக் ஆப்ஜெக்ட், அல்லது பிளாக் எதுவும் காணப்படாவிட்டால் `null`: + +- `number`: `QUANTITY` - பிளாக் எண். இது நிலுவையிலுள்ள பிளாக்காக இருக்கும்போது `null`. +- `hash`: `DATA`, 32 பைட்டுகள் - பிளாக்கின் ஹாஷ். இது நிலுவையிலுள்ள பிளாக்காக இருக்கும்போது `null`. +- `parentHash`: `DATA`, 32 பைட்டுகள் - மூலப் பிளாக்கின் (parent block) ஹாஷ். +- `nonce`: `DATA`, 8 பைட்டுகள் - உருவாக்கப்பட்ட ப்ரூஃப்-ஆஃப்-வொர்க்கின் ஹாஷ். இது நிலுவையிலுள்ள பிளாக்காக இருக்கும்போது `null`, ப்ரூஃப்-ஆஃப்-ஸ்டேக் (proof-of-stake) பிளாக்குகளுக்கு `0x0` (The Merge முதல்) +- `sha3Uncles`: `DATA`, 32 பைட்டுகள் - பிளாக்கில் உள்ள அங்கிள்ஸ் தரவின் SHA3. +- `logsBloom`: `DATA`, 256 பைட்டுகள் - பிளாக்கின் லாக்ஸிற்கான (logs) ப்ளூம் ஃபில்டர் (bloom filter). இது நிலுவையிலுள்ள பிளாக்காக இருக்கும்போது `null`. +- `transactionsRoot`: `DATA`, 32 பைட்டுகள் - பிளாக்கின் பரிவர்த்தனை ட்ரையின் (transaction trie) ரூட் (root). +- `stateRoot`: `DATA`, 32 பைட்டுகள் - பிளாக்கின் இறுதி ஸ்டேட் ட்ரையின் (state trie) ரூட். +- `receiptsRoot`: `DATA`, 32 பைட்டுகள் - பிளாக்கின் ரசீதுகள் ட்ரையின் (receipts trie) ரூட். +- `miner`: `DATA`, 20 பைட்டுகள் - பிளாக் வெகுமதிகள் வழங்கப்பட்ட பயனாளியின் முகவரி. +- `difficulty`: `QUANTITY` - இந்தப் பிளாக்கிற்கான சிரமத்தின் (difficulty) முழு எண். +- `totalDifficulty`: `QUANTITY` - இந்தப் பிளாக் வரை செயினின் மொத்தச் சிரமத்தின் முழு எண். +- `extraData`: `DATA` - இந்தப் பிளாக்கின் "கூடுதல் தரவு" (extra data) புலம். +- `size`: `QUANTITY` - இந்தப் பிளாக்கின் அளவை பைட்டுகளில் குறிக்கும் முழு எண். +- `gasLimit`: `QUANTITY` - இந்தப் பிளாக்கில் அனுமதிக்கப்பட்ட அதிகபட்ச கேஸ். +- `gasUsed`: `QUANTITY` - இந்தப் பிளாக்கில் உள்ள அனைத்துப் பரிவர்த்தனைகளாலும் பயன்படுத்தப்பட்ட மொத்த கேஸ். +- `timestamp`: `QUANTITY` - பிளாக் தொகுக்கப்பட்டதற்கான unix டைம்ஸ்டாம்ப் (timestamp). +- `transactions`: `Array` - கடைசியாகக் கொடுக்கப்பட்ட அளவுருவைப் பொறுத்து, பரிவர்த்தனை ஆப்ஜெக்ட்டுகளின் வரிசை (Array), அல்லது 32 பைட்டுகள் பரிவர்த்தனை ஹாஷ்கள். +- `uncles`: `Array` - அங்கிள் ஹாஷ்களின் வரிசை. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// முடிவு +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] + } +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +பிளாக் எண் மூலம் ஒரு பிளாக் பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `QUANTITY|TAG` - ஒரு பிளாக் எண்ணின் முழு எண், அல்லது `"earliest"`, `"latest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவில்](/developers/docs/apis/json-rpc/#block-parameter) உள்ளபடி. +2. `Boolean` - `true` எனில் இது முழுப் பரிவர்த்தனை ஆப்ஜெக்ட்டுகளை வழங்கும், `false` எனில் பரிவர்த்தனைகளின் ஹாஷ்களை மட்டுமே வழங்கும். + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**திரும்பப் பெறுபவை** +[eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +முடிவுக்கு [eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +பரிவர்த்தனை ஹாஷ் மூலம் கோரப்பட்ட ஒரு பரிவர்த்தனை பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - பரிவர்த்தனையின் ஹாஷ் + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**திரும்பப் பெறுபவை** + +`Object` - ஒரு பரிவர்த்தனை ஆப்ஜெக்ட், அல்லது பரிவர்த்தனை எதுவும் காணப்படாவிட்டால் `null`: + +- `blockHash`: `DATA`, 32 பைட்டுகள் - இந்தப் பரிவர்த்தனை இருந்த பிளாக்கின் ஹாஷ். இது நிலுவையில் இருக்கும்போது `null`. +- `blockNumber`: `QUANTITY` - இந்தப் பரிவர்த்தனை இருந்த பிளாக் எண். இது நிலுவையில் இருக்கும்போது `null`. +- `from`: `DATA`, 20 பைட்டுகள் - அனுப்புநரின் முகவரி. +- `gas`: `QUANTITY` - அனுப்புநரால் வழங்கப்பட்ட கேஸ். +- `gasPrice`: `QUANTITY` - அனுப்புநரால் Wei-இல் வழங்கப்பட்ட கேஸ் விலை. +- `hash`: `DATA`, 32 பைட்டுகள் - பரிவர்த்தனையின் ஹாஷ். +- `input`: `DATA` - பரிவர்த்தனையுடன் அனுப்பப்பட்ட தரவு. +- `nonce`: `QUANTITY` - இதற்கு முன் அனுப்புநரால் செய்யப்பட்ட பரிவர்த்தனைகளின் எண்ணிக்கை. +- `to`: `DATA`, 20 பைட்டுகள் - பெறுநரின் முகவரி. இது ஒரு ஒப்பந்த உருவாக்கப் பரிவர்த்தனையாக இருக்கும்போது `null`. +- `transactionIndex`: `QUANTITY` - பிளாக்கில் உள்ள பரிவர்த்தனைகளின் குறியீட்டு (index) நிலையின் முழு எண். இது நிலுவையில் இருக்கும்போது `null`. +- `value`: `QUANTITY` - Wei-இல் மாற்றப்பட்ட மதிப்பு. +- `v`: `QUANTITY` - ECDSA மீட்பு ஐடி (recovery id) +- `r`: `QUANTITY` - ECDSA கையொப்பம் r +- `s`: `QUANTITY` - ECDSA கையொப்பம் s + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// முடிவு +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +பிளாக் ஹாஷ் மற்றும் பரிவர்த்தனைக் குறியீட்டு நிலை மூலம் ஒரு பரிவர்த்தனை பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - ஒரு பிளாக்கின் ஹாஷ். +2. `QUANTITY` - பரிவர்த்தனைக் குறியீட்டு நிலையின் முழு எண். + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**திரும்பப் பெறுபவை** +[eth_getTransactionByHash](#eth_gettransactionbyhash) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +முடிவுக்கு [eth_getTransactionByHash](#eth_gettransactionbyhash) ஐப் பார்க்கவும் + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +பிளாக் எண் மற்றும் பரிவர்த்தனைக் குறியீட்டு நிலை மூலம் ஒரு பரிவர்த்தனை பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `QUANTITY|TAG` - ஒரு பிளாக் எண், அல்லது `"earliest"`, `"latest"`, `"pending"`, `"safe"` அல்லது `"finalized"` என்ற சரம், [பிளாக் அளவுருவில்](/developers/docs/apis/json-rpc/#block-parameter) உள்ளபடி. +2. `QUANTITY` - பரிவர்த்தனைக் குறியீட்டு நிலை. + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**திரும்பப் பெறுபவை** +[eth_getTransactionByHash](#eth_gettransactionbyhash) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +முடிவுக்கு [eth_getTransactionByHash](#eth_gettransactionbyhash) ஐப் பார்க்கவும் + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +பரிவர்த்தனை ஹாஷ் மூலம் ஒரு பரிவர்த்தனையின் ரசீதை (receipt) வழங்குகிறது. + +**குறிப்பு** நிலுவையிலுள்ள பரிவர்த்தனைகளுக்கு ரசீது கிடைக்காது. + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - பரிவர்த்தனையின் ஹாஷ் + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**திரும்பப் பெறுபவை** +`Object` - ஒரு பரிவர்த்தனை ரசீது ஆப்ஜெக்ட், அல்லது ரசீது எதுவும் காணப்படாவிட்டால் `null`: + +- `transactionHash `: `DATA`, 32 பைட்டுகள் - பரிவர்த்தனையின் ஹாஷ். +- `transactionIndex`: `QUANTITY` - பிளாக்கில் உள்ள பரிவர்த்தனைகளின் குறியீட்டு நிலையின் முழு எண். +- `blockHash`: `DATA`, 32 பைட்டுகள் - இந்தப் பரிவர்த்தனை இருந்த பிளாக்கின் ஹாஷ். +- `blockNumber`: `QUANTITY` - இந்தப் பரிவர்த்தனை இருந்த பிளாக் எண். +- `from`: `DATA`, 20 பைட்டுகள் - அனுப்புநரின் முகவரி. +- `to`: `DATA`, 20 பைட்டுகள் - பெறுநரின் முகவரி. இது ஒரு ஒப்பந்த உருவாக்கப் பரிவர்த்தனையாக இருக்கும்போது null. +- `cumulativeGasUsed ` : `QUANTITY ` - பிளாக்கில் இந்தப் பரிவர்த்தனை செயல்படுத்தப்பட்டபோது பயன்படுத்தப்பட்ட மொத்த கேஸின் அளவு. +- `effectiveGasPrice ` : `QUANTITY` - ஒரு யூனிட் கேஸிற்குச் செலுத்தப்பட்ட அடிப்படை கட்டணம் (base fee) மற்றும் டிப் (tip) ஆகியவற்றின் கூடுதல். +- `gasUsed `: `QUANTITY ` - இந்தக் குறிப்பிட்ட பரிவர்த்தனையால் மட்டுமே பயன்படுத்தப்பட்ட கேஸின் அளவு. +- `contractAddress `: `DATA`, 20 பைட்டுகள் - பரிவர்த்தனை ஒரு ஒப்பந்த உருவாக்கமாக இருந்தால், உருவாக்கப்பட்ட ஒப்பந்த முகவரி, இல்லையெனில் `null`. +- `logs`: `Array` - இந்தப் பரிவர்த்தனை உருவாக்கிய லாக் ஆப்ஜெக்ட்டுகளின் வரிசை. +- `logsBloom`: `DATA`, 256 பைட்டுகள் - லைட் கிளையண்டுகள் (light clients) தொடர்புடைய லாக்ஸை விரைவாக மீட்டெடுப்பதற்கான ப்ளூம் ஃபில்டர். +- `type`: `QUANTITY` - பரிவர்த்தனை வகையின் முழு எண், மரபுப் (legacy) பரிவர்த்தனைகளுக்கு `0x0`, அணுகல் பட்டியல் (access list) வகைகளுக்கு `0x1`, டைனமிக் கட்டணங்களுக்கு (dynamic fees) `0x2`. + +இது _இரண்டில் ஒன்றையும்_ வழங்குகிறது: + +- `root` : `DATA` பரிவர்த்தனைக்குப் பிந்தைய ஸ்டேட் ரூட்டின் 32 பைட்டுகள் (பைசான்டியத்திற்கு (Byzantium) முன்) +- `status`: `QUANTITY` `1` (வெற்றி) அல்லது `0` (தோல்வி) + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// முடிவு +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // முகவரி உருவாக்கப்பட்டிருந்தால் அதன் சரம் + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // getFilterLogs போன்றவற்றால் வழங்கப்படும் பதிவுகள் + }], + "logsBloom": "0x00...0", // 256 பைட் ப்ளூம் வடிகட்டி + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +ஹாஷ் மற்றும் அங்கிள் குறியீட்டு நிலை மூலம் ஒரு பிளாக்கின் அங்கிள் பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `DATA`, 32 பைட்டுகள் - ஒரு பிளாக்கின் ஹாஷ். +2. `QUANTITY` - அங்கிளின் குறியீட்டு நிலை. + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**திரும்பப் பெறுபவை** +[eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +முடிவுக்கு [eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +**குறிப்பு**: ஒரு அங்கிளில் தனிப்பட்ட பரிவர்த்தனைகள் இருக்காது. + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +எண் மற்றும் அங்கிள் குறியீட்டு நிலை மூலம் ஒரு பிளாக்கின் அங்கிள் பற்றிய தகவலை வழங்குகிறது. + + + ப்ளேகிரவுண்டில் எண்ட்பாயிண்ட்டை முயல்க + + +**அளவுருக்கள்** + +1. `QUANTITY|TAG` - ஒரு பிளாக் எண், அல்லது `"earliest"`, `"latest"`, `"pending"`, `"safe"`, `"finalized"` என்ற சரம், [பிளாக் அளவுருவில்](/developers/docs/apis/json-rpc/#block-parameter) உள்ளபடி. +2. `QUANTITY` - அங்கிளின் குறியீட்டு நிலை. + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**திரும்பப் பெறுபவை** +[eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +**குறிப்பு**: ஒரு அங்கிளில் தனிப்பட்ட பரிவர்த்தனைகள் இருக்காது. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +முடிவுக்கு [eth_getBlockByHash](#eth_getblockbyhash) ஐப் பார்க்கவும் + +### eth_newFilter {#eth_newfilter} + +ஸ்டேட் மாறும்போது (லாக்ஸ்) அறிவிக்க, ஃபில்டர் விருப்பங்களின் அடிப்படையில் ஒரு ஃபில்டர் ஆப்ஜெக்ட்டை உருவாக்குகிறது. +ஸ்டேட் மாறியுள்ளதா என்பதைச் சரிபார்க்க, [eth_getFilterChanges](#eth_getfilterchanges) ஐ அழைக்கவும். + +**தலைப்பு ஃபில்டர்களைக் (topic filters) குறிப்பிடுவது பற்றிய ஒரு குறிப்பு:** +தலைப்புகள் வரிசையைச் சார்ந்தவை. [A, B] தலைப்புகளைக் கொண்ட லாக் உள்ள ஒரு பரிவர்த்தனை பின்வரும் தலைப்பு ஃபில்டர்களால் பொருத்தப்படும்: + +- `[]` "எதுவும்" +- `[A]` "முதல் நிலையில் A (மற்றும் அதன் பிறகு எதுவும்)" +- `[null, B]` "முதல் நிலையில் எதுவும் மற்றும் இரண்டாவது நிலையில் B (மற்றும் அதன் பிறகு எதுவும்)" +- `[A, B]` "முதல் நிலையில் A மற்றும் இரண்டாவது நிலையில் B (மற்றும் அதன் பிறகு எதுவும்)" +- `[[A, B], [A, B]]` "முதல் நிலையில் (A அல்லது B) மற்றும் இரண்டாவது நிலையில் (A அல்லது B) (மற்றும் அதன் பிறகு எதுவும்)" +- **அளவுருக்கள்** + +1. `Object` - ஃபில்டர் விருப்பங்கள்: + +- `fromBlock`: `QUANTITY|TAG` - (விருப்பத்திற்குரியது, இயல்புநிலை: `"latest"`) முழு எண் பிளாக் எண், அல்லது கடைசியாக முன்மொழியப்பட்ட பிளாக்கிற்கு `"latest"`, சமீபத்திய பாதுகாப்பான பிளாக்கிற்கு `"safe"`, சமீபத்திய இறுதி செய்யப்பட்ட பிளாக்கிற்கு `"finalized"`, அல்லது இன்னும் பிளாக்கில் இல்லாத பரிவர்த்தனைகளுக்கு `"pending"`, `"earliest"`. +- `toBlock`: `QUANTITY|TAG` - (விருப்பத்திற்குரியது, இயல்புநிலை: `"latest"`) முழு எண் பிளாக் எண், அல்லது கடைசியாக முன்மொழியப்பட்ட பிளாக்கிற்கு `"latest"`, சமீபத்திய பாதுகாப்பான பிளாக்கிற்கு `"safe"`, சமீபத்திய இறுதி செய்யப்பட்ட பிளாக்கிற்கு `"finalized"`, அல்லது இன்னும் பிளாக்கில் இல்லாத பரிவர்த்தனைகளுக்கு `"pending"`, `"earliest"`. +- `address`: `DATA|Array`, 20 பைட்டுகள் - (விருப்பத்திற்குரியது) ஒப்பந்த முகவரி அல்லது லாக்ஸ் உருவாக வேண்டிய முகவரிகளின் பட்டியல். +- `topics`: `Array of DATA`, - (விருப்பத்திற்குரியது) 32 பைட்டுகள் `DATA` தலைப்புகளின் வரிசை. தலைப்புகள் வரிசையைச் சார்ந்தவை. ஒவ்வொரு தலைப்பும் "அல்லது" (or) விருப்பங்களைக் கொண்ட DATA இன் வரிசையாகவும் இருக்கலாம். + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**திரும்பப் பெறுபவை** +`QUANTITY` - ஒரு ஃபில்டர் ஐடி. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +புதிய பிளாக் வரும்போது அறிவிக்க, நோடில் ஒரு ஃபில்டரை உருவாக்குகிறது. +ஸ்டேட் மாறியுள்ளதா என்பதைச் சரிபார்க்க, [eth_getFilterChanges](#eth_getfilterchanges) ஐ அழைக்கவும். + +**அளவுருக்கள்** +ஏதுமில்லை + +**திரும்பப் பெறுபவை** +`QUANTITY` - ஒரு ஃபில்டர் ஐடி. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +புதிய நிலுவையிலுள்ள பரிவர்த்தனைகள் வரும்போது அறிவிக்க, நோடில் ஒரு ஃபில்டரை உருவாக்குகிறது. +ஸ்டேட் மாறியுள்ளதா என்பதைச் சரிபார்க்க, [eth_getFilterChanges](#eth_getfilterchanges) ஐ அழைக்கவும். + +**அளவுருக்கள்** +ஏதுமில்லை + +**திரும்பப் பெறுபவை** +`QUANTITY` - ஒரு ஃபில்டர் ஐடி. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +கொடுக்கப்பட்ட ஐடியுடன் ஒரு ஃபில்டரை நிறுவல் நீக்குகிறது (uninstall). கண்காணிப்பு (watch) இனி தேவைப்படாதபோது இது எப்போதும் அழைக்கப்பட வேண்டும். +கூடுதலாக, ஒரு குறிப்பிட்ட காலத்திற்கு [eth_getFilterChanges](#eth_getfilterchanges) உடன் கோரப்படாதபோது ஃபில்டர்கள் காலாவதியாகிவிடும் (timeout). + +**அளவுருக்கள்** + +1. `QUANTITY` - ஃபில்டர் ஐடி. + +```js +params: [ + "0xb", // 11 +] +``` + +**திரும்பப் பெறுபவை** +`Boolean` - ஃபில்டர் வெற்றிகரமாக நிறுவல் நீக்கப்பட்டால் `true`, இல்லையெனில் `false`. + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// முடிவு +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +ஒரு ஃபில்டருக்கான போலிங் (polling) முறை, இது கடந்த போலுக்குப் (poll) பிறகு நிகழ்ந்த லாக்ஸின் வரிசையை வழங்குகிறது. + +**அளவுருக்கள்** + +1. `QUANTITY` - ஃபில்டர் ஐடி. + +```js +params: [ + "0x16", // 22 +] +``` + +**திரும்பப் பெறுபவை** +`Array` - லாக் ஆப்ஜெக்ட்டுகளின் வரிசை, அல்லது கடந்த போலுக்குப் பிறகு எதுவும் மாறவில்லை என்றால் வெற்று வரிசை. + +- `eth_newBlockFilter` உடன் உருவாக்கப்பட்ட ஃபில்டர்களுக்கு, திரும்பப் பெறுபவை பிளாக் ஹாஷ்கள் (`DATA`, 32 பைட்டுகள்), எ.கா., `["0x3454645634534..."]`. +- `eth_newPendingTransactionFilter ` உடன் உருவாக்கப்பட்ட ஃபில்டர்களுக்கு, திரும்பப் பெறுபவை பரிவர்த்தனை ஹாஷ்கள் (`DATA`, 32 பைட்டுகள்), எ.கா., `["0x6345343454645..."]`. +- `eth_newFilter` உடன் உருவாக்கப்பட்ட ஃபில்டர்களுக்கு, லாக்ஸ் பின்வரும் அளவுருக்களைக் கொண்ட ஆப்ஜெக்ட்டுகளாகும்: + - `removed`: `TAG` - செயின் மறுசீரமைப்பு (chain reorganization) காரணமாக லாக் அகற்றப்பட்டால் `true`. இது சரியான லாக் என்றால் `false`. + - `logIndex`: `QUANTITY` - பிளாக்கில் உள்ள லாக் குறியீட்டு நிலையின் முழு எண். இது நிலுவையிலுள்ள லாக்காக இருக்கும்போது `null`. + - `transactionIndex`: `QUANTITY` - லாக் உருவாக்கப்பட்ட பரிவர்த்தனைகளின் குறியீட்டு நிலையின் முழு எண். இது நிலுவையிலுள்ள லாக்காக இருக்கும்போது `null`. + - `transactionHash`: `DATA`, 32 பைட்டுகள் - இந்த லாக் உருவாக்கப்பட்ட பரிவர்த்தனைகளின் ஹாஷ். இது நிலுவையிலுள்ள லாக்காக இருக்கும்போது `null`. + - `blockHash`: `DATA`, 32 பைட்டுகள் - இந்த லாக் இருந்த பிளாக்கின் ஹாஷ். இது நிலுவையில் இருக்கும்போது `null`. இது நிலுவையிலுள்ள லாக்காக இருக்கும்போது `null`. + - `blockNumber`: `QUANTITY` - இந்த லாக் இருந்த பிளாக் எண். இது நிலுவையில் இருக்கும்போது `null`. இது நிலுவையிலுள்ள லாக்காக இருக்கும்போது `null`. + - `address`: `DATA`, 20 பைட்டுகள் - இந்த லாக் உருவான முகவரி. + - `data`: `DATA` - மாறுபடும்-நீளமுள்ள குறியிடப்படாத (non-indexed) லாக் தரவு. (_solidity_ இல்: பூஜ்ஜியம் அல்லது அதற்கு மேற்பட்ட 32 பைட்டுகள் குறியிடப்படாத லாக் விவாதங்கள் (arguments).) + - `topics`: `Array of DATA` - குறியிடப்பட்ட லாக் விவாதங்களின் 0 முதல் 4 வரையிலான 32 பைட்டுகள் `DATA` இன் வரிசை. (_solidity_ இல்: நீங்கள் நிகழ்வை `anonymous` குறிப்பானுடன் (specifier) அறிவித்தாலொழிய, முதல் தலைப்பு நிகழ்வின் கையொப்பத்தின் _ஹாஷ்_ ஆகும் (எ.கா., `Deposit(address,bytes32,uint256)`).) + +- **எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// முடிவு +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +கொடுக்கப்பட்ட ஐடியுடன் ஃபில்டரைப் பொருத்தும் அனைத்து லாக்ஸின் வரிசையையும் வழங்குகிறது. + +**அளவுருக்கள்** + +1. `QUANTITY` - ஃபில்டர் ஐடி. + +```js +params: [ + "0x16", // 22 +] +``` + +**திரும்பப் பெறுபவை** +[eth_getFilterChanges](#eth_getfilterchanges) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +முடிவுக்கு [eth_getFilterChanges](#eth_getfilterchanges) ஐப் பார்க்கவும் + +### eth_getLogs {#eth_getlogs} + +கொடுக்கப்பட்ட ஃபில்டர் ஆப்ஜெக்ட்டைப் பொருத்தும் அனைத்து லாக்ஸின் வரிசையையும் வழங்குகிறது. + +**அளவுருக்கள்** + +1. `Object` - ஃபில்டர் விருப்பங்கள்: + +- `fromBlock`: `QUANTITY|TAG` - (விருப்பத்திற்குரியது, இயல்புநிலை: `"latest"`) முழு எண் பிளாக் எண், அல்லது கடைசியாக முன்மொழியப்பட்ட பிளாக்கிற்கு `"latest"`, சமீபத்திய பாதுகாப்பான பிளாக்கிற்கு `"safe"`, சமீபத்திய இறுதி செய்யப்பட்ட பிளாக்கிற்கு `"finalized"`, அல்லது இன்னும் பிளாக்கில் இல்லாத பரிவர்த்தனைகளுக்கு `"pending"`, `"earliest"`. +- `toBlock`: `QUANTITY|TAG` - (விருப்பத்திற்குரியது, இயல்புநிலை: `"latest"`) முழு எண் பிளாக் எண், அல்லது கடைசியாக முன்மொழியப்பட்ட பிளாக்கிற்கு `"latest"`, சமீபத்திய பாதுகாப்பான பிளாக்கிற்கு `"safe"`, சமீபத்திய இறுதி செய்யப்பட்ட பிளாக்கிற்கு `"finalized"`, அல்லது இன்னும் பிளாக்கில் இல்லாத பரிவர்த்தனைகளுக்கு `"pending"`, `"earliest"`. +- `address`: `DATA|Array`, 20 பைட்டுகள் - (விருப்பத்திற்குரியது) ஒப்பந்த முகவரி அல்லது லாக்ஸ் உருவாக வேண்டிய முகவரிகளின் பட்டியல். +- `topics`: `Array of DATA`, - (விருப்பத்திற்குரியது) 32 பைட்டுகள் `DATA` தலைப்புகளின் வரிசை. தலைப்புகள் வரிசையைச் சார்ந்தவை. ஒவ்வொரு தலைப்பும் "அல்லது" (or) விருப்பங்களைக் கொண்ட DATA இன் வரிசையாகவும் இருக்கலாம். +- `blockHash`: `DATA`, 32 பைட்டுகள் - (விருப்பத்திற்குரியது, **எதிர்காலம்**) EIP-234 இன் சேர்க்கையுடன், `blockHash` ஒரு புதிய ஃபில்டர் விருப்பமாக இருக்கும், இது திரும்பப் பெறப்பட்ட லாக்ஸை 32-பைட் ஹாஷ் `blockHash` உடன் ஒற்றைப் பிளாக்கிற்கு மட்டுப்படுத்துகிறது. `blockHash` ஐப் பயன்படுத்துவது `fromBlock` = `toBlock` = `blockHash` ஹாஷைக் கொண்ட பிளாக் எண்ணிற்குச் சமம். ஃபில்டர் அளவுகோல்களில் `blockHash` இருந்தால், `fromBlock` அல்லது `toBlock` இரண்டும் அனுமதிக்கப்படாது. + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**திரும்பப் பெறுபவை** +[eth_getFilterChanges](#eth_getfilterchanges) ஐப் பார்க்கவும் + +**எடுத்துக்காட்டு** + +```js +// கோரிக்கை +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +முடிவுக்கு [eth_getFilterChanges](#eth_getfilterchanges) ஐப் பார்க்கவும் + +## பயன்பாட்டு உதாரணம் {#usage-example} + +### JSON_RPC ஐப் பயன்படுத்தி ஒரு ஒப்பந்தத்தை நிலைநிறுத்துதல் {#deploying-contract} + +RPC இடைமுகத்தை மட்டுமே பயன்படுத்தி ஒரு ஒப்பந்தத்தை எவ்வாறு நிலைநிறுத்துவது என்பதற்கான விளக்கத்தை இந்தப் பகுதி உள்ளடக்கியுள்ளது. இந்தச் சிக்கலைத் தவிர்க்க ஒப்பந்தங்களை நிலைநிறுத்துவதற்கு மாற்று வழிகள் உள்ளன—உதாரணமாக, RPC இடைமுகத்தின் மேல் கட்டமைக்கப்பட்ட [web3.js](https://web3js.readthedocs.io/) மற்றும் [web3.py](https://github.com/ethereum/web3.py) போன்ற நூலகங்களைப் பயன்படுத்துதல். இந்த சுருக்கங்கள் பொதுவாகப் புரிந்துகொள்ள எளிதானவை மற்றும் குறைவான பிழைகள் ஏற்படக்கூடியவை, ஆனால் பின்னணியில் என்ன நடக்கிறது என்பதைப் புரிந்துகொள்வது இன்னும் உதவியாக இருக்கும். + +பின்வருவது `Multiply7` எனப்படும் நேரடியான ஸ்மார்ட் ஒப்பந்தமாகும், இது JSON-RPC இடைமுகத்தைப் பயன்படுத்தி Ethereum முனையில் நிலைநிறுத்தப்படும். படிப்பவர் ஏற்கனவே Geth முனையை இயக்குகிறார் என்று இந்த வழிகாட்டி கருதுகிறது. முனைகள் மற்றும் கிளையண்டுகள் பற்றிய கூடுதல் தகவல்கள் [இங்கே](/developers/docs/nodes-and-clients/run-a-node) கிடைக்கின்றன. Geth அல்லாத கிளையண்டுகளுக்கு HTTP JSON-RPC ஐ எவ்வாறு தொடங்குவது என்பதைப் பார்க்க, தனிப்பட்ட [கிளையண்ட்](/developers/docs/nodes-and-clients/) ஆவணங்களைப் பார்க்கவும். பெரும்பாலான கிளையண்டுகள் இயல்புநிலையாக `localhost:8545` இல் சேவை செய்கின்றன. + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +முதலில் செய்ய வேண்டியது HTTP RPC இடைமுகம் இயக்கப்பட்டிருப்பதை உறுதிசெய்வதாகும். இதன் பொருள் தொடக்கத்தின் போது Geth-க்கு `--http` கொடியை வழங்குகிறோம். இந்த எடுத்துக்காட்டில், தனிப்பட்ட மேம்பாட்டுச் சங்கிலியில் Geth முனையைப் பயன்படுத்துகிறோம். இந்த அணுகுமுறையைப் பயன்படுத்துவதன் மூலம் உண்மையான நெட்வொர்க்கில் நமக்கு ஈதர் தேவையில்லை. + +```bash +geth --http --dev console 2>>geth.log +``` + +இது `http://localhost:8545` இல் HTTP RPC இடைமுகத்தைத் தொடங்கும். + +[curl](https://curl.se) ஐப் பயன்படுத்தி காயின்பேஸ் முகவரியை (கணக்குகளின் வரிசையிலிருந்து முதல் முகவரியைப் பெறுவதன் மூலம்) மற்றும் இருப்பை மீட்டெடுப்பதன் மூலம் இடைமுகம் இயங்குகிறதா என்பதை நாம் சரிபார்க்கலாம். இந்த எடுத்துக்காட்டுகளில் உள்ள தரவு உங்கள் உள்ளூர் முனையில் மாறுபடும் என்பதை நினைவில் கொள்ளவும். இந்த கட்டளைகளை நீங்கள் முயற்சிக்க விரும்பினால், இரண்டாவது curl கோரிக்கையில் உள்ள கோரிக்கை அளவுருக்களை முதலாவதிலிருந்து பெறப்பட்ட முடிவைக் கொண்டு மாற்றவும். + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545 +{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} + +curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 +{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} +``` + +எண்கள் ஹெக்ஸ் குறியாக்கம் செய்யப்பட்டிருப்பதால், இருப்பு wei இல் ஹெக்ஸ் சரமாக வழங்கப்படுகிறது. ஈதரில் உள்ள இருப்பை ஒரு எண்ணாகப் பெற விரும்பினால், Geth கன்சோலில் இருந்து web3 ஐப் பயன்படுத்தலாம். + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +இப்போது நமது தனிப்பட்ட மேம்பாட்டுச் சங்கிலியில் சில ஈதர்கள் இருப்பதால், நாம் ஒப்பந்தத்தை நிலைநிறுத்தலாம். முதல் படி Multiply7 ஒப்பந்தத்தை EVM-க்கு அனுப்பக்கூடிய பைட் குறியீடாகத் தொகுப்பதாகும். Solidity கம்பைலரான solc ஐ நிறுவ, [Solidity ஆவணங்களை](https://docs.soliditylang.org/en/latest/installing-solidity.html) பின்பற்றவும். ([எங்கள் எடுத்துக்காட்டிற்குப் பயன்படுத்தப்பட்ட கம்பைலரின் பதிப்போடு](https://github.com/ethereum/solidity/releases/tag/v0.4.20) பொருந்துவதற்கு பழைய `solc` வெளியீட்டை நீங்கள் பயன்படுத்த விரும்பலாம்.) + +அடுத்த படி Multiply7 ஒப்பந்தத்தை EVM-க்கு அனுப்பக்கூடிய பைட் குறியீடாகத் தொகுப்பதாகும். + +```bash +echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin + +======= :Multiply7 ======= +Binary: +6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 +``` + +இப்போது தொகுக்கப்பட்ட குறியீடு நம்மிடம் இருப்பதால், அதை நிலைநிறுத்துவதற்கு எவ்வளவு எரிவாயு செலவாகும் என்பதை நாம் தீர்மானிக்க வேண்டும். RPC இடைமுகத்தில் `eth_estimateGas` முறை உள்ளது, இது நமக்கு ஒரு மதிப்பீட்டை வழங்கும். + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} +``` + +இறுதியாக ஒப்பந்தத்தை நிலைநிறுத்தவும். + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 +{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} +``` + +பரிவர்த்தனை முனையால் ஏற்றுக்கொள்ளப்பட்டு பரிவர்த்தனை ஹாஷ் வழங்கப்படுகிறது. பரிவர்த்தனையைக் கண்காணிக்க இந்த ஹாஷைப் பயன்படுத்தலாம். அடுத்த படி நமது ஒப்பந்தம் நிலைநிறுத்தப்பட்டுள்ள முகவரியைத் தீர்மானிப்பதாகும். செயல்படுத்தப்பட்ட ஒவ்வொரு பரிவர்த்தனையும் ஒரு ரசீதை உருவாக்கும். இந்த ரசீதில் பரிவர்த்தனை எந்தத் தொகுதியில் சேர்க்கப்பட்டுள்ளது மற்றும் EVM ஆல் எவ்வளவு எரிவாயு பயன்படுத்தப்பட்டது போன்ற பரிவர்த்தனை பற்றிய பல்வேறு தகவல்கள் உள்ளன. ஒரு பரிவர்த்தனை +ஒரு ஒப்பந்தத்தை உருவாக்கினால், அதில் ஒப்பந்த முகவரியும் இருக்கும். `eth_getTransactionReceipt` RPC முறையின் மூலம் ரசீதை நாம் மீட்டெடுக்கலாம். + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} +``` + +நமது ஒப்பந்தம் `0x4d03d617d700cf81935d7f797f4e2ae719648262` இல் உருவாக்கப்பட்டது. ரசீதுக்குப் பதிலாக பூஜ்ய முடிவு வந்தால், பரிவர்த்தனை இன்னும் ஒரு தொகுதியில் சேர்க்கப்படவில்லை என்று அர்த்தம். சிறிது நேரம் காத்திருந்து, உங்கள் கருத்தொற்றுமை கிளையண்ட் இயங்குகிறதா என்று சரிபார்த்து மீண்டும் முயற்சிக்கவும். + +#### ஸ்மார்ட் ஒப்பந்தங்களுடன் தொடர்புகொள்ளுதல் {#interacting-with-smart-contract} + +இந்த எடுத்துக்காட்டில், ஒப்பந்தத்தின் `multiply` முறைக்கு `eth_sendTransaction` ஐப் பயன்படுத்தி ஒரு பரிவர்த்தனையை அனுப்புவோம். + +`eth_sendTransaction` க்கு பல வாதங்கள் தேவை, குறிப்பாக `from`, `to` மற்றும் `data`. `From` என்பது நமது கணக்கின் பொது முகவரி, மற்றும் `to` என்பது ஒப்பந்த முகவரி. `data` வாதம் எந்த முறையை அழைக்க வேண்டும் மற்றும் எந்த வாதங்களுடன் அழைக்க வேண்டும் என்பதை வரையறுக்கும் பேலோடைக் கொண்டுள்ளது. இங்குதான் [ABI (பயன்பாட்டு பைனரி இடைமுகம்)](https://docs.soliditylang.org/en/latest/abi-spec.html) செயல்படுகிறது. ABI என்பது EVM-க்கான தரவை எவ்வாறு வரையறுப்பது மற்றும் குறியாக்கம் செய்வது என்பதை வரையறுக்கும் JSON கோப்பாகும். + +பேலோடின் பைட்டுகள் ஒப்பந்தத்தில் எந்த முறை அழைக்கப்படுகிறது என்பதை வரையறுக்கிறது. இது செயல்பாட்டின் பெயர் மற்றும் அதன் வாத வகைகளின் மீதான Keccak ஹாஷிலிருந்து முதல் 4 பைட்டுகள் ஆகும், இது ஹெக்ஸ் குறியாக்கம் செய்யப்பட்டது. multiply செயல்பாடு uint ஐ ஏற்றுக்கொள்கிறது, இது uint256 க்கான மாற்றுப் பெயராகும். இது நமக்கு இதை வழங்குகிறது: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +அடுத்த படி வாதங்களை குறியாக்கம் செய்வதாகும். ஒரே ஒரு uint256 மட்டுமே உள்ளது, அதாவது மதிப்பு 6. uint256 வகைகளை எவ்வாறு குறியாக்கம் செய்வது என்பதைக் குறிப்பிடும் ஒரு பகுதி ABI இல் உள்ளது. + +`int: enc(X)` என்பது X இன் பிக்-எண்டியன் டூஸ் காம்ப்ளிமெண்ட் குறியாக்கமாகும், இது எதிர்மறை X க்கு 0xff உடனும், நேர்மறை X க்கு பூஜ்ஜிய பைட்டுகளுடனும் உயர்-வரிசை (இடது) பக்கத்தில் நிரப்பப்படுகிறது, இதனால் நீளம் 32 பைட்டுகளின் மடங்காக இருக்கும். + +இது `0000000000000000000000000000000000000000000000000000000000000006` என குறியாக்கம் செய்யப்படுகிறது. + +செயல்பாட்டுத் தேர்வி மற்றும் குறியாக்கம் செய்யப்பட்ட வாதத்தை இணைத்தால் நமது தரவு `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006` ஆக இருக்கும். + +இதை இப்போது முனைக்கு அனுப்பலாம்: + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 +{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} +``` + +ஒரு பரிவர்த்தனை அனுப்பப்பட்டதால், ஒரு பரிவர்த்தனை ஹாஷ் வழங்கப்பட்டது. ரசீதை மீட்டெடுப்பது இதை வழங்குகிறது: + +```javascript +{ + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + contractAddress: null, + cumulativeGasUsed: 22631, + gasUsed: 22631, + logs: [{ + address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + data: "0x000000000000000000000000000000000000000000000000000000000000002a", + logIndex: 0, + topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 + }], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 +} +``` + +ரசீதில் ஒரு பதிவு (log) உள்ளது. இந்த பதிவு பரிவர்த்தனை செயலாக்கத்தின் போது EVM ஆல் உருவாக்கப்பட்டு ரசீதில் சேர்க்கப்பட்டது. `multiply` செயல்பாடு `Print` நிகழ்வு உள்ளீட்டை 7 ஆல் பெருக்கி எழுப்பப்பட்டதைக் காட்டுகிறது. `Print` நிகழ்விற்கான வாதம் uint256 ஆக இருந்ததால், ABI விதிகளின்படி அதை நாம் டிகோட் செய்யலாம், இது நமக்கு எதிர்பார்க்கப்படும் தசம 42 ஐ வழங்கும். தரவைத் தவிர, எந்த நிகழ்வு பதிவை உருவாக்கியது என்பதைத் தீர்மானிக்க தலைப்புகளைப் (topics) பயன்படுத்தலாம் என்பது குறிப்பிடத்தக்கது: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +இது மிகவும் பொதுவான சில பணிகளுக்கான சுருக்கமான அறிமுகமாகும், இது JSON-RPC இன் நேரடி பயன்பாட்டை விளக்குகிறது. + +## தொடர்புடைய தலைப்புகள் {#related-topics} + +- [JSON-RPC விவரக்குறிப்பு](http://www.jsonrpc.org/specification) +- [முனைகள் மற்றும் கிளையண்டுகள்](/developers/docs/nodes-and-clients/) +- [ஜாவாஸ்கிரிப்ட் APIகள்](/developers/docs/apis/javascript/) +- [பின்தள APIகள்](/developers/docs/apis/backend/) +- [செயலாக்க கிளையண்டுகள்](/developers/docs/nodes-and-clients/#execution-clients) \ No newline at end of file diff --git a/public/content/translations/ta/developers/docs/consensus-mechanisms/poa/index.md b/public/content/translations/ta/developers/docs/consensus-mechanisms/poa/index.md new file mode 100644 index 00000000000..c5d20dd938d --- /dev/null +++ b/public/content/translations/ta/developers/docs/consensus-mechanisms/poa/index.md @@ -0,0 +1,79 @@ +--- +title: Proof-of-authority (PoA) +description: "Proof-of-authority கருத்தொற்றுமை நெறிமுறை மற்றும் பிளாக்செயின் சுற்றுச்சூழல் அமைப்பில் அதன் பங்கு பற்றிய விளக்கம்." +lang: ta +--- + +**Proof-of-authority (PoA)** என்பது நற்பெயரை அடிப்படையாகக் கொண்ட ஒரு கருத்தொற்றுமை அல்காரிதம் ஆகும், இது [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) என்பதன் மாற்றியமைக்கப்பட்ட பதிப்பாகும். இது பெரும்பாலும் தனியார் செயின்கள், டெஸ்ட்நெட்கள் மற்றும் உள்ளூர் மேம்பாட்டு நெட்வொர்க்குகளால் பயன்படுத்தப்படுகிறது. PoA என்பது நற்பெயரை அடிப்படையாகக் கொண்ட ஒரு கருத்தொற்றுமை அல்காரிதம் ஆகும், இது PoS இல் உள்ள பணயம் (stake) அடிப்படையிலான பொறிமுறைக்கு பதிலாக, பிளாக்குகளை உருவாக்க அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களின் தொகுப்பை நம்புவதை அவசியமாக்குகிறது. + +## முன்நிபந்தனைகள் {#prerequisites} + +இந்தப் பக்கத்தை நன்கு புரிந்துகொள்ள, முதலில் [பரிவர்த்தனைகள்](/developers/docs/transactions/), [பிளாக்குகள்](/developers/docs/blocks/) மற்றும் [கருத்தொற்றுமை வழிமுறைகள்](/developers/docs/consensus-mechanisms/) பற்றிப் படிக்குமாறு பரிந்துரைக்கிறோம். + +## Proof-of-authority (PoA) என்றால் என்ன? {#what-is-poa} + +Proof-of-authority என்பது **[proof-of-stake](/developers/docs/consensus-mechanisms/pos/) (PoS)** என்பதன் மாற்றியமைக்கப்பட்ட பதிப்பாகும், இது PoS இல் உள்ள பணயம் அடிப்படையிலான பொறிமுறைக்கு பதிலாக நற்பெயரை அடிப்படையாகக் கொண்ட கருத்தொற்றுமை அல்காரிதம் ஆகும். இந்தச் சொல் முதன்முதலில் 2017 இல் Gavin Wood என்பவரால் அறிமுகப்படுத்தப்பட்டது, மேலும் இந்த கருத்தொற்றுமை அல்காரிதம் பெரும்பாலும் தனியார் செயின்கள், டெஸ்ட்நெட்கள் மற்றும் உள்ளூர் மேம்பாட்டு நெட்வொர்க்குகளால் பயன்படுத்தப்படுகிறது, ஏனெனில் இது PoW ஐப் போல உயர்தர வளங்களின் தேவையைக் கடக்கிறது, மேலும் பிளாக்செயினைச் சேமித்து பிளாக்குகளை உருவாக்கும் சிறிய அளவிலான நோடுகளைக் கொண்டிருப்பதன் மூலம் PoS இன் அளவிடுதல் சிக்கல்களைக் கடக்கிறது. + +Proof-of-authority-க்கு [genesis block](/glossary/#genesis-block)-இல் அமைக்கப்பட்ட அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களின் தொகுப்பை நம்புவது அவசியமாகும். தற்போதைய பெரும்பாலான செயலாக்கங்களில், செயினின் கருத்தொற்றுமையைத் தீர்மானிக்கும் போது அனைத்து அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களும் சமமான அதிகாரத்தையும் சலுகைகளையும் தக்கவைத்துக்கொள்கிறார்கள். நற்பெயரைப் பணயம் வைப்பதன் பின்னணியில் உள்ள யோசனை என்னவென்றால், ஒவ்வொரு அங்கீகரிக்கப்பட்ட வேலிடேட்டரும் know your customer (KYC) போன்ற விஷயங்கள் மூலமாகவோ அல்லது நன்கு அறியப்பட்ட ஒரு நிறுவனம் மட்டுமே வேலிடேட்டராக இருப்பதன் மூலமாகவோ அனைவருக்கும் நன்கு தெரிந்தவர்கள்—இந்த வழியில் ஒரு வேலிடேட்டர் ஏதேனும் தவறு செய்தால், அவர்களின் அடையாளம் தெரிந்துவிடும். + +PoA-இன் பல செயலாக்கங்கள் உள்ளன, ஆனால் நிலையான Ethereum செயலாக்கம் **clique** ஆகும், இது [EIP-225](https://eips.ethereum.org/EIPS/eip-225) ஐ செயல்படுத்துகிறது. Clique என்பது டெவலப்பர்களுக்கு ஏற்ற மற்றும் எளிதாக செயல்படுத்தக்கூடிய ஒரு தரநிலையாகும், இது அனைத்து கிளையன்ட் ஒத்திசைவு வகைகளையும் ஆதரிக்கிறது. பிற செயலாக்கங்களில் [IBFT 2.0](https://besu.hyperledger.org/private-networks/concepts/poa) மற்றும் [Aura](https://openethereum.github.io/Chain-specification) ஆகியவை அடங்கும். + +## இது எவ்வாறு செயல்படுகிறது {#how-it-works} + +PoA-இல், புதிய பிளாக்குகளை உருவாக்க அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களின் தொகுப்பு தேர்ந்தெடுக்கப்படுகிறது. கையொப்பமிடுபவர்கள் அவர்களின் நற்பெயரின் அடிப்படையில் தேர்ந்தெடுக்கப்படுகிறார்கள், மேலும் அவர்கள் மட்டுமே புதிய பிளாக்குகளை உருவாக்க அனுமதிக்கப்படுகிறார்கள். கையொப்பமிடுபவர்கள் ரவுண்ட்-ராபின் (round-robin) முறையில் தேர்ந்தெடுக்கப்படுகிறார்கள், மேலும் ஒவ்வொரு கையொப்பமிடுபவரும் ஒரு குறிப்பிட்ட காலக்கெடுவுக்குள் ஒரு பிளாக்கை உருவாக்க அனுமதிக்கப்படுகிறார்கள். பிளாக் உருவாக்கும் நேரம் நிலையானது, மேலும் கையொப்பமிடுபவர்கள் அந்த நேரத்திற்குள் ஒரு பிளாக்கை உருவாக்க வேண்டும். + +இந்தச் சூழலில் நற்பெயர் என்பது அளவிடப்பட்ட ஒன்றல்ல, மாறாக இது Microsoft மற்றும் Google போன்ற நன்கு அறியப்பட்ட நிறுவனங்களின் நற்பெயராகும், எனவே நம்பகமான கையொப்பமிடுபவர்களைத் தேர்ந்தெடுக்கும் முறை அல்காரிதம் சார்ந்ததல்ல, மாறாக இது _நம்பிக்கை_ (trust) என்ற சாதாரண மனிதச் செயலாகும், இதில் ஒரு நிறுவனம், உதாரணமாக Microsoft, நூற்றுக்கணக்கான அல்லது ஆயிரக்கணக்கான ஸ்டார்ட்அப்களுக்கு இடையே ஒரு PoA தனியார் நெட்வொர்க்கை உருவாக்குகிறது மற்றும் எதிர்காலத்தில் Google போன்ற பிற நன்கு அறியப்பட்ட கையொப்பமிடுபவர்களைச் சேர்க்கும் சாத்தியக்கூறுடன் தன்னை மட்டுமே நம்பகமான கையொப்பமிடுபவராக நிலைநிறுத்துகிறது, ஸ்டார்ட்அப்கள் சந்தேகத்திற்கு இடமின்றி Microsoft எல்லா நேரங்களிலும் நேர்மையான முறையில் செயல்படும் என்று நம்பி நெட்வொர்க்கைப் பயன்படுத்தும். இது பல்வேறு நோக்கங்களுக்காக உருவாக்கப்பட்ட வெவ்வேறு சிறிய/தனியார் நெட்வொர்க்குகளை பரவலாக்கப்பட்டதாகவும் செயல்படக்கூடியதாகவும் வைத்திருக்க அவற்றில் பணயம் வைக்க வேண்டிய தேவையையும், அதிக சக்தி மற்றும் வளங்களை நுகரும் மைனர்களின் தேவையையும் தீர்க்கிறது. VeChain போன்ற சில தனியார் நெட்வொர்க்குகள் PoA தரநிலையை அப்படியே பயன்படுத்துகின்றன, மேலும் Binance போன்ற சில அதை மாற்றியமைக்கின்றன, இது [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) ஐப் பயன்படுத்துகிறது, இது PoA மற்றும் PoS இன் தனிப்பயன் மாற்றியமைக்கப்பட்ட பதிப்பாகும். + +வாக்களிக்கும் செயல்முறை கையொப்பமிடுபவர்களாலேயே செய்யப்படுகிறது. ஒவ்வொரு கையொப்பமிடுபவரும் புதிய பிளாக்கை உருவாக்கும்போது தங்கள் பிளாக்கில் ஒரு கையொப்பமிடுபவரைச் சேர்ப்பதற்கு அல்லது நீக்குவதற்கு வாக்களிக்கிறார்கள். வாக்குகள் நோடுகளால் கணக்கிடப்படுகின்றன, மேலும் வாக்குகள் ஒரு குறிப்பிட்ட வரம்பான `SIGNER_LIMIT` ஐ எட்டுவதன் அடிப்படையில் கையொப்பமிடுபவர்கள் சேர்க்கப்படுகிறார்கள் அல்லது நீக்கப்படுகிறார்கள். + +சிறிய ஃபோர்க்குகள் (forks) ஏற்படும் சூழ்நிலை இருக்கலாம், ஒரு பிளாக்கின் சிரமம் (difficulty) அந்த பிளாக் முறைப்படி (in turn) கையொப்பமிடப்பட்டதா அல்லது முறை தவறி (out of turn) கையொப்பமிடப்பட்டதா என்பதைப் பொறுத்தது. "முறைப்படி" கையொப்பமிடப்பட்ட பிளாக்குகளின் சிரமம் 2 ஆகவும், "முறை தவறி" கையொப்பமிடப்பட்ட பிளாக்குகளின் சிரமம் 1 ஆகவும் இருக்கும். சிறிய ஃபோர்க்குகள் ஏற்பட்டால், பெரும்பாலான கையொப்பமிடுபவர்கள் "முறைப்படி" பிளாக்குகளை முத்திரையிடும் செயின் அதிக சிரமத்தைக் குவித்து வெற்றிபெறும். + +## தாக்குதல் திசையன்கள் (Attack vectors) {#attack-vectors} + +### தீங்கிழைக்கும் கையொப்பமிடுபவர்கள் {#malicious-signers} + +ஒரு தீங்கிழைக்கும் பயனர் கையொப்பமிடுபவர்களின் பட்டியலில் சேர்க்கப்படலாம் அல்லது கையொப்பமிடும் விசை/இயந்திரம் சமரசம் செய்யப்படலாம். அத்தகைய சூழ்நிலையில், நெறிமுறை மறுசீரமைப்புகள் மற்றும் ஸ்பேமிங்கிற்கு எதிராக தன்னைத்தானே பாதுகாத்துக்கொள்ள வேண்டும். முன்மொழியப்பட்ட தீர்வு என்னவென்றால், N அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களின் பட்டியல் கொடுக்கப்பட்டால், எந்தவொரு கையொப்பமிடுபவரும் ஒவ்வொரு K பிளாக்குகளில் 1 பிளாக்கை மட்டுமே உருவாக்க (mint) முடியும். இது சேதம் குறைவாக இருப்பதை உறுதிசெய்கிறது, மேலும் மீதமுள்ள வேலிடேட்டர்கள் தீங்கிழைக்கும் பயனரை வாக்களித்து வெளியேற்றலாம். + +### தணிக்கை (Censorship) {#censorship-attack} + +மற்றொரு சுவாரஸ்யமான தாக்குதல் திசையன் என்னவென்றால், ஒரு கையொப்பமிடுபவர் (அல்லது கையொப்பமிடுபவர்களின் குழு) அங்கீகாரப் பட்டியலிலிருந்து தங்களை நீக்குவதற்கு வாக்களிக்கும் பிளாக்குகளைத் தணிக்கை செய்ய முயற்சிப்பதாகும். இதைச் சமாளிக்க, கையொப்பமிடுபவர்களின் அனுமதிக்கப்பட்ட பிளாக் உருவாக்கும் அதிர்வெண் N/2 இல் 1 ஆகக் கட்டுப்படுத்தப்பட்டுள்ளது. தீங்கிழைக்கும் கையொப்பமிடுபவர்கள் குறைந்தபட்சம் 51% கையொப்பமிடும் கணக்குகளைக் கட்டுப்படுத்த வேண்டும் என்பதை இது உறுதிசெய்கிறது, அந்த கட்டத்தில் அவர்கள் செயினுக்கான புதிய உண்மை ஆதாரமாக (source-of-truth) மாறுவார்கள். + +### ஸ்பேம் (Spam) {#spam-attack} + +மற்றொரு சிறிய தாக்குதல் திசையன் என்னவென்றால், தீங்கிழைக்கும் கையொப்பமிடுபவர்கள் தாங்கள் உருவாக்கும் ஒவ்வொரு பிளாக்கிற்குள்ளும் புதிய வாக்கு முன்மொழிவுகளைச் செலுத்துவதாகும். அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்களின் உண்மையான பட்டியலை உருவாக்க நோடுகள் அனைத்து வாக்குகளையும் கணக்கிட வேண்டும் என்பதால், அவை காலப்போக்கில் அனைத்து வாக்குகளையும் பதிவு செய்ய வேண்டும். வாக்குச் சாளரத்தில் (vote window) வரம்பு விதிக்கப்படாவிட்டால், இது மெதுவாக வளரக்கூடும், ஆனால் எல்லையற்றதாக இருக்கும். இதற்கான தீர்வு என்னவென்றால், W பிளாக்குகளின் _நகரும்_ (moving) சாளரத்தை வைப்பதாகும், அதன் பிறகு வாக்குகள் காலாவதியானதாகக் கருதப்படும். _ஒரு நியாயமான சாளரம் 1-2 எபோக்குகளாக (epochs) இருக்கலாம்._ + +### ஒரே நேரத்தில் உருவாகும் பிளாக்குகள் (Concurrent blocks) {#concurrent-blocks} + +ஒரு PoA நெட்வொர்க்கில், N அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்கள் இருக்கும்போது, ஒவ்வொரு கையொப்பமிடுபவரும் K பிளாக்குகளில் 1 பிளாக்கை உருவாக்க அனுமதிக்கப்படுகிறார்கள், அதாவது எந்தவொரு குறிப்பிட்ட நேரத்திலும் N-K+1 வேலிடேட்டர்கள் பிளாக்குகளை உருவாக்க அனுமதிக்கப்படுகிறார்கள். இந்த வேலிடேட்டர்கள் பிளாக்குகளுக்காகப் போட்டியிடுவதைத் தடுக்க, ஒவ்வொரு கையொப்பமிடுபவரும் புதிய பிளாக்கை வெளியிடும் நேரத்துடன் ஒரு சிறிய சீரற்ற "ஆஃப்செட்டை" (offset) சேர்க்க வேண்டும். இந்தச் செயல்முறை சிறிய ஃபோர்க்குகள் அரிதானவை என்பதை உறுதிசெய்தாலும், மெயின்நெட்டைப் போலவே எப்போதாவது ஃபோர்க்குகள் நிகழலாம். ஒரு கையொப்பமிடுபவர் தனது அதிகாரத்தைத் தவறாகப் பயன்படுத்துவதும் குழப்பத்தை ஏற்படுத்துவதும் கண்டறியப்பட்டால், மற்ற கையொப்பமிடுபவர்கள் அவர்களை வாக்களித்து வெளியேற்றலாம். + +உதாரணமாக 10 அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவர்கள் இருந்தால் மற்றும் ஒவ்வொரு கையொப்பமிடுபவரும் 20 பிளாக்குகளில் 1 பிளாக்கை உருவாக்க அனுமதிக்கப்பட்டால், எந்த நேரத்திலும் 11 வேலிடேட்டர்கள் பிளாக்குகளை உருவாக்க முடியும். அவர்கள் பிளாக்குகளை உருவாக்கப் போட்டியிடுவதைத் தடுக்க, ஒவ்வொரு கையொப்பமிடுபவரும் புதிய பிளாக்கை வெளியிடும் நேரத்துடன் ஒரு சிறிய சீரற்ற "ஆஃப்செட்டை" சேர்க்கிறார்கள். இது சிறிய ஃபோர்க்குகளின் நிகழ்வைக் குறைக்கிறது, ஆனால் Ethereum மெயின்நெட்டில் காணப்படுவது போல் எப்போதாவது ஃபோர்க்குகளை அனுமதிக்கிறது. ஒரு கையொப்பமிடுபவர் தனது அதிகாரத்தைத் தவறாகப் பயன்படுத்தி இடையூறுகளை ஏற்படுத்தினால், அவர்கள் நெட்வொர்க்கிலிருந்து வாக்களித்து வெளியேற்றப்படலாம். + +## நன்மை தீமைகள் {#pros-and-cons} + +| நன்மைகள் (Pros) | தீமைகள் (Cons) | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| குறைந்த எண்ணிக்கையிலான பிளாக் கையொப்பமிடுபவர்களை அடிப்படையாகக் கொண்டிருப்பதால், PoS மற்றும் PoW போன்ற பிற பிரபலமான வழிமுறைகளை விட இது அதிகமாக அளவிடக்கூடியது | PoA நெட்வொர்க்குகள் பொதுவாக ஒப்பீட்டளவில் குறைந்த எண்ணிக்கையிலான வேலிடேட்டிங் நோடுகளைக் கொண்டுள்ளன. இது PoA நெட்வொர்க்கை அதிக மையப்படுத்தப்பட்டதாக ஆக்குகிறது. | +| PoA பிளாக்செயின்களை இயக்குவதும் பராமரிப்பதும் நம்பமுடியாத அளவிற்கு மலிவானது | அங்கீகரிக்கப்பட்ட கையொப்பமிடுபவராக மாறுவது பொதுவாக ஒரு சாதாரண நபருக்கு எட்டாதது, ஏனெனில் பிளாக்செயினுக்கு நிறுவப்பட்ட நற்பெயரைக் கொண்ட நிறுவனங்கள் தேவை. | +| புதிய பிளாக்குகளைச் சரிபார்க்க குறைந்த எண்ணிக்கையிலான கையொப்பமிடுபவர்கள் மட்டுமே தேவைப்படுவதால், பரிவர்த்தனைகள் மிக விரைவாக உறுதிப்படுத்தப்படுகின்றன, இது 1 வினாடிக்கும் குறைவாக இருக்கலாம் | தீங்கிழைக்கும் கையொப்பமிடுபவர்கள் நெட்வொர்க்கில் மறுசீரமைப்பு (reorg), இரட்டைச் செலவு (double spend), பரிவர்த்தனைகளைத் தணிக்கை செய்தல் போன்றவற்றைச் செய்யலாம், அந்தத் தாக்குதல்கள் தணிக்கப்பட்டாலும் இன்னும் சாத்தியமே | + +## மேலும் படிக்க {#further-reading} + +- [EIP-225](https://eips.ethereum.org/EIPS/eip-225) _Clique தரநிலை_ +- [Proof of Authority ஆய்வு](https://github.com/cryptoeconomics-study/website/blob/master/docs/sync/2.4-lecture.md) _கிரிப்டோ எகனாமிக்ஸ்_ +- [Proof of Authority என்றால் என்ன](https://forum.openzeppelin.com/t/proof-of-authority/3577) _OpenZeppelin_ +- [Proof of Authority விளக்கம்](https://academy.binance.com/en/articles/proof-of-authority-explained) _binance_ +- [பிளாக்செயினில் PoA](https://medium.com/techskill-brew/proof-of-authority-or-poa-in-blockchain-part-11-blockchain-series-be15b3321cba) +- [Clique விளக்கம்](https://medium.com/@Destiner/clique-cross-client-proof-of-authority-algorithm-for-ethereum-8b2a135201d) +- [நிராகரிக்கப்பட்ட PoA, Aura விவரக்குறிப்பு](https://openethereum.github.io/Chain-specification) +- [IBFT 2.0, மற்றொரு PoA செயலாக்கம்](https://besu.hyperledger.org/private-networks/concepts/poa) + +### காணொளி மூலம் கற்பவரா நீங்கள்? {#visual-learner} + +Proof-of-authority பற்றிய காணொளி விளக்கத்தைப் பாருங்கள்: + + + +## தொடர்புடைய தலைப்புகள் {#related-topics} + +- [Proof-of-work](/developers/docs/consensus-mechanisms/pow/) +- [Proof-of-stake](/developers/docs/consensus-mechanisms/pos/) \ No newline at end of file diff --git a/public/content/translations/ta/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md b/public/content/translations/ta/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md index 37552bffc9a..90c9c0070a0 100644 --- a/public/content/translations/ta/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md +++ b/public/content/translations/ta/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md @@ -1,69 +1,69 @@ --- -title: "Proof-of-stake மற்றும் proof-of-work" -description: "Ethereum-இன் proof-of-stake மற்றும் proof-of-work அடிப்படையிலான கருத்தொற்றுமை வழிமுறைகளின் ஒப்பீடு" +title: Proof-of-stake vs proof-of-work +description: "Ethereum இன் proof-of-stake மற்றும் proof-of-work அடிப்படையிலான ஒருமித்த வழிமுறைகளுக்கு இடையிலான ஒப்பீடு" lang: ta --- -எதைத் தெரிவிக்கிறது என்றால் Ethereum தொடங்கியபோது, proof-of-stake இன்னும் அதிகமாக ஆராய்ச்சி மற்றும் மேம்பாடு செய்ய வேண்டியது இருந்தது, இது Ethereum ஐப் பாதுகாப்பாகச் செய்ய நம்பகமாக இருப்பதற்கு முன். Proof-of-work என்பது எளிமையான செயல்முறை ஆகும், இது ஏற்கனவே Bitcoin மூலம் நிரூபிக்கப்பட்டதால், மைய வளர்பவர்கள் அதை உடனடியாக நடைமுறைப்படுத்த Ethereum ஐத் தொடங்க அனுமதிக்க முடிந்தது. Proof-of-stake இனை நடைமுறைப்படுத்த 8 ஆண்டுகள் எடுத்தது. +[Ethereum](/) தொடங்கப்பட்டபோது, Ethereum ஐப் பாதுகாப்பாக வைத்திருக்க proof-of-stake-ஐ நம்புவதற்கு முன்பு அதற்கு நிறைய ஆராய்ச்சிகளும் மேம்பாடுகளும் தேவைப்பட்டன. Proof-of-work என்பது Bitcoin-ஆல் ஏற்கனவே நிரூபிக்கப்பட்ட ஒரு எளிய வழிமுறையாகும், அதாவது Ethereum-ஐத் தொடங்க முக்கிய உருவாக்குநர்கள் அதை உடனடியாகச் செயல்படுத்த முடியும். Proof-of-stake-ஐச் செயல்படுத்தக்கூடிய நிலைக்கு மேம்படுத்த மேலும் எட்டு ஆண்டுகள் ஆனது. -இந்தப் பக்கம் proof-of-work இருந்து proof-of-stake க்கு Ethereum நகர்த்தப்படுவதற்கான காரணங்களை மற்றும் அதில் உள்ள பரஸ்பர ஒப்பீடுகளை விளக்குகிறது. +Ethereum proof-of-work-லிருந்து proof-of-stake-க்கு மாறியதற்கான காரணத்தையும் அதில் உள்ள பரிமாற்றங்களையும் (trade-offs) இந்தப் பக்கம் விளக்குகிறது. ## பாதுகாப்பு {#security} -Ethereum ஆராய்ச்சியாளர்கள் proof-of-stake ஐ proof-of-work விடப் பாதுகாப்பானது எனக் கருதுகின்றனர். இருப்பினும், இது சமீபத்திய காலத்தில் மட்டுமே Ethereum Mainnet இல் நடைமுறைப்படுத்தப்பட்டுள்ளது மற்றும் proof-of-work ஐவிட குறைவாக நேரத்தை நிரூபித்துள்ளது. Proof-of-stake க்கு இருக்கும் பாதுகாப்பு மாதிரியை proof-of-work உடன் ஒப்பிட்டுப் பார்த்து இதன் நன்மைகள் மற்றும் கேடுகள்பற்றிப் பின்வரும் பகுதிகள் விவாதிக்கின்றன. +Ethereum ஆராய்ச்சியாளர்கள் proof-of-work-ஐ விட proof-of-stake மிகவும் பாதுகாப்பானது என்று கருதுகின்றனர். இருப்பினும், இது சமீபத்தில்தான் உண்மையான Ethereum Mainnet-க்காகச் செயல்படுத்தப்பட்டது மற்றும் proof-of-work-ஐ விடக் குறைவான காலமே நிரூபிக்கப்பட்டுள்ளது. பின்வரும் பிரிவுகள் proof-of-work-உடன் ஒப்பிடும்போது proof-of-stake-இன் பாதுகாப்பு மாதிரியின் நன்மை தீமைகளைப் பற்றி விவாதிக்கின்றன. ### தாக்குதலுக்கான செலவு {#cost-to-attack} -Proof-of-stake முறையில், validators குறைந்தபட்சம் 32 ETH ஐ ஒரு smart contract இல் stake செய்ய வேண்டிய கட்டாயம் உள்ளது. தவறாக நடக்கும் validators க்களை தண்டிப்பதற்காக Ethereum அவர்கள் stake செய்த ether ஐ அழிக்க முடியும். Consensus அடைவதற்காக, மொத்த staked ether இல் குறைந்தபட்சம் 66% ஒரு குறிப்பிட்ட blocks குழுவின் ஆதரவுக்கு வாக்களிக்க வேண்டும். >=66% ஸ்டேக் வாக்களித்த தொகுதிகள் "இறுதிசெய்யப்பட்டவை" ஆகின்றன, அதாவது அவற்றை அகற்றவோ அல்லது மறுசீரமைக்கவோ முடியாது. +Proof-of-stake-இல், மதிப்பீட்டாளர்கள் (validators) குறைந்தபட்சம் 32 ETH-ஐ ஒரு ஸ்மார்ட் ஒப்பந்தத்தில் ("stake") வைத்திருக்க வேண்டும். தவறாக நடந்துகொள்ளும் மதிப்பீட்டாளர்களைத் தண்டிக்க, stake செய்யப்பட்ட ether-ஐ Ethereum அழிக்க முடியும். ஒருமித்த கருத்துக்கு வர, stake செய்யப்பட்ட மொத்த ether-இல் குறைந்தது 66% ஒரு குறிப்பிட்ட தொகுதிகளுக்கு (blocks) ஆதரவாக வாக்களிக்க வேண்டும். >=66% stake-ஆல் வாக்களிக்கப்பட்ட தொகுதிகள் "இறுதி செய்யப்படுகின்றன" (finalized), அதாவது அவற்றை அகற்றவோ அல்லது மறுசீரமைக்கவோ முடியாது. -நெட்வொர்க்கைத் தாக்குவதில் chain ஐ finalize செய்வதைத் தடுக்கவோ அல்லது canonical chain இல் ஒரு குறிப்பிட்ட blocks அமைப்பை நிச்சயமாக்கவோ, இத somehow ஒரு தாக்குபவர் பயனுள்ளதாக இருக்கும். இது, நியாயமான consensus க்கு path ஐ மாற்றி வைப்பதற்கு தாக்குபவர் பெரும்பாலான ether ஐ சேகரித்து அதனால் நேரடியாக வாக்களிப்பதன் மூலமாகவோ அல்லது நியாயமான validators களை ஒரு குறிப்பிட்ட விதமாக வாக்களிக்கத் தூண்டுவதன் மூலமாகவோ ஏற்படும். நுண்ணிய, குறைந்த probability கொண்ட தாக்குதல்கள் தவிர, Ethereum ஐத் தாக்குவதற்கான செலவு, consensus ஐ அவர்களது நன்மைக்காக மாற்றும் வகையில் தாக்குபவர் சேகரிக்க வேண்டிய stake இன் செலவாகும். +நெட்வொர்க்கைத் தாக்குவது என்பது சங்கிலியை இறுதி செய்வதைத் தடுப்பது அல்லது தாக்குபவருக்கு எப்படியாவது பயனளிக்கும் வகையில் நியமனச் சங்கிலியில் (canonical chain) தொகுதிகளின் ஒரு குறிப்பிட்ட அமைப்பை உறுதி செய்வதைக் குறிக்கும். இதற்குத் தாக்குபவர் அதிக அளவு ether-ஐக் குவித்து அதைக் கொண்டு நேரடியாக வாக்களிப்பதன் மூலமாகவோ அல்லது நேர்மையான மதிப்பீட்டாளர்களை ஒரு குறிப்பிட்ட வழியில் வாக்களிக்கும்படி ஏமாற்றுவதன் மூலமாகவோ நேர்மையான ஒருமித்த கருத்தின் பாதையைத் திசைதிருப்ப வேண்டும். நேர்மையான மதிப்பீட்டாளர்களை ஏமாற்றும் அதிநவீன, குறைந்த நிகழ்தகவு கொண்ட தாக்குதல்களைத் தவிர்த்துப் பார்த்தால், Ethereum-ஐத் தாக்குவதற்கான செலவு என்பது, ஒருமித்த கருத்தைத் தங்களுக்குச் சாதகமாக மாற்றுவதற்குத் தாக்குபவர் குவிக்க வேண்டிய stake-இன் செலவாகும். -தாக்குதலுக்கான மிகக் குறைந்த செலவானது மொத்த ஸ்டேக்கில் >33% ஆகும். மொத்த ஸ்டேக்கில் >33%-ஐ வைத்திருக்கும் ஒரு தாக்குதல்தாரி, வெறுமனே ஆஃப்லைனில் செல்வதன் மூலம் இறுதிப்படுத்தல் தாமதத்தை (finality delay) ஏற்படுத்த முடியும். இது நெட்வொர்க்கிற்கு மிகச் சிறிய பிரச்சனை, ஏனெனில் inactivity leak எனப்படும் ஒரு முறை offline validators களின் stake ஐ இழப்பதற்கான நடவடிக்கை எடுக்கும், இதனால் online majority மொத்த stake இன் 66% ஐ பிரதிநிதித்துவப்படுத்தி chain ஐ மீண்டும் finalize செய்ய முடியும். குறைந்தது 33% stake வைத்திருக்கும் ஒரு தாக்குபவர், block producer ஆகத் தேர்ந்தெடுக்கப்பட்டபோது ஒரே நேரத்தில் இரண்டு blocks உருவாக்கி, அனைத்து validators களுடன் இரட்டிப்பு வாக்கு அளிப்பதன் மூலம் இரட்டை finality ஏற்படுத்தலாம். ஒவ்வொரு fork க்கும் மீதமுள்ள நியாயமான validators க்களில் 50% பெறுவது போதுமானது, எனவே அவர்கள் தங்கள் messages ஐ சரியான நேரத்தில் அனுப்ப முடிந்தால், இரட்டை forks ஐ finalize செய்ய முடியலாம். இது வெற்றியடைய அதிக வாய்ப்பில்லை, ஆனால் ஒரு தாக்குபவர் இரட்டை finality ஏற்படுத்த முடியுமாயின், Ethereum சமூகத்தை ஒரு fork ஐ தேர்ந்தெடுக்கும்நிலைக்குக் கொண்டுவரர வேண்டும், அந்த நேரத்தில் தாக்குபவரின் validators மற்ற fork இல் slashed ஆகி விடும். +தாக்குதலின் மிகக் குறைந்த செலவு மொத்த stake-இல் >33% ஆகும். மொத்த stake-இல் >33%-ஐ வைத்திருக்கும் தாக்குபவர் ஆஃப்லைனுக்குச் செல்வதன் மூலம் இறுதிநிலை தாமதத்தை (finality delay) ஏற்படுத்த முடியும். ஆன்லைன் பெரும்பான்மை 66% stake-ஐப் பிரதிநிதித்துவப்படுத்தி, சங்கிலியை மீண்டும் இறுதி செய்யும் வரை ஆஃப்லைன் மதிப்பீட்டாளர்களிடமிருந்து stake-ஐக் கசியவிடும் "செயலற்ற கசிவு" (inactivity leak) எனப்படும் ஒரு வழிமுறை இருப்பதால், இது நெட்வொர்க்கிற்கு ஒப்பீட்டளவில் சிறிய பிரச்சனையாகும். ஒரு தொகுதி உற்பத்தியாளராக (block producer) இருக்கும்படி கேட்கப்படும்போது, ஒன்றுக்குப் பதிலாக இரண்டு தொகுதிகளை உருவாக்கி, பின்னர் அவர்களின் அனைத்து மதிப்பீட்டாளர்களுடனும் இருமுறை வாக்களிப்பதன் மூலம், மொத்த stake-இல் 33%-க்கும் சற்று அதிகமான தொகையுடன் தாக்குபவர் இரட்டை இறுதிநிலையை (double finality) ஏற்படுத்துவதும் கோட்பாட்டளவில் சாத்தியமாகும். ஒவ்வொரு ஃபோர்க்கிற்கும் (fork) மீதமுள்ள நேர்மையான மதிப்பீட்டாளர்களில் 50% பேர் ஒவ்வொரு தொகுதியையும் முதலில் பார்க்க வேண்டும், எனவே அவர்கள் தங்கள் செய்திகளைச் சரியாக நேரமிட்டால், அவர்கள் இரண்டு ஃபோர்க்குகளையும் இறுதி செய்ய முடியும். இது வெற்றியடைவதற்கான வாய்ப்பு குறைவு, ஆனால் தாக்குபவர் இரட்டை இறுதிநிலையை ஏற்படுத்த முடிந்தால், Ethereum சமூகம் ஒரு ஃபோர்க்கைப் பின்பற்ற முடிவு செய்ய வேண்டும், அவ்வாறான நிலையில் தாக்குபவரின் மதிப்பீட்டாளர்கள் மற்றொன்றில் கட்டாயமாக வெட்டப்படுவார்கள் (slashed). -மொத்த ஸ்டேக்கில் >33%-ஐக் கொண்டு, ஒரு தாக்குதல்தாரி Ethereum நெட்வொர்க்கில் ஒரு சிறிய (இறுதிப்படுத்தல் தாமதம்) அல்லது மிகவும் கடுமையான (இரட்டை இறுதிப்படுத்தல்) விளைவை ஏற்படுத்தும் வாய்ப்புள்ளது. நெட்வொர்க்கில் 14,000,000-க்கும் அதிகமான ETH ஸ்டேக் செய்யப்பட்டிருப்பதாலும், ஒரு ETH-க்கு $1000 என்ற பிரதிநிதித்துவ விலையினாலும், இந்தத் தாக்குதல்களை நடத்துவதற்கான குறைந்தபட்ச செலவு `1000 x 14,000,000 x 0.33 = $4,620,000,000` ஆகும். Slashing மூலம் தாக்குபவர் இந்தப் பணத்தை இழந்து, நெட்வொர்க்கிலிருந்து வெளியேற்றப்படுவர். மீண்டும் தாக்குதல் நடத்த, அவர்கள் (மீண்டும்) ஸ்டேக்கில் >33%-ஐத் திரட்டி அதை (மீண்டும்) எரிக்க வேண்டும். நெட்வொர்க்கைத் தாக்கும் ஒவ்வொரு முயற்சிக்கும் >$4.6 பில்லியன் செலவாகும் ($1000/ETH மற்றும் 14M ETH ஸ்டேக் செய்யப்பட்ட நிலையில்). Attacker slashed செய்யப்பட்ட பிறகு, அவர்களை மீண்டும் நெட்வொர்க்கில் சேர்க்க activation queue வழியாகச் செல்ல வேண்டியிருக்கும். அதாவது, மீண்டும் நிகழும் தாக்குதல் விகிதமானது, தாக்குபவர் மொத்த ஸ்டேக்கில் >33%-ஐத் திரட்டக்கூடிய விகிதத்திற்கு மட்டுமல்ல, அவருடைய அனைத்து வேலிடேட்டர்களையும் நெட்வொர்க்கில் சேர்ப்பதற்கு எடுக்கும் நேரத்திற்கும் மட்டுப்படுத்தப்பட்டுள்ளது. ஒவ்வொரு முறையும் தாக்குபவர் தாக்குதல் நடத்தும்போது, அவர் மிகச் சிறிது பணம் இழக்கிறார், மற்றவர்கள் நிறைய பணம் பெறுகின்றனர், ஏனெனில் resulting supply shock மூலம். +மொத்த stake-இல் >33% உடன், தாக்குபவர் Ethereum நெட்வொர்க்கில் சிறிய (இறுதிநிலை தாமதம்) அல்லது மிகவும் கடுமையான (இரட்டை இறுதிநிலை) விளைவை ஏற்படுத்த வாய்ப்புள்ளது. நெட்வொர்க்கில் 14,000,000 ETH-க்கும் அதிகமாக stake செய்யப்பட்டு, $1000/ETH என்ற பிரதிநிதித்துவ விலையுடன், இந்தத் தாக்குதல்களை நடத்துவதற்கான குறைந்தபட்ச செலவு `1000 x 14,000,000 x 0.33 = $4,620,000,000` ஆகும். தாக்குபவர் இந்த பணத்தை வெட்டுதல் (slashing) மூலம் இழந்து நெட்வொர்க்கிலிருந்து வெளியேற்றப்படுவார். மீண்டும் தாக்க, அவர்கள் >33% stake-ஐ (மீண்டும்) குவித்து அதை (மீண்டும்) எரிக்க வேண்டும். நெட்வொர்க்கைத் தாக்கும் ஒவ்வொரு முயற்சிக்கும் >$4.6 பில்லியன் செலவாகும் ($1000/ETH மற்றும் 14M ETH stake செய்யப்பட்ட நிலையில்). தாக்குபவர் வெட்டப்படும்போது நெட்வொர்க்கிலிருந்து வெளியேற்றப்படுகிறார், மேலும் மீண்டும் சேர அவர்கள் ஒரு செயல்படுத்தும் வரிசையில் (activation queue) சேர வேண்டும். இதன் பொருள், மீண்டும் மீண்டும் நடக்கும் தாக்குதலின் விகிதம், தாக்குபவர் மொத்த stake-இல் >33%-ஐக் குவிக்கும் விகிதத்திற்கு மட்டுமல்லாமல், அவர்களின் அனைத்து மதிப்பீட்டாளர்களையும் நெட்வொர்க்கில் இணைக்க எடுக்கும் நேரத்திற்கும் வரம்பிடப்பட்டுள்ளது. ஒவ்வொரு முறையும் தாக்குபவர் தாக்கும்போது, அவர்கள் மிகவும் ஏழையாகிறார்கள், மேலும் இதன் விளைவாக ஏற்படும் விநியோக அதிர்ச்சியால் (supply shock) சமூகத்தின் மற்றவர்கள் பணக்காரர்களாகிறார்கள். -51% attacks அல்லது finality reversion போன்ற பிற தாக்குதல்கள், மொத்த stake இன் 66% ஐ உடையதாக இருப்பது போன்றவை, மிகவும் அதிக ETH தேவைப்படுவதாகவும், attacker க்கு மிகுந்த செலவாகவும் இருக்கும். +51% தாக்குதல்கள் அல்லது மொத்த stake-இல் 66% உடன் இறுதிநிலையைத் திருப்புதல் (finality reversion) போன்ற பிற தாக்குதல்களுக்கு கணிசமாக அதிக ETH தேவைப்படுகிறது மற்றும் தாக்குபவருக்கு அதிக செலவாகும். -இதை proof-of-work உடன் ஒப்பிடுகை. proof-of-work Ethereum-இல் ஒரு தாக்குதலைத் தொடங்குவதற்கான செலவு என்பது, மொத்த நெட்வொர்க் ஹாஷ் விகிதத்தில் >50%-ஐ தொடர்ந்து வைத்திருப்பதற்கான செலவாகும். இதற்கான செலவு, மற்ற miners களை முந்தி proof-of-work தீர்வுகளைத் தொடர்ந்து கண்டுபிடிக்கத் தேவையான கணிப்பொறி சக்திக்கான hardware மற்றும் இயங்கும் செலவுகள் ஆகும். Ethereum பெரும்பாலும் GPUs ஐப் பயன்படுத்தி mined செய்யப்பட்டது, இது cost ஐ குறைத்தது (ஆனால் Ethereum proof-of-work இல் தொடர்ந்து இருந்திருந்தால், ASIC miningஅதிகமாகப் பிரபலமாகியிருக்கலாம்). Proof-of-work Ethereum நெட்வொர்க்கில் தாக்குதல் நடத்த attacker க்கு அதிக அளவிலான hardware ஐ வாங்கி, அதை இயங்க வைக்கத் தேவையான மின்சாரத்திற்கு செலவு செய்ய வேண்டும், ஆனால் மொத்த cost, ஒரு தாக்குதல் நடத்த போதுமான அளவு ETH சேகரிக்க தேவையான செலவுக்குக் குறைவாகவே இருக்கும். proof-of-stake-ஐ விட proof-of-work-இல் ஒரு 51% தாக்குதல் ~[20x குறைவான](https://youtu.be/1m12zgJ42dI?t=1562) செலவுடையது. தாக்குதல் கண்டறியப்பட்டு chain hard-forked செய்யப்பட்டு அவர்களின் மாற்றங்கள் அகற்றப்பட்டால், attacker அதே hardware ஐப் பயன்படுத்தி புதிய fork மீது மீண்டும் தாக்குதல் நடத்தலாம். +இதை proof-of-work-உடன் ஒப்பிடுங்கள். Proof-of-work Ethereum-இல் தாக்குதலைத் தொடங்குவதற்கான செலவு என்பது மொத்த நெட்வொர்க் ஹாஷ் வீதத்தில் (hash rate) >50%-ஐத் தொடர்ந்து வைத்திருப்பதற்கான செலவாகும். இது proof-of-work தீர்வுகளைத் தொடர்ந்து கணக்கிடுவதற்கு மற்ற சுரங்கத் தொழிலாளர்களை (miners) விஞ்சும் அளவுக்குப் போதுமான கணினி சக்தியின் வன்பொருள் மற்றும் இயங்கும் செலவுகளுக்குச் சமம். Ethereum பெரும்பாலும் ASIC-களை விட GPU-களைப் பயன்படுத்தி வெட்டப்பட்டது, இது செலவைக் குறைத்தது (Ethereum proof-of-work-இலேயே இருந்திருந்தால், ASIC சுரங்கம் மிகவும் பிரபலமாகியிருக்கலாம்). ஒரு எதிரி proof-of-work Ethereum நெட்வொர்க்கைத் தாக்க நிறைய வன்பொருள்களை வாங்க வேண்டும் மற்றும் அதை இயக்குவதற்கான மின்சாரத்திற்கு பணம் செலுத்த வேண்டும், ஆனால் மொத்த செலவு தாக்குதலைத் தொடங்கப் போதுமான ETH-ஐக் குவிக்கத் தேவையான செலவை விடக் குறைவாகவே இருக்கும். Proof-of-stake-ஐ விட proof-of-work-இல் 51% தாக்குதல் ~[20 மடங்கு குறைவான](https://youtu.be/1m12zgJ42dI?t=1562) செலவுடையது. தாக்குதல் கண்டறியப்பட்டு, அவர்களின் மாற்றங்களை அகற்ற சங்கிலி ஹார்ட்-ஃபோர்க் (hard-fork) செய்யப்பட்டால், தாக்குபவர் புதிய ஃபோர்க்கைத் தாக்க அதே வன்பொருளை மீண்டும் மீண்டும் பயன்படுத்தலாம். -### சிக்கலான தன்மை {#complexity} +### சிக்கல்தன்மை {#complexity} -Proof-of-stake என்பது proof-of-work விட மிக அதிகமாகச் சிக்கலானது. இது proof-of-work க்கு ஆதரவான ஒரு அம்சமாகக் கருதப்படலாம், ஏனெனில் எளிதான நெறிமுறைகளில் தவறுகள் அல்லது எதிர்பாராத விளைவுகளை அறிமுகப்படுத்துவது கடினமாக இருக்கும். இருப்பினும, இந்தச் சிக்கலானதுு பல ஆண்டுகளாக மேற்கொள்ளப்பட்ட ஆராய்ச்சி மற்றும் வளர்ச்சியால, சிக்கல்களைச் சரிசெய்துு, முறைப்படுத்தப்பட்டுள்ளது. Proof-of-stake நெறிமுறைகள் ஐந்து தனித்தனி குழுக்களால் ஐந்து வேறுபட்ட நிரலாக்க மொழிகளில் சுயாதீனமாகச் செயல்படுத்தப்பட்டுள்ளதால், client பிழைகளுக்கு எதிரான பாதுகாப்பு கிடைக்கிறது. +Proof-of-work-ஐ விட proof-of-stake மிகவும் சிக்கலானது. எளிமையான நெறிமுறைகளில் தற்செயலாகப் பிழைகள் அல்லது எதிர்பாராத விளைவுகளை அறிமுகப்படுத்துவது கடினம் என்பதால், இது proof-of-work-க்குச் சாதகமான ஒரு புள்ளியாக இருக்கலாம். இருப்பினும், பல ஆண்டுகால ஆராய்ச்சி மற்றும் மேம்பாடு, உருவகப்படுத்துதல்கள் (simulations) மற்றும் டெஸ்ட்நெட் (testnet) செயலாக்கங்கள் மூலம் சிக்கல்தன்மை கட்டுப்படுத்தப்பட்டுள்ளது. Proof-of-stake நெறிமுறை ஐந்து தனித்தனி குழுக்களால் (செயலாக்க மற்றும் ஒருமித்த அடுக்குகள் ஒவ்வொன்றிலும்) ஐந்து நிரலாக்க மொழிகளில் சுயாதீனமாகச் செயல்படுத்தப்பட்டுள்ளது, இது கிளையன்ட் பிழைகளுக்கு எதிரான பின்னடைவை (resilience) வழங்குகிறது. -Proof-of-stake நெருக்கடியான கணிப்பு மற்றும் பரிசோதனைகளுக்குப் பாதுகாப்பாக வளர்த்துச் சோதிக்க, Beacon Chain என்பது proof-of-stake ஐ Ethereum Mainnet இல் செயல்படுத்துவதற்கு இரண்டு ஆண்டுகள் முன்பு அறிமுகப்படுத்தப்பட்டது. Beacon Chain proof-of-stake பரிசோதனைக்கு sandbox ஆகச் செயல்பட்டது, ஏனெனில் இது proof-of-stake க்கு ஏற்பான நெருக்கடியான நெறிமுறையைச் செயல்படுத்தும் நேரடி blockchain ஆக இருந்தது, ஆனால் உண்மையான Ethereum பரிமாற்றங்களைத் தீண்டாமல் - ஒரு முறை proof-of-stake மேல் சம்மதம் பெறுவதில் மட்டுமே செயல்பட்டு வந்தது. இது நன்றாக நிலைத்ததற்கும், பிழையின்றி நீண்ட காலம் செயல்பட்ட பிறகு, Beacon Chain Ethereum Mainnet உடன் "merged" செய்யப்பட்டது. இந்த அனைத்தும் proof-of-stake சிக்கல்பாட்டை சரிசெய்து, எதிர்பாராத விளைவுகளோ அல்லது client பிழைகளின் அபாயம் மிகவும் குறைவாகும். +Proof-of-stake ஒருமித்த தர்க்கத்தைப் பாதுகாப்பாக உருவாக்கிச் சோதிக்க, Ethereum Mainnet-இல் proof-of-stake செயல்படுத்தப்படுவதற்கு இரண்டு ஆண்டுகளுக்கு முன்பு Beacon Chain தொடங்கப்பட்டது. Beacon Chain proof-of-stake சோதனைக்கான ஒரு சாண்ட்பாக்ஸாக (sandbox) செயல்பட்டது, ஏனெனில் இது proof-of-stake ஒருமித்த தர்க்கத்தைச் செயல்படுத்தும் ஒரு நேரடி பிளாக்செயின் ஆகும், ஆனால் உண்மையான Ethereum பரிவர்த்தனைகளைத் தொடாமல் - திறம்படத் தனக்குத்தானே ஒருமித்த கருத்துக்கு வருகிறது. இது போதுமான நேரம் நிலையானதாகவும் பிழையற்றதாகவும் இருந்தவுடன், Beacon Chain Ethereum Mainnet-உடன் "இணைக்கப்பட்டது" (merged). எதிர்பாராத விளைவுகள் அல்லது கிளையன்ட் பிழைகளின் ஆபத்து மிகக் குறைவு என்ற அளவிற்கு proof-of-stake-இன் சிக்கல்தன்மையைக் கட்டுப்படுத்த இவை அனைத்தும் பங்களித்தன. ### தாக்குதல் பரப்பு {#attack-surface} -Proof-of-stake என்பது proof-of-work க்கு விட அதிகமாகச் சிக்கலானது, இதனால் அதிக தாக்குதல்களுக்கு வாய்ப்புகள் அதிகரிக்கின்றன. ஒரு peer-to-peer நெட்வொர்க்இணைப்புக்குப் பதிலாகக, இரண்டு தனித்தனிநெறிமுறைகளைச் செயல்படுத்தும் நெட்வொர்க்கள் உள்ளன. ஒவ்வொரு slot இலும் ஒரு குறிப்பிட்ட validator முன்கூட்டியே தேர்ந்தெடுக்கப்படுவது, அந்த validator ஐ இலக்காகக் கொண்டு அதிகளவிலான நெட்வொர்க் போக்குவரத்தால் denial-of-service தாக்குதலை ஏற்படுத்தும் வாய்ப்பை உருவாக்குகிறது. +Proof-of-work-ஐ விட proof-of-stake மிகவும் சிக்கலானது, அதாவது கையாள அதிக சாத்தியமான தாக்குதல் திசையன்கள் (attack vectors) உள்ளன. கிளையன்ட்களை இணைக்கும் ஒரு பியர்-டு-பியர் (peer-to-peer) நெட்வொர்க்கிற்குப் பதிலாக, இரண்டு உள்ளன, ஒவ்வொன்றும் தனித்தனி நெறிமுறையைச் செயல்படுத்துகின்றன. ஒவ்வொரு ஸ்லாட்டிலும் (slot) ஒரு தொகுதியை முன்மொழிய ஒரு குறிப்பிட்ட மதிப்பீட்டாளரை முன்கூட்டியே தேர்ந்தெடுப்பது, அதிக அளவிலான நெட்வொர்க் டிராஃபிக் அந்த குறிப்பிட்ட மதிப்பீட்டாளரை ஆஃப்லைனில் தள்ளும் சேவை மறுப்புக்கான (denial-of-service) சாத்தியத்தை உருவாக்குகிறது. -மேலும், தங்கள் blocks அல்லது attestations ஐ வெளியிடுவதற்கான நேரத்தைக் கவனமாகத் தேர்ந்தெடுத்து, அதை ஒரு குறிப்பிட்ட அளவிலான நியாயமான network ஆனது பெற்றுக்கொள்வதற்கான வழிகளும் உள்ளன. இதனால், அவர்கள் குறிப்பிட்ட முறையில் வாக்களிக்க ஊக்குவிக்கப்படுகின்றனர். இறுதியாக, ஒரு தாக்குதலாளர் தக்க அளவு ETH சேர்த்துப் stake செய்து, consensus நெறிமுறையை ஆதிக்கப்படுத்த முடியும். இந்த ஒவ்வொரு [தாக்குதல் வழிகளுக்கும் அதனுடன் தொடர்புடைய பாதுகாப்புகள் உள்ளன](/developers/docs/consensus-mechanisms/pos/attack-and-defense), ஆனால் proof-of-work-இன் கீழ் பாதுகாக்கப்பட வேண்டிய இந்த வழிகள் இருப்பதில்லை. +தாக்குபவர்கள் தங்கள் தொகுதிகள் அல்லது சான்றளிப்புகளின் (attestations) வெளியீட்டை கவனமாக நேரமிடுவதற்கான வழிகளும் உள்ளன, இதனால் அவை நேர்மையான நெட்வொர்க்கின் ஒரு குறிப்பிட்ட விகிதத்தால் பெறப்படுகின்றன, இது அவர்களைக் குறிப்பிட்ட வழிகளில் வாக்களிக்கச் செல்வாக்கு செலுத்துகிறது. இறுதியாக, ஒரு தாக்குபவர் stake செய்யப் போதுமான ETH-ஐக் குவித்து ஒருமித்த வழிமுறையில் ஆதிக்கம் செலுத்த முடியும். இந்த ஒவ்வொரு [தாக்குதல் திசையன்களும் தொடர்புடைய பாதுகாப்புகளைக் கொண்டுள்ளன](/developers/docs/consensus-mechanisms/pos/attack-and-defense), ஆனால் அவை proof-of-work-இன் கீழ் பாதுகாக்கப்பட வேண்டியதில்லை. ## பரவலாக்கம் {#decentralization} -Proof-of-stake என்பது proof-of-work உடன் ஒப்பிடுகையில் மிகுந்த மையமற்ற தன்மையைக் கொண்டுள்ளது, ஏனெனில் mining hardware ஆயுதப் போட்டிகள் தனிநபர்களையும் சிறிய நிறுவனங்களையும் பொருட்செலவிலிருந்து விலக்கி விடுகின்றன. யாரும் நன்கு இயங்கும் சாதாரண hardware மூலம் mining ஐத் தொடங்குவதற்குத் தொழில்நுட்ப ரீதியாக முடியும், ஆனால் தங்களுக்கு ஏதேனும் பலன் கிடைக்கும் வாய்ப்பு, நிறுவன மின்தொழிலாளர் நடவடிக்கைகளுடன் ஒப்பிடுகையில் மிகுந்த சிறியதாகும். Proof-of-stake உடன், staking செலவுகளும், அதிலிருந்து கிடைக்கும் சதவீத லாபமும் அனைவருக்கும் ஒரே மாதிரியானவை. தற்போதைய நிலையில், ஒரு validator ஐ இயக்க 32 ETH செலவாகின்றது. +சுரங்க வன்பொருள் ஆயுதப் போட்டிகள் தனிநபர்கள் மற்றும் சிறிய நிறுவனங்களுக்குக் கட்டுப்படியாகாத விலையை ஏற்படுத்துவதால், proof-of-work-ஐ விட proof-of-stake மிகவும் பரவலாக்கப்பட்டுள்ளது. தொழில்நுட்ப ரீதியாக எவரும் சாதாரண வன்பொருளுடன் சுரங்கத்தைத் தொடங்கலாம் என்றாலும், நிறுவனச் சுரங்க நடவடிக்கைகளுடன் ஒப்பிடும்போது அவர்கள் எந்தவொரு வெகுமதியையும் பெறுவதற்கான வாய்ப்பு மிகக் குறைவு. Proof-of-stake-உடன், stake செய்வதற்கான செலவு மற்றும் அந்த stake-இன் மீதான சதவீத வருவாய் அனைவருக்கும் சமம். தற்போது ஒரு மதிப்பீட்டாளரை இயக்க 32 ETH செலவாகிறது. -மறுபுறம், liquid staking derivatives இன் கண்டுபிடிப்பு மையமயமாக்கல் குறித்த கவலைகளை உருவாக்கியுள்ளது, ஏனெனில் சில பெரிய வழங்குநர்கள் பெரிய அளவிலான staked ETH ஐ நிர்வகிக்கின்றனர். இது ஒரு சிக்கலானது, மேலும் விரைவில் சரிசெய்யப்பட வேண்டியது அவசியமாகிறது. ஆனால் இது தோன்றும் அளவிற்கு எளிமையானது அல்ல. மையமயமாக்கப்பட்ட staking வழங்குநர்கள், அவசியம் validators மீது மையமயமாக்கப்பட்ட கட்டுப்பாட்டைக் கொண்டிருக்கிறார்கள் என்றில்லை - பொதுவாக இது பல சுதந்திரமான node operators க்கு தங்களுடைய சொந்த 32 ETH இல்லாமல் ETH க்கான மையக் குளத்தை உருவாக்க ஒரு வழியாக மட்டுமே உள்ளது. +மறுபுறம், லிக்விட் ஸ்டேக்கிங் டெரிவேடிவ்களின் (liquid staking derivatives) கண்டுபிடிப்பு மையப்படுத்தல் கவலைகளுக்கு வழிவகுத்தது, ஏனெனில் சில பெரிய வழங்குநர்கள் அதிக அளவிலான stake செய்யப்பட்ட ETH-ஐ நிர்வகிக்கின்றனர். இது சிக்கலானது மற்றும் கூடிய விரைவில் சரிசெய்யப்பட வேண்டும், ஆனால் இது தோன்றுவதை விட மிகவும் நுணுக்கமானது. மையப்படுத்தப்பட்ட ஸ்டேக்கிங் வழங்குநர்கள் மதிப்பீட்டாளர்களின் மையப்படுத்தப்பட்ட கட்டுப்பாட்டைக் கொண்டிருக்க வேண்டிய அவசியமில்லை - பெரும்பாலும் இது பல சுயாதீன முனை ஆபரேட்டர்கள் (node operators) ஒவ்வொரு பங்கேற்பாளருக்கும் தங்களின் சொந்த 32 ETH தேவைப்படாமல் stake செய்யக்கூடிய ETH-இன் மையக் குளத்தை (central pool) உருவாக்குவதற்கான ஒரு வழியாகும். -Ethereum க்கு சிறந்த தேர்வு, validators ஐ வீட்டு கணினிகளில் உள்ளூர் செயல்படுத்துவது, மையமற்ற தன்மையை அதிகரிப்பதாகும். இதனால் Ethereum node/validator ஐ இயக்குவதற்கான hardware தேவைகளை அதிகரிக்கும் மாற்றங்களை எதிர்க்கின்றது. +Ethereum-க்கான சிறந்த விருப்பம், மதிப்பீட்டாளர்களை வீட்டுக் கணினிகளில் உள்நாட்டில் இயக்குவது, பரவலாக்கத்தை அதிகப்படுத்துவதாகும். இதனால்தான் ஒரு முனை/மதிப்பீட்டாளரை இயக்குவதற்கான வன்பொருள் தேவைகளை அதிகரிக்கும் மாற்றங்களை Ethereum எதிர்க்கிறது. ## நிலைத்தன்மை {#sustainability} -Proof-of-stake என்பது blockchain ஐப் பாதுகாப்பாக வைத்திருக்க மிகக் குறைந்த carbon செலவான வழியாகும். Proof-of-work முறையில், miners ஒரு block ஐ mine செய்யும் உரிமையைப் பெறுவதற்காகப் போட்டிபோடுகின்றனர். Miners அதிக வெற்றியடைவது, அவர்கள் கணக்கீடுகளை விரைவாகச் செய்ய முடியும்போது மட்டுமே ஆகும், இது hardware மற்றும் ஆற்றல் நுகர்வில் முதலீடு செய்யத் தூண்டுகிறது. இது Ethereum க்கு proof-of-stake முறைமைக்கு மாறும் முன்பே கண்டறியப்பட்டது. Proof-of-stake க்கு மாறுவதற்கு முன்னதாக Ethereum சுமார் 78 TWh/yr எனும் அளவுக்கு ஆற்றல் நுகர்ந்து வந்தது - இது ஒரு சிறிய நாட்டிற்கு இணையானது. ஆனால் proof-of-stake க்கு மாறுவதால் இந்த ஆற்றல் செலவு ~99.98% ஆகக் குறைக்கப்பட்டது. Proof-of-stake Ethereum ஐ ஒரு ஆற்றல் திறன் வாய்ந்த, குறைந்த carbon கொண்ட தளமாக மாற்றியது. +Proof-of-stake என்பது பிளாக்செயினைப் பாதுகாப்பதற்கான குறைந்த கார்பன் செலவுடைய வழியாகும். Proof-of-work-இன் கீழ் சுரங்கத் தொழிலாளர்கள் ஒரு தொகுதியை வெட்டுவதற்கான உரிமைக்காகப் போட்டியிடுகின்றனர். சுரங்கத் தொழிலாளர்கள் கணக்கீடுகளை வேகமாகச் செய்யும்போது அதிக வெற்றியடைகிறார்கள், இது வன்பொருள் மற்றும் ஆற்றல் நுகர்வுக்கான முதலீட்டை ஊக்குவிக்கிறது. Ethereum proof-of-stake-க்கு மாறுவதற்கு முன்பு இது காணப்பட்டது. Proof-of-stake-க்கு மாறுவதற்குச் சற்று முன்பு, Ethereum ஆண்டுக்குத் தோராயமாக 78 TWh-ஐப் பயன்படுத்தியது - இது ஒரு சிறிய நாட்டிற்குச் சமம். இருப்பினும், proof-of-stake-க்கு மாறியது இந்த ஆற்றல் செலவை ~99.98% குறைத்தது. Proof-of-stake Ethereum-ஐ ஆற்றல் திறன் கொண்ட, குறைந்த கார்பன் தளமாக மாற்றியது. -[Ethereum-இன் ஆற்றல் நுகர்வு பற்றி மேலும்](/energy-consumption) +[Ethereum-இன் ஆற்றல் நுகர்வு பற்றி மேலும் அறிய](/energy-consumption) ## வெளியீடு {#issuance} -Proof-of-stake Ethereum தனது பாதுகாப்பைக் கட்டியணைக்க proof-of-work Ethereum விட மிகவும் குறைவான coins ஐ வெளியிட்டுச் செலுத்த முடியும், ஏனெனில் validators க்கு அதிக மின் கட்டணத்தைச் செலுத்த வேண்டியதில்லை. இதன் விளைவாக, ETH தனது பணவீக்கம் குறையவோ அல்லது பெரும்பாலான ETH அழிக்கப்படும்போது deflationary ஆகவோ மாறும். குறைந்த பணவீக்கம் என்பதற்குள், Ethereum இன் பாதுகாப்பு, proof-of-work விடக் குறைந்த செலவாக உள்ளது. +Proof-of-stake Ethereum அதன் பாதுகாப்பிற்காக proof-of-work Ethereum-ஐ விட மிகக் குறைவான நாணயங்களை வெளியிடுவதன் மூலம் பணம் செலுத்த முடியும், ஏனெனில் மதிப்பீட்டாளர்கள் அதிக மின்சாரச் செலவுகளைச் செலுத்த வேண்டியதில்லை. இதன் விளைவாக, ETH அதன் பணவீக்கத்தைக் குறைக்கலாம் அல்லது அதிக அளவிலான ETH எரிக்கப்படும்போது பணவாட்டமாக (deflationary) மாறலாம். குறைந்த பணவீக்க அளவுகள் என்பது Ethereum-இன் பாதுகாப்பு proof-of-work-இன் கீழ் இருந்ததை விட மலிவானது என்பதாகும். -## பார்த்து கற்பவரா? {#visual-learner} +## காணொளி மூலம் கற்பவரா? {#visual-learner} -Justin Drake proof-of-stake இன் proof-of-work மீது கிடைக்கும் பலன்களை விளக்கும் காணொளியைப் பாருங்கள்: +Proof-of-work-ஐ விட proof-of-stake-இன் நன்மைகளை ஜஸ்டின் டிரேக் (Justin Drake) விளக்குவதைப் பாருங்கள்: -## மேலும் வாசிக்க {#further-reading} +## மேலும் படிக்க {#further-reading} -- [Vitalik-இன் proof-of-stake வடிவமைப்புத் தத்துவம்](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) -- [Vitalik-இன் proof-of-stake அடிக்கடி கேட்கப்படும் கேள்விகள்](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) -- [PoS மற்றும் PoW குறித்த "எளிமையாக விளக்கப்பட்ட" காணொளி](https://www.youtube.com/watch?v=M3EFi_POhps) +- [விட்டலிக்கின் proof-of-stake வடிவமைப்புத் தத்துவம்](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [விட்டலிக்கின் proof-of-stake அடிக்கடி கேட்கப்படும் கேள்விகள்](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [pos vs pow பற்றிய "எளிமையாக விளக்கப்பட்ட" காணொளி](https://www.youtube.com/watch?v=M3EFi_POhps) \ No newline at end of file diff --git a/public/content/translations/ta/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/ta/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index 62d83a18561..ef58e55fe27 100644 --- a/public/content/translations/ta/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/ta/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -1,6 +1,6 @@ --- title: Ethash -description: "Ethash நெறிமுறையைப் பற்றிய ஒரு விரிவான பார்வை." +description: "Ethash அல்காரிதம் பற்றிய விரிவான பார்வை." lang: ta --- @@ -8,25 +8,25 @@ lang: ta - Ethash என்பது Ethereum-இன் வேலைக்கான சான்று சுரங்க நெறிமுறை ஆகும். வேலைக்கான சான்று இப்போது **முழுவதுமாக அணைக்கப்பட்டுள்ளது** மேலும் Ethereum இப்போது அதற்குப் பதிலாக [பங்குக்கான சான்று](/developers/docs/consensus-mechanisms/pos/) ஐப் பயன்படுத்திப் பாதுகாக்கப்படுகிறது. [தி மெர்ஜ்](/roadmap/merge/), [பங்குக்கான சான்று](/developers/docs/consensus-mechanisms/pos/) மற்றும் [ஸ்டேக்கிங்](/staking/) பற்றி மேலும் படிக்கவும். இந்தப் பக்கம் வரலாற்று ஆர்வத்திற்காக மட்டுமே! + Ethash என்பது Ethereum இன் proof-of-work மைனிங் அல்காரிதமாக இருந்தது. Proof-of-work இப்போது **முற்றிலும் நிறுத்தப்பட்டுள்ளது**, மேலும் Ethereum இப்போது அதற்குப் பதிலாக [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) ஐப் பயன்படுத்தி பாதுகாக்கப்படுகிறது. [The Merge](/roadmap/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) மற்றும் [staking](/staking/) பற்றி மேலும் படிக்கவும். இந்தப் பக்கம் வரலாற்று ஆர்வத்திற்காக மட்டுமே! -Ethash என்பது [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) நெறிமுறையின் மாற்றியமைக்கப்பட்ட பதிப்பாகும். Ethash வேலைக்கான சான்று [நினைவக கடினமானது](https://wikipedia.org/wiki/Memory-hard_function), இது நெறிமுறையை ASIC எதிர்க்கும் என்று கருதப்பட்டது. Ethash ASIC-கள் இறுதியில் உருவாக்கப்பட்டன, ஆனால் வேலைக்கான சான்று அணைக்கப்படும் வரை GPU சுரங்கம் ஒரு சாத்தியமான தேர்வாக இருந்தது. Ethash இன்னும் மற்ற Ethereum அல்லாத வேலைக்கான சான்று நெட்வொர்க்குகளில் மற்ற காயின்களை சுரங்கப்படுத்தப் பயன்படுத்தப்படுகிறது. +Ethash என்பது [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) அல்காரிதத்தின் மாற்றியமைக்கப்பட்ட பதிப்பாகும். Ethash proof-of-work என்பது [மெமரி ஹார்டு (memory hard)](https://wikipedia.org/wiki/Memory-hard_function) ஆகும், இது அல்காரிதத்தை ASIC-எதிர்ப்பு கொண்டதாக மாற்றும் என்று கருதப்பட்டது. Ethash ASIC-கள் இறுதியில் உருவாக்கப்பட்டன, ஆனால் proof-of-work நிறுத்தப்படும் வரை GPU மைனிங் ஒரு சாத்தியமான விருப்பமாகவே இருந்தது. மற்ற Ethereum அல்லாத proof-of-work நெட்வொர்க்குகளில் பிற நாணயங்களை மைனிங் செய்ய Ethash இன்னும் பயன்படுத்தப்படுகிறது. -## Ethash எப்படி வேலை செய்கிறது? {#how-does-ethash-work} +## Ethash எவ்வாறு செயல்படுகிறது? {#how-does-ethash-work} -நான்ஸ் மற்றும் பிளாக் ஹெடரைச் சார்ந்த ஒரு நிலையான வளத்தின் துணைக்குழுக்களைத் தேர்வுசெய்யும் வேலைக்கான சான்று நெறிமுறையுடன் நினைவகக் கடினத்தன்மை அடையப்படுகிறது. இந்த வளம் (சில ஜிகாபைட் அளவு) ஒரு DAG என்று அழைக்கப்படுகிறது. DAG ஒவ்வொரு 30000 பிளாக்குகளுக்கும் மாற்றப்படுகிறது, இது ஒரு யுகம் (epoch) (~125-மணிநேர சாளரம், தோராயமாக 5.2 நாட்கள்) என்று அழைக்கப்படுகிறது மற்றும் உருவாக்க சிறிது நேரம் எடுக்கும். DAG ஆனது பிளாக் உயரத்தை மட்டுமே சார்ந்து இருப்பதால், அதை முன்பே உருவாக்க முடியும், ஆனால் அது இல்லையெனில், ஒரு பிளாக்கை உருவாக்க இந்த செயல்முறையின் இறுதி வரை கிளையன்ட் காத்திருக்க வேண்டும். கிளையன்ட்கள் DAG-களை முன்கூட்டியே உருவாக்கித் தற்காலிகச் சேமிக்கவில்லை என்றால், ஒவ்வொரு யுக மாற்றத்திலும் நெட்வொர்க்கில் பெரும் பிளாக் தாமதம் ஏற்படலாம். வேலைக்கான சான்றை சரிபார்க்க DAG உருவாக்கப்பட வேண்டியதில்லை என்பதை நினைவில் கொள்ளவும், இது குறைந்த CPU மற்றும் சிறிய நினைவகம் இரண்டையும் கொண்டு சரிபார்ப்பை அனுமதிக்கிறது. +நான்ஸ் (nonce) மற்றும் பிளாக் ஹெடரைப் பொறுத்து ஒரு நிலையான வளத்தின் துணைக்குழுக்களைத் தேர்ந்தெடுக்க வேண்டிய proof of work அல்காரிதம் மூலம் மெமரி ஹார்டுனஸ் (Memory hardness) அடையப்படுகிறது. இந்த வளம் (சில ஜிகாபைட் அளவு கொண்டது) DAG என்று அழைக்கப்படுகிறது. DAG ஒவ்வொரு 30000 பிளாக்குகளுக்கும் மாற்றப்படுகிறது, இது எபோக் (epoch) எனப்படும் ~125 மணிநேர சாளரம் (தோராயமாக 5.2 நாட்கள்) ஆகும், மேலும் இதை உருவாக்க சிறிது நேரம் எடுக்கும். DAG பிளாக் உயரத்தை மட்டுமே சார்ந்து இருப்பதால், அதை முன்கூட்டியே உருவாக்க முடியும், ஆனால் அவ்வாறு செய்யாவிட்டால், ஒரு பிளாக்கை உருவாக்க கிளையன்ட் இந்த செயல்முறையின் இறுதி வரை காத்திருக்க வேண்டும். கிளையன்ட்கள் முன்கூட்டியே DAG-களை உருவாக்கி கேச் (cache) செய்யாவிட்டால், ஒவ்வொரு எபோக் மாற்றத்தின் போதும் நெட்வொர்க் பெரிய பிளாக் தாமதத்தை சந்திக்க நேரிடும். proof-of-work-ஐ சரிபார்க்க DAG உருவாக்கப்பட வேண்டியதில்லை என்பதை நினைவில் கொள்ளவும், இது அடிப்படையில் குறைந்த CPU மற்றும் சிறிய மெமரி இரண்டையும் கொண்டு சரிபார்க்க அனுமதிக்கிறது. -நெறிமுறை எடுக்கும் பொதுவான பாதை பின்வருமாறு: +அல்காரிதம் எடுக்கும் பொதுவான வழிமுறை பின்வருமாறு: -1. ஒவ்வொரு பிளாக்கிற்கும் கணக்கிடக்கூடிய ஒரு **விதை** உள்ளது, அது அந்த புள்ளி வரை பிளாக் ஹெடர்களை ஸ்கேன் செய்வதன் மூலம் கணக்கிடப்படுகிறது. -2. விதை மூலம், **16 MB போலி சீரற்ற தற்காலிகச் சேமிப்பை** கணக்கிடலாம். லைட் கிளையன்ட்கள் தற்காலிகச் சேமிப்பை சேமிக்கின்றன. -3. தற்காலிகச் சேமிப்பிலிருந்து, நாம் **1 GB தரவுத்தொகுப்பை** உருவாக்கலாம், தரவுத்தொகுப்பில் உள்ள ஒவ்வொரு உருப்படியும் தற்காலிகச் சேமிப்பிலிருந்து ஒரு சிறிய எண்ணிக்கையிலான உருப்படிகளை மட்டுமே சார்ந்துள்ளது என்ற பண்புடன். முழு கிளையன்ட்கள் மற்றும் சுரங்கத் தொழிலாளர்கள் தரவுத்தொகுப்பை சேமிக்கின்றனர். தரவுத்தொகுப்பு காலப்போக்கில் நேரியல் ரீதியாக வளர்கிறது. -4. சுரங்கமானது தரவுத்தொகுப்பின் சீரற்ற துண்டுகளை எடுத்து அவற்றை ஒன்றாக ஹாஷிங் செய்வதை உள்ளடக்கியது. சரிபார்ப்பை குறைந்த நினைவகம் மூலம் செய்ய முடியும், உங்களுக்குத் தேவையான தரவுத்தொகுப்பின் குறிப்பிட்ட பகுதிகளை மீண்டும் உருவாக்க தற்காலிகச் சேமிப்பைப் பயன்படுத்தி, எனவே நீங்கள் தற்காலிகச் சேமிப்பை மட்டுமே சேமிக்க வேண்டும். +1. ஒவ்வொரு பிளாக்கிற்கும் ஒரு **சீட் (seed)** உள்ளது, அது அந்தப் புள்ளி வரை உள்ள பிளாக் ஹெடர்களை ஸ்கேன் செய்வதன் மூலம் கணக்கிடப்படலாம். +2. சீடிலிருந்து, ஒருவர் **16 MB சூடோரேண்டம் கேச் (pseudorandom cache)**-ஐ கணக்கிடலாம். லைட் கிளையன்ட்கள் கேச்-ஐ சேமிக்கின்றன. +3. கேச்-லிருந்து, நாம் ஒரு **1 GB தரவுத்தொகுப்பை (dataset)** உருவாக்க முடியும், இதில் தரவுத்தொகுப்பில் உள்ள ஒவ்வொரு உருப்படியும் கேச்-லிருந்து ஒரு சிறிய எண்ணிக்கையிலான உருப்படிகளை மட்டுமே சார்ந்துள்ளது என்ற பண்பு உள்ளது. முழு கிளையன்ட்கள் மற்றும் மைனர்கள் தரவுத்தொகுப்பை சேமிக்கின்றனர். தரவுத்தொகுப்பு காலப்போக்கில் நேர்கோட்டில் வளர்கிறது. +4. மைனிங் என்பது தரவுத்தொகுப்பின் சீரற்ற துண்டுகளை எடுத்து அவற்றை ஒன்றாக ஹாஷ் செய்வதை உள்ளடக்கியது. உங்களுக்குத் தேவையான தரவுத்தொகுப்பின் குறிப்பிட்ட பகுதிகளை மீண்டும் உருவாக்க கேச்-ஐப் பயன்படுத்துவதன் மூலம் குறைந்த மெமரியுடன் சரிபார்ப்பைச் செய்யலாம், எனவே நீங்கள் கேச்-ஐ மட்டுமே சேமிக்க வேண்டும். -பெரிய தரவுத்தொகுப்பு ஒவ்வொரு 30000 பிளாக்குகளுக்கும் ஒருமுறை புதுப்பிக்கப்படுகிறது, எனவே ஒரு சுரங்கத் தொழிலாளியின் பெரும்பான்மையான முயற்சி தரவுத்தொகுப்பைப் படிப்பதாக இருக்கும், அதில் மாற்றங்களைச் செய்வதில்லை. +பெரிய தரவுத்தொகுப்பு ஒவ்வொரு 30000 பிளாக்குகளுக்கும் ஒருமுறை புதுப்பிக்கப்படுகிறது, எனவே மைனரின் பெரும்பாலான முயற்சி தரவுத்தொகுப்பைப் படிப்பதாகவே இருக்கும், அதில் மாற்றங்களைச் செய்வதாக இருக்காது. ## வரையறைகள் {#definitions} @@ -49,16 +49,13 @@ ACCESSES = 64 # number of accesses in hashimoto loop ### 'SHA3' இன் பயன்பாடு {#sha3} -எத்தேரியத்தின் வளர்ச்சி SHA3 தரநிலையின் வளர்ச்சியுடன் ஒத்துப்போனது, மற்றும் -தரநிலைகள் செயல்முறை இறுதிப்படுத்தப்பட்ட ஹாஷ் நெறிமுறையின் பேடிங்கில் தாமதமான மாற்றத்தை ஏற்படுத்தியது, இதனால் எத்தேரியத்தின் -"sha3_256" மற்றும் "sha3_512" ஹாஷ்கள் நிலையான sha3 ஹாஷ்கள் அல்ல, ஆனால் மற்ற சூழல்களில் பெரும்பாலும் -"Keccak-256" மற்றும் "Keccak-512" என்று குறிப்பிடப்படும் ஒரு மாறுபாடாகும். உதாரணமாக, [இங்கே](https://eips.ethereum.org/EIPS/eip-1803), [இங்கே](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), அல்லது [இங்கே](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057) விவாதத்தைப் பார்க்கவும். +Ethereum இன் மேம்பாடு SHA3 தரநிலையின் மேம்பாட்டுடன் ஒத்துப்போனது, மேலும் தரநிலைப்படுத்தல் செயல்முறை இறுதி செய்யப்பட்ட ஹாஷ் அல்காரிதத்தின் பேடிங்கில் (padding) தாமதமான மாற்றத்தைச் செய்தது, இதனால் Ethereum இன் "sha3_256" மற்றும் "sha3_512" ஹாஷ்கள் நிலையான sha3 ஹாஷ்கள் அல்ல, ஆனால் மற்ற சூழல்களில் பெரும்பாலும் "Keccak-256" மற்றும் "Keccak-512" என்று குறிப்பிடப்படும் ஒரு மாறுபாடாகும். விவாதத்தைப் பார்க்கவும், எ.கா., [இங்கே](https://eips.ethereum.org/EIPS/eip-1803), [இங்கே](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), அல்லது [இங்கே](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057). -கீழே உள்ள நெறிமுறையின் விளக்கத்தில் "sha3" ஹாஷ்கள் குறிப்பிடப்பட்டுள்ளதால், அதை மனதில் கொள்ளவும். +கீழே உள்ள அல்காரிதத்தின் விளக்கத்தில் "sha3" ஹாஷ்கள் குறிப்பிடப்பட்டுள்ளதால், தயவுசெய்து அதை நினைவில் கொள்ளவும். ## அளவுருக்கள் {#parameters} -Ethash இன் தற்காலிகச் சேமிப்பு மற்றும் தரவுத்தொகுப்பிற்கான அளவுருக்கள் பிளாக் எண்ணைச் சார்ந்துள்ளது. தற்காலிகச் சேமிப்பு அளவு மற்றும் தரவுத்தொகுப்பு அளவு இரண்டும் நேரியல் ரீதியாக வளர்கின்றன; இருப்பினும், சுழற்சி நடத்தைக்கு வழிவகுக்கும் தற்செயலான ஒழுங்குகளின் அபாயத்தைக் குறைக்க, நேரியல் ரீதியாக வளர்ந்து வரும் வரம்பிற்குக் கீழே உள்ள மிக உயர்ந்த பிரதானத்தை நாங்கள் எப்போதும் எடுத்துக்கொள்கிறோம். +Ethash இன் கேச் மற்றும் தரவுத்தொகுப்பிற்கான அளவுருக்கள் பிளாக் எண்ணைப் பொறுத்தது. கேச் அளவு மற்றும் தரவுத்தொகுப்பு அளவு இரண்டும் நேர்கோட்டில் வளர்கின்றன; இருப்பினும், சுழற்சி நடத்தைக்கு வழிவகுக்கும் தற்செயலான ஒழுங்குமுறைகளின் அபாயத்தைக் குறைப்பதற்காக, நேர்கோட்டில் வளரும் வரம்பிற்குக் கீழே உள்ள மிக உயர்ந்த பகா எண்ணை (prime) நாங்கள் எப்போதும் எடுத்துக்கொள்கிறோம். ```python def get_cache_size(block_number): @@ -76,22 +73,22 @@ def get_full_size(block_number): return sz ``` -தரவுத்தொகுப்பு மற்றும் தற்காலிகச் சேமிப்பு அளவு மதிப்புகளின் அட்டவணைகள் பிற்சேர்க்கையில் வழங்கப்பட்டுள்ளன. +தரவுத்தொகுப்பு மற்றும் கேச் அளவு மதிப்புகளின் அட்டவணைகள் பின்னிணைப்பில் வழங்கப்பட்டுள்ளன. -## தற்காலிகச் சேமிப்பு உருவாக்கம் {#cache-generation} +## கேச் உருவாக்கம் {#cache-generation} -இப்போது, தற்காலிகச் சேமிப்பை உருவாக்குவதற்கான செயல்பாட்டை நாங்கள் குறிப்பிடுகிறோம்: +இப்போது, கேச்-ஐ உருவாக்குவதற்கான செயல்பாட்டைக் குறிப்பிடுகிறோம்: ```python def mkcache(cache_size, seed): n = cache_size // HASH_BYTES - # Sequentially produce the initial dataset + # ஆரம்ப தரவுத்தொகுப்பை வரிசையாக உருவாக்கவும் o = [sha3_512(seed)] for i in range(1, n): o.append(sha3_512(o[-1])) - # Use a low-round version of randmemohash + # randmemohash-இன் குறைந்த-சுற்று பதிப்பைப் பயன்படுத்தவும் for _ in range(CACHE_ROUNDS): for i in range(n): v = o[i][0] % n @@ -100,11 +97,11 @@ def mkcache(cache_size, seed): return o ``` -தற்காலிகச் சேமிப்பு உற்பத்தி செயல்முறையானது முதலில் 32 MB நினைவகத்தை வரிசையாக நிரப்புவதை உள்ளடக்கியது, பின்னர் செர்ஜியோ டெமியன் லெர்னரின் [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf) இலிருந்து _RandMemoHash_ நெறிமுறையின் இரண்டு பாஸ்களைச் செய்கிறது. வெளியீடு 524288 64-பைட் மதிப்புகளின் தொகுப்பாகும். +கேச் உற்பத்தி செயல்முறையானது முதலில் 32 MB மெமரியை வரிசையாக நிரப்புவதை உள்ளடக்கியது, பின்னர் [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf) இலிருந்து Sergio Demian Lerner இன் _RandMemoHash_ அல்காரிதத்தின் இரண்டு பாஸ்களை (passes) செய்கிறது. இதன் வெளியீடு 524288 64-பைட் மதிப்புகளின் தொகுப்பாகும். -## தரவு திரட்டல் செயல்பாடு {#date-aggregation-function} +## தரவு ஒருங்கிணைப்பு செயல்பாடு {#date-aggregation-function} -சில சந்தர்ப்பங்களில் XOR-க்கு ஒரு கூட்டு அல்லாத மாற்றாக [FNV ஹாஷ்](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) மூலம் ஈர்க்கப்பட்ட ஒரு நெறிமுறையைப் பயன்படுத்துகிறோம். FNV-1 ஸ்பெக்குக்கு மாறாக, முழு 32-பிட் உள்ளீட்டைக் கொண்டு பிரதானத்தைப் பெருக்குகிறோம் என்பதை நினைவில் கொள்ளவும், இது ஒரு பைட் (octet) உடன் பிரதானத்தைப் பெருக்குகிறது. +சில சந்தர்ப்பங்களில் XOR-க்கு மாற்றாக [FNV ஹாஷ்](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)-ஆல் ஈர்க்கப்பட்ட அல்காரிதத்தைப் பயன்படுத்துகிறோம். FNV-1 விவரக்குறிப்பு பகா எண்ணை ஒரு பைட்டுடன் (octet) பெருக்குவதற்கு மாறாக, முழு 32-பிட் உள்ளீட்டுடன் பகா எண்ணைப் பெருக்குகிறோம் என்பதை நினைவில் கொள்ளவும். ```python FNV_PRIME = 0x01000193 @@ -113,7 +110,7 @@ def fnv(v1, v2): return ((v1 * FNV_PRIME) ^ v2) % 2**32 ``` -மஞ்சள் தாள் கூட fnv-ஐ v1\*(FNV_PRIME ^ v2) என குறிப்பிடுகிறது, தற்போதைய அனைத்து செயலாக்கங்களும் தொடர்ந்து மேலே உள்ள வரையறையைப் பயன்படுத்துகின்றன என்பதை நினைவில் கொள்ளவும். +தயவுசெய்து கவனிக்கவும், மஞ்சள் தாள் (yellow paper) கூட fnv-ஐ v1\*(FNV_PRIME ^ v2) எனக் குறிப்பிட்டாலும், தற்போதைய அனைத்து செயலாக்கங்களும் மேற்கண்ட வரையறையையே தொடர்ந்து பயன்படுத்துகின்றன. ## முழு தரவுத்தொகுப்பு கணக்கீடு {#full-dataset-calculation} @@ -123,47 +120,47 @@ def fnv(v1, v2): def calc_dataset_item(cache, i): n = len(cache) r = HASH_BYTES // WORD_BYTES - # initialize the mix + # கலவையைத் துவக்கவும் mix = copy.copy(cache[i % n]) mix[0] ^= i mix = sha3_512(mix) - # fnv it with a lot of random cache nodes based on i + # i-ஐ அடிப்படையாகக் கொண்ட பல சீரற்ற தற்காலிக சேமிப்பு முனைகளுடன் அதை fnv செய்யவும் for j in range(DATASET_PARENTS): cache_index = fnv(i ^ j, mix[j % r]) mix = map(fnv, mix, cache[cache_index % n]) return sha3_512(mix) ``` -அடிப்படையில், 256 போலி சீரற்ற முறையில் தேர்ந்தெடுக்கப்பட்ட தற்காலிகச் சேமிப்பு முனைகளிலிருந்து தரவை இணைத்து, தரவுத்தொகுப்பு முனையைக் கணக்கிட அதை ஹாஷ் செய்கிறோம். முழு தரவுத்தொகுப்பும் பின்வருமாறு உருவாக்கப்படுகிறது: +அடிப்படையில், 256 சூடோரேண்டமாக தேர்ந்தெடுக்கப்பட்ட கேச் நோடுகளிலிருந்து தரவை இணைத்து, தரவுத்தொகுப்பு நோடைக் கணக்கிட அதை ஹாஷ் செய்கிறோம். முழு தரவுத்தொகுப்பும் பின்னர் இதன்படி உருவாக்கப்படுகிறது: ```python def calc_dataset(full_size, cache): return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] ``` -## முக்கிய வளையம் {#main-loop} +## முதன்மை லூப் (Main loop) {#main-loop} -இப்போது, பிரதான "hashimoto"-போன்ற வளையத்தை நாங்கள் குறிப்பிடுகிறோம், அங்கு ஒரு குறிப்பிட்ட ஹெடர் மற்றும் நான்ஸிற்கான எங்கள் இறுதி மதிப்பை உருவாக்க முழு தரவுத்தொகுப்பிலிருந்து தரவை நாங்கள் திரட்டுகிறோம். கீழேயுள்ள குறியீட்டில், `header` என்பது ஒரு _துண்டிக்கப்பட்ட_ பிளாக் ஹெடரின் RLP பிரதிநிதித்துவத்தின் SHA3-256 _ஹாஷைக்_ குறிக்கிறது, அதாவது, **mixHash** மற்றும் **nonce** புலங்களைத் தவிர்த்து ஒரு ஹெடர். `nonce` என்பது பிக்-எண்டியன் வரிசையில் 64 பிட் கையொப்பமிடப்படாத முழு எண்ணின் எட்டு பைட்டுகள் ஆகும். எனவே `nonce[::-1]` என்பது அந்த மதிப்பின் எட்டு-பைட் லிட்டில்-எண்டியன் பிரதிநிதித்துவமாகும்: +இப்போது, ஒரு குறிப்பிட்ட ஹெடர் மற்றும் நான்ஸிற்கான (nonce) நமது இறுதி மதிப்பை உருவாக்குவதற்காக முழு தரவுத்தொகுப்பிலிருந்தும் தரவை ஒருங்கிணைக்கும் முக்கிய "hashimoto" போன்ற லூப்பைக் குறிப்பிடுகிறோம். கீழே உள்ள குறியீட்டில், `header` என்பது _துண்டிக்கப்பட்ட (truncated)_ பிளாக் ஹெடரின் RLP பிரதிநிதித்துவத்தின் SHA3-256 _ஹாஷைக்_ குறிக்கிறது, அதாவது **mixHash** மற்றும் **nonce** புலங்களைத் தவிர்த்த ஹெடர். `nonce` என்பது பிக்-எண்டியன் (big-endian) வரிசையில் உள்ள 64 பிட் கையொப்பமிடப்படாத முழு எண்ணின் எட்டு பைட்டுகள் ஆகும். எனவே `nonce[::-1]` என்பது அந்த மதிப்பின் எட்டு-பைட் லிட்டில்-எண்டியன் (little-endian) பிரதிநிதித்துவமாகும்: ```python def hashimoto(header, nonce, full_size, dataset_lookup): n = full_size / HASH_BYTES w = MIX_BYTES // WORD_BYTES mixhashes = MIX_BYTES / HASH_BYTES - # combine header+nonce into a 64 byte seed + # header+nonce-ஐ 64 பைட் விதையாக இணைக்கவும் s = sha3_512(header + nonce[::-1]) - # start the mix with replicated s + # நகலெடுக்கப்பட்ட s உடன் கலவையைத் தொடங்கவும் mix = [] for _ in range(MIX_BYTES / HASH_BYTES): mix.extend(s) - # mix in random dataset nodes + # சீரற்ற தரவுத்தொகுப்பு முனைகளைக் கலக்கவும் for i in range(ACCESSES): p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes newdata = [] for j in range(MIX_BYTES / HASH_BYTES): newdata.extend(dataset_lookup(p + j)) mix = map(fnv, mix, newdata) - # compress mix + # கலவையைச் சுருக்கவும் cmix = [] for i in range(0, len(mix), 4): cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) @@ -179,17 +176,17 @@ def hashimoto_full(full_size, dataset, header, nonce): return hashimoto(header, nonce, full_size, lambda x: dataset[x]) ``` -அடிப்படையில், நாங்கள் 128 பைட் அகலமுள்ள ஒரு "கலவையை" பராமரிக்கிறோம், மேலும் முழு தரவுத்தொகுப்பிலிருந்தும் 128 பைட்டுகளை வரிசையாக மீண்டும் மீண்டும் பெற்று, அதை கலவையுடன் இணைக்க `fnv` செயல்பாட்டைப் பயன்படுத்துகிறோம். 128 பைட்டுகளின் வரிசைமுறை அணுகல் பயன்படுத்தப்படுகிறது, அதனால் நெறிமுறையின் ஒவ்வொரு சுற்றிலும் எப்போதும் RAM-இலிருந்து ஒரு முழுப் பக்கத்தைப் பெறுகிறது, ASIC-கள் கோட்பாட்டளவில் தவிர்க்கக்கூடிய டிரான்ஸ்லேஷன் லூக்சைட் பஃபர் தவறுகளைக் குறைக்கிறது. +அடிப்படையில், நாங்கள் 128 பைட்டுகள் அகலமுள்ள ஒரு "மிக்ஸ் (mix)"-ஐப் பராமரிக்கிறோம், மேலும் முழு தரவுத்தொகுப்பிலிருந்து 128 பைட்டுகளைத் தொடர்ந்து வரிசையாகப் பெற்று, அதை மிக்ஸுடன் இணைக்க `fnv` செயல்பாட்டைப் பயன்படுத்துகிறோம். 128 பைட்டுகள் தொடர்ச்சியான அணுகல் பயன்படுத்தப்படுகிறது, இதனால் அல்காரிதத்தின் ஒவ்வொரு சுற்றும் எப்போதும் RAM இலிருந்து ஒரு முழுப் பக்கத்தைப் பெறுகிறது, இது ASIC-கள் கோட்பாட்டளவில் தவிர்க்கக்கூடிய translation lookaside buffer தவறுகளைக் குறைக்கிறது. -இந்த நெறிமுறையின் வெளியீடு விரும்பிய இலக்குக்குக் கீழே இருந்தால், நான்ஸ் செல்லுபடியாகும். இறுதியில் `sha3_256` இன் கூடுதல் பயன்பாடு, குறைந்தபட்சம் ஒரு சிறிய அளவு வேலை செய்யப்பட்டது என்பதை நிரூபிக்க வழங்கக்கூடிய ஒரு இடைநிலை நான்ஸ் இருப்பதை உறுதி செய்கிறது என்பதை நினைவில் கொள்ளவும்; இந்த விரைவான வெளிப்புற PoW சரிபார்ப்பு DDoS எதிர்ப்பு நோக்கங்களுக்காக பயன்படுத்தப்படலாம். முடிவு ஒரு பாரபட்சமற்ற, 256-பிட் எண் என்ற புள்ளிவிவர உத்தரவாதத்தை வழங்கவும் இது உதவுகிறது. +இந்த அல்காரிதத்தின் வெளியீடு விரும்பிய இலக்கிற்குக் கீழே இருந்தால், நான்ஸ் செல்லுபடியாகும். முடிவில் `sha3_256` இன் கூடுதல் பயன்பாடு, குறைந்தபட்சம் ஒரு சிறிய அளவிலான வேலை செய்யப்பட்டுள்ளது என்பதை நிரூபிக்க வழங்கக்கூடிய ஒரு இடைநிலை நான்ஸ் இருப்பதை உறுதி செய்கிறது என்பதை நினைவில் கொள்ளவும்; இந்த விரைவான வெளிப்புற PoW சரிபார்ப்பை anti-DDoS நோக்கங்களுக்காகப் பயன்படுத்தலாம். இதன் முடிவு ஒரு சார்பற்ற, 256-பிட் எண் என்பதற்கான புள்ளிவிவர உத்தரவாதத்தை வழங்கவும் இது உதவுகிறது. -## சுரங்கம் {#mining} +## மைனிங் {#mining} -சுரங்க நெறிமுறை பின்வருமாறு வரையறுக்கப்பட்டுள்ளது: +மைனிங் அல்காரிதம் பின்வருமாறு வரையறுக்கப்படுகிறது: ```python def mine(full_size, dataset, header, difficulty): - # zero-pad target to compare with hash on the same digit + # ஒரே இலக்கத்தில் ஹாஷுடன் ஒப்பிடுவதற்கு இலக்கை பூஜ்ஜியத்தால் நிரப்பவும் target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) @@ -198,9 +195,9 @@ def mine(full_size, dataset, header, difficulty): return nonce ``` -## விதை ஹாஷை வரையறுத்தல் {#seed-hash} +## சீட் ஹாஷை வரையறுத்தல் {#seed-hash} -ஒரு குறிப்பிட்ட பிளாக்கின் மேல் சுரங்கம் செய்யப் பயன்படுத்தப்படும் விதை ஹாஷைக் கணக்கிட, பின்வரும் நெறிமுறையைப் பயன்படுத்துகிறோம்: +கொடுக்கப்பட்ட பிளாக்கின் மேல் மைனிங் செய்யப் பயன்படுத்தப்படும் சீட் ஹாஷைக் கணக்கிட, பின்வரும் அல்காரிதத்தைப் பயன்படுத்துகிறோம்: ```python def get_seedhash(block): @@ -210,20 +207,20 @@ def mine(full_size, dataset, header, difficulty): return s ``` -சுமுகமான சுரங்கம் மற்றும் சரிபார்ப்புக்கு, எதிர்கால விதை ஹாஷ்கள் மற்றும் தரவுத்தொகுப்புகளை ஒரு தனி திரட்டில் முன்கூட்டியே கணக்கிட பரிந்துரைக்கிறோம். +மென்மையான மைனிங் மற்றும் சரிபார்ப்பிற்கு, எதிர்கால சீட்ஹாஷ்கள் மற்றும் தரவுத்தொகுப்புகளை ஒரு தனி த்ரெட்டில் (thread) முன்கூட்டியே கணக்கிட பரிந்துரைக்கிறோம் என்பதை நினைவில் கொள்ளவும். -## மேலும் வாசிக்க {#further-reading} +## மேலும் படிக்க {#further-reading} -_உங்களுக்கு உதவிய ஒரு சமூக வளம் பற்றி தெரியுமா?_ இந்தப் பக்கத்தைத் திருத்தி அதைச் சேர்க்கவும்!_ +_உங்களுக்கு உதவிய சமூக வளம் பற்றி தெரியுமா? இந்தப் பக்கத்தைத் திருத்தி அதைச் சேர்க்கவும்!_ -## பின் இணைப்பு {#appendix} +## பின்னிணைப்பு {#appendix} -மேலே உள்ள பைதான் ஸ்பெக்கை குறியீடாக இயக்க நீங்கள் ஆர்வமாக இருந்தால், பின்வரும் குறியீடு முன் சேர்க்கப்பட வேண்டும். +மேலே உள்ள பைதான் விவரக்குறிப்பைக் குறியீடாக இயக்க நீங்கள் ஆர்வமாக இருந்தால், பின்வரும் குறியீடு முன்னொட்டாகச் சேர்க்கப்பட வேண்டும். ```python import sha3, copy -# Assumes little endian bit ordering (same as Intel architectures) +# லிட்டில் எண்டியன் பிட் வரிசையைக் கருதுகிறது (இன்டெல் கட்டமைப்புகளைப் போலவே) def decode_int(s): return int(s[::-1].encode('hex'), 16) if s else 0 @@ -251,7 +248,7 @@ def serialize_cache(ds): serialize_dataset = serialize_cache -# sha3 hash function, outputs 64 bytes +# sha3 ஹாஷ் செயல்பாடு, 64 பைட்டுகளை வெளியிடுகிறது def sha3_512(x): return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) @@ -270,7 +267,7 @@ def isprime(x): ### தரவு அளவுகள் {#data-sizes} -பின்வரும் தேடல் அட்டவணைகள் தரவு அளவுகள் மற்றும் தற்காலிகச் சேமிப்பு அளவுகளின் தோராயமாக 2048 அட்டவணைப்படுத்தப்பட்ட யுகங்களை வழங்குகின்றன. +பின்வரும் லுக்அப் அட்டவணைகள் (lookup tables) தரவு அளவுகள் மற்றும் கேச் அளவுகளின் தோராயமாக 2048 அட்டவணைப்படுத்தப்பட்ட எபோக்களை வழங்குகின்றன. ```python def get_datasize(block_number): @@ -689,8 +686,7 @@ data_sizes = [ 18102613376, 18111004544, 18119388544, 18127781248, 18136170368, 18144558976, 18152947328, 18161336192, 18169724288, 18178108544, 18186498944, 18194886784, 18203275648, 18211666048, 18220048768, -18228444544, 18236833408, 18245220736 -] +18228444544, 18236833408, 18245220736] cache_sizes = [ 16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, @@ -1020,4 +1016,4 @@ cache_sizes = [ 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 284950208, 285081536] -``` +``` \ No newline at end of file diff --git a/public/content/translations/ta/developers/docs/web2-vs-web3/index.md b/public/content/translations/ta/developers/docs/web2-vs-web3/index.md new file mode 100644 index 00000000000..34dc7f26af0 --- /dev/null +++ b/public/content/translations/ta/developers/docs/web2-vs-web3/index.md @@ -0,0 +1,62 @@ +--- +title: Web2 vs Web3 +description: "Ethereum பிளாக்செயின் தொழில்நுட்பத்தில் உருவாக்கப்பட்ட பரவலாக்கப்பட்ட Web3 பயன்பாடுகளுடன் மையப்படுத்தப்பட்ட Web2 சேவைகளை ஒப்பிடவும்." +lang: ta +--- + +Web2 என்பது இன்று நம்மில் பெரும்பாலோருக்குத் தெரிந்த இணையத்தின் பதிப்பைக் குறிக்கிறது. உங்கள் தனிப்பட்ட தரவுகளுக்கு ஈடாக சேவைகளை வழங்கும் நிறுவனங்களின் ஆதிக்கத்தில் உள்ள இணையம். [Ethereum](/)-இன் சூழலில், Web3 என்பது பிளாக்செயினில் இயங்கும் பரவலாக்கப்பட்ட பயன்பாடுகளைக் குறிக்கிறது. இவை எவரும் தங்கள் தனிப்பட்ட தரவைப் பணமாக்காமல் பங்கேற்க அனுமதிக்கும் பயன்பாடுகளாகும். + +தொடக்கநிலையாளர்களுக்கான ஆதாரத்தைத் தேடுகிறீர்களா? எங்களின் [web3 அறிமுகத்தைப்](/web3/) பார்க்கவும். + +## Web3 நன்மைகள் {#web3-benefits} + +Ethereum-இன் உள்ளார்ந்த பரவலாக்கம் காரணமாக பல Web3 டெவலப்பர்கள் dapp-களை உருவாக்கத் தேர்ந்தெடுத்துள்ளனர்: + +- நெட்வொர்க்கில் உள்ள எவரும் சேவையைப் பயன்படுத்த அனுமதி உண்டு – வேறுவிதமாகக் கூறினால், அனுமதி தேவையில்லை. +- உங்களை யாராலும் தடுக்கவோ அல்லது சேவைக்கான அணுகலை மறுக்கவோ முடியாது. +- நேட்டிவ் டோக்கனான ஈதர் (ETH) மூலம் பேமெண்ட்கள் கட்டமைக்கப்பட்டுள்ளன. +- Ethereum என்பது ட்யூரிங்-கம்ப்ளீட் (turing-complete) ஆகும், அதாவது நீங்கள் எதை வேண்டுமானாலும் நிரல் (program) செய்யலாம். + +## நடைமுறை ஒப்பீடுகள் {#practical-comparisons} + +| Web2 | Web3 | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| Twitter எந்தவொரு கணக்கையும் அல்லது ட்வீட்டையும் தணிக்கை செய்யலாம் | கட்டுப்பாடு பரவலாக்கப்பட்டிருப்பதால் Web3 ட்வீட்களைத் தணிக்கை செய்ய முடியாது | +| சில வகையான வேலைகளுக்கான பேமெண்ட்களை அனுமதிக்க வேண்டாம் என பேமெண்ட் சேவை முடிவு செய்யலாம் | Web3 பேமெண்ட் பயன்பாடுகளுக்கு தனிப்பட்ட தரவு எதுவும் தேவையில்லை மற்றும் பேமெண்ட்களைத் தடுக்க முடியாது | +| கிக்-பொருளாதார (gig-economy) பயன்பாடுகளுக்கான சர்வர்கள் செயலிழந்து தொழிலாளர்களின் வருமானத்தைப் பாதிக்கலாம் | Web3 சர்வர்கள் செயலிழக்க முடியாது – அவை ஆயிரக்கணக்கான கணினிகளின் பரவலாக்கப்பட்ட நெட்வொர்க்கான Ethereum-ஐ அவற்றின் பின்தளமாகப் (backend) பயன்படுத்துகின்றன | + +எல்லா சேவைகளும் dapp ஆக மாற்றப்பட வேண்டும் என்று இது அர்த்தப்படுத்துவதில்லை. இந்த எடுத்துக்காட்டுகள் web2 மற்றும் web3 சேவைகளுக்கு இடையிலான முக்கிய வேறுபாடுகளை விளக்குகின்றன. + +## Web3 வரம்புகள் {#web3-limitations} + +Web3 தற்போது சில வரம்புகளைக் கொண்டுள்ளது: + +- அளவிடுதல் (Scalability) – web3 பரவலாக்கப்பட்டிருப்பதால் பரிவர்த்தனைகள் மெதுவாக இருக்கும். பேமெண்ட் போன்ற நிலை மாற்றங்கள், ஒரு நோட் மூலம் செயலாக்கப்பட்டு நெட்வொர்க் முழுவதும் பரப்பப்பட வேண்டும். +- பயனர் அனுபவம் (UX) – web3 பயன்பாடுகளுடன் தொடர்புகொள்வதற்கு கூடுதல் படிகள், மென்பொருள் மற்றும் கல்வி தேவைப்படலாம். இது தத்தெடுப்புக்கு (adoption) ஒரு தடையாக இருக்கலாம். +- அணுகல்தன்மை (Accessibility) – நவீன இணைய உலாவிகளில் ஒருங்கிணைப்பு இல்லாததால், பெரும்பாலான பயனர்களுக்கு web3-ஐ அணுகுவது கடினமாக உள்ளது. +- செலவு (Cost) – பிளாக்செயினில் குறியீட்டை வைப்பது விலை உயர்ந்தது என்பதால், பெரும்பாலான வெற்றிகரமான dapp-கள் தங்கள் குறியீட்டின் மிகச் சிறிய பகுதிகளை மட்டுமே பிளாக்செயினில் வைக்கின்றன. + +## மையப்படுத்தல் vs பரவலாக்கம் {#centralization-vs-decentralization} + +கீழே உள்ள அட்டவணையில், மையப்படுத்தப்பட்ட மற்றும் பரவலாக்கப்பட்ட டிஜிட்டல் நெட்வொர்க்குகளின் சில பரந்த நன்மைகள் மற்றும் தீமைகளை நாங்கள் பட்டியலிடுகிறோம். + +| மையப்படுத்தப்பட்ட அமைப்புகள் | பரவலாக்கப்பட்ட அமைப்புகள் | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| குறைந்த நெட்வொர்க் விட்டம் (அனைத்து பங்கேற்பாளர்களும் ஒரு மைய அதிகாரத்துடன் இணைக்கப்பட்டுள்ளனர்); ஏராளமான கணக்கீட்டு வளங்களைக் கொண்ட ஒரு மைய அதிகாரத்தால் தகவல் பரப்புதல் கையாளப்படுவதால், தகவல் விரைவாகப் பரவுகிறது. | நெட்வொர்க்கில் உள்ள தொலைதூர பங்கேற்பாளர்கள் ஒருவருக்கொருவர் பல முனைகள் தொலைவில் இருக்கலாம். நெட்வொர்க்கின் ஒரு பக்கத்திலிருந்து ஒளிபரப்பப்படும் தகவல் மறுபக்கத்தை அடைய நீண்ட நேரம் ஆகலாம். | +| பொதுவாக அதிக செயல்திறன் (அதிக த்ரோபுட், குறைவான மொத்த கணக்கீட்டு வளங்கள் செலவிடப்படுகின்றன) மற்றும் செயல்படுத்த எளிதானது. | பொதுவாக குறைந்த செயல்திறன் (குறைந்த த்ரோபுட், அதிக மொத்த கணக்கீட்டு வளங்கள் செலவிடப்படுகின்றன) மற்றும் செயல்படுத்த மிகவும் சிக்கலானது. | +| முரண்பட்ட தரவு ஏற்பட்டால், தீர்வு தெளிவானது மற்றும் எளிதானது: உண்மையின் இறுதி ஆதாரம் மைய அதிகாரம் ஆகும். | பங்கேற்பாளர்கள் ஒத்திசைக்கப்பட வேண்டிய தரவின் நிலை குறித்து பியர்கள் (peers) முரண்பட்ட உரிமைகோரல்களைச் செய்தால், தகராறு தீர்க்க ஒரு நெறிமுறை (பெரும்பாலும் சிக்கலானது) தேவைப்படுகிறது. | +| தோல்வியின் ஒற்றை புள்ளி (Single point of failure): தீங்கிழைக்கும் நபர்கள் மைய அதிகாரத்தை குறிவைப்பதன் மூலம் நெட்வொர்க்கை வீழ்த்த முடியும். | தோல்வியின் ஒற்றை புள்ளி இல்லை: பங்கேற்பாளர்களில் பெரும்பாலோர் தாக்கப்பட்டாலும்/வெளியேற்றப்பட்டாலும் நெட்வொர்க் தொடர்ந்து செயல்பட முடியும். | +| நெட்வொர்க் பங்கேற்பாளர்களிடையே ஒருங்கிணைப்பு மிகவும் எளிதானது, மேலும் இது ஒரு மைய அதிகாரத்தால் கையாளப்படுகிறது. மைய அதிகாரம் நெட்வொர்க் பங்கேற்பாளர்களை மேம்படுத்தல்கள், நெறிமுறை புதுப்பிப்புகள் போன்றவற்றை மிகக் குறைந்த உராய்வுடன் ஏற்றுக்கொள்ள கட்டாயப்படுத்தலாம். | நெட்வொர்க் அளவிலான முடிவுகள், நெறிமுறை மேம்படுத்தல்கள் போன்றவற்றில் எந்தவொரு முகவருக்கும் இறுதிச் சொல் இல்லாததால், ஒருங்கிணைப்பு பெரும்பாலும் கடினமாக இருக்கும். மோசமான நிலையில், நெறிமுறை மாற்றங்கள் குறித்து கருத்து வேறுபாடுகள் ஏற்படும் போது நெட்வொர்க் சிதைவடையும் வாய்ப்புள்ளது. | +| மைய அதிகாரம் தரவைத் தணிக்கை செய்யலாம், நெட்வொர்க்கின் சில பகுதிகளை நெட்வொர்க்கின் மற்ற பகுதிகளுடன் தொடர்புகொள்வதைத் துண்டிக்கலாம். | நெட்வொர்க் முழுவதும் தகவல் பரவுவதற்கு பல வழிகள் இருப்பதால், தணிக்கை செய்வது மிகவும் கடினம். | +| நெட்வொர்க்கில் பங்கேற்பது மைய அதிகாரத்தால் கட்டுப்படுத்தப்படுகிறது. | நெட்வொர்க்கில் யார் வேண்டுமானாலும் பங்கேற்கலாம்; "கேட்கீப்பர்கள்" (gatekeepers) யாரும் இல்லை. வெறுமனே, பங்கேற்பதற்கான செலவு மிகவும் குறைவு. | + +இவை ஒவ்வொரு நெட்வொர்க்கிலும் உண்மையாக இருக்க வேண்டிய அவசியமில்லாத பொதுவான வடிவங்கள் என்பதை நினைவில் கொள்ளவும். மேலும், உண்மையில் ஒரு நெட்வொர்க் மையப்படுத்தப்பட்ட/பரவலாக்கப்பட்ட அளவு ஒரு ஸ்பெக்ட்ரமில் உள்ளது; எந்த நெட்வொர்க்கும் முற்றிலும் மையப்படுத்தப்பட்டதாகவோ அல்லது முற்றிலும் பரவலாக்கப்பட்டதாகவோ இல்லை. + +## மேலும் படிக்க {#further-reading} + +- [Web3 என்றால் என்ன?](/web3/) - _ethereum.org_ +- [ஒரு Web 3.0 பயன்பாட்டின் கட்டமைப்பு](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [பரவலாக்கத்தின் பொருள்](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _பிப் 6, 2017 - Vitalik Buterin_ +- [பரவலாக்கம் ஏன் முக்கியமானது](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) _பிப் 18, 2018 - Chris Dixon_ +- [Web 3.0 என்றால் என்ன & அது ஏன் முக்கியமானது](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _டிச 31, 2019 - Max Mersch மற்றும் Richard Muirhead_ +- [நமக்கு ஏன் Web 3.0 தேவை](https://gavofyork.medium.com/why-we-need-web-3-0-5da4f2bf95ab) _செப் 12, 2018 - Gavin Wood_ \ No newline at end of file diff --git a/public/content/translations/ta/roadmap/fusaka/peerdas/index.md b/public/content/translations/ta/roadmap/fusaka/peerdas/index.md new file mode 100644 index 00000000000..e8478258885 --- /dev/null +++ b/public/content/translations/ta/roadmap/fusaka/peerdas/index.md @@ -0,0 +1,88 @@ +--- +title: PeerDAS +description: "ஃபூசாகா (Fusaka) எத்தேரியம் நெறிமுறை மேம்பாட்டின் ஒரு பகுதியாக PeerDAS பற்றி அறிந்துகொள்ளுங்கள்" +lang: ta +--- + +# PeerDAS {#peer-das} + +[EIP-4844 உடன் பிளாப் (blob) பரிவர்த்தனைகளின் அறிமுகத்திற்குப்](/roadmap/danksharding/) பிறகு, [எத்தேரியம் (Ethereum)](/) நெறிமுறை அதன் மிக முக்கியமான அளவிடுதல் மேம்பாட்டிற்கு உட்பட்டு வருகிறது. [ஃபூசாகா (Fusaka) மேம்பாட்டின்](/roadmap/fusaka/) ஒரு பகுதியாக, PeerDAS பிளாப் தரவைக் கையாளுவதற்கான ஒரு புதிய வழியை அறிமுகப்படுத்துகிறது, இது L2-களுக்கான **[தரவு கிடைக்கும் தன்மை (data availability - DA)](/developers/docs/data-availability/)** திறனில் தோராயமாகப் பல மடங்கு அதிகரிப்பை வழங்குகிறது. + +[பிளாப் அளவிடுதல் வழிகாட்டி பற்றி மேலும் அறிய](https://blog.ethereum.org/2025/08/22/protocol-update-002) + +## அளவிடுதல் (Scalability) {#scalability} + +எத்தேரியத்தின் தொலைநோக்கு பார்வை, உலகில் உள்ள அனைவருக்கும் கிடைக்கக்கூடிய நடுநிலையான, பாதுகாப்பான மற்றும் பரவலாக்கப்பட்ட தளமாக இருக்க வேண்டும் என்பதாகும். நெட்வொர்க் பயன்பாடு வளரும்போது, நெட்வொர்க்கின் அளவிடுதல், பாதுகாப்பு மற்றும் பரவலாக்கம் ஆகிய மும்முனைச் சிக்கலை (trilemma) சமநிலைப்படுத்த வேண்டியது அவசியமாகிறது. எத்தேரியம் அதன் தற்போதைய வடிவமைப்பிற்குள் நெட்வொர்க் கையாளும் தரவை வெறுமனே அதிகரித்தால், அது [பரவலாக்கத்திற்காக எத்தேரியம் நம்பியிருக்கும் நோடுகளை (nodes)](/developers/docs/nodes-and-clients/) அதிக சுமைக்கு உள்ளாக்கும் அபாயத்தை ஏற்படுத்தும். அளவிடுதலுக்கு, சமரசங்களைக் குறைக்கும் கடுமையான பொறிமுறை வடிவமைப்பு தேவைப்படுகிறது. + +இந்த இலக்கை அடைவதற்கான உத்திகளில் ஒன்று, அனைத்து பரிவர்த்தனைகளையும் [லேயர் 1 (L1)](/glossary/#layer-1) மெயின்நெட்டில் (Mainnet) செயலாக்குவதற்குப் பதிலாக, லேயர் 2 அளவிடுதல் தீர்வுகளின் மாறுபட்ட சுற்றுச்சூழல் அமைப்பை அனுமதிப்பதாகும். [லேயர் 2-கள் (L2s)](/glossary/#layer-2) அல்லது [ரோலப்கள் (rollups)](/glossary#rollups) பரிவர்த்தனைகளை அவற்றின் சொந்த தனித்தனி செயின்களில் செயலாக்குகின்றன மற்றும் சரிபார்ப்பு மற்றும் பாதுகாப்பிற்காக எத்தேரியத்தைப் பயன்படுத்துகின்றன. பாதுகாப்புக்கு முக்கியமான கமிட்மென்ட்களை (commitments) மட்டுமே வெளியிடுவது மற்றும் பேலோடுகளை (payloads) சுருக்குவது, எத்தேரியத்தின் DA திறனை L2-கள் மிகவும் திறமையாகப் பயன்படுத்த அனுமதிக்கிறது. இதன் விளைவாக, பாதுகாப்பு உத்தரவாதங்களில் சமரசம் செய்யாமல் L1 குறைந்த தரவைக் கொண்டு செல்கிறது, அதே நேரத்தில் L2-கள் குறைந்த கேஸ் (gas) செலவில் அதிக பயனர்களை இணைக்கின்றன. ஆரம்பத்தில், L2-கள் சாதாரண பரிவர்த்தனைகளில் `calldata` ஆக தரவை வெளியிட்டன, இது கேஸிற்காக L1 பரிவர்த்தனைகளுடன் போட்டியிட்டது மற்றும் மொத்த தரவு கிடைக்கும் தன்மைக்கு நடைமுறைக்கு சாத்தியமற்றதாக இருந்தது. + +## புரோட்டோ-டாங்க்ஷார்டிங் (Proto-Danksharding) {#proto-danksharding} + +L2-ஐ அளவிடுவதற்கான முதல் முக்கிய படி டென்குன் (Dencun) மேம்பாடு ஆகும், இது [புரோட்டோ-டாங்க்ஷார்டிங்கை (Proto-Danksharding)](/roadmap/danksharding/) (EIP-4844) அறிமுகப்படுத்தியது. இந்த மேம்பாடு ரோலப்களுக்காக பிளாப்கள் (blobs) எனப்படும் புதிய, சிறப்பு தரவு வகையை உருவாக்கியது. [பிளாப்கள் (Blobs)](/developers/docs/data-availability/blockchain-data-storage-strategies/#eip-4844-blobs) அல்லது பைனரி லார்ஜ் ஆப்ஜெக்ட்கள் (binary large objects) என்பவை EVM செயலாக்கம் தேவையில்லாத தன்னிச்சையான தரவுகளின் தற்காலிகப் பகுதிகளாகும், மேலும் நோடுகள் இவற்றை ஒரு குறிப்பிட்ட காலத்திற்கு மட்டுமே சேமிக்கின்றன. இந்த மிகவும் திறமையான செயலாக்கம் L2-கள் எத்தேரியத்தில் அதிக தரவை வெளியிடவும் மேலும் அளவிடவும் அனுமதித்தது. + +அளவிடுதலுக்கு ஏற்கனவே வலுவான நன்மைகளைக் கொண்டிருந்தாலும், பிளாப்களைப் பயன்படுத்துவது இறுதி இலக்கின் ஒரு பகுதி மட்டுமே. தற்போதைய நெறிமுறையில், நெட்வொர்க்கில் உள்ள ஒவ்வொரு நோடும் ஒவ்வொரு பிளாப்பையும் பதிவிறக்கம் செய்ய வேண்டும். தனிப்பட்ட நோடுகளுக்குத் தேவைப்படும் அலைவரிசையே (bandwidth) இங்கு இடையூறாக மாறுகிறது, அதிக பிளாப் எண்ணிக்கையுடன் பதிவிறக்கம் செய்ய வேண்டிய தரவின் அளவும் நேரடியாக அதிகரிக்கிறது. + +எத்தேரியம் பரவலாக்கத்தில் சமரசம் செய்து கொள்வதில்லை, மேலும் அலைவரிசை என்பது மிகவும் உணர்திறன் வாய்ந்த கூறுகளில் ஒன்றாகும். கணினி வசதி வாங்கக்கூடிய எவருக்கும் பரவலாகக் கிடைத்தாலும், வளர்ந்த நாடுகளில் உள்ள அதிக நகர்ப்புற நகரங்களில் கூட ([ஜெர்மனி](https://www.speedtest.net/global-index/germany), [பெல்ஜியம்](https://www.speedtest.net/global-index/belgium), [ஆஸ்திரேலியா](https://www.speedtest.net/global-index/australia) அல்லது [அமெரிக்கா](https://www.speedtest.net/global-index/united-states) போன்றவை) உள்ள [பதிவேற்ற அலைவரிசை வரம்புகள் (upload bandwidth limitations)](https://www.speedtest.net/global-index), அலைவரிசைத் தேவைகள் கவனமாகச் சரிசெய்யப்படாவிட்டால், தரவு மையங்களில் (data centers) இருந்து மட்டுமே நோடுகளை இயக்க முடியும் என்ற நிலைக்குக் கட்டுப்படுத்தலாம். + +பிளாப்கள் அதிகரிக்கும் போது நோடு ஆபரேட்டர்களுக்கு அதிக அலைவரிசை மற்றும் வட்டு இடத் (disk space) தேவைகள் ஏற்படுகின்றன. பிளாப்களின் அளவு மற்றும் எண்ணிக்கை இந்தக் கட்டுப்பாடுகளால் வரம்புக்குட்படுத்தப்படுகின்றன. ஒவ்வொரு பிளாபும் 128kb வரையிலான தரவைக் கொண்டு செல்ல முடியும், ஒரு பிளாக்கிற்கு சராசரியாக 6 பிளாப்கள் இருக்கும். பிளாப்களை இன்னும் திறமையான முறையில் பயன்படுத்தும் எதிர்கால வடிவமைப்பிற்கான முதல் படி மட்டுமே இதுவாகும். + +## தரவு கிடைக்கும் தன்மை மாதிரி (Data availability sampling) {#das} + +[தரவு கிடைக்கும் தன்மை (Data availability)](/developers/docs/data-availability/) என்பது செயினைச் சுயாதீனமாகச் சரிபார்க்கத் தேவையான அனைத்துத் தரவும் அனைத்து நெட்வொர்க் பங்கேற்பாளர்களுக்கும் அணுகக்கூடியதாக இருக்கும் என்பதற்கான உத்தரவாதமாகும். தரவு முழுமையாக வெளியிடப்பட்டுள்ளதையும், செயினின் புதிய நிலை அல்லது உள்வரும் பரிவர்த்தனைகளை நம்பகத்தன்மையுடன் சரிபார்க்கப் பயன்படுத்தப்படலாம் என்பதையும் இது உறுதி செய்கிறது. + +எத்தேரியம் பிளாப்கள் L2-களின் பாதுகாப்பை உறுதி செய்யும் வலுவான தரவு கிடைக்கும் தன்மை உத்தரவாதத்தை வழங்குகின்றன. இதைச் செய்ய, எத்தேரியம் நோடுகள் பிளாப்களை முழுமையாகப் பதிவிறக்கம் செய்து சேமிக்க வேண்டும். ஆனால் நெட்வொர்க்கில் பிளாப்களை மிகவும் திறமையாக விநியோகித்து இந்த வரம்பைத் தவிர்க்க முடிந்தால் என்ன செய்வது? + +தரவைச் சேமிப்பதற்கும் அது கிடைப்பதை உறுதி செய்வதற்கும் ஒரு வித்தியாசமான அணுகுமுறை **தரவு கிடைக்கும் தன்மை மாதிரி (data availability sampling - DAS)** ஆகும். எத்தேரியத்தை இயக்கும் ஒவ்வொரு கணினியும் ஒவ்வொரு பிளாப்பையும் முழுமையாகச் சேமிப்பதற்குப் பதிலாக, DAS ஒரு பரவலாக்கப்பட்ட வேலைப் பகிர்வை அறிமுகப்படுத்துகிறது. இது முழு நோடுகளின் நெட்வொர்க்கிலும் சிறிய, நிர்வகிக்கக்கூடிய பணிகளை விநியோகிப்பதன் மூலம் தரவைச் செயலாக்கும் சுமையை உடைக்கிறது. பிளாப்கள் துண்டுகளாகப் பிரிக்கப்படுகின்றன, மேலும் அனைத்து நோடுகளிலும் சீரான சீரற்ற விநியோகத்திற்கான (uniform random distribution) ஒரு பொறிமுறையைப் பயன்படுத்தி ஒவ்வொரு நோடும் சில துண்டுகளை மட்டுமே பதிவிறக்குகிறது. + +இது ஒரு புதிய சிக்கலை அறிமுகப்படுத்துகிறது—தரவின் கிடைக்கும் தன்மை மற்றும் ஒருமைப்பாட்டை (integrity) நிரூபிப்பது. தனிப்பட்ட நோடுகள் சிறிய துண்டுகளை மட்டுமே வைத்திருக்கும் போது, தரவு கிடைக்கிறது மற்றும் அது அனைத்தும் சரியானது என்று நெட்வொர்க் எவ்வாறு உத்தரவாதம் அளிக்க முடியும்? ஒரு தீங்கிழைக்கும் நோடு போலித் தரவை வழங்கலாம் மற்றும் வலுவான தரவு கிடைக்கும் தன்மை உத்தரவாதங்களை எளிதாக உடைக்கலாம்! இங்குதான் கிரிப்டோகிராஃபி (cryptography) உதவ வருகிறது. + +தரவின் ஒருமைப்பாட்டை உறுதி செய்ய, EIP-4844 ஏற்கனவே KZG கமிட்மென்ட்களுடன் (KZG commitments) செயல்படுத்தப்பட்டது. நெட்வொர்க்கில் புதிய பிளாப் சேர்க்கப்படும்போது உருவாக்கப்படும் கிரிப்டோகிராஃபிக் சான்றுகள் இவை. ஒவ்வொரு பிளாக்கிலும் ஒரு சிறிய சான்று சேர்க்கப்பட்டுள்ளது, மேலும் பெறப்பட்ட பிளாப்கள் பிளாக்கின் KZG கமிட்மென்ட்டுடன் பொருந்துகின்றனவா என்பதை நோடுகள் சரிபார்க்கலாம். + +DAS என்பது இதன் மேல் கட்டமைக்கப்பட்ட ஒரு பொறிமுறையாகும், மேலும் தரவு சரியானது மற்றும் கிடைக்கிறது என்பதை உறுதி செய்கிறது. மாதிரி எடுத்தல் (Sampling) என்பது ஒரு நோடு தரவின் ஒரு சிறிய பகுதியை மட்டுமே வினவி, கமிட்மென்ட்டிற்கு எதிராக அதைச் சரிபார்க்கும் ஒரு செயல்முறையாகும். KZG என்பது ஒரு பல்லுறுப்புக்கோவை கமிட்மென்ட் திட்டமாகும் (polynomial commitment scheme), அதாவது பல்லுறுப்புக்கோவை வளைவில் உள்ள எந்தவொரு புள்ளியையும் சரிபார்க்க முடியும். பல்லுறுப்புக்கோவையில் ஓரிரு புள்ளிகளை மட்டுமே சரிபார்ப்பதன் மூலம், மாதிரி எடுக்கும் கிளையன்ட் தரவு கிடைக்கிறது என்பதற்கான வலுவான நிகழ்தகவு உத்தரவாதத்தைப் பெற முடியும். + +## PeerDAS {#peer-das} + +[PeerDAS (EIP-7594)](https://eips.ethereum.org/EIPS/eip-7594) என்பது எத்தேரியத்தில் DAS பொறிமுறையைச் செயல்படுத்தும் ஒரு குறிப்பிட்ட முன்மொழிவாகும், இது தி மெர்ஜ் (The Merge) நிகழ்வுக்குப் பிறகு மிகப்பெரிய மேம்பாட்டைக் குறிக்கிறது. PeerDAS பிளாப் தரவை நீட்டிக்கவும், அதை நெடுவரிசைகளாகப் (columns) பிரிக்கவும் மற்றும் ஒரு துணைக்குழுவை (subset) நோடுகளுக்கு விநியோகிக்கவும் வடிவமைக்கப்பட்டுள்ளது. + +இதை அடைய எத்தேரியம் சில புத்திசாலித்தனமான கணிதத்தைக் கடனாகப் பெறுகிறது: இது பிளாப் தரவுக்கு ரீட்-சாலமன் (Reed-Solomon) பாணி அழித்தல் குறியீட்டை (erasure coding) பயன்படுத்துகிறது. பிளாப் தரவு ஒரு பல்லுறுப்புக்கோவையாகக் குறிக்கப்படுகிறது, அதன் குணகங்கள் (coefficients) தரவை குறியாக்கம் செய்கின்றன, பின்னர் நீட்டிக்கப்பட்ட பிளாப்பை உருவாக்க கூடுதல் புள்ளிகளில் அந்த பல்லுறுப்புக்கோவையை மதிப்பீடு செய்து, மதிப்பீடுகளின் எண்ணிக்கையை இரட்டிப்பாக்குகிறது. இந்தக் கூடுதல் பணி மிகைப்பு (redundancy) அழித்தல் மீட்டெடுப்பை (erasure recovery) செயல்படுத்துகிறது: சில மதிப்பீடுகள் விடுபட்டிருந்தாலும், நீட்டிக்கப்பட்ட துண்டுகள் உட்பட மொத்த தரவுகளில் குறைந்தபட்சம் பாதி கிடைக்கும் வரை அசல் பிளாப்பை மீண்டும் உருவாக்க முடியும். + +![நீட்டிக்கப்பட்ட பல்லுறுப்புக்கோவை](./polynomial.png) + +உண்மையில், இந்தப் பல்லுறுப்புக்கோவை ஆயிரக்கணக்கான குணகங்களைக் கொண்டுள்ளது. KZG கமிட்கள் சில பைட்டுகளின் மதிப்புகளாகும், இது அனைத்து நோடுகளுக்கும் தெரிந்த ஒரு ஹாஷ் (hash) போன்றது. போதுமான தரவுப் புள்ளிகளை வைத்திருக்கும் ஒவ்வொரு நோடும் [பிளாப் தரவின் முழுத் தொகுப்பையும் திறமையாக மீண்டும் உருவாக்க முடியும்](https://arxiv.org/abs/2207.11079). + +> சுவாரஸ்யமான தகவல்: இதே குறியீட்டு நுட்பம் DVD-களால் பயன்படுத்தப்பட்டது. நீங்கள் ஒரு DVD-ஐக் கீறினாலும், பல்லுறுப்புக்கோவையின் விடுபட்ட துண்டுகளைச் சேர்க்கும் ரீட்-சாலமன் குறியீட்டு முறைக்கு நன்றி, பிளேயரால் அதை இன்னும் படிக்க முடிந்தது. + +வரலாற்று ரீதியாக, பிளாக்செயின்களில் உள்ள தரவு, பிளாக்குகள் அல்லது பிளாப்கள் என எதுவாக இருந்தாலும், அனைத்து நோடுகளுக்கும் ஒளிபரப்பப்பட்டது (broadcast). PeerDAS-இன் பிரித்து-மாதிரி-எடுக்கும் (split-and-sample) அணுகுமுறையுடன், எல்லாவற்றையும் அனைவருக்கும் ஒளிபரப்புவது இனி தேவையில்லை. ஃபூசாகாவிற்குப் பிறகு, ஒருமித்த லேயர் (consensus layer) நெட்வொர்க்கிங் கிசுகிசு தலைப்புகள்/சப்நெட்டுகளாக (gossip topics/subnets) ஒழுங்கமைக்கப்படுகிறது: பிளாப் நெடுவரிசைகள் குறிப்பிட்ட சப்நெட்டுகளுக்கு ஒதுக்கப்படுகின்றன, மேலும் ஒவ்வொரு நோடும் முன்னரே தீர்மானிக்கப்பட்ட துணைக்குழுக்களுக்குச் சந்தா செலுத்துகிறது மற்றும் அந்தத் துண்டுகளை மட்டுமே பாதுகாக்கிறது. + +PeerDAS மூலம், நீட்டிக்கப்பட்ட பிளாப் தரவு நெடுவரிசைகள் எனப்படும் 128 துண்டுகளாகப் பிரிக்கப்படுகிறது. அவை சந்தா செலுத்தும் குறிப்பிட்ட சப்நெட்டுகளில் பிரத்யேக கிசுகிசு நெறிமுறை (gossip protocol) வழியாக இந்த நோடுகளுக்குத் தரவு விநியோகிக்கப்படுகிறது. நெட்வொர்க்கில் உள்ள ஒவ்வொரு வழக்கமான நோடும் தோராயமாகத் தேர்ந்தெடுக்கப்பட்ட குறைந்தது 8 நெடுவரிசை சப்நெட்டுகளில் பங்கேற்கிறது. 128 சப்நெட்டுகளில் 8-லிருந்து மட்டுமே தரவைப் பெறுவது என்பது, இந்த இயல்புநிலை நோடு அனைத்துத் தரவிலும் 1/16-ஐ மட்டுமே பெறுகிறது என்பதாகும், ஆனால் தரவு நீட்டிக்கப்பட்டதால் இது அசல் தரவின் 1/8 ஆகும். + +இது தற்போதைய "அனைவரும் எல்லாவற்றையும் பதிவிறக்குகிறார்கள்" திட்டத்தின் 8 மடங்கு புதிய தத்துவார்த்த அளவிடுதல் வரம்பை அனுமதிக்கிறது. பிளாப் நெடுவரிசைகளுக்குச் சேவை செய்யும் வெவ்வேறு சீரற்ற சப்நெட்டுகளுக்கு நோடுகள் சந்தா செலுத்துவதால், அவை சீராக விநியோகிக்கப்படுவதற்கான நிகழ்தகவு மிக அதிகம், எனவே ஒவ்வொரு தரவுத் துண்டும் நெட்வொர்க்கில் எங்காவது இருக்கும். வேலிடேட்டர்களை (validators) இயக்கும் நோடுகள், அவை இயக்கும் ஒவ்வொரு வேலிடேட்டருடனும் அதிக சப்நெட்டுகளுக்குச் சந்தா செலுத்த வேண்டும். + +> ஒவ்வொரு நோடும் தனித்துவமான தோராயமாக உருவாக்கப்பட்ட ID-ஐக் கொண்டுள்ளது, இது பொதுவாக இணைப்புகளுக்கான அதன் பொது அடையாளமாகச் செயல்படுகிறது. PeerDAS-இல், இந்த எண் அது சந்தா செலுத்த வேண்டிய சீரற்ற தொகுப்பு சப்நெட்டுகளைத் தீர்மானிக்கப் பயன்படுத்தப்படுகிறது, இதன் விளைவாக அனைத்து பிளாப் தரவுகளின் சீரான சீரற்ற விநியோகம் ஏற்படுகிறது. + +ஒரு நோடு அசல் தரவை வெற்றிகரமாக மீண்டும் உருவாக்கியவுடன், அது மீட்டெடுக்கப்பட்ட நெடுவரிசைகளை மீண்டும் நெட்வொர்க்கில் விநியோகிக்கிறது, ஏதேனும் தரவு இடைவெளிகளைச் சுறுசுறுப்பாகக் குணப்படுத்துகிறது மற்றும் ஒட்டுமொத்த அமைப்பின் பின்னடைவுத் திறனை (resilience) மேம்படுத்துகிறது. ≥4096 ETH ஒருங்கிணைந்த இருப்பு கொண்ட வேலிடேட்டர்களுடன் இணைக்கப்பட்ட நோடுகள் ஒரு சூப்பர்நோடாக (supernode) இருக்க வேண்டும், எனவே அனைத்து தரவு நெடுவரிசை சப்நெட்டுகளுக்கும் சந்தா செலுத்த வேண்டும் மற்றும் அனைத்து நெடுவரிசைகளையும் பாதுகாக்க வேண்டும். இந்த சூப்பர்நோடுகள் தரவு இடைவெளிகளைத் தொடர்ந்து குணப்படுத்தும். நெறிமுறையின் நிகழ்தகவு சுய-குணப்படுத்தும் தன்மை, தரவின் சில பகுதிகளை மட்டுமே வைத்திருக்கும் ஹோம் ஆபரேட்டர்களைக் (home operators) கட்டுப்படுத்தாமல் வலுவான கிடைக்கும் தன்மை உத்தரவாதங்களை அனுமதிக்கிறது. + +![சப்நெட்டுகள் வழியாக விநியோகிக்கப்படும் நெடுவரிசைகளுக்குச் சந்தா செலுத்தும் நோடுகள்](./subnets.png) + +மேலே விவரிக்கப்பட்ட மாதிரி பொறிமுறைக்கு நன்றி, பிளாப் தரவின் சிறிய துணைக்குழுவை மட்டுமே வைத்திருக்கும் எந்தவொரு நோடாலும் தரவு கிடைக்கும் தன்மையை உறுதிப்படுத்த முடியும். இந்தக் கிடைக்கும் தன்மை செயல்படுத்தப்படுகிறது: வேலிடேட்டர்கள் புதிய ஃபோர்க்-சாய்ஸ் (fork-choice) விதிகளைப் பின்பற்ற வேண்டும், அதாவது தரவு கிடைப்பதைச் சரிபார்த்த பின்னரே அவர்கள் பிளாக்குகளை ஏற்றுக்கொண்டு வாக்களிப்பார்கள். + +பயனர்கள் மீதான (குறிப்பாக L2 பயனர்கள்) நேரடித் தாக்கம் குறைந்த கட்டணங்கள் ஆகும். ரோலப் தரவுக்கு 8 மடங்கு அதிக இடவசதியுடன், அவர்களின் செயினில் பயனர் செயல்பாடுகள் காலப்போக்கில் இன்னும் மலிவாகின்றன. ஆனால் ஃபூசாகாவிற்குப் பிந்தைய குறைந்த கட்டணங்கள் நேரம் எடுக்கும் மற்றும் BPO-களைப் பொறுத்தது. + +## பிளாப்-பாராமிட்டர்-ஒன்லி (Blob-Parameter-Only - BPOs) {#bpo} + +நெட்வொர்க் கோட்பாட்டளவில் 8 மடங்கு அதிக பிளாப்களைச் செயலாக்க முடியும், ஆனால் பிளாப் அதிகரிப்பு என்பது முறையாகச் சோதிக்கப்பட்டுப் படிப்படியாகப் பாதுகாப்பாகச் செயல்படுத்தப்பட வேண்டிய ஒரு மாற்றமாகும். மெயின்நெட்டில் அம்சங்களைப் பயன்படுத்துவதற்கு டெஸ்ட்நெட்டுகள் (Testnets) போதுமான நம்பிக்கையை அளிக்கின்றன, ஆனால் கணிசமாக அதிக எண்ணிக்கையிலான பிளாப்களை இயக்குவதற்கு முன்பு p2p நெட்வொர்க்கின் நிலைத்தன்மையை நாம் உறுதி செய்ய வேண்டும். + +நெட்வொர்க்கை அதிக சுமைக்கு உள்ளாக்காமல் ஒரு பிளாக்கிற்கான இலக்கு பிளாப்களின் எண்ணிக்கையைப் படிப்படியாக உயர்த்த, ஃபூசாகா **[பிளாப்-பாராமிட்டர்-ஒன்லி (Blob-Parameter-Only - BPO)](https://ethereum-magicians.org/t/blob-parameter-only-bpo-forks/22623)** ஃபோர்க்குகளை (forks) அறிமுகப்படுத்துகிறது. பரந்த சுற்றுச்சூழல் ஒருங்கிணைப்பு, ஒப்பந்தம் மற்றும் மென்பொருள் புதுப்பிப்புகள் தேவைப்படும் வழக்கமான ஃபோர்க்குகளைப் போலல்லாமல், [BPO-கள் (EIP-7892)](https://eips.ethereum.org/EIPS/eip-7892) என்பவை குறுக்கீடு இல்லாமல் காலப்போக்கில் அதிகபட்ச பிளாப்களின் எண்ணிக்கையை அதிகரிக்கும் முன்-திட்டமிடப்பட்ட மேம்பாடுகளாகும். + +இதன் பொருள், ஃபூசாகா செயல்படுத்தப்பட்டு PeerDAS நேரலைக்கு வந்த உடனேயே, பிளாப்களின் எண்ணிக்கை மாறாமல் இருக்கும். பொறிமுறை எதிர்பார்த்தபடி செயல்படுகிறதா மற்றும் நெட்வொர்க்கை இயக்கும் நோடுகளில் பாதகமான விளைவுகளை ஏற்படுத்தவில்லையா என்பதை டெவலப்பர்கள் கண்காணிக்கும் அதே வேளையில், பிளாப்களின் எண்ணிக்கை அதிகபட்சமாக 48-ஐ எட்டும் வரை ஒவ்வொரு சில வாரங்களுக்கும் இரட்டிப்பாகத் தொடங்கும். + +## எதிர்கால திசைகள் (Future directions) {#future-directions} + +PeerDAS என்பது [FullDAS-இன் சிறந்த அளவிடுதல் பார்வை](https://ethresear.ch/t/fulldas-towards-massive-scalability-with-32mb-blocks-and-beyond/19529) அல்லது டாங்க்ஷார்டிங்கை (Danksharding) நோக்கிய ஒரு படி மட்டுமே. PeerDAS ஒவ்வொரு பிளாப்பிற்கும் தனித்தனியாக 1D அழித்தல் குறியீட்டைப் பயன்படுத்தும் அதே வேளையில், முழு டாங்க்ஷார்டிங் பிளாப் தரவின் முழு மேட்ரிக்ஸிலும் (matrix) மிகவும் முழுமையான 2D அழித்தல் குறியீட்டுத் திட்டத்தைப் பயன்படுத்தும். இரண்டு பரிமாணங்களில் தரவை நீட்டிப்பது இன்னும் வலுவான பணி மிகைப்பு பண்புகளையும் மிகவும் திறமையான மறுசீரமைப்பு மற்றும் சரிபார்ப்பையும் உருவாக்குகிறது. FullDAS-ஐ உணர்ந்து கொள்வதற்கு, கூடுதல் ஆராய்ச்சியோடு கணிசமான நெட்வொர்க் மற்றும் நெறிமுறை மேம்படுத்தல்கள் தேவைப்படும். + +## மேலும் படிக்க {#further-reading} + +- [PeerDAS: ஃபிரான்செஸ்கோ டி'அமாடோவின் பியர் டேட்டா அவைலபிலிட்டி சாம்ப்ளிங் (Peer Data Availability sampling by Francesco D'Amato)](https://www.youtube.com/watch?v=WOdpO1tH_Us) +- [எத்தேரியத்தின் PeerDAS பற்றிய ஆவணம் (A Documentation of Ethereum’s PeerDAS)](https://eprint.iacr.org/2024/1362.pdf) +- [AGM இல்லாமல் PeerDAS-இன் பாதுகாப்பை நிரூபித்தல் (Proving the Security of PeerDAS without the AGM)](https://eprint.iacr.org/2025/1683) +- [PeerDAS, அதன் தாக்கம் மற்றும் ஃபூசாகாவைச் சோதிப்பது குறித்து விட்டாலிக் (Vitalik on PeerDAS, its impact, and testing Fusaka)](https://x.com/VitalikButerin/status/1970983281090085200) \ No newline at end of file diff --git a/public/content/translations/ta/roadmap/glamsterdam/index.md b/public/content/translations/ta/roadmap/glamsterdam/index.md index 4c418cc5649..e0dab68ef0d 100644 --- a/public/content/translations/ta/roadmap/glamsterdam/index.md +++ b/public/content/translations/ta/roadmap/glamsterdam/index.md @@ -1,295 +1,298 @@ --- -title: "கிளாம்ஸ்டர்டாம்" -description: "கிளாம்ஸ்டர்டேம் நெறிமுறை மேம்படுத்தலைப் பற்றி அறிக." +title: Glamsterdam +description: "Glamsterdam நெறிமுறை மேம்படுத்தல் பற்றி அறிக" lang: ta --- -# கிளாம்ஸ்டர்டாம் {#glamsterdam} + +# Glamsterdam {#glamsterdam} -கிளாம்ஸ்டெர்டாம் என்பது 2026 ஆம் ஆண்டின் முதல் பாதியில் திட்டமிடப்பட்ட ஒரு வரவிருக்கும் எத்தேரியம் மேம்படுத்தல் ஆகும் +Glamsterdam என்பது 2026 ஆம் ஆண்டின் முதல் பாதியில் (H1 2026) திட்டமிடப்பட்டுள்ள வரவிருக்கும் Ethereum மேம்படுத்தலாகும் -கிளாம்ஸ்டர்டேம் மேம்படுத்தல் என்பது Ethereum இன் நீண்டகால மேம்பாட்டு இலக்குகளில் ஒரு படி மட்டுமே. [நெறிமுறை சாலை வரைபடம்](/roadmap/) மற்றும் [முந்தைய மேம்படுத்தல்கள்](/ethereum-forks/) பற்றி மேலும் அறிக. +Glamsterdam மேம்படுத்தல் என்பது Ethereum இன் நீண்டகால மேம்பாட்டு இலக்குகளில் ஒரு படி மட்டுமே. [நெறிமுறை வழிகாட்டி (protocol roadmap)](/roadmap/) மற்றும் [முந்தைய மேம்படுத்தல்கள்](/ethereum-forks/) பற்றி மேலும் அறிக. -[எத்தேரியத்தின்](/) வரவிருக்கும் கிளாமாஸ்டர்டேம் மேம்படுத்தல் அடுத்த தலைமுறை அளவிடுதலுக்கான பாதையை அழிக்க வடிவமைக்கப்பட்டுள்ளது. கிளாமாஸ்டர்டேம் என்பது "ஆம்ஸ்டர்டேம்" (செயல்படுத்தல் அடுக்கு மேம்படுத்தல், முந்தைய டெவ்கனெக்ட் இருப்பிடத்தின் பெயரிடப்பட்டது) மற்றும் "குளோஸ்" (ஒருமித்த அடுக்கு மேம்படுத்தல், ஒரு நட்சத்திரத்தின் பெயரிடப்பட்டது) ஆகியவற்றின் கலவையிலிருந்து பெயரிடப்பட்டது. +[Ethereum இன்](/) வரவிருக்கும் Glamsterdam மேம்படுத்தல், அடுத்த தலைமுறை அளவிடுதலுக்கான (scaling) பாதையைத் தெளிவுபடுத்தும் வகையில் வடிவமைக்கப்பட்டுள்ளது. "Amsterdam" (செயலாக்க அடுக்கு மேம்படுத்தல், முந்தைய Devconnect இருப்பிடத்தின் பெயரால் அழைக்கப்படுகிறது) மற்றும் "Gloas" (ஒருங்கிணைவு அடுக்கு மேம்படுத்தல், ஒரு நட்சத்திரத்தின் பெயரால் அழைக்கப்படுகிறது) ஆகியவற்றின் கலவையிலிருந்து Glamsterdam எனப் பெயரிடப்பட்டது. -[ஃபுசகா](/roadmap/fusaka/) மேம்படுத்தலில் ஏற்பட்டுள்ள முன்னேற்றத்தைத் தொடர்ந்து, நெட்வொர்க் பரிவர்த்தனைகளை எவ்வாறு செயலாக்குகிறது மற்றும் அதன் வளர்ந்து வரும் தரவுத்தளத்தை எவ்வாறு நிர்வகிக்கிறது என்பதை மறுசீரமைப்பதன் மூலம் L1 ஐ அளவிடுவதில் கிளாம்ஸ்டெர்டாம் கவனம் செலுத்துகிறது, இது Ethereum தொகுதிகளை எவ்வாறு உருவாக்குகிறது மற்றும் சரிபார்க்கிறது என்பதை அடிப்படையில் புதுப்பிக்கிறது. +[Fusaka](/roadmap/fusaka/) மேம்படுத்தலில் ஏற்பட்ட முன்னேற்றத்தைத் தொடர்ந்து, நெட்வொர்க் பரிவர்த்தனைகளை எவ்வாறு செயலாக்குகிறது மற்றும் அதன் வளர்ந்து வரும் தரவுத்தளத்தை எவ்வாறு நிர்வகிக்கிறது என்பதை மறுசீரமைப்பதன் மூலம் L1 ஐ அளவிடுவதில் Glamsterdam கவனம் செலுத்துகிறது, இது அடிப்படையில் Ethereum தொகுதிகளை (blocks) எவ்வாறு உருவாக்குகிறது மற்றும் சரிபார்க்கிறது என்பதைப் புதுப்பிக்கிறது. -ஃபூசகா அடிப்படை சுத்திகரிப்புகளில் கவனம் செலுத்தியபோது, கிளாம்ஸ்டெர்டாம் வெவ்வேறு நெட்வொர்க் பங்கேற்பாளர்களிடையே கடமைகளைப் பிரிப்பதன் மூலம் "ஸ்கேல் எல்1" மற்றும் "ஸ்கேல் ப்ளாப்ஸ்" நோக்கங்களை மேம்படுத்துகிறது, மேலும் அதிக செயல்திறன் கொண்ட இணைச் செயலாக்கத்திற்கு [நிலையைத்](/glossary/#state) தயார்படுத்த தரவைக் கையாள மிகவும் திறமையான வழிகளை அறிமுகப்படுத்துகிறது. +Fusaka அடிப்படைச் சுத்திகரிப்புகளில் கவனம் செலுத்திய அதே வேளையில், Glamsterdam பல்வேறு நெட்வொர்க் பங்கேற்பாளர்களுக்கிடையேயான கடமைகளைப் பிரிப்பதை உறுதிசெய்வதன் மூலமும், அதிக-செயல்திறன் கொண்ட இணையான செயலாக்கத்திற்கு (parallelization) [நிலையை (state)](/glossary/#state) தயார் செய்ய தரவைக் கையாளுவதற்கான திறமையான வழிகளை அறிமுகப்படுத்துவதன் மூலமும் "Scale L1" மற்றும் "Scale Blobs" நோக்கங்களை முன்னெடுத்துச் செல்கிறது. -இந்த மேம்பாடுகள், Ethereum அதிக செயல்பாடுகளைக் கையாளும் போது வேகமாகவும், மலிவு விலையிலும், பரவலாக்கப்பட்டதாகவும் இருப்பதை உறுதி செய்கின்றன, அதே நேரத்தில் வீட்டில் [நோடுகளை](/glossary/#node) இயக்கும் நபர்களுக்கு வன்பொருள் தேவைகளை நிர்வகிக்கக்கூடியதாக வைத்திருக்கின்றன. +இந்த மேம்பாடுகள், Ethereum அதிக செயல்பாடுகளைக் கையாளும் போது வேகமானதாகவும், மலிவானதாகவும், பரவலாக்கப்பட்டதாகவும் இருப்பதை உறுதிசெய்கிறது, அதே நேரத்தில் வீட்டில் [முனைகளை (nodes)](/glossary/#node) இயக்குபவர்களுக்கு வன்பொருள் தேவைகளை நிர்வகிக்கக்கூடியதாக வைத்திருக்கிறது. -## கிளாம்ஸ்டர்டாமிற்கான மேம்பாடுகள் பரிசீலிக்கப்பட்டன {#improvements-in-glamsterdam} +## Glamsterdam-க்காகப் பரிசீலிக்கப்படும் மேம்பாடுகள் {#improvements-in-glamsterdam} -குறிப்பு: இந்த கட்டுரை தற்போது கிளாமாஸ்டர்டாமில் சேர்க்க பரிசீலிக்கப்படும் EIP-களின் தொகுப்பை முன்னிலைப்படுத்துகிறது. சமீபத்திய நிலை புதுப்பிப்புகளுக்கு, [ஃபோர்காஸ்டில் கிளாமாஸ்டரம் மேம்பாட்டைப்](https://forkcast.org/upgrade/glamsterdam) பார்க்கவும். +குறிப்பு: இந்தக் கட்டுரை தற்போது Glamsterdam-இல் சேர்ப்பதற்காகப் பரிசீலிக்கப்படும் EIP-களின் தேர்வை முன்னிலைப்படுத்துகிறது. சமீபத்திய நிலைப்பிடிப்புகளுக்கு, [Forkcast-இல் Glamsterdam மேம்படுத்தலைப்](https://forkcast.org/upgrade/glamsterdam) பார்க்கவும். -கிளாம்ஸ்டெர்டாமிற்காக பரிசீலனையில் உள்ள ஒரு EIP ஐ நீங்கள் சேர்க்க விரும்பினால், ஆனால் அது இன்னும் இந்தப் பக்கத்தில் சேர்க்கப்படவில்லை என்றால், [ethereum.org க்கு எவ்வாறு பங்களிப்பது என்பதை இங்கே அறிக](/contributing/). +Glamsterdam-க்காகப் பரிசீலிக்கப்படும், ஆனால் இந்தப் பக்கத்தில் இன்னும் சேர்க்கப்படாத ஒரு EIP-ஐ நீங்கள் சேர்க்க விரும்பினால், [ethereum.org-க்கு எவ்வாறு பங்களிப்பது என்பதை இங்கே தெரிந்துகொள்ளுங்கள்](/contributing/). -கிளாம்ஸ்டர்டாம் மேம்படுத்தல் மூன்று முக்கிய இலக்குகளை மையமாகக் கொண்டுள்ளது: +Glamsterdam மேம்படுத்தல் மூன்று முக்கிய இலக்குகளை மையமாகக் கொண்டுள்ளது: -- செயலாக்கத்தை விரைவுபடுத்துதல் (இணைச் செயலாக்கம்): நெட்வொர்க் தரவு சார்புகளை எவ்வாறு பதிவு செய்கிறது என்பதை மறுசீரமைத்தல், இதனால் அது மெதுவான, ஒவ்வொன்றாக வரிசையாக இல்லாமல் ஒரே நேரத்தில் பல பரிவர்த்தனைகளை பாதுகாப்பாகச் செயலாக்க முடியும். -- திறனை விரிவுபடுத்துதல்: தொகுதிகளை உருவாக்குதல் மற்றும் சரிபார்த்தல் ஆகியவற்றின் கடினமான பணிகளைப் பிரிப்பதன் மூலம், நெட்வொர்க் மெதுவாகாமல் அதிக அளவிலான தரவைப் பரப்புவதற்கு அதிக நேரம் கிடைக்கும். -- தரவுத்தள வீக்கத்தைத் தடுப்பது (நிலைத்தன்மை): புதிய தரவைச் சேமிப்பதற்கான நீண்டகால வன்பொருள் செலவைத் துல்லியமாகப் பிரதிபலிக்கும் வகையில் நெட்வொர்க் கட்டணங்களைச் சரிசெய்தல், வன்பொருள் செயல்திறன் குறைவதைத் தடுக்கும் அதே வேளையில் எதிர்கால எரிவாயு வரம்பு அதிகரிப்புகளைத் தடுப்பதை நீக்குதல். +- செயலாக்கத்தை வேகப்படுத்துதல் (இணையான செயலாக்கம் - parallelization): நெட்வொர்க் தரவுச் சார்புகளை எவ்வாறு பதிவு செய்கிறது என்பதை மறுசீரமைத்தல், இதன் மூலம் மெதுவான, ஒன்றன்பின் ஒன்றான வரிசைக்கு பதிலாக ஒரே நேரத்தில் பல பரிவர்த்தனைகளைப் பாதுகாப்பாகச் செயலாக்க முடியும். +- திறனை விரிவுபடுத்துதல்: தொகுதிகளை உருவாக்குதல் மற்றும் சரிபார்த்தல் போன்ற கடினமான பணிகளைப் பிரித்தல், நெட்வொர்க் வேகம் குறையாமல் அதிக அளவிலான தரவைப் பரப்புவதற்கு அதிக நேரத்தை வழங்குதல். +- தரவுத்தள வீக்கத்தைத் தடுத்தல் (நிலைத்தன்மை): புதிய தரவைச் சேமிப்பதற்கான நீண்டகால வன்பொருள் செலவைத் துல்லியமாகப் பிரதிபலிக்கும் வகையில் நெட்வொர்க் கட்டணங்களைச் சரிசெய்தல், வன்பொருள் செயல்திறன் குறைவதைத் தடுக்கும் அதே வேளையில் எதிர்கால எரிவாயு (gas) வரம்பு அதிகரிப்புகளைத் தடைநீக்குதல். -சுருக்கமாக, நெட்வொர்க்கின் திறன் அதிகரிக்கும் போது, அது நிலையானதாகவும், செயல்திறன் உயர்வாகவும் இருப்பதை உறுதிசெய்ய, Glamsterdam கட்டமைப்பு மாற்றங்களை அறிமுகப்படுத்தும். +சுருக்கமாக, நெட்வொர்க் திறனை அதிகரிக்கும் போது, அது நிலையானதாக இருப்பதையும் செயல்திறன் அதிகமாக இருப்பதையும் உறுதிசெய்ய Glamsterdam கட்டமைப்பு மாற்றங்களை அறிமுகப்படுத்தும். -## அளவு L1 மற்றும் இணை செயலாக்கம் {#scale-l1} +## L1 அளவிடுதல் & இணையான செயலாக்கம் {#scale-l1} -அர்த்தமுள்ள L1 அளவிடுதல் என்பது நெறிமுறைக்கு அப்பாற்பட்ட நம்பிக்கை அனுமானங்கள் மற்றும் தொடர் செயலாக்கக் கட்டுப்பாடுகளிலிருந்து விலகிச் செல்வதைக் கோருகிறது. சில தொகுதி-கட்டுமானப் பணிகளைப் பிரிப்பதன் மூலமும், நெட்வொர்க் இணை செயலாக்கத்திற்குத் தயாராக அனுமதிக்கும் புதிய தரவு கட்டமைப்புகளை அறிமுகப்படுத்துவதன் மூலமும் கிளாம்ஸ்டர்டேம் இதை நிவர்த்தி செய்கிறது. +அர்த்தமுள்ள L1 அளவிடுதலுக்கு, நெறிமுறைக்கு வெளியேயான (off-protocol) நம்பிக்கை அனுமானங்கள் மற்றும் தொடர் செயலாக்கக் கட்டுப்பாடுகளிலிருந்து விலகிச் செல்ல வேண்டும். சில தொகுதி-உருவாக்கும் கடமைகளைப் பிரிப்பதை உறுதிசெய்வதன் மூலமும், இணையான செயலாக்கத்திற்கு நெட்வொர்க்கைத் தயார் செய்ய அனுமதிக்கும் புதிய தரவுக் கட்டமைப்புகளை அறிமுகப்படுத்துவதன் மூலமும் Glamsterdam இதற்குத் தீர்வு காண்கிறது. -### தலைப்பு നിർமொழி: உறுதிசெய்யப்பட்ட முன்மொழிபவர்-கட்டமைப்பாளர் பிரிப்பு (ePBS) {#epbs} +### முக்கிய முன்மொழிவு: உறுதிசெய்யப்பட்ட முன்மொழிபவர்-உருவாக்குபவர் பிரிப்பு (Enshrined Proposer-Builder Separation - ePBS) {#epbs} -- நெறிமுறைக்கு அப்பாற்பட்ட நம்பிக்கை அனுமானங்களையும் மூன்றாம் தரப்பு ரிலேக்களின் மீதான சார்பையும் நீக்குகிறது -- நீட்டிக்கப்பட்ட பரவல் சாளரங்கள் மூலம் மிகப் பெரிய பேலோடுகளை அனுமதிப்பதன் மூலம் L1 அளவிடுதலை செயல்படுத்துகிறது -- நெறிமுறையில் நேரடியாக ட்ரஸ்ட்லெஸ் கட்டமைப்பாளர் கட்டணங்களை அறிமுகப்படுத்துகிறது +- நெறிமுறைக்கு வெளியேயான நம்பிக்கை அனுமானங்கள் மற்றும் மூன்றாம் தரப்பு ரிலேக்கள் (relays) மீதான சார்பை நீக்குகிறது +- நீட்டிக்கப்பட்ட பரப்புதல் சாளரங்கள் (propagation windows) மூலம் மிகப் பெரிய பேலோடுகளை (payloads) அனுமதிப்பதன் மூலம் L1 அளவிடுதலை ஆதரிக்கிறது +- நம்பிக்கையற்ற (trustless) உருவாக்குபவர் கட்டணங்களை நேரடியாக நெறிமுறையில் அறிமுகப்படுத்துகிறது -தற்போது, தொகுதிகளை முன்மொழிந்து உருவாக்குவதற்கான செயல்முறையானது, தொகுதி முன்மொழிபவர்களுக்கும் தொகுதி உருவாக்குபவர்களுக்கும் இடையே ஒரு கைமாற்றத்தை உள்ளடக்கியது. முன்மொழிபவர்களுக்கும் உருவாக்குபவர்களுக்கும் இடையிலான உறவு, முக்கிய Ethereum நெறிமுறையின் ஒரு பகுதியாக இல்லை, எனவே இது நம்பகமான மூன்றாம் தரப்பு மிடில்வேர், மென்பொருள் (ரிலேக்கள்) மற்றும் நிறுவனங்களுக்கு இடையே நெறிமுறைக்கு அப்பாற்பட்ட நம்பிக்கையை சார்ந்துள்ளது. +தற்போது, தொகுதிகளை முன்மொழிதல் மற்றும் உருவாக்கும் செயல்முறையானது தொகுதி முன்மொழிபவர்களுக்கும் (block proposers) தொகுதி உருவாக்குபவர்களுக்கும் (block builders) இடையிலான ஒரு பரிமாற்றத்தை உள்ளடக்கியது. முன்மொழிபவர்களுக்கும் உருவாக்குபவர்களுக்கும் இடையிலான உறவு முக்கிய Ethereum நெறிமுறையின் ஒரு பகுதியாக இல்லை, எனவே இது நம்பகமான மூன்றாம் தரப்பு மிடில்வேர், மென்பொருள் (ரிலேக்கள்) மற்றும் நிறுவனங்களுக்கிடையேயான நெறிமுறைக்கு வெளியேயான நம்பிக்கையைச் சார்ந்துள்ளது. -முன்மொழிபவர்களுக்கும் உருவாக்குபவர்களுக்கும் இடையிலான நெறிமுறைக்கு அப்பாற்பட்ட உறவு, தொகுதி சரிபார்ப்பின் போது ஒரு 'சூடான பாதையை' உருவாக்குகிறது, இது [வேலிடேட்டர்கள்](/glossary/#validator) 2 வினாடிகள் கொண்ட குறுகிய காலத்திற்குள் பரிவர்த்தனை ஒளிபரப்பு மற்றும் செயல்படுத்தலை விரைவாகச் செய்ய கட்டாயப்படுத்துகிறது, இதனால் நெட்வொர்க் கையாளக்கூடிய தரவின் அளவைக் கட்டுப்படுத்துகிறது. +முன்மொழிபவர்களுக்கும் உருவாக்குபவர்களுக்கும் இடையிலான நெறிமுறைக்கு வெளியேயான உறவு, தொகுதி சரிபார்ப்பின் போது ஒரு "hot path"-ஐ உருவாக்குகிறது, இது [சரிபார்ப்பவர்களை (validators)](/glossary/#validator) 2-வினாடி குறுகிய சாளரத்திற்குள் பரிவர்த்தனை ஒளிபரப்பு மற்றும் செயலாக்கத்தை விரைந்து முடிக்க கட்டாயப்படுத்துகிறது, இது நெட்வொர்க் எவ்வளவு தரவைக் கையாள முடியும் என்பதைக் கட்டுப்படுத்துகிறது. -**உள்வாங்கப்பட்ட முன்மொழிபவர்-கட்டமைப்பாளர் பிரிப்பு (ePBS, அல்லது EIP-7732)** முன்மொழிபவரின் (ஒருமித்த தொகுதியைத் தேர்ந்தெடுப்பவர்) வேலையை கட்டமைப்பாளரிடமிருந்து (செயல்படுத்தல் பேலோடை ஒன்றிணைப்பவர்) முறையாகப் பிரிக்கிறது, இந்த கைமாற்றத்தை நேரடியாக நெறிமுறையில் உள்வாங்குகிறது. +**உறுதிசெய்யப்பட்ட முன்மொழிபவர்-உருவாக்குபவர் பிரிப்பு (ePBS, அல்லது EIP-7732)** முன்மொழிபவரின் (ஒருங்கிணைவுத் தொகுதியைத் தேர்ந்தெடுப்பவர்) வேலையை உருவாக்குபவரிடமிருந்து (செயலாக்க பேலோடை ஒருங்கிணைப்பவர்) முறையாகப் பிரிக்கிறது, இந்தப் பரிமாற்றத்தை நேரடியாக நெறிமுறையில் உறுதிசெய்கிறது. -தொகுதி பேலோடு மற்றும் கட்டணத்திற்கான ட்ரஸ்ட்லெஸ் பரிமாற்றத்தை நேரடியாக நெறிமுறையில் உருவாக்குவது மூன்றாம் தரப்பு மிடில்வேரின் (MEV-Boost போன்றவை) தேவையை நீக்குகிறது. இருப்பினும், கட்டமைப்பாளர்களும் முன்மொழிபவர்களும் இன்னும் மூல நெறிமுறையின் பகுதியாக இல்லாத சிக்கலான அம்சங்களுக்கு நெறிமுறைக்கு அப்பாற்பட்ட ரிலேக்கள் அல்லது மிடில்வேரைப் பயன்படுத்தத் தேர்வு செய்யலாம். +கட்டணத்திற்கான தொகுதி பேலோடின் நம்பிக்கையற்ற பரிமாற்றத்தை நேரடியாக நெறிமுறையில் உருவாக்குவது மூன்றாம் தரப்பு மிடில்வேரின் (MEV-Boost போன்ற) தேவையைக் நீக்குகிறது. இருப்பினும், முக்கிய நெறிமுறையின் ஒரு பகுதியாக இன்னும் இல்லாத சிக்கலான அம்சங்களுக்கு உருவாக்குபவர்களும் முன்மொழிபவர்களும் நெறிமுறைக்கு வெளியேயான ரிலேக்கள் அல்லது மிடில்வேரைப் பயன்படுத்தத் தேர்வுசெய்யலாம். -'சூடான பாதை' தடையை தீர்க்க, ePBS பேலோட் காலக்கெடு குழுவையும் (PTC) இரட்டை காலக்கெடு தர்க்கத்தையும் அறிமுகப்படுத்துகிறது, இது வேலிடேட்டர்கள் ஒருமித்த தொகுதி மற்றும் செயல்படுத்தல் பேலோட் காலக்கெடுவை தனித்தனியாக உறுதிப்படுத்த அனுமதிக்கிறது, இதனால் செயல்திறன் அதிகபட்சமாக இருக்கும். +"hot path" இடையூறைத் தீர்க்க, ePBS ஆனது பேலோடு நேரக் குழு (Payload Timeliness Committee - PTC) மற்றும் இரட்டை-கெடு தர்க்கத்தையும் (dual-deadline logic) அறிமுகப்படுத்துகிறது, இது சரிபார்ப்பவர்கள் ஒருங்கிணைவுத் தொகுதி மற்றும் செயலாக்க பேலோடு நேரத்தை தனித்தனியாகச் சான்றளிக்க அனுமதிப்பதன் மூலம் செயல்திறனை (throughput) அதிகப்படுத்துகிறது. -நெறிமுறை மட்டத்தில் முன்மொழிபவர் மற்றும் உருவாக்குபவர் பாத்திரங்களைப் பிரிப்பது, பரவல் சாளரத்தை (அல்லது நெட்வொர்க் முழுவதும் தரவைப் பரப்புவதற்கு கிடைக்கும் நேரத்தை) 2 வினாடிகளில் இருந்து சுமார் 9 வினாடிகள் வரை விரிவுபடுத்துகிறது. +நெறிமுறை மட்டத்தில் முன்மொழிபவர் மற்றும் உருவாக்குபவர் பாத்திரங்களைப் பிரிப்பது பரப்புதல் சாளரத்தை (அல்லது நெட்வொர்க் முழுவதும் தரவைப் பரப்புவதற்குக் கிடைக்கும் நேரத்தை) 2 வினாடிகளிலிருந்து சுமார் 9 வினாடிகளாக விரிவுபடுத்துகிறது. -நெறிமுறைக்கு அப்பாற்பட்ட மிடில்வேர் மற்றும் ரிலேக்களை நெறிமுறை உள் இயங்குமுறைகளால் மாற்றுவதன் மூலம், ePBS நம்பிக்கை சார்புகளைக் குறைக்கிறது மற்றும் நெட்வொர்க்கை அழுத்தாமல் Ethereum அதிக அளவிலான தரவை ([லேயர் 2](/glossary/#layer-2) களுக்கான கூடுதல் பிளாப்கள் போன்றவை) பாதுகாப்பாகச் செயலாக்க அனுமதிக்கிறது. +நெறிமுறைக்கு வெளியேயான மிடில்வேர் மற்றும் ரிலேக்களை நெறிமுறைக்கு உள்ளான இயக்கவியலுடன் மாற்றுவதன் மூலம், ePBS நம்பிக்கைச் சார்புகளைக் குறைக்கிறது மற்றும் நெட்வொர்க்கை அழுத்தத்திற்கு உள்ளாக்காமல் மிகப் பெரிய அளவிலான தரவைப் பாதுகாப்பாகச் செயலாக்க ([அடுக்கு 2-களுக்கான (layer 2s)](/glossary/#layer-2) அதிக ப்ளாப்கள் (blobs) போல) Ethereum-ஐ அனுமதிக்கிறது. **ஆதாரங்கள்**: [EIP-7732 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-7732) -### தலைப்புப் பரிந்துரை: தொகுதி-நிலை அணுகல் பட்டியல்கள் (BALகள்) {#bals} +### முக்கிய முன்மொழிவு: தொகுதி-நிலை அணுகல் பட்டியல்கள் (Block-Level Access Lists - BALs) {#bals} + +- அனைத்துப் பரிவர்த்தனைச் சார்புகளின் முன் வரைபடத்தை வழங்குவதன் மூலம் தொடர்ச்சியான செயலாக்க இடையூறுகளை நீக்குகிறது, சரிபார்ப்பவர்கள் பல பரிவர்த்தனைகளை ஒன்றன்பின் ஒன்றாகச் செயலாக்குவதற்குப் பதிலாக இணையாகச் செயலாக்குவதற்கான களத்தை அமைக்கிறது +- ஒவ்வொரு பரிவர்த்தனையையும் மீண்டும் இயக்க வேண்டிய அவசியமின்றி (செயலாக்கமற்ற ஒத்திசைவு - executionless sync) இறுதி முடிவுகளைப் படிப்பதன் மூலம் முனைகள் (nodes) தங்கள் பதிவேடுகளைப் புதுப்பிக்க அனுமதிக்கிறது, இது நெட்வொர்க்குடன் ஒரு முனையை ஒத்திசைப்பதை மிகவும் வேகமாக்குகிறது +- யூகங்களை நீக்குகிறது, சரிபார்ப்பவர்கள் தேவையான அனைத்துத் தரவையும் படிப்படியாகக் கண்டுபிடிப்பதற்குப் பதிலாக ஒரே நேரத்தில் முன்கூட்டியே ஏற்ற அனுமதிக்கிறது, இது சரிபார்ப்பை மிகவும் வேகமாக்குகிறது -- அனைத்து பரிவர்த்தனை சார்புகளின் முன் வரைபடத்தை வழங்குவதன் மூலம் தொடர்ச்சியான செயலாக்கத் தடைகளை நீக்குகிறது, வேலிடேட்டர்கள் ஒவ்வொன்றாகச் செய்வதற்குப் பதிலாக பல பரிவர்த்தனைகளை இணையாகச் செயலாக்குவதற்கான மேடையை அமைக்கிறது. -- ஒவ்வொரு பரிவர்த்தனையையும் மீண்டும் இயக்காமல் (செயல்படுத்தப்படாத ஒத்திசைவு) இறுதி முடிவுகளைப் படிப்பதன் மூலம் முனைகள் தங்கள் பதிவுகளைப் புதுப்பிக்க அனுமதிக்கிறது, இது ஒரு முனையை நெட்வொர்க்குடன் ஒத்திசைப்பதை மிகவும் விரைவாக்குகிறது. -- இது யூகங்களை நீக்குகிறது, வேலிடேட்டர்கள் படிப்படியாகக் கண்டுபிடிப்பதற்குப் பதிலாக தேவையான அனைத்து தரவுகளையும் ஒரே நேரத்தில் முன்கூட்டியே ஏற்ற அனுமதிக்கிறது, இது சரிபார்ப்பை மிகவும் விரைவாக்குகிறது. +இன்றைய Ethereum ஒரு ஒற்றை வழிச் சாலை போன்றது; ஒரு பரிவர்த்தனை இயங்கும் வரை ஒரு பரிவர்த்தனைக்கு என்ன தரவு தேவைப்படும் அல்லது மாற்றப்படும் (ஒரு பரிவர்த்தனை எந்தக் கணக்குகளைத் தொடும் என்பது போல) என்பது நெட்வொர்க்கிற்குத் தெரியாது என்பதால், சரிபார்ப்பவர்கள் பரிவர்த்தனைகளை ஒன்றன்பின் ஒன்றாக ஒரு கண்டிப்பான, தொடர்ச்சியான வரிசையில் செயலாக்க வேண்டும். இந்தச் சார்புகளை அறியாமல், அவர்கள் அனைத்துப் பரிவர்த்தனைகளையும் ஒரே நேரத்தில் செயலாக்க முயன்றால், இரண்டு பரிவர்த்தனைகள் தற்செயலாக ஒரே நேரத்தில் அதே தரவை மாற்ற முயற்சிக்கலாம், இதனால் பிழைகள் ஏற்படலாம். -இன்றைய Ethereum ஒரு ஒற்றைப் பாதை சாலை போன்றது; ஒரு பரிவர்த்தனை இயங்கும் வரை, அந்தப் பரிவர்த்தனைக்கு என்ன தரவு தேவைப்படும் அல்லது என்ன மாற்றம் ஏற்படும் (எந்தக் கணக்குகளை ஒரு பரிவர்த்தனை தொடும் போன்றவை) என்பதை நெட்வொர்க்கிற்குத் தெரியாது என்பதால், சரிபார்ப்பவர்கள் பரிவர்த்தனைகளை ஒன்றன் பின் ஒன்றாக ஒரு கண்டிப்பான, வரிசைக்கிரமமான பாதையில் செயலாக்க வேண்டும். இந்தப் சார்புகளை அறியாமல், ஒரே நேரத்தில் அனைத்து பரிவர்த்தனைகளையும் செயலாக்க அவர்கள் முயற்சித்தால், இரண்டு பரிவர்த்தனைகள் தற்செயலாக ஒரே நேரத்தில் ஒரே தரவை மாற்ற முயற்சி செய்யலாம், இது பிழைகளை ஏற்படுத்தும். +**தொகுதி-நிலை அணுகல் பட்டியல்கள் (BALs, அல்லது EIP-7928)** என்பது ஒவ்வொரு தொகுதியிலும் சேர்க்கப்பட்டுள்ள ஒரு வரைபடம் போன்றது, வேலை தொடங்குவதற்கு முன் தரவுத்தளத்தின் எந்தப் பகுதிகள் அணுகப்படும் என்பதை நெட்வொர்க்கிற்குக் கூறுகிறது. பரிவர்த்தனைகள் தொடும் ஒவ்வொரு கணக்கு மாற்றத்தின் ஹாஷையும் (hash), அந்த மாற்றங்களின் இறுதி முடிவுகளையும் (அனைத்து நிலை அணுகல்கள் மற்றும் செயலாக்கத்திற்குப் பிந்தைய மதிப்புகளின் ஹாஷ் பதிவு) ஒவ்வொரு தொகுதியும் கொண்டிருக்க வேண்டும் என BAL-கள் கோருகின்றன. -**பிளாக்-லெவல் அணுகல் பட்டியல்கள் (BALகள் அல்லது EIP-7928)** என்பது ஒவ்வொரு பிளாக்கிலும் சேர்க்கப்பட்டுள்ள ஒரு வரைபடம் போன்றது, இது வேலை தொடங்குவதற்கு முன் தரவுத்தளத்தின் எந்தப் பகுதிகள் அணுகப்படும் என்பதை நெட்வொர்க்கிற்குத் தெரிவிக்கிறது. பரிவர்த்தனைகள் தொடும் ஒவ்வொரு கணக்கு மாற்றத்தின் ஹாஷையும், அந்த மாற்றங்களின் இறுதி முடிவுகளையும் (அனைத்து நிலை அணுகல்களின் ஹாஷ் பதிவு மற்றும் செயல்படுத்தலுக்குப் பிந்தைய மதிப்புகள்) ஒவ்வொரு பிளாக்கும் சேர்க்க வேண்டும் என்று BALகள் கோருகின்றன. +எந்தப் பரிவர்த்தனைகள் ஒன்றுடன் ஒன்று மேலெழுதப்படாது (overlap) என்பதற்கான உடனடித் தெரிவுநிலையை அவை வழங்குவதால், ஒரே நேரத்தில் பல பரிவர்த்தனைகளுக்கான தகவல்களைப் பெற்று, இணையான வட்டு வாசிப்புகளை (parallel disk reads) செய்ய முனைகளை BAL-கள் அனுமதிக்கின்றன. நெட்வொர்க் தொடர்பில்லாத பரிவர்த்தனைகளைப் பாதுகாப்பாகக் குழுவாக்கி அவற்றை இணையாகச் செயலாக்க முடியும். -எந்த பரிவர்த்தனைகள் ஒன்றுடன் ஒன்று மோதவில்லை என்பதை உடனடியாகக் காண்பிப்பதால், BALகள், இணை வட்டு வாசிப்புகளைச் செய்ய முனைகளை அனுமதிக்கின்றன, ஒரே நேரத்தில் பல பரிவர்த்தனைகளுக்கான தகவல்களைப் பெறுகின்றன. நெட்வொர்க் பாதுகாப்பாக தொடர்பில்லாத பரிவர்த்தனைகளை குழுவாக்கி அவற்றை இணையாகச் செயல்படுத்த முடியும். +BAL பரிவர்த்தனைகளின் இறுதி முடிவுகளை (செயலாக்கத்திற்குப் பிந்தைய மதிப்புகள்) உள்ளடக்கியிருப்பதால், நெட்வொர்க்கின் முனைகள் நெட்வொர்க்கின் தற்போதைய நிலைக்கு ஒத்திசைக்க வேண்டியிருக்கும் போது, அவை தங்கள் பதிவேடுகளைப் புதுப்பிக்க அந்த இறுதி முடிவுகளை நகலெடுக்கலாம். என்ன நடந்தது என்பதை அறிய, சரிபார்ப்பவர்கள் இனி அனைத்துச் சிக்கலான பரிவர்த்தனைகளையும் புதிதாக மீண்டும் இயக்க வேண்டியதில்லை, இது புதிய முனைகள் நெட்வொர்க்கில் சேருவதை வேகமாகவும் எளிதாகவும் ஆக்குகிறது. -BAL பரிவர்த்தனைகளின் இறுதி முடிவுகளை (செயல்பாட்டிற்குப் பிந்தைய மதிப்புகள்) உள்ளடக்கியிருப்பதால், நெட்வொர்க்கின் முனைகள் நெட்வொர்க்கின் தற்போதைய நிலையுடன் ஒத்திசைக்க வேண்டியிருக்கும் போது, அந்த இறுதி முடிவுகளை நகலெடுத்து தங்கள் பதிவுகளைப் புதுப்பிக்கலாம். என்ன நடந்தது என்பதை அறிய வேலிடேட்டர்கள் இனி அனைத்து சிக்கலான பரிவர்த்தனைகளையும் புதிதாக மீண்டும் இயக்க வேண்டியதில்லை, இது புதிய முனைகள் நெட்வொர்க்கில் சேருவதை விரைவாகவும் எளிதாகவும் ஆக்குகிறது. +BAL-களால் சாத்தியமாக்கப்பட்ட இணையான வட்டு வாசிப்புகள், Ethereum ஒரே நேரத்தில் பல பரிவர்த்தனைகளைச் செயலாக்கக்கூடிய எதிர்காலத்தை நோக்கிய ஒரு குறிப்பிடத்தக்க படியாக இருக்கும், இது நெட்வொர்க்கின் வேகத்தைக் கணிசமாக அதிகரிக்கும். -BAL-களால் இயக்கப்படும் இணை வட்டு வாசிப்புகள், Ethereum ஒரே நேரத்தில் பல பரிவர்த்தனைகளைச் செயலாக்கக்கூடிய எதிர்காலத்தை நோக்கி ஒரு குறிப்பிடத்தக்க படியாக இருக்கும், இது நெட்வொர்க்கின் வேகத்தை கணிசமாக அதிகரிக்கும். +#### eth/71 தொகுதி அணுகல் பட்டியல் பரிமாற்றம் (Block Access List Exchange) {#bale} -#### eth/71 தொகுதி அணுகல் பட்டியல் பரிமாற்றம் {#bale} +தொகுதி அணுகல் பட்டியல் பரிமாற்றம் (eth/71 அல்லது EIP-8159) என்பது தொகுதி-நிலை அணுகல் பட்டியல்களுக்கான நேரடி நெட்வொர்க்கிங் துணையாகும். BAL-கள் இணையான செயலாக்கத்தைத் திறக்கும் அதே வேளையில், நெட்வொர்க் வழியாக இந்தப் பட்டியல்களை முனைகள் உண்மையில் பகிர அனுமதிக்க பியர்-டு-பியர் (peer-to-peer) நெறிமுறையை eth/71 மேம்படுத்துகிறது. தொகுதி அணுகல் பட்டியல் பரிமாற்றத்தைச் செயல்படுத்துவது வேகமான ஒத்திசைவைச் சாத்தியமாக்கும் மற்றும் செயலாக்கமற்ற நிலைப் புதுப்பிப்புகளைச் செய்ய முனைகளை அனுமதிக்கும். -பிளாக் அக்சஸ் லிஸ்ட் எக்ஸ்சேஞ்ச் (eth/71 அல்லது EIP-8159) என்பது பிளாக்-லெவல் அக்சஸ் லிஸ்ட்களுக்கான நேரடி நெட்வொர்க்கிங் துணை ஆகும். BALகள் இணை செயலாக்கத்தைத் திறக்கும் அதே வேளையில், eth/71 பீயர்-டு-பியர் நெறிமுறையை மேம்படுத்தி, இந்த பட்டியல்களை நெட்வொர்க்கில் உள்ள கணுக்கள் உண்மையில் பகிர அனுமதிக்கிறது. பிளாக் அக்சஸ் லிஸ்ட் எக்ஸ்சேஞ்சை செயல்படுத்துவது வேகமான ஒத்திசைவை இயக்கும் மற்றும் கணுக்கள் செயலாக்கம் இல்லாத நிலை புதுப்பிப்புகளைச் செய்ய அனுமதிக்கும். +**ஆதாரங்கள்**: -**ஆதாரங்கள்**: - [EIP-7928 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-7928) - [EIP-8159 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-8159) ## நெட்வொர்க் நிலைத்தன்மை {#network-sustainability} -Ethereum நெட்வொர்க் வேகமாக வளரும்போது, அதைப் பயன்படுத்துவதற்கான செலவு Ethereum ஐ இயக்கும் வன்பொருளின் தேய்மானத்திற்கு ஏற்ப இருப்பதை உறுதி செய்வது முக்கியம். பாதுகாப்பாக அளவிடவும், அதிக பரிவர்த்தனைகளைச் செயலாக்கவும் நெட்வொர்க் அதன் ஒட்டுமொத்த திறன் வரம்புகளை அதிகரிக்க வேண்டும். +Ethereum நெட்வொர்க் வேகமாக வளரும்போது, அதைப் பயன்படுத்துவதற்கான செலவு Ethereum-ஐ இயக்கும் வன்பொருளின் தேய்மானத்துடன் பொருந்துவதை உறுதிசெய்வது முக்கியம். பாதுகாப்பாக அளவிடவும் அதிகப் பரிவர்த்தனைகளைச் செயலாக்கவும் நெட்வொர்க் அதன் ஒட்டுமொத்தத் திறன் வரம்புகளை அதிகரிக்க வேண்டும். -### மாநில உருவாக்க எரிவாயு செலவு அதிகரிப்பு {#state-creation-gas-cost-increase} +### நிலை உருவாக்க எரிவாயு (gas) செலவு அதிகரிப்பு {#state-creation-gas-cost-increase} -- புதிய கணக்குகளை உருவாக்குவதற்கான கட்டணங்கள் அல்லது ஸ்மார்ட் ஒப்பந்தங்கள் Ethereum இன் தரவுத்தளத்தில் நீண்டகால சுமையை துல்லியமாக பிரதிபலிக்கின்றன என்பதை உறுதிசெய்கிறது. -- நெட்வொர்க்கின் ஒட்டுமொத்த திறனைப் பொறுத்து இந்த தரவு-உருவாக்கக் கட்டணங்களை தானாகவே சரிசெய்கிறது, பாதுகாப்பான மற்றும் கணிக்கக்கூடிய வளர்ச்சி விகிதத்தை இலக்காகக் கொண்டு, நிலையான இயற்பியல் வன்பொருள் நெட்வொர்க்கைத் தொடர்ந்து இயக்க முடியும். -- இந்த குறிப்பிட்ட கட்டணங்களுக்கான கணக்கியலை ஒரு புதிய சேமிப்பிடத்திற்குப் பிரித்து, பழைய பரிவர்த்தனை வரம்புகளை நீக்கி, டெவலப்பர்கள் பெரிய, மிகவும் சிக்கலான பயன்பாடுகளைப் பயன்படுத்த அனுமதிக்கிறது. +- புதிய கணக்குகள் அல்லது ஸ்மார்ட் ஒப்பந்தங்களை உருவாக்குவதற்கான கட்டணங்கள் Ethereum-இன் தரவுத்தளத்தில் அவை ஏற்படுத்தும் நீண்டகாலச் சுமையைத் துல்லியமாகப் பிரதிபலிப்பதை உறுதிசெய்கிறது +- நெட்வொர்க்கின் ஒட்டுமொத்தத் திறனின் அடிப்படையில் இந்தத் தரவு-உருவாக்கக் கட்டணங்களைத் தானாகவே சரிசெய்கிறது, பாதுகாப்பான மற்றும் கணிக்கக்கூடிய வளர்ச்சி விகிதத்தை இலக்காகக் கொண்டு, நிலையான இயற்பியல் வன்பொருள் தொடர்ந்து நெட்வொர்க்கை இயக்க முடியும் +- இந்தக் குறிப்பிட்ட கட்டணங்களுக்கான கணக்கியலை ஒரு புதிய நீர்த்தேக்கத்திற்குப் (reservoir) பிரிக்கிறது, பழைய பரிவர்த்தனை வரம்புகளை நீக்குகிறது மற்றும் டெவலப்பர்கள் பெரிய, மிகவும் சிக்கலான பயன்பாடுகளைப் பயன்படுத்த அனுமதிக்கிறது -புதிய கணக்குகள், டோக்கன்கள் மற்றும் [ஸ்மார்ட் ஒப்பந்தங்களைச்](/glossary/#smart-contract) சேர்ப்பது நிரந்தரத் தரவை ("நிலை" என அழைக்கப்படுகிறது) உருவாக்குகிறது, அதை நெட்வொர்க்கை இயக்கும் ஒவ்வொரு கணினியும் காலவரையின்றி சேமிக்க வேண்டும். இந்தத் தரவைச் சேர்க்க அல்லது படிக்க தற்போதைய கட்டணங்கள் சீரற்றவை மற்றும் அவை நெட்வொர்க்கின் வன்பொருளில் ஏற்படுத்தும் உண்மையான, நீண்டகால சேமிப்பகச் சுமையை அவசியமாகப் பிரதிபலிக்காது. +புதிய கணக்குகள், டோக்கன்கள் மற்றும் [ஸ்மார்ட் ஒப்பந்தங்களை](/glossary/#smart-contract) சேர்ப்பது நிரந்தரத் தரவை ("நிலை" (state) என அழைக்கப்படுகிறது) உருவாக்குகிறது, நெட்வொர்க்கை இயக்கும் ஒவ்வொரு கணினியும் இதை காலவரையின்றிச் சேமிக்க வேண்டும். இந்தத் தரவைச் சேர்ப்பதற்கான அல்லது படிப்பதற்கான தற்போதைய கட்டணங்கள் சீரற்றவை மற்றும் நெட்வொர்க்கின் வன்பொருளில் அவை ஏற்படுத்தும் உண்மையான, நீண்டகாலச் சேமிப்பகச் சுமையை அவை பிரதிபலிக்க வேண்டியதில்லை. -புதிய கணக்குகளை உருவாக்குதல் அல்லது பெரிய ஸ்மார்ட் ஒப்பந்தங்களை வரிசைப்படுத்துதல் போன்ற Ethereum இல் நிலையை உருவாக்கும் சில செயல்கள், நெட்வொர்க்கின் முனைகளில் அவை எடுத்துக்கொள்ளும் நிரந்தர சேமிப்பிட இடத்துடன் ஒப்பிடும்போது ஒப்பீட்டளவில் குறைந்த செலவுடையதாக உள்ளன, எடுத்துக்காட்டாக, சேமிப்பக இடங்களை உருவாக்குவதை விட ஒப்பந்த வரிசைப்படுத்தல் ஒரு பைட்டுக்கு கணிசமாக மலிவானது. +புதிய கணக்குகளை உருவாக்குவது அல்லது பெரிய ஸ்மார்ட் ஒப்பந்தங்களைப் பயன்படுத்துவது போன்ற Ethereum-இல் நிலையை உருவாக்கும் சில செயல்கள், நெட்வொர்க்கின் முனைகளில் அவை எடுத்துக்கொள்ளும் நிரந்தரச் சேமிப்பக இடத்துடன் ஒப்பிடும்போது ஒப்பீட்டளவில் குறைந்த செலவைக் கொண்டுள்ளன, எடுத்துக்காட்டாக, சேமிப்பக ஸ்லாட்டுகளை உருவாக்குவதை விட ஒப்பந்தப் பயன்பாடு ஒரு பைட்டிற்கு (byte) கணிசமாக மலிவானது. -சரிசெய்தல் இல்லாமல், நெட்வொர்க் 100M எரிவாயு வரம்பிற்கு அளவிடப்பட்டால், Ethereum இன் நிலை ஆண்டுக்கு கிட்டத்தட்ட 200 GiB வளரக்கூடும், இறுதியில் பொதுவான வன்பொருளை விஞ்சும். +சரிசெய்தல் இல்லாமல், நெட்வொர்க் 100M எரிவாயு வரம்பிற்கு அளவிடப்பட்டால், Ethereum-இன் நிலை ஆண்டுக்கு சுமார் 200 GiB வளரக்கூடும், இறுதியில் பொதுவான வன்பொருளை விஞ்சிவிடும். -**மாநில உருவாக்க எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037)** உருவாக்கப்படும் தரவின் உண்மையான அளவோடு செலவுகளை இணைப்பதன் மூலம் செலவுகளை இணக்கமாக மாற்றுகிறது, ஒரு செயல்பாடு உருவாக்கும் அல்லது அணுகும் நிரந்தர தரவின் அளவிற்கு ஏற்ப கட்டணங்களைப் புதுப்பிக்கிறது. +**நிலை உருவாக்க எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037)** உருவாக்கப்படும் தரவின் உண்மையான அளவுடன் அவற்றைக் கட்டுவதன் மூலம் செலவுகளை ஒத்திசைக்கிறது, ஒரு செயல்பாடு உருவாக்கும் அல்லது அணுகும் நிரந்தரத் தரவின் அளவிற்கு விகிதாசாரமாக இருக்கும்படி கட்டணங்களைப் புதுப்பிக்கிறது. -இந்த செலவுகளை மிகவும் கணிக்கக்கூடிய வகையில் நிர்வகிக்க EIP-8037 ஒரு ரிசர்வாயர் மாதிரியை அறிமுகப்படுத்துகிறது; மாநில எரிவாயு கட்டணங்கள் முதலில் `state_gas_reservoir`-இலிருந்து எடுக்கப்படுகின்றன, மேலும் `GAS` opcode `gas_left`-ஐ மட்டுமே திருப்பி அனுப்புகிறது, இதனால் கிடைக்கக்கூடிய எரிவாயுவை தவறாகக் கணக்கிடுவதிலிருந்து செயல்படுத்தல் பிரேம்கள் தடுக்கப்படுகின்றன. +இந்தச் செலவுகளை மிகவும் கணிக்கக்கூடிய வகையில் நிர்வகிக்க EIP-8037 ஒரு நீர்த்தேக்க மாதிரியையும் (reservoir model) அறிமுகப்படுத்துகிறது; நிலை எரிவாயு கட்டணங்கள் முதலில் `state_gas_reservoir`-இலிருந்து எடுக்கப்படுகின்றன, மேலும் `GAS` ஆப்கோடு (opcode) `gas_left`-ஐ மட்டுமே வழங்குகிறது, இது செயலாக்கச் சட்டங்கள் (execution frames) கிடைக்கக்கூடிய எரிவாயுவைத் தவறாகக் கணக்கிடுவதைத் தடுக்கிறது. -EIP-8037 க்கு முன்பு, கணக்கீட்டு வேலை (செயலில் உள்ள செயலாக்கம்) மற்றும் நிரந்தர தரவு சேமிப்பு (ஸ்மார்ட் ஒப்பந்தத்தை நெட்வொர்க்கின் தரவுத்தளத்தில் சேமித்தல்) இரண்டும் ஒரே எரிவாயு வரம்பைப் பகிர்ந்து கொள்கின்றன. நீர்த்தேக்க மாதிரி கணக்கைப் பிரிக்கிறது: பரிவர்த்தனையின் உண்மையான கணக்கீட்டு வேலைக்கான (செயலாக்கம்) மற்றும் நீண்டகால தரவு சேமிப்பிற்கான (நிலை எரிவாயு) எரிவாயு வரம்பு. இரண்டையும் பிரிப்பது ஒரு பயன்பாட்டின் தரவின் அளவு எரிவாயு வரம்பை அடைவதைத் தடுக்க உதவுகிறது; டெவலப்பர்கள் தரவு சேமிப்பிற்காக நீர்த்தேக்கத்தை நிரப்ப போதுமான நிதியை வழங்கும் வரை, அவர்கள் மிகப் பெரிய மற்றும் மிகவும் சிக்கலான ஸ்மார்ட் ஒப்பந்தங்களை வரிசைப்படுத்தலாம். +EIP-8037-க்கு முன், கணக்கீட்டு வேலை (செயலில் உள்ள செயலாக்கம்) மற்றும் நிரந்தரத் தரவுச் சேமிப்பகம் (நெட்வொர்க்கின் தரவுத்தளத்தில் ஸ்மார்ட் ஒப்பந்தத்தைச் சேமிப்பது) ஆகிய இரண்டும் ஒரே எரிவாயு வரம்பைப் பகிர்ந்து கொள்கின்றன. நீர்த்தேக்க மாதிரி கணக்கியலைப் பிரிக்கிறது: பரிவர்த்தனையின் உண்மையான கணக்கீட்டு வேலைக்கான (செயலாக்கம்) எரிவாயு வரம்பு மற்றும் நீண்டகாலத் தரவுச் சேமிப்பகத்திற்கான (நிலை எரிவாயு) வரம்பு. இரண்டையும் பிரிப்பது, ஒரு பயன்பாட்டின் தரவின் சுத்த அளவு எரிவாயு வரம்பை மீறுவதைத் தடுக்க உதவுகிறது; தரவுச் சேமிப்பகத்திற்கான நீர்த்தேக்கத்தை நிரப்ப டெவலப்பர்கள் போதுமான நிதியை வழங்கும் வரை, அவர்கள் மிகப் பெரிய மற்றும் சிக்கலான ஸ்மார்ட் ஒப்பந்தங்களைப் பயன்படுத்தலாம். -தரவு சேமிப்பகத்திற்கு மிகவும் துல்லியமாகவும் கணிக்கக்கூடியதாகவும் விலை நிர்ணயம் செய்வது, Ethereum அதன் வேகத்தையும் திறனையும் தரவுத்தளத்தை பெரிதாக்காமல் பாதுகாப்பாக அதிகரிக்க உதவும். இந்த நிலைத்தன்மை, நோட் ஆபரேட்டர்கள் வரும் ஆண்டுகளில் (ஒப்பீட்டளவில்) மலிவு விலையில் வன்பொருளை தொடர்ந்து பயன்படுத்த அனுமதிக்கும், நெட்வொர்க்கின் பரவலாக்கத்தைப் பராமரிக்க வீட்டு ஸ்டேக்கிங்கை அணுகக்கூடியதாக வைத்திருக்கும். +தரவுச் சேமிப்பகத்தை மிகவும் துல்லியமாகவும் கணிக்கக்கூடிய வகையிலும் விலை நிர்ணயம் செய்வது, தரவுத்தளத்தை வீக்கமடையச் செய்யாமல் Ethereum அதன் வேகத்தையும் திறனையும் பாதுகாப்பாக அதிகரிக்க உதவும். இந்த நிலைத்தன்மை, நெட்வொர்க்கின் பரவலாக்கத்தைப் பராமரிக்க ஹோம் ஸ்டேக்கிங்கை (home staking) அணுகக்கூடியதாக வைத்து, வரும் ஆண்டுகளில் (ஒப்பீட்டளவில்) மலிவு விலையிலான வன்பொருளைத் தொடர்ந்து பயன்படுத்த முனை இயக்குபவர்களை அனுமதிக்கும். **ஆதாரங்கள்**: [EIP-8037 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-8037) -### மாநில அணுகல் எரிவாயு செலவு புதுப்பிப்பு {#state-access-gas-cost-update} +### நிலை-அணுகல் எரிவாயு செலவுப் புதுப்பிப்பு {#state-access-gas-cost-update} -- Ethereum இல் நிரந்தரமாக சேமிக்கப்பட்ட தகவல்களைப் பயன்பாடுகள் படிக்கும்போது அல்லது புதுப்பிக்கும்போது (நிலை-அணுகல் செயல்பாட்டுக் குறியீடுகள்) வாயு செலவுகளை அதிகரிக்கிறது, இந்த கட்டளைகளுக்குத் தேவையான கணினி வேலைக்கு துல்லியமாகப் பொருந்தும். -- செயற்கையாக மலிவாக்கப்பட்ட தரவு-வாசிப்பு செயல்பாடுகளைப் பயன்படுத்தும் சேவை-மறுப்பு தாக்குதல்களைத் தடுப்பதன் மூலம் நெட்வொர்க் பின்னடைவு திறனை பலப்படுத்துகிறது +- பயன்பாடுகள் Ethereum-இல் நிரந்தரமாகச் சேமிக்கப்பட்ட தகவல்களைப் படிக்கும்போது அல்லது புதுப்பிக்கும்போது (நிலை-அணுகல் ஆப்கோடுகள்) எரிவாயுச் செலவுகளை அதிகரிக்கிறது, இந்தக் கட்டளைகளுக்குத் தேவைப்படும் கணக்கீட்டு வேலையைத் துல்லியமாகப் பொருத்துகிறது +- செயற்கையாக மலிவான தரவு-வாசிப்பு செயல்பாடுகளைப் பயன்படுத்திக் கொள்ளும் சேவை-மறுப்புத் தாக்குதல்களைத் (denial-of-service attacks) தடுப்பதன் மூலம் நெட்வொர்க் பின்னடைவுத் திறனை (resilience) பலப்படுத்துகிறது -Ethereum இன் நிலை வளர வளர, பழைய தரவைத் தேடிப் படிக்கும் செயல் ("நிலை அணுகல்") கணுக்கள் செயலாக்குவதற்கு அதிக கனமாகவும் மெதுவாகவும் மாறிவிட்டது. இந்த செயல்களுக்கான கட்டணங்கள் அப்படியே உள்ளன, இருப்பினும் தகவல்களைத் தேடுவது (கணினி சக்தியின் அடிப்படையில்) இப்போது சற்று விலை அதிகமாக உள்ளது. +Ethereum-இன் நிலை வளர்ந்துள்ளதால், பழைய தரவைத் தேடும் மற்றும் படிக்கும் செயல் ("நிலை அணுகல்") முனைகள் செயலாக்கக் கடினமானதாகவும் மெதுவானதாகவும் மாறியுள்ளது. தகவல்களைத் தேடுவது இப்போது சற்று அதிகச் செலவுமிக்கதாக இருந்தாலும் (கணக்கீட்டுத் திறனைப் பொறுத்தவரை) இந்தச் செயல்களுக்கான கட்டணங்கள் அப்படியே உள்ளன. -இதன் விளைவாக, சில குறிப்பிட்ட கட்டளைகள், ஒரு நோட் செய்ய வேண்டிய வேலைக்கு ஏற்ப தற்போது குறைந்த விலையில் உள்ளன. எடுத்துக்காட்டாக, `EXTCODESIZE` மற்றும் `EXTCODECOPY` ஆகியவை குறைந்த விலையில் உள்ளன, ஏனெனில் அவை இரண்டு தனித்தனி தரவுத்தள வாசிப்புகளைக் கோருகின்றன - ஒன்று கணக்கு பொருளுக்கு, இரண்டாவது உண்மையான குறியீட்டு அளவு அல்லது பைட்கோட். +இதன் விளைவாக, சில குறிப்பிட்ட கட்டளைகள் ஒரு முனையைச் செய்ய வற்புறுத்தும் வேலையுடன் ஒப்பிடும்போது தற்போது குறைவான விலை நிர்ணயம் செய்யப்பட்டுள்ளன. எடுத்துக்காட்டாக, `EXTCODESIZE` மற்றும் `EXTCODECOPY` ஆகியவை குறைவான விலை நிர்ணயம் செய்யப்பட்டுள்ளன, ஏனெனில் அவற்றுக்கு இரண்டு தனித்தனி தரவுத்தள வாசிப்புகள் தேவைப்படுகின்றன—ஒன்று கணக்குப் பொருளுக்கு (account object), மற்றொன்று உண்மையான குறியீட்டு அளவு அல்லது பைட்கோடுக்கு (bytecode). -**ஸ்டேட்-ஆக்சஸ் கேஸ் செலவு புதுப்பிப்பு (அல்லது EIP-8038)**, கணக்கு மற்றும் ஒப்பந்தத் தரவை அணுகுவது போன்ற ஸ்டேட்-ஆக்சஸ் ஆப்கோடுகளுக்கான கேஸ் மாறிலிகளை, நவீன வன்பொருள் செயல்திறன் மற்றும் ஸ்டேட் அளவோடு சீரமைக்க அதிகரிக்கிறது. +**நிலை-அணுகல் எரிவாயு செலவுப் புதுப்பிப்பு (அல்லது EIP-8038)** நவீன வன்பொருள் செயல்திறன் மற்றும் நிலை அளவுடன் சீரமைக்க, கணக்கு மற்றும் ஒப்பந்தத் தரவைத் தேடுவது போன்ற நிலை-அணுகல் ஆப்கோடுகளுக்கான எரிவாயு மாறிலிகளை (gas constants) அதிகரிக்கிறது. -மாநில அணுகல் செலவை சீரமைப்பது Ethereum ஐ மேலும் மீள்தன்மை கொண்டதாக மாற்ற உதவுகிறது. இந்த கனமான தரவு வாசிப்பு செயல்கள் செயற்கையாக மலிவானவை என்பதால், ஒரு தீங்கிழைக்கும் தாக்குபவர் நெட்வொர்க்கின் கட்டண வரம்பை அடைவதற்கு முன்பு ஆயிரக்கணக்கான சிக்கலான தரவு கோரிக்கைகளுடன் நெட்வொர்க்கை ஸ்பேம் செய்யலாம், இதனால் நெட்வொர்க் நின்றுவிடும் அல்லது செயலிழந்து போகும் (சேவை மறுப்பு தாக்குதல்). தீங்கிழைக்கும் நோக்கம் இல்லாவிட்டாலும், நெட்வொர்க் தரவைப் படிப்பது மிகவும் மலிவானதாக இருந்தால், திறமையான பயன்பாடுகளை உருவாக்க டெவலப்பர்கள் பொருளாதார ரீதியாக ஊக்குவிக்கப்படுவதில்லை. +நிலை-அணுகலின் விலையைச் சீரமைப்பது Ethereum-ஐ மிகவும் மீள்திறன் கொண்டதாக மாற்ற உதவுகிறது. இந்தக் கடினமான தரவு-வாசிப்புச் செயல்கள் செயற்கையாக மலிவானவை என்பதால், ஒரு தீங்கிழைக்கும் தாக்குதலாளர் நெட்வொர்க்கின் கட்டண வரம்பை எட்டுவதற்கு முன்பு ஒரே தொகுதியில் ஆயிரக்கணக்கான சிக்கலான தரவுக் கோரிக்கைகளுடன் நெட்வொர்க்கை ஸ்பேம் (spam) செய்யலாம், இது நெட்வொர்க்கை முடக்கலாம் அல்லது செயலிழக்கச் செய்யலாம் (ஒரு சேவை-மறுப்புத் தாக்குதல்). தீங்கிழைக்கும் நோக்கம் இல்லாவிட்டாலும், நெட்வொர்க் தரவைப் படிப்பது மிகவும் மலிவானதாக இருந்தால், திறமையான பயன்பாடுகளை உருவாக்க டெவலப்பர்கள் பொருளாதார ரீதியாக ஊக்குவிக்கப்படுவதில்லை. -மாநில அணுகல் நடவடிக்கைகளுக்கு மிகவும் துல்லியமான விலையை நிர்ணயிப்பதன் மூலம், Ethereum தற்செயலான அல்லது வேண்டுமென்றே ஏற்படும் மந்தநிலைகளுக்கு எதிராக அதிக மீள்தன்மையுடன் இருக்க முடியும், அதே நேரத்தில் வன்பொருள் சுமையுடன் நெட்வொர்க் செலவுகளை சீரமைப்பது எதிர்கால எரிவாயு வரம்பு அதிகரிப்புகளுக்கு மிகவும் நிலையான அடித்தளத்தை நிரூபிக்கிறது. +நிலை-அணுகல் செயல்களை மிகவும் துல்லியமாக விலை நிர்ணயம் செய்வதன் மூலம், தற்செயலான அல்லது வேண்டுமென்றே ஏற்படும் மந்தநிலைகளுக்கு எதிராக Ethereum மிகவும் மீள்திறன் கொண்டதாக இருக்க முடியும், அதே நேரத்தில் வன்பொருள் சுமையுடன் நெட்வொர்க் செலவுகளைச் சீரமைப்பது எதிர்கால எரிவாயு வரம்பு அதிகரிப்புகளுக்கு மிகவும் நிலையான அடித்தளத்தை நிரூபிக்கிறது. **ஆதாரங்கள்**: [EIP-8038 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-8038) -## நெட்வொர்க் மீள்தன்மை +## நெட்வொர்க் பின்னடைவுத் திறன் (Network resilience) -வேலிடேட்டர் கடமைகள் மற்றும் வெளியேறும் செயல்முறைகளில் செய்யப்படும் மேம்பாடுகள், மொத்தத் தண்டனை நிகழ்வுகளின் போது நெட்வொர்க் நிலைத்தன்மையை உறுதிசெய்கின்றன மற்றும் பணப்புழக்கத்தை ஜனநாயகப்படுத்துகின்றன. இந்த மேம்பாடுகள் நெட்வொர்க்கை மிகவும் நிலையானதாக ஆக்குகின்றன மற்றும் பெரியவை மற்றும் சிறியவை உட்பட அனைத்து பங்கேற்பாளர்களும் நியாயமாக நடத்தப்படுவதை உறுதிசெய்கின்றன. +சரிபார்ப்பவர் கடமைகள் மற்றும் வெளியேறும் செயல்முறைகளுக்கான சுத்திகரிப்புகள், பெருமளவிலான-ஸ்லாஷிங் (mass-slashing) நிகழ்வுகளின் போது நெட்வொர்க் நிலைத்தன்மையை உறுதிசெய்கின்றன மற்றும் பணப்புழக்கத்தை ஜனநாயகப்படுத்துகின்றன. இந்த மேம்பாடுகள் நெட்வொர்க்கை மிகவும் நிலையானதாக ஆக்குகின்றன மற்றும் பெரிய மற்றும் சிறிய அனைத்துப் பங்கேற்பாளர்களும் நியாயமாக நடத்தப்படுவதை உறுதிசெய்கின்றன. -### வெட்டப்பட்ட வேலிடேட்டர்களை முன்மொழிவதிலிருந்து விலக்குங்கள் {#exclude-slashed-validators} +### ஸ்லாஷ் செய்யப்பட்ட சரிபார்ப்பவர்களை முன்மொழிவதிலிருந்து விலக்குதல் {#exclude-slashed-validators} -- தண்டனை விதிக்கப்பட்ட (குறைக்கப்பட்ட) வேலிடேட்டர்கள் எதிர்காலத் தொகுதிகளை முன்மொழிய தேர்ந்தெடுக்கப்படுவதைத் தடுக்கிறது, இதனால் உத்தரவாதமான தவறவிட்ட இடங்கள் நீக்கப்படுகின்றன. -- பெரிய அளவிலான குறைப்பு நிகழ்வின் போது கடுமையான முடக்கங்களைத் தடுத்து, Ethereum சீராகவும் நம்பகத்தன்மையுடனும் இயங்குவதை உறுதி செய்கிறது. +- அபராதம் விதிக்கப்பட்ட (ஸ்லாஷ் செய்யப்பட்ட) சரிபார்ப்பவர்கள் எதிர்காலத் தொகுதிகளை முன்மொழியத் தேர்ந்தெடுக்கப்படுவதைத் தடுக்கிறது, உத்தரவாதமான தவறவிடப்பட்ட ஸ்லாட்டுகளை (missed slots) நீக்குகிறது +- பெருமளவிலான ஸ்லாஷிங் நிகழ்வு ஏற்பட்டால் கடுமையான முடக்கங்களைத் தடுத்து, Ethereum-ஐச் சீராகவும் நம்பகத்தன்மையுடனும் இயங்க வைக்கிறது -தற்போது, ஒரு வேலிடேட்டர் குறைக்கப்பட்டாலும் (விதிமுறைகளை மீறுவதற்காக அல்லது எதிர்பார்த்தபடி செயல்படாததற்காக தண்டிக்கப்பட்டாலும்), எதிர்கால முன்மொழிபவர்களை உருவாக்கும்போது, எதிர்காலத்தில் ஒரு தொகுதியை வழிநடத்த அமைப்பு இன்னும் அவர்களைத் தேர்ந்தெடுக்கலாம். +தற்போது, ஒரு சரிபார்ப்பவர் ஸ்லாஷ் செய்யப்பட்டாலும் (விதிகளை மீறியதற்காக அல்லது எதிர்பார்த்தபடி செயல்படாததற்காக அபராதம் விதிக்கப்பட்டாலும்), எதிர்கால முன்மொழிபவர் லுக்அஹெட்களை (lookaheads) உருவாக்கும் போது, எதிர்காலத்தில் ஒரு தொகுதியை வழிநடத்த கணினி அவர்களைத் தேர்ந்தெடுக்கலாம். -வெட்டப்பட்ட முன்மொழிபவர்களிடமிருந்து வரும் தொகுதிகள் தானாகவே செல்லாததாக நிராகரிக்கப்படுவதால், இது நெட்வொர்க் ஸ்லாட்டுகளைத் தவறவிடச் செய்கிறது மற்றும் மொத்த வெட்டு நிகழ்வுகளின் போது நெட்வொர்க் மீட்பை தாமதப்படுத்துகிறது. +ஸ்லாஷ் செய்யப்பட்ட முன்மொழிபவர்களிடமிருந்து வரும் தொகுதிகள் தானாகவே செல்லாதவை என நிராகரிக்கப்படுவதால், இது நெட்வொர்க் ஸ்லாட்டுகளைத் தவறவிடச் செய்கிறது மற்றும் பெருமளவிலான ஸ்லாஷிங் நிகழ்வுகளின் போது நெட்வொர்க் மீட்டெடுப்பைத் தாமதப்படுத்துகிறது. -**வெட்டப்பட்ட வேலிடேட்டர்களை முன்மொழிவதிலிருந்து விலக்கு (அல்லது EIP-8045)** என்பது எதிர்காலப் பணிகளுக்குத் தேர்ந்தெடுக்கப்படுவதிலிருந்து வெட்டப்பட்ட வேலிடேட்டர்களை வடிகட்டுகிறது. இது நெட்வொர்க் இடையூறுகளின் போது சேவைத் தரத்தைப் பராமரித்து, தொகுதிகளை முன்மொழிய ஆரோக்கியமான வேலிடேட்டர்கள் மட்டுமே தேர்ந்தெடுக்கப்படுவதை உறுதி செய்வதன் மூலம் சங்கிலி மீள்தன்மையை மேம்படுத்துகிறது. +**ஸ்லாஷ் செய்யப்பட்ட சரிபார்ப்பவர்களை முன்மொழிவதிலிருந்து விலக்குதல் (அல்லது EIP-8045)** எதிர்காலக் கடமைகளுக்குத் தேர்ந்தெடுக்கப்படுவதிலிருந்து ஸ்லாஷ் செய்யப்பட்ட சரிபார்ப்பவர்களை எளிமையாக வடிகட்டுகிறது. நெட்வொர்க் இடையூறுகளின் போது சேவையின் தரத்தைப் பராமரித்து, ஆரோக்கியமான சரிபார்ப்பவர்கள் மட்டுமே தொகுதிகளை முன்மொழியத் தேர்ந்தெடுக்கப்படுவதை உறுதிசெய்வதன் மூலம் இது சங்கிலிப் பின்னடைவுத் திறனை மேம்படுத்துகிறது. **ஆதாரங்கள்**: [EIP-8045 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-8045) -### வெளியேறுதல்கள் ஒருங்கிணைப்பு வரிசையைப் பயன்படுத்தட்டும் {#let-exits-use-the-consolidation-queue} +### வெளியேறுதல்கள் ஒருங்கிணைப்பு வரிசையைப் பயன்படுத்த அனுமதித்தல் {#let-exits-use-the-consolidation-queue} -- ஒருங்கிணைப்பு வரிசை வழியாக சிறிய சரிபார்ப்பவர்களை விட அதிக இருப்பு வேலிடேட்டர்கள் நெட்வொர்க்கிலிருந்து விரைவாக வெளியேற அனுமதிக்கும் ஒரு ஓட்டையை இது மூடுகிறது. -- அதிக அளவிலான காலங்களில் ஸ்டேக்கிங் திரும்பப் பெறும் நேரங்களைக் குறைத்து, இரண்டாவது வரிசையில் கூடுதல் திறன் இருக்கும்போது வழக்கமான வெளியேற்றங்கள் அதில் நிரம்பி வழிய அனுமதிக்கிறது. -- எத்திரியத்தின் முக்கிய பாதுகாப்பு வரம்புகளை மாற்றுவதையோ அல்லது நெட்வொர்க்கை பலவீனப்படுத்துவதையோ தவிர்க்க கடுமையான பாதுகாப்பைப் பராமரிக்கிறது. +- ஒருங்கிணைப்பு வரிசை (consolidation queue) வழியாகச் சிறிய சரிபார்ப்பவர்களை விட அதிக இருப்புள்ள சரிபார்ப்பவர்கள் நெட்வொர்க்கிலிருந்து விரைவாக வெளியேற அனுமதிக்கும் ஒரு ஓட்டையை மூடுகிறது +- இந்த இரண்டாவது வரிசையில் உதிரித் திறன் இருக்கும்போது வழக்கமான வெளியேறுதல்கள் இதில் நிரம்பி வழிய அனுமதிக்கிறது, அதிக அளவிலான காலங்களில் ஸ்டேக்கிங் திரும்பப் பெறும் நேரத்தைக் குறைக்கிறது +- Ethereum-இன் முக்கியப் பாதுகாப்பு வரம்புகளை மாற்றுவதையோ அல்லது நெட்வொர்க்கை பலவீனப்படுத்துவதையோ தவிர்க்கக் கடுமையான பாதுகாப்பைப் பராமரிக்கிறது -[பெக்ட்ரா மேம்படுத்தல்](/roadmap/pectra) Ethereum வேலிடேட்டர்களுக்கான அதிகபட்ச பயனுள்ள இருப்பை 32 ETH இலிருந்து 2,048 ETH ஆக அதிகரித்ததால், ஒரு தொழில்நுட்ப ஓட்டை அதிக இருப்பு வேலிடேட்டர்கள் சிறிய வேலிடேட்டர்களை விட ஒருங்கிணைப்பு வரிசை வழியாக நெட்வொர்க்கிலிருந்து விரைவாக வெளியேற அனுமதிக்கிறது. +[Pectra மேம்படுத்தல்](/roadmap/pectra) Ethereum சரிபார்ப்பவர்களுக்கான அதிகபட்சச் செயல்திறன் இருப்பை 32 ETH-இலிருந்து 2,048 ETH ஆக அதிகரித்ததால், ஒரு தொழில்நுட்ப ஓட்டை அதிக இருப்புள்ள சரிபார்ப்பவர்கள் ஒருங்கிணைப்பு வரிசை வழியாகச் சிறிய சரிபார்ப்பவர்களை விட வேகமாக நெட்வொர்க்கிலிருந்து வெளியேற அனுமதிக்கிறது. -**வெளியேறுதல்கள் ஒருங்கிணைப்பு வரிசையைப் பயன்படுத்தட்டும் (அல்லது EIP-8080)** அனைத்து ஸ்டேக்கிங் வெளியேறுதல்களுக்கும் ஒருங்கிணைப்பு வரிசையை ஜனநாயகப்படுத்துகிறது, அனைவருக்கும் ஒரே, நியாயமான வரிசையை உருவாக்குகிறது. +**வெளியேறுதல்கள் ஒருங்கிணைப்பு வரிசையைப் பயன்படுத்த அனுமதித்தல் (அல்லது EIP-8080)** அனைத்து ஸ்டேக்கிங் வெளியேறுதல்களுக்கும் ஒருங்கிணைப்பு வரிசையை ஜனநாயகப்படுத்துகிறது, அனைவருக்கும் ஒற்றை, நியாயமான வரிசையை உருவாக்குகிறது. -இது இன்று எவ்வாறு செயல்படுகிறது என்பதைப் பிரித்துப் பார்ப்போம்: +இது இன்று எவ்வாறு செயல்படுகிறது என்பதைப் பிரிக்க: -- எத்திரியத்தின் சுழற்சி வரம்பு என்பது வேலிடேட்டர்கள் தங்கள் பங்குகொண்ட ETH ஐ உள்ளிட, வெளியேற அல்லது இணைக்க (ஒருங்கிணைக்க) கூடிய விகிதத்தில் ஒரு பாதுகாப்பு வரம்பாகும், இது நெட்வொர்க்கின் பாதுகாப்பு ஒருபோதும் சீர்குலைக்கப்படாமல் இருப்பதை உறுதி செய்கிறது. -- ஒரு வேலிடேட்டர் ஒருங்கிணைப்பு என்பது ஒரு நிலையான வேலிடேட்டர் வெளியேற்றத்தை விட அதிக நகரும் பாகங்களைக் கொண்ட ஒரு கனமான செயலாகும், இது இந்த பாதுகாப்பு பட்ஜெட்டின் (சுழற்சி வரம்பு) ஒரு பெரிய பகுதியை எடுத்துக்கொள்கிறது. -- குறிப்பாக, ஒரு நிலையான வெளியேறுதலின் சரியான பாதுகாப்புச் செலவு என்பது ஒரு ஒருங்கிணைப்பின் செலவில் மூன்றில் இரண்டு பங்கு (2/3) ஆகும் என்று நெறிமுறை ஆணையிடுகிறது. +- நெட்வொர்க்கின் பாதுகாப்பு ஒருபோதும் சீர்குலைக்கப்படாமல் இருப்பதை உறுதிசெய்ய, சரிபார்ப்பவர்கள் தங்கள் ஸ்டேக் செய்யப்பட்ட ETH-ஐ உள்ளிட, வெளியேற அல்லது ஒன்றிணைக்க (ஒருங்கிணைக்க) கூடிய விகிதத்தில் உள்ள ஒரு பாதுகாப்பு வரம்பே Ethereum-இன் சர்ன் வரம்பு (churn limit) ஆகும் +- ஒரு சரிபார்ப்பவர் ஒருங்கிணைப்பு என்பது ஒரு நிலையான சரிபார்ப்பவர் வெளியேறுதலை விட அதிக நகரும் பகுதிகளைக் கொண்ட ஒரு கடினமான செயல் என்பதால், இது இந்தப் பாதுகாப்பு பட்ஜெட்டின் (சர்ன் வரம்பு) ஒரு பெரிய பகுதியைச் சாப்பிடுகிறது +- குறிப்பாக, ஒரு நிலையான வெளியேறுதலின் சரியான பாதுகாப்புச் செலவு ஒரு ஒருங்கிணைப்பின் செலவில் மூன்றில் இரண்டு பங்கு (2/3) என்று நெறிமுறை கட்டளையிடுகிறது -நியாயமான வெளியேறும் வரிசைகள், அதிக வெளியேறும் தேவை காலங்களில், ஒருங்கிணைப்பு வரிசையிலிருந்து பயன்படுத்தப்படாத இடத்தை நிலையான வெளியேறுகளுக்கு கடன் வாங்க அனுமதிக்கும், "3க்கு 2" பரிமாற்ற விகிதத்தைப் பயன்படுத்துகிறது (ஒவ்வொரு 2 பயன்படுத்தப்படாத ஒருங்கிணைப்பு இடங்களுக்கும், நெட்வொர்க் பாதுகாப்பாக 3 நிலையான வெளியேறுகளைச் செயல்படுத்த முடியும்). இந்த 3/2 சுழற்சி காரணி ஒருங்கிணைப்பு மற்றும் வெளியேறும் வரிசைகளில் தேவையை சமநிலைப்படுத்துகிறது. +நியாயமான வெளியேறும் வரிசைகள், அதிக வெளியேறும் தேவை உள்ள காலங்களில் ஒருங்கிணைப்பு வரிசையிலிருந்து பயன்படுத்தப்படாத இடத்தை நிலையான வெளியேறுதல்கள் கடன் வாங்க அனுமதிக்கும், இது "2-க்கு 3" பரிமாற்ற விகிதத்தைப் பயன்படுத்துகிறது (பயன்படுத்தப்படாத ஒவ்வொரு 2 ஒருங்கிணைப்பு இடங்களுக்கும், நெட்வொர்க் 3 நிலையான வெளியேறுதல்களைப் பாதுகாப்பாகச் செயலாக்க முடியும்). இந்த 3/2 சர்ன் காரணி ஒருங்கிணைப்பு மற்றும் வெளியேறும் வரிசைகளில் தேவையைச் சமநிலைப்படுத்துகிறது. -ஒருங்கிணைப்பு வரிசைக்கான அணுகலை ஜனநாயகப்படுத்துவது, நெட்வொர்க் பாதுகாப்பை சமரசம் செய்யாமல், அதிக தேவை காலங்களில் பயனர்கள் தங்கள் பங்கிலிருந்து வெளியேறக்கூடிய வேகத்தை 2.5 மடங்கு வரை அதிகரிக்கும். +ஒருங்கிணைப்பு வரிசைக்கான அணுகலை ஜனநாயகப்படுத்துவது, நெட்வொர்க் பாதுகாப்பை சமரசம் செய்யாமல், அதிகத் தேவையுள்ள காலங்களில் பயனர்கள் தங்கள் ஸ்டேக்கிலிருந்து வெளியேறும் வேகத்தை 2.5 மடங்கு வரை அதிகரிக்கும். **ஆதாரங்கள்**: [EIP-8080 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-8080) -## பயனர் மற்றும் டெவலப்பர் அனுபவத்தை மேம்படுத்துங்கள் {#improve-user-developer-experience} +## பயனர் மற்றும் டெவலப்பர் அனுபவத்தை மேம்படுத்துதல் {#improve-user-developer-experience} -Ethereum இன் Glamsterdam மேம்படுத்தல், பயனர் அனுபவத்தை மேம்படுத்துதல், தரவு கண்டறியும் திறனை அதிகரித்தல் மற்றும் ஒத்திசைவு தோல்விகளைத் தடுக்க அதிகரித்து வரும் செய்தி அளவுகளைக் கையாளுதல் ஆகியவற்றை நோக்கமாகக் கொண்டுள்ளது. நெட்வொர்க் அளவிடும் போது தொழில்நுட்ப சிக்கல்களைத் தடுக்கும் அதே வேளையில், சங்கிலியில் என்ன நடக்கிறது என்பதைக் கண்காணிப்பதை இது எளிதாக்குகிறது. +Ethereum-இன் Glamsterdam மேம்படுத்தல் பயனர் அனுபவத்தை மேம்படுத்துவதையும், தரவு கண்டறியும் திறனை மேம்படுத்துவதையும், ஒத்திசைவுத் தோல்விகளைத் தடுக்க அதிகரிக்கும் செய்தி அளவுகளைக் கையாளுவதையும் நோக்கமாகக் கொண்டுள்ளது. நெட்வொர்க் அளவிடப்படும்போது தொழில்நுட்ப விக்கல்களைத் தடுக்கும் அதே வேளையில், ஆன்செயினில் (onchain) என்ன நடக்கிறது என்பதைக் கண்காணிப்பதை இது எளிதாக்குகிறது. -### உள்ளார்ந்த பரிவர்த்தனை எரிவாயு செலவுகளைக் குறைக்கவும் {#reduce-intrinsic-transaction-gas-costs} +### உள்ளார்ந்த பரிவர்த்தனை எரிவாயு செலவுகளைக் குறைத்தல் {#reduce-intrinsic-transaction-gas-costs} -- பரிவர்த்தனைகளுக்கான அடிப்படை கட்டணத்தைக் குறைத்து, எளிய நேட்டிவ் ETH கட்டணத்தின் ஒட்டுமொத்த செலவைக் குறைக்கிறது. -- சிறிய பரிவர்த்தனைகளை மிகவும் மலிவு விலையில் கிடைக்கச் செய்கிறது, இது வழக்கமான பரிமாற்ற ஊடகமாக Ethereum இன் நம்பகத்தன்மையை அதிகரிக்கிறது. +- பரிவர்த்தனைகளுக்கான அடிப்படைக் கட்டணத்தைக் குறைக்கிறது, ஒரு எளிய நேட்டிவ் ETH கட்டணத்தின் ஒட்டுமொத்தச் செலவைக் குறைக்கிறது +- சிறிய இடமாற்றங்களை மிகவும் மலிவானதாக்குகிறது, வழக்கமான பரிமாற்ற ஊடகமாக Ethereum-இன் நம்பகத்தன்மையை அதிகரிக்கிறது -எல்லா Ethereum பரிவர்த்தனைகளுக்கும் இன்று ஒரு நிலையான அடிப்படை எரிவாயு கட்டணம் உள்ளது, அதைச் செயலாக்குவது எவ்வளவு எளிமையானது அல்லது சிக்கலானது என்பதைப் பொருட்படுத்தாமல். **உள்ளார்ந்த பரிவர்த்தனை எரிவாயுவைக் குறைத்தல் (அல்லது EIP-2780)** என்பது ஏற்கனவே உள்ள கணக்குகளுக்கு இடையில் ஒரு நிலையான ETH பரிமாற்றத்தை 71% வரை மலிவானதாக மாற்ற அந்த அடிப்படை கட்டணத்தைக் குறைப்பதை முன்மொழிகிறது. +செயலாக்க எவ்வளவு எளிமையானதாக அல்லது சிக்கலானதாக இருந்தாலும், அனைத்து Ethereum பரிவர்த்தனைகளும் இன்று ஒரு தட்டையான அடிப்படை எரிவாயு கட்டணத்தைக் கொண்டுள்ளன. **உள்ளார்ந்த பரிவர்த்தனை எரிவாயுவைக் குறைத்தல் (அல்லது EIP-2780)** தற்போதுள்ள கணக்குகளுக்கு இடையிலான நிலையான ETH பரிமாற்றத்தை **71% வரை மலிவானதாக** மாற்ற அந்த அடிப்படைக் கட்டணத்தைக் குறைக்க முன்மொழிகிறது. -பிணையத்தை இயக்கும் கணினிகள் உண்மையில் செய்யும் அடிப்படை, அத்தியாவசிய வேலைகளை மட்டுமே பிரதிபலிக்கும் வகையில் பரிவர்த்தனை கட்டணத்தை உடைப்பதன் மூலம் உள்ளார்ந்த பரிவர்த்தனை எரிவாயு வேலைகளைக் குறைக்கவும். ஒரு அடிப்படை ETH கட்டணம் சிக்கலான குறியீட்டை இயக்கவோ அல்லது கூடுதல் தரவை எடுத்துச் செல்லவோ இல்லை என்பதால், இந்த முன்மொழிவு அதன் இலகுரக தடத்தை பொருத்த அதன் கட்டணத்தைக் குறைக்கும். +டிஜிட்டல் கையொப்பத்தைச் சரிபார்த்தல் மற்றும் இருப்பைப் புதுப்பித்தல் போன்ற நெட்வொர்க்கை இயக்கும் கணினிகள் உண்மையில் செய்யும் அடிப்படை, அத்தியாவசிய வேலைகளை மட்டுமே பிரதிபலிக்கும் வகையில் பரிவர்த்தனைக் கட்டணத்தை உடைப்பதன் மூலம் உள்ளார்ந்த பரிவர்த்தனை எரிவாயுவைக் குறைத்தல் செயல்படுகிறது. ஒரு அடிப்படை ETH கட்டணம் சிக்கலான குறியீட்டை இயக்காது அல்லது கூடுதல் தரவைக் கொண்டு செல்லாது என்பதால், இந்த முன்மொழிவு அதன் இலகுரகத் தடயத்துடன் பொருந்துமாறு அதன் கட்டணத்தைக் குறைக்கும். -நெட்வொர்க்கின் நிலையை குறைந்த கட்டணங்கள் அதிகமாகாமல் தடுக்க, புத்தம் புதிய கணக்குகளை உருவாக்குவதற்கான விதிவிலக்கை இந்த முன்மொழிதல் அறிமுகப்படுத்துகிறது. ஒரு பரிமாற்றம் காலியாக உள்ள, இல்லாத முகவரிக்கு ETH ஐ அனுப்பினால், நெட்வொர்க் அதற்காக ஒரு நிரந்தர புதிய பதிவை உருவாக்க வேண்டும். அதன் நீண்டகால சேமிப்புச் சுமையை ஈடுகட்ட உதவும் வகையில், அந்தக் கணக்கு உருவாக்கத்திற்கு ஒரு எரிவாயு கூடுதல் கட்டணம் சேர்க்கப்படுகிறது. +குறைந்த கட்டணங்கள் நெட்வொர்க்கின் நிலையை மூழ்கடிப்பதைத் தடுக்க, புத்தம் புதிய கணக்குகளை உருவாக்குவதற்கான விதிவிலக்கை இந்த முன்மொழிவு அறிமுகப்படுத்துகிறது. ஒரு பரிமாற்றம் காலியான, இல்லாத முகவரிக்கு ETH-ஐ அனுப்பினால், நெட்வொர்க் அதற்காக ஒரு நிரந்தரப் புதிய பதிவை உருவாக்க வேண்டும். அதன் நீண்டகாலச் சேமிப்பகச் சுமையை ஈடுகட்ட அந்தக் கணக்கு உருவாக்கத்திற்கு எரிவாயு கூடுதல் கட்டணம் சேர்க்கப்படுகிறது. -ஒன்றாக, EIP-2780 ஏற்கனவே உள்ள கணக்குகளுக்கு இடையேயான தினசரி பரிமாற்றங்களை மிகவும் மலிவு விலையில் செய்வதை நோக்கமாகக் கொண்டுள்ளது, அதே நேரத்தில் உண்மையான நிலை வளர்ச்சியைத் துல்லியமாக விலை நிர்ணயிப்பதன் மூலம் நெட்வொர்க் தரவுத்தள வீக்கத்திலிருந்து பாதுகாக்கப்படுவதை உறுதி செய்கிறது. +ஒன்றாக, EIP-2780 தற்போதுள்ள கணக்குகளுக்கு இடையிலான அன்றாட இடமாற்றங்களை மிகவும் மலிவானதாக மாற்றுவதை நோக்கமாகக் கொண்டுள்ளது, அதே நேரத்தில் உண்மையான நிலை வளர்ச்சியைத் துல்லியமாக விலை நிர்ணயம் செய்வதன் மூலம் தரவுத்தள வீக்கத்திற்கு எதிராக நெட்வொர்க் இன்னும் பாதுகாக்கப்படுவதை உறுதிசெய்கிறது. **ஆதாரங்கள்**: [EIP-2780 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-2780) -### நிர்ணயிக்கப்பட்ட தொழிற்சாலை முன் வரிசைப்படுத்தல் {#deterministic-factory-predeploy} +### தீர்மானகரமான தொழிற்சாலை முன்-பயன்பாடு (Deterministic Factory Predeploy) {#deterministic-factory-predeploy} -- டெவலப்பர்களுக்கு, பல சங்கிலிகளில் ஒரே முகவரியில் பயன்பாடுகளையும் ஸ்மார்ட் ஒப்பந்த வாலட்களையும் பயன்படுத்த ஒரு நேட்டிவ் வழியை வழங்குகிறது. -- பயனர்கள் பல அடுக்கு 2 (L2) நெட்வொர்க்குகளில் ஒரே ஸ்மார்ட் வாலட் முகவரியைக் கொண்டிருக்க அனுமதிக்கிறது, இது அறிவாற்றல் சுமையைக் குறைக்கிறது, குழப்பத்தைக் குறைக்கிறது மற்றும் தற்செயலாக நிதி இழப்பு ஏற்படும் அபாயத்தைக் குறைக்கிறது. -- இந்த இணையை அடைய டெவலப்பர்கள் தற்போது பயன்படுத்தும் மாற்று வழிகளை இது மாற்றுகிறது, பல-சங்கிலி பணப்பைகள் மற்றும் பயன்பாடுகளை உருவாக்குவதை எளிதாகவும் பாதுகாப்பாகவும் மாற்றுகிறது. +- பல சங்கிலிகள் முழுவதும் ஒரே முகவரியில் பயன்பாடுகள் மற்றும் ஸ்மார்ட் ஒப்பந்த வாலெட்டுகளைப் பயன்படுத்த டெவலப்பர்களுக்கு ஒரு நேட்டிவ் வழியை வழங்குகிறது +- பல அடுக்கு 2 (L2) நெட்வொர்க்குகளில் பயனர்கள் ஒரே ஸ்மார்ட் வாலெட் முகவரியைக் கொண்டிருக்க அனுமதிக்கிறது, அறிவாற்றல் சுமையைக் குறைக்கிறது, குழப்பத்தைக் குறைக்கிறது மற்றும் தற்செயலான நிதி இழப்பு அபாயத்தைக் குறைக்கிறது +- இந்தச் சமநிலையை அடைய டெவலப்பர்கள் தற்போது பயன்படுத்தும் தீர்வுகளை மாற்றுகிறது, பல-சங்கிலி வாலெட்டுகள் மற்றும் பயன்பாடுகளை உருவாக்குவதை எளிதாகவும் பாதுகாப்பாகவும் ஆக்குகிறது -ஒரு பயனருக்கு இன்று பல Ethereum Virtual Machine (EVM)-இணக்கமான சங்கிலிகளில் கணக்குகளைக் கொண்ட ஒரு ஸ்மார்ட் ஒப்பந்த வாலட் இருந்தால், அவர்கள் பெரும்பாலும் வெவ்வேறு நெட்வொர்க்குகளில் முற்றிலும் மாறுபட்ட முகவரியுடன் முடிவடைகிறார்கள். இது குழப்பத்தை ஏற்படுத்துவது மட்டுமல்லாமல், தற்செயலாக நிதி இழப்புக்கும் வழிவகுக்கும். +இன்று ஒரு பயனர் பல Ethereum மெய்நிகர் இயந்திரம் (EVM)-இணக்கமான சங்கிலிகள் முழுவதும் கணக்குகளைக் கொண்ட ஸ்மார்ட் ஒப்பந்த வாலெட்டைக் கொண்டிருந்தால், அவர்கள் பெரும்பாலும் வெவ்வேறு நெட்வொர்க்குகளில் முற்றிலும் மாறுபட்ட முகவரியைக் கொண்டிருப்பார்கள். இது குழப்பமானது மட்டுமல்ல, தற்செயலான நிதி இழப்புக்கும் வழிவகுக்கும். -**நிர்ணயிக்கப்பட்ட தொழிற்சாலை முன் வரிசைப்படுத்தல் (அல்லது EIP-7997)** டெவலப்பர்களுக்கு அவர்களின் பரவலாக்கப்பட்ட பயன்பாடுகள் மற்றும் ஸ்மார்ட் ஒப்பந்த வாலட்களை Ethereum Mainnet, layer 2 (L2) நெட்வொர்க்குகள் மற்றும் பலவற்றை உள்ளடக்கிய பல EVM சங்கிலிகளில் ஒரே முகவரிக்கு வரிசைப்படுத்த ஒரு உள்ளமைக்கப்பட்ட வழியை வழங்குகிறது. ஏற்றுக்கொள்ளப்பட்டால், பயனர் பங்கேற்கும் ஒவ்வொரு சங்கிலியிலும் ஒரே முகவரியைக் கொண்டிருக்க இது அனுமதிக்கும், இது அறிவாற்றல் சுமையையும் பயனர் பிழைக்கான சாத்தியத்தையும் கணிசமாகக் குறைக்கிறது. +**தீர்மானகரமான தொழிற்சாலை முன்-பயன்பாடு (அல்லது EIP-7997)** டெவலப்பர்கள் தங்கள் பரவலாக்கப்பட்ட பயன்பாடுகள் மற்றும் ஸ்மார்ட் ஒப்பந்த வாலெட்டுகளை Ethereum Mainnet, அடுக்கு 2 (L2) நெட்வொர்க்குகள் மற்றும் பலவற்றை உள்ளடக்கிய பல EVM சங்கிலிகள் முழுவதும் ஒரே முகவரியில் பயன்படுத்த ஒரு நேட்டிவ், உள்ளமைக்கப்பட்ட வழியை வழங்குகிறது. ஏற்றுக்கொள்ளப்பட்டால், ஒவ்வொரு பங்கேற்கும் சங்கிலியிலும் பயனர்கள் ஒரே முகவரியைக் கொண்டிருக்க இது அனுமதிக்கும், இது அறிவாற்றல் சுமையையும் பயனர் பிழைக்கான சாத்தியத்தையும் கணிசமாகக் குறைக்கும். -நிர்ணயிக்கப்பட்ட தொழிற்சாலை முன் வரிசைப்படுத்தல், பங்கேற்கும் ஒவ்வொரு EVM-இணக்கமான சங்கிலியிலும் ஒரு குறைந்தபட்ச, சிறப்பு தொழிற்சாலை நிரலை ஒரே மாதிரியான இடத்தில் (குறிப்பாக, முகவரி 0x12) நிரந்தரமாக வைப்பதன் மூலம் செயல்படுகிறது. இதன் இலக்கு, எந்த EVM-இணக்கமான நெட்வொர்க்காலும் ஏற்றுக்கொள்ளக்கூடிய ஒரு உலகளாவிய, நிலையான தொழிற்சாலை ஒப்பந்தத்தை வழங்குவதாகும்; ஒரு EVM சங்கிலி பங்கேற்று இந்த தரத்தை ஏற்றுக்கொள்ளும் வரை, டெவலப்பர்கள் தங்கள் ஸ்மார்ட் ஒப்பந்தங்களை அந்த நெட்வொர்க்கில் உள்ள அதே முகவரியில் வரிசைப்படுத்த இதைப் பயன்படுத்த முடியும். +ஒவ்வொரு பங்கேற்கும் EVM-இணக்கமான சங்கிலியிலும் ஒரே மாதிரியான இடத்தில் (குறிப்பாக, முகவரி 0x12) ஒரு குறைந்தபட்ச, சிறப்புத் தொழிற்சாலை நிரலை நிரந்தரமாக வைப்பதன் மூலம் தீர்மானகரமான தொழிற்சாலை முன்-பயன்பாடு செயல்படுகிறது. எந்தவொரு EVM-இணக்கமான நெட்வொர்க்காலும் ஏற்றுக்கொள்ளக்கூடிய உலகளாவிய, நிலையான தொழிற்சாலை ஒப்பந்தத்தை வழங்குவதே இதன் குறிக்கோள்; ஒரு EVM சங்கிலி பங்கேற்று இந்தத் தரநிலையை ஏற்றுக்கொள்ளும் வரை, டெவலப்பர்கள் அந்த நெட்வொர்க்கில் உள்ள அதே முகவரியில் தங்கள் ஸ்மார்ட் ஒப்பந்தங்களைப் பயன்படுத்த இதைப் பயன்படுத்த முடியும். -இந்த தரப்படுத்தல், டெவலப்பர்கள் மற்றும் பரந்த சுற்றுச்சூழல் அமைப்புக்கு குறுக்கு-சங்கிலி பயன்பாடுகளை உருவாக்குவதையும் நிர்வகிப்பதையும் எளிதாக்குகிறது. டெவலப்பர்கள் இனி வெவ்வேறு நெட்வொர்க்குகளில் தங்கள் மென்பொருளை ஒன்றாக இணைக்க தனிப்பயன், சங்கிலி சார்ந்த குறியீட்டை உருவாக்க வேண்டியதில்லை, மாறாக இந்த உலகளாவிய தொழிற்சாலையைப் பயன்படுத்தி தங்கள் பயன்பாட்டிற்கு எல்லா இடங்களிலும் ஒரே மாதிரியான முகவரியை உருவாக்கலாம். கூடுதலாக, பிளாக் எக்ஸ்ப்ளோரர்கள், கண்காணிப்பு சேவைகள் மற்றும் வாலட்கள் இந்த பயன்பாடுகளையும் கணக்குகளையும் பல்வேறு சங்கிலிகளில் எளிதாக அடையாளம் கண்டு இணைக்க முடியும், இது அனைத்து Ethereum-அடிப்படையிலான பங்கேற்பாளர்களுக்கும் மிகவும் ஒருங்கிணைந்த மற்றும் தடையற்ற பல-சங்கிலி சூழலை உருவாக்குகிறது. +இந்தத் தரப்படுத்தல் டெவலப்பர்கள் மற்றும் பரந்த சுற்றுச்சூழல் அமைப்புக்கான குறுக்கு-சங்கிலி (cross-chain) பயன்பாடுகளை உருவாக்குவதையும் நிர்வகிப்பதையும் எளிதாக்குகிறது. டெவலப்பர்கள் இனி வெவ்வேறு நெட்வொர்க்குகள் முழுவதும் தங்கள் மென்பொருளை ஒன்றாக இணைக்கத் தனிப்பயன், சங்கிலி-குறிப்பிட்ட குறியீட்டை உருவாக்க வேண்டியதில்லை, அதற்குப் பதிலாக எல்லா இடங்களிலும் தங்கள் பயன்பாட்டிற்கான அதே முகவரியை உருவாக்க இந்த உலகளாவிய தொழிற்சாலையைப் பயன்படுத்தலாம். கூடுதலாக, பிளாக் எக்ஸ்ப்ளோரர்கள், கண்காணிப்புச் சேவைகள் மற்றும் வாலெட்டுகள் பல்வேறு சங்கிலிகள் முழுவதும் இந்தப் பயன்பாடுகள் மற்றும் கணக்குகளை மிக எளிதாக அடையாளம் கண்டு இணைக்க முடியும், இது அனைத்து Ethereum-அடிப்படையிலான பங்கேற்பாளர்களுக்கும் மிகவும் ஒருங்கிணைந்த மற்றும் தடையற்ற பல-சங்கிலி சூழலை உருவாக்குகிறது. **ஆதாரங்கள்**: [EIP-7997 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-7997) -### ETH பரிமாற்றங்கள் மற்றும் எரிப்பு ஒரு பதிவை வெளியிடுகின்றன {#eth-transfers-and-burns-emit-a-log} +### ETH இடமாற்றங்கள் மற்றும் எரிப்புகள் ஒரு பதிவை (log) வெளியிடுகின்றன {#eth-transfers-and-burns-emit-a-log} -- ETH பரிமாற்றம் செய்யப்படும் அல்லது எரிக்கப்படும் ஒவ்வொரு முறையும் தானாகவே ஒரு நிரந்தர பதிவை (பதிவு) உருவாக்குகிறது. -- தற்காலிக கண்காணிப்பு கருவிகள் இல்லாமல், பயனர்களின் வைப்புத்தொகைகளை நம்பகத்தன்மையுடன் கண்டறிய பயன்பாடுகள், பரிமாற்றங்கள் மற்றும் பாலங்கள் ஆகியவற்றை அனுமதிக்கும் ஒரு வரலாற்று குறைபாட்டை சரிசெய்கிறது. +- ஒவ்வொரு முறையும் ETH மாற்றப்படும்போது அல்லது எரிக்கப்படும்போது தானாகவே ஒரு நிரந்தரப் பதிவை (log) உருவாக்குகிறது +- தற்காலிகக் கண்காணிப்புக் கருவிகள் இல்லாமல் பயனர் வைப்புகளை நம்பகத்தன்மையுடன் கண்டறியப் பயன்பாடுகள், பரிமாற்றங்கள் மற்றும் பாலங்களை அனுமதிக்கும் ஒரு வரலாற்று குருட்டுப் புள்ளியைச் சரிசெய்கிறது -டோக்கன்களைப் (ERC-20s) போலல்லாமல், ஸ்மார்ட் ஒப்பந்தங்களுக்கு இடையேயான வழக்கமான ETH பரிமாற்றங்கள் தெளிவான ரசீதை (நிலையான பதிவை) வெளியிடாது, இதனால் பரிமாற்றங்கள் மற்றும் பயன்பாடுகள் அவற்றைக் கண்காணிப்பது கடினமாகிறது. +டோக்கன்களைப் (ERC-20s) போலல்லாமல், ஸ்மார்ட் ஒப்பந்தங்களுக்கு இடையிலான வழக்கமான ETH இடமாற்றங்கள் தெளிவான ரசீதை (நிலையான பதிவு) வெளியிடுவதில்லை, இதனால் பரிமாற்றங்கள் மற்றும் பயன்பாடுகள் அவற்றைக் கண்காணிப்பது கடினமாகிறது. -ETH பரிமாற்றங்கள் மற்றும் எரித்தல் ஒரு பதிவை (அல்லது EIP-7708) வெளியிடுகிறது, இது பூஜ்ஜியமற்ற அளவு ETH நகர்த்தப்படும் அல்லது எரிக்கப்படும் ஒவ்வொரு முறையும் நெட்வொர்க் ஒரு நிலையான பதிவு நிகழ்வை வெளியிடுவதை கட்டாயமாக்குகிறது. +ETH இடமாற்றங்கள் மற்றும் எரிப்புகள் ஒரு பதிவை வெளியிடுகின்றன (அல்லது EIP-7708) ஒவ்வொரு முறையும் பூஜ்ஜியமற்ற அளவு ETH நகர்த்தப்படும்போது அல்லது எரிக்கப்படும்போது நெட்வொர்க் ஒரு நிலையான பதிவு நிகழ்வை வெளியிடுவதைக் கட்டாயமாக்குகிறது. -இது வாலட்கள், பரிமாற்றங்கள் மற்றும் பிரிட்ஜ் ஆபரேட்டர்கள் தனிப்பயன் கருவிகள் இல்லாமல் டெபாசிட்கள் மற்றும் நகர்வுகளைத் துல்லியமாகக் கண்காணிக்க மிகவும் எளிதாகவும் நம்பகத்தன்மையுடனும் செய்யும். +தனிப்பயன் கருவிகள் இல்லாமல் வைப்புகள் மற்றும் நகர்வுகளைத் துல்லியமாகக் கண்காணிக்க வாலெட்டுகள், பரிமாற்றங்கள் மற்றும் பால இயக்குபவர்களுக்கு இது மிகவும் எளிதாகவும் நம்பகமானதாகவும் இருக்கும். **ஆதாரங்கள்**: [EIP-7708 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-7708) ### eth/70 பகுதி தொகுதி ரசீது பட்டியல்கள் {#eth-70-partial-block-receipt-lists} -Ethereum செய்யக்கூடிய வேலையின் அளவை அதிகரிக்கும்போது, அந்த செயல்களுக்கான ரசீதுகளின் பட்டியல்கள் (இந்த பரிவர்த்தனைகளின் தரவு பதிவுகள்) மிகவும் பெரியதாகி வருகின்றன, அவை ஒன்றோடொன்று தரவை ஒத்திசைக்க முயற்சிக்கும்போது நெட்வொர்க்கின் முனைகள் தோல்வியடையக்கூடும். +Ethereum செய்யக்கூடிய வேலையின் அளவை நாம் அதிகரிக்கும்போது, அந்தச் செயல்களுக்கான ரசீதுகளின் பட்டியல்கள் (இந்தப் பரிவர்த்தனைகளின் தரவுப் பதிவுகள்) மிகப் பெரியதாகி வருகின்றன, அவை ஒன்றோடொன்று தரவை ஒத்திசைக்க முயற்சிக்கும்போது நெட்வொர்க்கின் முனைகளைத் தோல்வியடையச் செய்யக்கூடும். -eth/70 பகுதி தொகுதி ரசீது பட்டியல்கள் (அல்லது EIP-7975) முனைகள் ஒன்றுக்கொன்று பேச ஒரு புதிய வழியை அறிமுகப்படுத்துகிறது (eth/70) இது இந்த பெரிய பட்டியல்களை சிறிய, மிகவும் நிர்வகிக்கக்கூடிய பகுதிகளாக உடைக்க அனுமதிக்கிறது. eth/70 நெட்வொர்க்கின் தொடர்பு நெறிமுறைக்கான ஒரு பக்கமாக்கல் அமைப்பை அறிமுகப்படுத்துகிறது, இது முனைகள் தொகுதி ரசீது பட்டியல்களை உடைத்து, சிறிய, மிகவும் நிர்வகிக்கக்கூடிய துண்டுகளில் தரவை பாதுகாப்பாக கோர அனுமதிக்கிறது. +eth/70 பகுதி தொகுதி ரசீது பட்டியல்கள் (அல்லது EIP-7975) முனைகள் ஒன்றோடொன்று பேசுவதற்கான புதிய வழியை (eth/70) அறிமுகப்படுத்துகிறது, இது இந்தப் பெரிய பட்டியல்களைச் சிறிய, நிர்வகிக்கக்கூடிய துண்டுகளாக உடைக்க அனுமதிக்கிறது. eth/70 நெட்வொர்க்கின் தகவல் தொடர்பு நெறிமுறைக்கான ஒரு பக்கமாக்கல் அமைப்பை (pagination system) அறிமுகப்படுத்துகிறது, இது முனைகளைத் தொகுதி ரசீது பட்டியல்களை உடைக்கவும், சிறிய, நிர்வகிக்கக்கூடிய துண்டுகளாகத் தரவைப் பாதுகாப்பாகக் கோரவும் அனுமதிக்கிறது. -இந்த மாற்றம் அதிக செயல்பாட்டு காலங்களில் நெட்வொர்க் ஒத்திசைவு தோல்விகளைத் தடுக்கும். இறுதியில், இது Ethereum அதன் தொகுதி திறனை அதிகரிக்கவும், சங்கிலியை ஒத்திசைக்கும் இயற்பியல் வன்பொருளை அதிக சுமைக்கு உள்ளாக்காமல், எதிர்காலத்தில் ஒரு தொகுதிக்கு அதிக பரிவர்த்தனைகளைச் செயல்படுத்தவும் வழி வகுக்கிறது. +இந்த மாற்றம் அதிகச் செயல்பாட்டுக் காலங்களில் நெட்வொர்க் ஒத்திசைவுத் தோல்விகளைத் தடுக்கும். இறுதியில், சங்கிலியை ஒத்திசைக்கும் இயற்பியல் வன்பொருளை மூழ்கடிக்காமல், எதிர்காலத்தில் Ethereum அதன் தொகுதித் திறனை அதிகரிக்கவும், ஒரு தொகுதிக்கு அதிகப் பரிவர்த்தனைகளைச் செயலாக்கவும் இது வழி வகுக்கிறது. **ஆதாரங்கள்**: [EIP-7975 தொழில்நுட்ப விவரக்குறிப்பு](https://eips.ethereum.org/EIPS/eip-7975) ## மேலும் படிக்க {#further-reading} -- [எத்தேரியம் சாலை வரைபடம்](/roadmap/) -- [ஃபோர்காஸ்ட்: கிளாமாஸ்டர்டேம்](https://forkcast.org/upgrade/glamsterdam) -- [கிளாம்ஸ்டர்டேம் மெட்டா EIP](https://eips.ethereum.org/EIPS/eip-7773) -- [2026க்கான நெறிமுறை முன்னுரிமைகள் புதுப்பிப்பு வலைப்பதிவு அறிவிப்பு](https://blog.ethereum.org/2026/02/18/protocol-priorities-update-2026) -- [டெய்லி ஜிவே ரீஃப்யூல் பாட்காஸ்ட் - போஸ்ட்-குவாண்டம் எத்திரியம், கிளாம்ஸ்டர்டேம் வருகிறது](https://www.youtube.com/watch?v=qx9sd50uQjQ) +- [Ethereum வழிகாட்டி](/roadmap/) +- [Forkcast: Glamsterdam](https://forkcast.org/upgrade/glamsterdam) +- [Glamsterdam Meta EIP](https://eips.ethereum.org/EIPS/eip-7773) +- [2026-க்கான நெறிமுறை முன்னுரிமைகள் புதுப்பிப்பு வலைப்பதிவு அறிவிப்பு](https://blog.ethereum.org/2026/02/18/protocol-priorities-update-2026) +- [The Daily Gwei Refuel பாட்காஸ்ட் - போஸ்ட்-குவாண்டம் Ethereum, Glamsterdam வருகிறது](https://www.youtube.com/watch?v=qx9sd50uQjQ) + +## அடிக்கடி கேட்கப்படும் கேள்விகள் (FAQ) {#faq} -## அடிக்கடி கேட்கப்படும் கேள்விகள் {#faq} +### Glamsterdam ஹார்ட் ஃபோர்க்கிற்குப் பிறகு ETH-ஐ எவ்வாறு மாற்றுவது? {#how-can-eth-be-converted-after-the-hardfork} -### கிளாம்ஸ்டெர்டாம் ஹார்ட் ஃபோர்க்கிற்குப் பிறகு ETH ஐ எவ்வாறு மாற்றலாம்? {#how-can-eth-be-converted-after-the-hardfork} +- **உங்கள் ETH-க்கு எந்த நடவடிக்கையும் தேவையில்லை**: Glamsterdam மேம்படுத்தலைத் தொடர்ந்து உங்கள் ETH-ஐ மாற்றவோ அல்லது மேம்படுத்தவோ தேவையில்லை. உங்கள் கணக்கு இருப்புகள் அப்படியே இருக்கும், மேலும் நீங்கள் தற்போது வைத்திருக்கும் ETH ஹார்ட் ஃபோர்க்கிற்குப் பிறகு அதன் தற்போதைய வடிவத்தில் அணுகக்கூடியதாக இருக்கும். +- **மோசடிகள் குறித்து எச்சரிக்கையாக இருங்கள்!**  **உங்கள் ETH-ஐ "மேம்படுத்த" அறிவுறுத்தும் எவரும் உங்களை ஏமாற்ற முயற்சிக்கிறார்கள்.** இந்த மேம்படுத்தல் தொடர்பாக நீங்கள் செய்ய வேண்டியது எதுவுமில்லை. உங்கள் சொத்துக்கள் முற்றிலும் பாதிக்கப்படாமல் இருக்கும். நினைவில் கொள்ளுங்கள், தகவலறிந்து இருப்பதே மோசடிகளுக்கு எதிரான சிறந்த பாதுகாப்பாகும். -- **உங்கள் ETHக்கு எந்த நடவடிக்கையும் தேவையில்லை**: கிளாம்ஸ்டர்டேம் மேம்படுத்தலுக்குப் பிறகு உங்கள் ETHஐ மாற்றவோ மேம்படுத்தவோ தேவையில்லை. உங்கள் கணக்கு இருப்புகள் அப்படியே இருக்கும், மேலும் நீங்கள் தற்போது வைத்திருக்கும் ETH ஹார்ட் ஃபோர்க்கிற்குப் பிறகு அதன் தற்போதைய வடிவத்தில் அணுகக்கூடியதாக இருக்கும். -- **மோசடிகளில் இருந்து எச்சரிக்கையாக இருங்கள்!** **உங்கள் ETH ஐ "மேம்படுத்த" உங்களுக்கு அறிவுறுத்தும் எவரும் உங்களை ஏமாற்ற முயற்சிக்கிறார்கள்.** இந்த மேம்படுத்தலைப் பொறுத்தவரை நீங்கள் செய்ய வேண்டியது எதுவும் இல்லை. உங்கள் சொத்துக்கள் முற்றிலும் பாதிக்கப்படாமல் இருக்கும். நினைவில் கொள்ளுங்கள், தகவலறிந்திருப்பது மோசடிகளுக்கு எதிரான சிறந்த பாதுகாப்பாகும். +[மோசடிகளை அங்கீகரிப்பது மற்றும் தவிர்ப்பது பற்றி மேலும் அறிய](/security/) -[மோசடிகளை அடையாளம் கண்டு தவிர்ப்பது பற்றிய கூடுதல் தகவல்கள்](/security/) +### Glamsterdam மேம்படுத்தல் அனைத்து Ethereum முனைகள் மற்றும் சரிபார்ப்பவர்களைப் பாதிக்குமா? {#does-the-glamsterdam-upgrade-affect-all-ethereum-nodes-and-validators} -### கிளாம்ஸ்டெர்டாம் மேம்படுத்தல் அனைத்து Ethereum நோடுகள் மற்றும் வேலிடேட்டர்களையும் பாதிக்குமா? {#does-the-glamsterdam-upgrade-affect-all-ethereum-nodes-and-validators} +ஆம், Glamsterdam மேம்படுத்தலுக்கு [செயலாக்க கிளையண்டுகள் மற்றும் ஒருங்கிணைவு கிளையண்டுகள்](/developers/docs/nodes-and-clients/) இரண்டிலும் புதுப்பிப்புகள் தேவை. இந்த மேம்படுத்தல் உறுதிசெய்யப்பட்ட முன்மொழிபவர்-உருவாக்குபவர் பிரிப்பை (ePBS) அறிமுகப்படுத்துவதால், நெட்வொர்க்கால் தொகுதிகள் உருவாக்கப்படும், சரிபார்க்கப்படும் மற்றும் சான்றளிக்கப்படும் புதிய வழிகளைக் கையாளத் தங்கள் கிளையண்டுகள் புதுப்பிக்கப்பட்டுள்ளதை முனை இயக்குபவர்கள் உறுதிசெய்ய வேண்டும். -ஆம், Glamsterdam மேம்படுத்தலுக்கு [செயல்படுத்தும் கிளையண்டுகள் மற்றும் ஒருமித்த கிளையண்டுகள்](/developers/docs/nodes-and-clients/) இரண்டிற்கும் புதுப்பிப்புகள் தேவை. இந்த மேம்படுத்தல் Enshrined Proposer-Builder Separation (ePBS) ஐ அறிமுகப்படுத்துவதால், புதிய வழிகளில் தொகுதிகள் எவ்வாறு உருவாக்கப்படுகின்றன, சரிபார்க்கப்படுகின்றன மற்றும் நெட்வொர்க்கால் சான்றளிக்கப்படுகின்றன என்பதைக் கையாள தங்கள் கிளையண்டுகள் புதுப்பிக்கப்பட்டுள்ளதா என்பதை நோட் ஆபரேட்டர்கள் உறுதிப்படுத்த வேண்டும். +அனைத்து முக்கிய Ethereum கிளையண்டுகளும் அதிக முன்னுரிமை எனக் குறிக்கப்பட்ட ஹார்ட் ஃபோர்க்கை ஆதரிக்கும் பதிப்புகளை வெளியிடும். கிளையண்ட் GitHub ரெப்போக்கள், அவற்றின் [Discord சேனல்கள்](https://ethstaker.org/support), [EthStaker Discord](https://dsc.gg/ethstaker) ஆகியவற்றில் இந்த வெளியீடுகள் எப்போது கிடைக்கும் என்பதை நீங்கள் தெரிந்துகொள்ளலாம் அல்லது நெறிமுறைப் புதுப்பிப்புகளுக்கு Ethereum வலைப்பதிவிற்குச் சந்தாதாரராகலாம். -அனைத்து முக்கிய Ethereum கிளையண்ட்களும் உயர் முன்னுரிமையாகக் குறிக்கப்பட்ட ஹார்ட் ஃபோர்க்கை ஆதரிக்கும் பதிப்புகளை வெளியிடுவார்கள். இந்த வெளியீடுகள் எப்போது கிடைக்கும் என்பதை கிளையண்ட் GitHub களஞ்சியங்கள், அவற்றின் [Discord சேனல்கள்](https://ethstaker.org/support), [EthStaker Discord](https://dsc.gg/ethstaker) ஆகியவற்றில் நீங்கள் தெரிந்துகொள்ளலாம் அல்லது நெறிமுறை புதுப்பிப்புகளுக்கு Ethereum வலைப்பதிவிற்கு குழுசேரலாம். +மேம்படுத்தலுக்குப் பிந்தைய Ethereum நெட்வொர்க்குடன் ஒத்திசைவைப் பராமரிக்க, முனை இயக்குபவர்கள் ஆதரிக்கப்படும் கிளையண்ட் பதிப்பை இயக்குவதை உறுதிசெய்ய வேண்டும். கிளையண்ட் வெளியீடுகள் பற்றிய தகவல்கள் நேர-உணர்திறன் கொண்டவை என்பதை நினைவில் கொள்ளவும், மேலும் பயனர்கள் மிகவும் தற்போதைய விவரங்களுக்குச் சமீபத்திய புதுப்பிப்புகளைப் பார்க்க வேண்டும். -மேம்படுத்தலுக்குப் பிறகு Ethereum நெட்வொர்க்குடன் ஒத்திசைவைப் பராமரிக்க, நோட் ஆபரேட்டர்கள் தாங்கள் ஆதரிக்கப்படும் கிளையன்ட் பதிப்பை இயக்குவதை உறுதிசெய்ய வேண்டும். கிளையன்ட் வெளியீடுகள் பற்றிய தகவல்கள் காலத்திற்கு ஏற்ப மாறுபடும் என்பதை நினைவில் கொள்ளவும், மேலும் பயனர்கள் மிகவும் தற்போதைய விவரங்களுக்கு சமீபத்திய புதுப்பிப்புகளைப் பார்க்க வேண்டும். +### ஒரு ஸ்டேக்கராக, Glamsterdam மேம்படுத்தலுக்கு நான் என்ன செய்ய வேண்டும்? {#as-a-staker-what-do-i-need-to-do-for-the-glamsterdam-upgrade} -### ஒரு ஸ்டேக்கராக, கிளாம்ஸ்டெர்டாம் மேம்படுத்தலுக்கு நான் என்ன செய்ய வேண்டும்? {#as-a-staker-what-do-i-need-to-do-for-the-glamsterdam-upgrade} +ஒவ்வொரு நெட்வொர்க் மேம்படுத்தலையும் போலவே, Glamsterdam ஆதரவுடன் குறிக்கப்பட்ட சமீபத்திய பதிப்புகளுக்கு உங்கள் கிளையண்டுகளைப் புதுப்பிப்பதை உறுதிசெய்யவும். வெளியீடுகள் பற்றித் தெரிந்துகொள்ள அஞ்சல் பட்டியல் மற்றும் [EF வலைப்பதிவில் உள்ள நெறிமுறை அறிவிப்புகளில் (Protocol Announcements)](https://blog.ethereum.org/category/protocol) உள்ள புதுப்பிப்புகளைப் பின்பற்றவும். -ஒவ்வொரு நெட்வொர்க் மேம்படுத்தலைப் போலவே, உங்கள் கிளையன்ட்களை Glamsterdam ஆதரவுடன் குறிக்கப்பட்ட சமீபத்திய பதிப்புகளுக்குப் புதுப்பிக்கவும். வெளியீடுகள் பற்றிய தகவல்களைப் பெற, அஞ்சல் பட்டியலில் உள்ள புதுப்பிப்புகளையும் [EF வலைப்பதிவில் உள்ள நெறிமுறை அறிவிப்புகளையும்](https://blog.ethereum.org/category/protocol) பின்பற்றவும். +Mainnet-இல் Glamsterdam செயல்படுத்தப்படுவதற்கு முன்பு உங்கள் அமைப்பைச் சரிபார்க்க, நீங்கள் டெஸ்ட்நெட்களில் (testnets) ஒரு சரிபார்ப்பவரை இயக்கலாம். டெஸ்ட்நெட் ஃபோர்க்குகளும் அஞ்சல் பட்டியல் மற்றும் வலைப்பதிவில் அறிவிக்கப்படுகின்றன. -மெயின்நெட்டில் கிளாம்ஸ்டெர்டேம் செயல்படுத்தப்படுவதற்கு முன்பு உங்கள் அமைப்பைச் சரிபார்க்க, நீங்கள் சோதனைவலைப்பின்னல்களில் ஒரு சரிபார்ப்பாளரை இயக்கலாம். சோதனைவலைப்பின்னல் ஃபோர்க்குகள் அஞ்சல் பட்டியலிலும் வலைப்பதிவிலும் அறிவிக்கப்படுகின்றன. +### L1 அளவிடுதலுக்கு Glamsterdam என்ன மேம்பாடுகளை உள்ளடக்கும்? {#what-improvements-will-glamsterdam-include-for-l1-scaling} -### L1 அளவீட்டிற்காக Glamsterdam என்னென்ன மேம்பாடுகளை உள்ளடக்கும்? {#what-improvements-will-glamsterdam-include-for-l1-scaling} +முக்கிய அம்சம் ePBS (EIP-7732) ஆகும், இது நெட்வொர்க் பரிவர்த்தனைகளைச் சரிபார்க்கும் கடினமான பணியை ஒருங்கிணைவை எட்டும் பணியிலிருந்து பிரிக்கிறது. இது தரவுப் பரப்புதல் சாளரத்தை 2 வினாடிகளிலிருந்து தோராயமாக 9 வினாடிகளாக விரிவுபடுத்துகிறது, அதிகப் பரிவர்த்தனைச் செயல்திறனைப் பாதுகாப்பாகக் கையாளும் மற்றும் அடுக்கு 2 நெட்வொர்க்குகளுக்கு அதிகத் தரவு ப்ளாப்களுக்கு இடமளிக்கும் Ethereum-இன் திறனைத் தடைநீக்குகிறது. -முக்கிய அம்சம் ePBS (EIP-7732) ஆகும், இது நெட்வொர்க் பரிவர்த்தனைகளைச் சரிபார்க்கும் கடினமான பணியை ஒருமித்த கருத்தை அடையும் பணியிலிருந்து பிரிக்கிறது. இது தரவு பரவல் சாளரத்தை 2 வினாடிகளில் இருந்து தோராயமாக 9 வினாடிகள் வரை விரிவுபடுத்துகிறது, Ethereum இன் அதிக பரிவர்த்தனை செயல்திறனைப் பாதுகாப்பாகக் கையாளும் திறனைத் தடுக்கிறது மற்றும் அடுக்கு 2 நெட்வொர்க்குகளுக்கு அதிக தரவு பிளாப்களைச் சேர்க்கிறது. +### Glamsterdam Ethereum-இல் (அடுக்கு 1) கட்டணங்களைக் குறைக்குமா? {#will-glamsterdam-lower-fees-on-ethereum-layer-1} -### Ethereum (Layer 1) இல் Glamsterdam கட்டணங்களைக் குறைக்குமா? {#will-glamsterdam-lower-fees-on-ethereum-layer-1} +ஆம், Glamsterdam அன்றாடப் பயனர்களுக்கான கட்டணங்களைக் குறைக்கும்! உள்ளார்ந்த பரிவர்த்தனை எரிவாயுவைக் குறைத்தல் (அல்லது EIP-2780) ETH-ஐ அனுப்புவதற்கான அடிப்படைக் கட்டணத்தைக் குறைக்கிறது, அன்றாடக் கொடுப்பனவுகளுக்குப் பயன்படுத்த ETH-ஐ மிகவும் மலிவானதாக்குகிறது. -ஆம், Glamsterdam தினசரி பயனர்களுக்கான கட்டணங்களைக் குறைக்கும்! உள்ளார்ந்த பரிவர்த்தனை எரிவாயுவை (அல்லது EIP-2780) குறைப்பது ETH அனுப்புவதற்கான அடிப்படை கட்டணத்தைக் குறைக்கிறது, இதனால் தினசரி கொடுப்பனவுகளுக்கு ETH ஐப் பயன்படுத்துவது மிகவும் மலிவானதாகிறது. +கூடுதலாக, நீண்டகால நிலைத்தன்மைக்காக, Glamsterdam தொகுதி-நிலை அணுகல் பட்டியல்களை (BALs) அறிமுகப்படுத்துகிறது. இது இணையான செயலாக்கத்தைச் செயல்படுத்துகிறது மற்றும் எதிர்காலத்தில் அதிக ஒட்டுமொத்த எரிவாயு வரம்புகளைப் பாதுகாப்பாகக் கையாள L1-ஐத் தயார் செய்கிறது, இது திறன் வளரும்போது ஒரு பரிவர்த்தனைக்கான எரிவாயு செலவுகளைக் குறைக்கும். -கூடுதலாக, நீண்டகால நிலைத்தன்மைக்காக, கிளாம்ஸ்டர்டாம் தொகுதி-நிலை அணுகல் பட்டியல்களை (BALs) அறிமுகப்படுத்துகிறது. இது இணை செயலாக்கத்தை செயல்படுத்துகிறது மற்றும் எதிர்காலத்தில் அதிக ஒட்டுமொத்த எரிவாயு வரம்புகளை பாதுகாப்பாகக் கையாள L1 ஐத் தயார்படுத்துகிறது, இது திறன் வளரும்போது பரிவர்த்தனைக்கு எரிவாயு செலவுகளைக் குறைக்கும். +### Glamsterdam-க்குப் பிறகு எனது தற்போதைய ஸ்மார்ட் ஒப்பந்தங்களில் ஏதேனும் மாற்றங்கள் இருக்குமா? {#will-my-smart-contracts-change} -### கிளாம்ஸ்டெரமிற்குப் பிறகு எனது ஏற்கனவே உள்ள ஸ்மார்ட் ஒப்பந்தங்களில் ஏதேனும் மாற்றங்கள் இருக்குமா? {#will-my-smart-contracts-change} +தற்போதுள்ள ஒப்பந்தங்கள் Glamsterdam-க்குப் பிறகு தொடர்ந்து சாதாரணமாகச் செயல்படும். டெவலப்பர்கள் பல புதிய கருவிகளைப் பெறுவார்கள் மற்றும் அவர்களின் எரிவாயுப் பயன்பாட்டை மதிப்பாய்வு செய்ய வேண்டும்: -கிளாம்ஸ்டெர்டாமுக்குப் பிறகும் ஏற்கனவே உள்ள ஒப்பந்தங்கள் தொடர்ந்து சாதாரணமாகச் செயல்படும். டெவலப்பர்களுக்குப் பல புதிய கருவிகள் கிடைக்க வாய்ப்புள்ளது, மேலும் அவர்கள் தங்கள் எரிவாயு பயன்பாட்டை மதிப்பாய்வு செய்ய வேண்டும்: -- அதிகபட்ச ஒப்பந்த அளவை அதிகரிப்பது (அல்லது EIP-7954) டெவலப்பர்கள் பெரிய பயன்பாடுகளைப் பயன்படுத்த அனுமதிக்கிறது, அதிகபட்ச ஒப்பந்த அளவு வரம்பை தோராயமாக 24KiB இலிருந்து 32KiB ஆக உயர்த்துகிறது. -- நிர்ணயிக்கப்பட்ட தொழிற்சாலை முன் வரிசைப்படுத்தல் (அல்லது EIP-7997) ஒரு உலகளாவிய, உள்ளமைக்கப்பட்ட தொழிற்சாலை ஒப்பந்தத்தை அறிமுகப்படுத்துகிறது. இது டெவலப்பர்கள் தங்கள் பயன்பாடுகளையும் ஸ்மார்ட் ஒப்பந்த பணப்பைகளையும் அனைத்து பங்கேற்கும் EVM சங்கிலிகளிலும் ஒரே முகவரியில் வரிசைப்படுத்த அனுமதிக்கிறது. -- ETH பரிமாற்றங்களைக் கண்டறிய உங்கள் செயலி சிக்கலான டிரேசிங்கை நம்பியிருந்தால், ETH பரிமாற்றங்கள் மற்றும் பர்ன்கள் ஒரு பதிவை (அல்லது EIP-7708) வெளியிடும், இது மிகவும் எளிமையான மற்றும் நம்பகமான கணக்கியலுக்கு பதிவுகளைப் பயன்படுத்த உங்களை அனுமதிக்கும். -- மாநில உருவாக்கம் எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037) மற்றும் மாநில அணுகல் எரிவாயு செலவு புதுப்பிப்பு (அல்லது EIP-8038) ஆகியவை புதிய நிலைத்தன்மை மாதிரிகளை அறிமுகப்படுத்துகின்றன, அவை சில ஒப்பந்த வரிசைப்படுத்தல் செலவுகளை மாற்றும், ஏனெனில் புதிய கணக்குகளை உருவாக்குதல் அல்லது நிரந்தர சேமிப்பகத்திற்கு மாறும் வகையில் சரிசெய்யப்படும் கட்டணம் இருக்கும். +- அதிகபட்ச ஒப்பந்த அளவை அதிகரித்தல் (அல்லது EIP-7954) டெவலப்பர்கள் பெரிய பயன்பாடுகளைப் பயன்படுத்த அனுமதிக்கிறது, அதிகபட்ச ஒப்பந்த அளவு வரம்பை தோராயமாக 24KiB-இலிருந்து 32KiB ஆக உயர்த்துகிறது. +- தீர்மானகரமான தொழிற்சாலை முன்-பயன்பாடு (அல்லது EIP-7997) ஒரு உலகளாவிய, உள்ளமைக்கப்பட்ட தொழிற்சாலை ஒப்பந்தத்தை அறிமுகப்படுத்துகிறது. இது டெவலப்பர்கள் தங்கள் பயன்பாடுகள் மற்றும் ஸ்மார்ட் ஒப்பந்த வாலெட்டுகளை அனைத்துப் பங்கேற்கும் EVM சங்கிலிகள் முழுவதும் ஒரே முகவரியில் பயன்படுத்த அனுமதிக்கிறது. +- ETH இடமாற்றங்களைக் கண்டறிய உங்கள் பயன்பாடு சிக்கலான கண்காணிப்பைச் சார்ந்திருந்தால், ETH இடமாற்றங்கள் மற்றும் எரிப்புகள் ஒரு பதிவை வெளியிடுகின்றன (அல்லது EIP-7708) மிகவும் எளிமையான மற்றும் நம்பகமான கணக்கியலுக்குப் பதிவுகளைப் பயன்படுத்துவதற்கு மாற உங்களை அனுமதிக்கும். +- நிலை உருவாக்க எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037) மற்றும் நிலை-அணுகல் எரிவாயு செலவுப் புதுப்பிப்பு (அல்லது EIP-8038) ஆகியவை புதிய நிலைத்தன்மை மாதிரிகளை அறிமுகப்படுத்துகின்றன, அவை சில ஒப்பந்தப் பயன்பாட்டுச் செலவுகளை மாற்றும், ஏனெனில் புதிய கணக்குகள் அல்லது நிரந்தரச் சேமிப்பகத்தை உருவாக்குவது மாறும்-சரிசெய்யும் கட்டணத்தைக் கொண்டிருக்கும். -### கிளாம்ஸ்டர்டேம் நோட் சேமிப்பு மற்றும் வன்பொருள் தேவைகளை எவ்வாறு பாதிக்கும்? {#how-will-glamsterdam-affect-node-storage-and-hardware-requirements} +### Glamsterdam முனைச் சேமிப்பகம் மற்றும் வன்பொருள் தேவைகளை எவ்வாறு பாதிக்கும்? {#how-will-glamsterdam-affect-node-storage-and-hardware-requirements} -கிளாம்ஸ்டெர்டாமிற்காகப் பரிசீலிக்கப்படும் பல EIPகள், மாநில வளர்ச்சியின் செயல்திறன் சரிவை நிவர்த்தி செய்கின்றன: -- மாநில உருவாக்க எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037) ஒரு நிலையான தரவுத்தள வளர்ச்சி விகிதத்தை 100 GiB/ஆண்டுக்கு இலக்காகக் கொண்ட ஒரு மாறும் விலை நிர்ணய மாதிரியை அறிமுகப்படுத்துகிறது, இது நிலையான இயற்பியல் வன்பொருள் நெட்வொர்க்கை திறமையாக தொடர்ந்து இயக்க முடியும் என்பதை உறுதி செய்கிறது. -- eth/70 பகுதி தொகுதி ரசீது பட்டியல்கள் (அல்லது EIP-7975) நோடுகள் பக்கப்படுத்தப்பட்ட தொகுதி ரசீதுகளைக் கோர அனுமதிக்கின்றன, இது தரவு-அதிகமான தொகுதி ரசீது பட்டியல்களை சிறிய பகுதிகளாக உடைத்து, Ethereum அளவிடும்போது செயலிழப்புகளைத் தடுக்கிறது மற்றும் ஒத்திசைக்கிறது. +Glamsterdam-க்காகப் பரிசீலிக்கப்படும் பல EIP-கள் நிலை வளர்ச்சியின் செயல்திறன் வீழ்ச்சியைக் கையாளுகின்றன: +- நிலை உருவாக்க எரிவாயு செலவு அதிகரிப்பு (அல்லது EIP-8037) 100 GiB/ஆண்டு என்ற நிலைத் தரவுத்தள வளர்ச்சி விகிதத்தை இலக்காகக் கொண்டு ஒரு மாறும் விலை நிர்ணய மாதிரியை அறிமுகப்படுத்துகிறது, நிலையான இயற்பியல் வன்பொருள் தொடர்ந்து நெட்வொர்க்கைத் திறமையாக இயக்க முடியும் என்பதை உறுதிசெய்கிறது. +- eth/70 பகுதி தொகுதி ரசீது பட்டியல்கள் (அல்லது EIP-7975) பக்கமாக்கப்பட்ட தொகுதி ரசீதுகளைக் கோர முனைகளை அனுமதிக்கிறது, இது Ethereum அளவிடப்படும்போது செயலிழப்புகள் மற்றும் ஒத்திசைவுகளைத் தடுக்கத் தரவு-கனமான தொகுதி ரசீது பட்டியல்களைச் சிறிய துண்டுகளாக உடைக்கிறது. \ No newline at end of file diff --git a/public/content/translations/ta/roadmap/pectra/maxeb/index.md b/public/content/translations/ta/roadmap/pectra/maxeb/index.md index c293eda01c9..412964f1294 100644 --- a/public/content/translations/ta/roadmap/pectra/maxeb/index.md +++ b/public/content/translations/ta/roadmap/pectra/maxeb/index.md @@ -6,7 +6,7 @@ lang: ta # MaxEB {#maxeb} -*சுருக்கம்:* பெக்ட்ரா (Pectra) ஹார்ட் ஃபோர்க், எத்தேரியம் வேலிடேட்டர்களை (validators) **Type 1** இலிருந்து **Type 2** திரும்பப் பெறும் சான்றுகளுக்கு (withdrawal credentials) மாற்றுவதன் மூலம் அதிகபட்ச பயனுள்ள இருப்பு (max effective balance) மற்றும் கூட்டு வட்டிக்கு (compounding) மாற அனுமதிக்கிறது. இதைச் செய்வதற்கான அதிகாரப்பூர்வ கருவி Launchpad ஆகும். இந்தச் செயலை மாற்றியமைக்க முடியாது. +*சுருக்கம்:* பெக்ட்ரா (Pectra) ஹார்ட் ஃபோர்க், எத்தேரியம் மதிப்பீட்டாளர்களை (validators) **Type 1** இலிருந்து **Type 2** திரும்பப் பெறும் சான்றுகளுக்கு (withdrawal credentials) மாற்றுவதன் மூலம் அதிகபட்ச பயனுள்ள இருப்பு (max effective balance) மற்றும் கூட்டு வட்டிக்கு (compounding) மாற அனுமதிக்கிறது. இதைச் செய்வதற்கான அதிகாரப்பூர்வ கருவி Launchpad ஆகும். இந்தச் செயலை மாற்றியமைக்க முடியாது. ## கண்ணோட்டம் {#overview} @@ -18,11 +18,11 @@ lang: ta ### "maxEB" என்றால் என்ன? {#what-is-maxeb} -maxEB = ஒரு மதிப்பீட்டாளரின் அதிகபட்ச பயனுள்ள இருப்பு (MAXimum Effective Balance). பெக்ட்ரா ஹார்ட் ஃபோர்க் வரை, ஒவ்வொரு மதிப்பீட்டாளரும் அதிகபட்சமாக 32 ETH-ல் வருமானம் ஈட்டுகின்றனர். பெக்ட்ராவிற்குப் பிறகு, வேலிடேட்டர்கள் இந்த மாற்றத்தைத் தேர்ந்தெடுப்பதன் மூலம் 32 முதல் 2048 ETH வரையிலான எந்தவொரு இருப்பிலும், 1 ETH அதிகரிப்புகளில் வருமானம் ஈட்ட விருப்பம் கொண்டுள்ளனர். +maxEB = ஒரு மதிப்பீட்டாளரின் அதிகபட்ச பயனுள்ள இருப்பு (MAXimum Effective Balance). பெக்ட்ரா ஹார்ட் ஃபோர்க் வரை, ஒவ்வொரு மதிப்பீட்டாளரும் அதிகபட்சமாக 32 ETH-ல் வருமானம் ஈட்டுகின்றனர். பெக்ட்ராவிற்குப் பிறகு, மதிப்பீட்டாளர்கள் இந்த மாற்றத்தைத் தேர்ந்தெடுப்பதன் மூலம் 32 முதல் 2048 ETH வரையிலான எந்தவொரு இருப்பிலும், 1 ETH அதிகரிப்புகளில் வருமானம் ஈட்ட விருப்பம் கொண்டுள்ளனர். -### ஒரு வேலிடேட்டர் எவ்வாறு இதில் சேரலாம்? {#how-does-a-validator-opt-in} +### ஒரு மதிப்பீட்டாளர் எவ்வாறு இதில் சேரலாம்? {#how-does-a-validator-opt-in} -ஒரு வேலிடேட்டர் **Type 1** இலிருந்து **Type 2** திரும்பப் பெறும் சான்றுகளுக்கு (withdrawal credentials) மாற்றுவதன் மூலம் maxEB மாற்றத்தைத் தேர்ந்தெடுக்கிறார். பெக்ட்ரா ஹார்ட் ஃபோர்க் நேரலைக்கு வந்த பிறகு [Launchpad (Validator Actions)](https://launchpad.ethereum.org/validator-actions) இல் இதைச் செய்யலாம். **Type 0** → **Type 1** ஐப் போலவே, **Type 1** → **Type 2** ஆக மாற்றுவதும் மாற்றியமைக்க முடியாத ஒரு செயல்முறையாகும். +ஒரு மதிப்பீட்டாளர் **Type 1** இலிருந்து **Type 2** திரும்பப் பெறும் சான்றுகளுக்கு (withdrawal credentials) மாற்றுவதன் மூலம் maxEB மாற்றத்தைத் தேர்ந்தெடுக்கிறார். பெக்ட்ரா ஹார்ட் ஃபோர்க் நேரலைக்கு வந்த பிறகு [Launchpad (Validator Actions)](https://launchpad.ethereum.org/validator-actions) இல் இதைச் செய்யலாம். **Type 0** → **Type 1** ஐப் போலவே, **Type 1** → **Type 2** ஆக மாற்றுவதும் மாற்றியமைக்க முடியாத ஒரு செயல்முறையாகும். ### திரும்பப் பெறும் சான்று (withdrawal credential) என்றால் என்ன? {#whats-a-withdrawal-credential} @@ -36,7 +36,7 @@ maxEB = ஒரு மதிப்பீட்டாளரின் அதிக ![Type 1 withdrawal credential](./0x01-wd.png) -3. **Type 2** திரும்பப் பெறும் சான்றுகள்: இந்த புதிய திரும்பப் பெறும் சான்று வகை `0x02...` என்று தொடங்கும் மற்றும் பெக்ட்ராவிற்குப் பிறகு செயல்படுத்தப்படும். **Type 2** திரும்பப் பெறும் சான்றுகளைக் கொண்ட வேலிடேட்டர்கள் சில நேரங்களில் "**compounding validators**" என்று அழைக்கப்படுகிறார்கள். +3. **Type 2** திரும்பப் பெறும் சான்றுகள்: இந்த புதிய திரும்பப் பெறும் சான்று வகை `0x02...` என்று தொடங்கும் மற்றும் பெக்ட்ராவிற்குப் பிறகு செயல்படுத்தப்படும். **Type 2** திரும்பப் பெறும் சான்றுகளைக் கொண்ட மதிப்பீட்டாளர்கள் சில நேரங்களில் "**compounding validators**" என்று அழைக்கப்படுகிறார்கள். | **அனுமதிக்கப்பட்டவை** | **அனுமதிக்கப்படாதவை** | | --- | --- | @@ -47,14 +47,14 @@ maxEB = ஒரு மதிப்பீட்டாளரின் அதிக ### அபாயங்கள் {#risks} -MaxEB ஒரு வேலிடேட்டர் தனது முழு இருப்பையும் மற்றொரு மதிப்பீட்டாளருக்கு அனுப்ப உதவுகிறது. ஒருங்கிணைப்பு கோரிக்கையை (consolidation request) சமர்ப்பிக்கும் பயனர்கள் தாங்கள் கையொப்பமிடும் பரிவர்த்தனையின் ஆதாரம் மற்றும் உள்ளடக்கங்களைச் சரிபார்க்க வேண்டும். maxEB அம்சங்களைப் பயன்படுத்திக் கொள்வதற்கான அதிகாரப்பூர்வ கருவி Launchpad ஆகும். நீங்கள் மூன்றாம் தரப்பு கருவியைப் பயன்படுத்த முடிவு செய்தால், பின்வருவனவற்றைச் சரிபார்க்க வேண்டும்: +MaxEB ஒரு மதிப்பீட்டாளர் தனது முழு இருப்பையும் மற்றொரு மதிப்பீட்டாளருக்கு அனுப்ப உதவுகிறது. ஒருங்கிணைப்பு கோரிக்கையை (consolidation request) சமர்ப்பிக்கும் பயனர்கள் தாங்கள் கையொப்பமிடும் பரிவர்த்தனையின் ஆதாரம் மற்றும் உள்ளடக்கங்களைச் சரிபார்க்க வேண்டும். maxEB அம்சங்களைப் பயன்படுத்திக் கொள்வதற்கான அதிகாரப்பூர்வ கருவி Launchpad ஆகும். நீங்கள் மூன்றாம் தரப்பு கருவியைப் பயன்படுத்த முடிவு செய்தால், பின்வருவனவற்றைச் சரிபார்க்க வேண்டும்: - மூல மதிப்பீட்டாளரின் (source validator) பொது விசை (pubkey) மற்றும் திரும்பப் பெறும் முகவரி ஆகியவை அவர்கள் கட்டுப்படுத்தும் மதிப்பீட்டாளருடன் பொருந்துகின்றனவா - இலக்கு மதிப்பீட்டாளரின் (target validator) பொது விசை சரியானது மற்றும் அவர்களுக்குச் சொந்தமானது தானா - அவர்கள் மற்றொரு மதிப்பீட்டாளருக்கு நிதியை அனுப்ப விரும்பவில்லை என்றால், கோரிக்கை ஒரு மாற்றமாக (conversion) இருக்க வேண்டும், ஒருங்கிணைப்பாக (consolidation) இருக்கக்கூடாது - சரியான திரும்பப் பெறும் முகவரியால் பரிவர்த்தனை கையொப்பமிடப்படுகிறதா -நீங்கள் பயன்படுத்தத் திட்டமிடும் எந்தவொரு மூன்றாம் தரப்பு கருவியையும் [EthStaker சமூகத்துடன்](https://ethstaker.org/about) விவாதிக்க **நாங்கள் கடுமையாகப் பரிந்துரைக்கிறோம்**. உங்கள் அணுகுமுறையைச் சரிபார்க்கவும் தவறுகளைத் தவிர்க்கவும் இது ஒரு பயனுள்ள இடமாகும். நீங்கள் தீங்கிழைக்கும் அல்லது தவறாக உள்ளமைக்கப்பட்ட கருவியைப் பயன்படுத்தினால், **உங்கள் முழு வேலிடேட்டர் இருப்பும் நீங்கள் கட்டுப்படுத்தாத ஒரு மதிப்பீட்டாளருக்கு அனுப்பப்படலாம்** — அதைத் திரும்பப் பெற எந்த வழியும் இல்லை. +நீங்கள் பயன்படுத்தத் திட்டமிடும் எந்தவொரு மூன்றாம் தரப்பு கருவியையும் [EthStaker சமூகத்துடன்](https://ethstaker.org/about) விவாதிக்க **நாங்கள் கடுமையாகப் பரிந்துரைக்கிறோம்**. உங்கள் அணுகுமுறையைச் சரிபார்க்கவும் தவறுகளைத் தவிர்க்கவும் இது ஒரு பயனுள்ள இடமாகும். நீங்கள் தீங்கிழைக்கும் அல்லது தவறாக உள்ளமைக்கப்பட்ட கருவியைப் பயன்படுத்தினால், **உங்கள் முழு மதிப்பீட்டாளர் இருப்பும் நீங்கள் கட்டுப்படுத்தாத ஒரு மதிப்பீட்டாளருக்கு அனுப்பப்படலாம்** — அதைத் திரும்பப் பெற எந்த வழியும் இல்லை. ## தொழில்நுட்ப விவரங்கள் {#technical-details} @@ -63,17 +63,17 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ `ConsolidationRequest` செயல்பாட்டிற்கு இரண்டு பயன்பாடுகள் இருக்கும்: 1. ஏற்கனவே உள்ள மதிப்பீட்டாளரை **Type 1** இலிருந்து **Type 2** மதிப்பீட்டாளராக மாற்றுதல் -2. பிற வேலிடேட்டர்களை ஏற்கனவே உள்ள **Type 2** மதிப்பீட்டாளராக ஒருங்கிணைத்தல் +2. பிற மதிப்பீட்டாளர்களை ஏற்கனவே உள்ள **Type 2** மதிப்பீட்டாளராக ஒருங்கிணைத்தல் -**Type 1** இலிருந்து **Type 2** மதிப்பீட்டாளராக மாற்றும்போது, *மூலம் (source)* மற்றும் *இலக்கு (target)* ஆகிய இரண்டும் நீங்கள் மாற்றும் மதிப்பீட்டாளராகவே இருக்கும். இந்தச் செயல்பாட்டிற்கு கேஸ் (gas) செலவாகும் மற்றும் பிற ஒருங்கிணைப்பு கோரிக்கைகளுக்குப் பின்னால் வரிசைப்படுத்தப்படும். இந்த வரிசையானது டெபாசிட் வரிசையிலிருந்து **தனிப்பட்டது** மற்றும் புதிய வேலிடேட்டர் டெபாசிட்டுகளால் பாதிக்கப்படாது, மேலும் இதை [pectrified.com](https://pectrified.com/) இல் பார்க்கலாம். +**Type 1** இலிருந்து **Type 2** மதிப்பீட்டாளராக மாற்றும்போது, *மூலம் (source)* மற்றும் *இலக்கு (target)* ஆகிய இரண்டும் நீங்கள் மாற்றும் மதிப்பீட்டாளராகவே இருக்கும். இந்தச் செயல்பாட்டிற்கு கேஸ் (gas) செலவாகும் மற்றும் பிற ஒருங்கிணைப்பு கோரிக்கைகளுக்குப் பின்னால் வரிசைப்படுத்தப்படும். இந்த வரிசையானது டெபாசிட் வரிசையிலிருந்து **தனிப்பட்டது** மற்றும் புதிய மதிப்பீட்டாளர் டெபாசிட்டுகளால் பாதிக்கப்படாது, மேலும் இதை [pectrified.com](https://pectrified.com/) இல் பார்க்கலாம். -வேலிடேட்டர்களை ஒருங்கிணைக்க, உங்களிடம் **Type 2** திரும்பப் பெறும் சான்றைக் கொண்ட *இலக்கு வேலிடேட்டர்* இருக்க வேண்டும். ஒருங்கிணைக்கப்படும் எந்தவொரு வேலிடேட்டர் இருப்புகளுக்கும் இதுவே சேருமிடமாகும், மேலும் குறியீடு (index) பாதுகாக்கப்படுகிறது. +மதிப்பீட்டாளர்களை ஒருங்கிணைக்க, உங்களிடம் **Type 2** திரும்பப் பெறும் சான்றைக் கொண்ட *இலக்கு மதிப்பீட்டாளர்* இருக்க வேண்டும். ஒருங்கிணைக்கப்படும் எந்தவொரு மதிப்பீட்டாளர் இருப்புகளுக்கும் இதுவே சேருமிடமாகும், மேலும் குறியீடு (index) பாதுகாக்கப்படுகிறது. ### Type 2 ஆக மாற்றுவதற்கான தேவைகள் {#requirements-for-converting-to-type-2} -நீங்கள் **Type 2** ஆக மாற்றும் முதல் மதிப்பீட்டாளருக்கு இது தேவைப்படும். இந்த மதிப்பீட்டாளரின் குறியீடு பாதுகாக்கப்பட்டு செயலில் இருக்கும். ஒரு மாற்றத்திற்கு, *மூல வேலிடேட்டர்* == *இலக்கு வேலிடேட்டர்.* +நீங்கள் **Type 2** ஆக மாற்றும் முதல் மதிப்பீட்டாளருக்கு இது தேவைப்படும். இந்த மதிப்பீட்டாளரின் குறியீடு பாதுகாக்கப்பட்டு செயலில் இருக்கும். ஒரு மாற்றத்திற்கு, *மூல மதிப்பீட்டாளர்* == *இலக்கு மதிப்பீட்டாளர்.* -வேலிடேட்டர்... +மதிப்பீட்டாளர்... - செயலில் இருக்க வேண்டும் - **Type 1** திரும்பப் பெறும் சான்றுகளைக் கொண்டிருக்க வேண்டும் @@ -84,13 +84,13 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ ### ஒருங்கிணைப்பதற்கான தேவைகள் {#requirements-for-consolidating} -இது மாற்றுவதைப் போன்ற *அதே செயல்பாடு* தான், ஆனால் *மூல வேலிடேட்டர்* *இலக்கு மதிப்பீட்டாளரிடமிருந்து* வேறுபட்டதாக இருக்கும்போது இது நிகழ்கிறது. இலக்கு மதிப்பீட்டாளரின் குறியீடு பாதுகாக்கப்படுகிறது மற்றும் மூல மதிப்பீட்டாளரிடமிருந்து இருப்பை ஏற்றுக்கொள்கிறது. மூல மதிப்பீட்டாளரின் குறியீடு `EXITED` நிலைக்கு மாற்றப்படுகிறது. +இது மாற்றுவதைப் போன்ற *அதே செயல்பாடு* தான், ஆனால் *மூல மதிப்பீட்டாளர்* *இலக்கு மதிப்பீட்டாளரிடமிருந்து* வேறுபட்டதாக இருக்கும்போது இது நிகழ்கிறது. இலக்கு மதிப்பீட்டாளரின் குறியீடு பாதுகாக்கப்படுகிறது மற்றும் மூல மதிப்பீட்டாளரிடமிருந்து இருப்பை ஏற்றுக்கொள்கிறது. மூல மதிப்பீட்டாளரின் குறியீடு `EXITED` நிலைக்கு மாற்றப்படுகிறது. இந்த நிலையில், மூல மதிப்பீட்டாளருக்கு மேலே உள்ள அதே தேவைகள் அனைத்தும் உள்ளன, மேலும்: - குறைந்தது ~27.3 மணிநேரம் (ஒரு `SHARD_COMMITTEE_PERIOD`) செயலில் இருந்திருக்க வேண்டும் -இலக்கு வேலிடேட்டர் +இலக்கு மதிப்பீட்டாளர் - **Type 2** திரும்பப் பெறும் சான்றுகளைக் கொண்டிருக்க வேண்டும் - வெளியேறும் நிலையில் இருக்கக்கூடாது. @@ -109,7 +109,7 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ ### கையொப்பமிடும் தேவைகள் {#signing-requirements} -ஒரு `ConsolidationRequest` ஐச் சமர்ப்பிக்க, **மூல மதிப்பீட்டாளரின் திரும்பப் பெறும் முகவரி** கோரிக்கையில் கையொப்பமிட வேண்டும். இது வேலிடேட்டர் நிதிகளின் மீதான கட்டுப்பாட்டை நிரூபிக்கிறது. +ஒரு `ConsolidationRequest` ஐச் சமர்ப்பிக்க, **மூல மதிப்பீட்டாளரின் திரும்பப் பெறும் முகவரி** கோரிக்கையில் கையொப்பமிட வேண்டும். இது மதிப்பீட்டாளர் நிதிகளின் மீதான கட்டுப்பாட்டை நிரூபிக்கிறது. ### எது கையொப்பமிடப்படுகிறது? {#what-is-signed} @@ -123,11 +123,11 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ இதன் விளைவாக வரும் **BLS கையொப்பம்** கோரிக்கையுடன் சமர்ப்பிக்கப்படுகிறது. -குறிப்பு: கையொப்பமிடுவது திரும்பப் பெறும் முகவரியால் செய்யப்படுகிறது, வேலிடேட்டர் விசையால் அல்ல. +குறிப்பு: கையொப்பமிடுவது திரும்பப் பெறும் முகவரியால் செய்யப்படுகிறது, மதிப்பீட்டாளர் விசையால் அல்ல. ### பகுதி திரும்பப் பெறுதல்கள் {#partial-withdrawals} -**Type 1** சான்றுகளைக் கொண்ட வேலிடேட்டர்கள் தங்களது அதிகப்படியான இருப்பை (32 ETH-க்கு மேல் உள்ள எதையும்) தங்களது திரும்பப் பெறும் முகவரிக்கு தானியங்கி, கேஸ் இல்லாத ஸ்வீப்களாகப் (sweeps) பெறுகிறார்கள். **Type 2** ஒரு மதிப்பீட்டாளரை 1 ETH அதிகரிப்புகளில் இருப்புகளைக் கூட்ட அனுமதிப்பதால், அது 2048 ETH-ஐ அடையும் வரை தானாகவே இருப்புகளை ஸ்வீப் செய்யாது. **Type 2** வேலிடேட்டர்களில் பகுதி திரும்பப் பெறுதல்கள் கைமுறையாகத் தூண்டப்பட வேண்டும் மற்றும் இதற்கு கேஸ் செலவாகும். +**Type 1** சான்றுகளைக் கொண்ட மதிப்பீட்டாளர்கள் தங்களது அதிகப்படியான இருப்பை (32 ETH-க்கு மேல் உள்ள எதையும்) தங்களது திரும்பப் பெறும் முகவரிக்கு தானியங்கி, கேஸ் இல்லாத ஸ்வீப்களாகப் (sweeps) பெறுகிறார்கள். **Type 2** ஒரு மதிப்பீட்டாளரை 1 ETH அதிகரிப்புகளில் இருப்புகளைக் கூட்ட அனுமதிப்பதால், அது 2048 ETH-ஐ அடையும் வரை தானாகவே இருப்புகளை ஸ்வீப் செய்யாது. **Type 2** மதிப்பீட்டாளர்களில் பகுதி திரும்பப் பெறுதல்கள் கைமுறையாகத் தூண்டப்பட வேண்டும் மற்றும் இதற்கு கேஸ் செலவாகும். ## ஒருங்கிணைப்பு கருவிகள் {#consolidation-tooling} @@ -136,8 +136,8 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ | கருவி | இணையதளம் | திறந்த மூலம் | உருவாக்கியவர் | தணிக்கை செய்யப்பட்டது | இடைமுகம் | குறிப்பிடத்தக்க அம்சங்கள் | | --- | --- | --- | --- | --- | --- | --- | | Pectra Staking Manager | pectrastaking.com | ஆம், Apache 2.0 | [Pier Two](https://piertwo.com/) | இல்லை | Web UI | Wallet Connect, SAFE உடன் வேலை செய்கிறது | -| Pectra Validator Ops CLI Tool | [GitHub](https://github.com/Luganodes/Pectra-Batch-Contract) | ஆம், MIT | [Luganodes](https://www.luganodes.com/) | ஆம், Quantstamp [May 2025](https://certificate.quantstamp.com/full/luganodes-pectra-batch-contract/23f0765f-969a-4798-9edd-188d276c4a2b/index.html) | Command line | பேட்ச்சிங் (Batching), ஒரே நேரத்தில் பல வேலிடேட்டர்களுக்கு | -| Ethereal | [GitHub](https://github.com/wealdtech/ethereal) | ஆம், Apache 2.0 | [Jim McDonald](https://www.attestant.io/team/) | இல்லை | Command line | வேலிடேட்டர் மற்றும் நோடு நிர்வாகத்திற்கான முழு அம்சத் தொகுப்பு | +| Pectra Validator Ops CLI Tool | [GitHub](https://github.com/Luganodes/Pectra-Batch-Contract) | ஆம், MIT | [Luganodes](https://www.luganodes.com/) | ஆம், Quantstamp [May 2025](https://certificate.quantstamp.com/full/luganodes-pectra-batch-contract/23f0765f-969a-4798-9edd-188d276c4a2b/index.html) | Command line | பேட்ச்சிங் (Batching), ஒரே நேரத்தில் பல மதிப்பீட்டாளர்களுக்கு | +| Ethereal | [GitHub](https://github.com/wealdtech/ethereal) | ஆம், Apache 2.0 | [Jim McDonald](https://www.attestant.io/team/) | இல்லை | Command line | மதிப்பீட்டாளர் மற்றும் நோடு நிர்வாகத்திற்கான முழு அம்சத் தொகுப்பு | | Siren | [GitHub](https://github.com/sigp/siren) | ஆம், Apache 2.0 | [Sigma Prime](https://sigmaprime.io/) | இல்லை | சில Command line, ஆனால் முதன்மையாக Web UI | நீங்கள் Lighthouse கன்சென்சஸ் கிளையண்டைப் பயன்படுத்தினால் மட்டுமே வேலை செய்யும் | | Consolideth.app | https://consolideth.app/ [GitHub](https://github.com/Stakely/consolideth) | ஆம், MIT உரிமங்கள் | [Stakely](https://stakely.io/) | இல்லை | Web UI, stakely ஆல் ஹோஸ்ட் செய்யப்பட்டது மற்றும் இலவசமாக சுய-ஹோஸ்ட் செய்யத் தயாராக உள்ளது | walletconnect உடன் safe உட்பட முக்கிய வாலட் இணைப்புகளை ஆதரிக்கிறது | @@ -145,11 +145,11 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ ### இதில் சேருவது எனது முன்மொழிவு அதிர்ஷ்டத்தையோ அல்லது வெகுமதிகளையோ மாற்றுமா? {#change-luck-or-rewards} -இல்லை. இதில் சேருவது உங்கள் முன்மொழிவு வாய்ப்பைக் குறைக்காது - உங்கள் கடமைகள் மற்றும் முன்மொழிவுத் தேர்வு ஆகியவை அப்படியே இருக்கும். எடுத்துக்காட்டாக, உங்களிடம் இரண்டு 32 ETH வேலிடேட்டர்கள் மற்றும் ஒரு 64 ETH வேலிடேட்டர் இருந்தால், ஒரு பிளாக்கை முன்மொழியவும் வெகுமதிகளைப் பெறவும் தேர்ந்தெடுக்கப்படுவதற்கான அதே மொத்த வாய்ப்புகள் உங்களுக்கு இருக்கும். +இல்லை. இதில் சேருவது உங்கள் முன்மொழிவு வாய்ப்பைக் குறைக்காது - உங்கள் கடமைகள் மற்றும் முன்மொழிவுத் தேர்வு ஆகியவை அப்படியே இருக்கும். எடுத்துக்காட்டாக, உங்களிடம் இரண்டு 32 ETH மதிப்பீட்டாளர்கள் மற்றும் ஒரு 64 ETH மதிப்பீட்டாளர் இருந்தால், ஒரு பிளாக்கை முன்மொழியவும் வெகுமதிகளைப் பெறவும் தேர்ந்தெடுக்கப்படுவதற்கான அதே மொத்த வாய்ப்புகள் உங்களுக்கு இருக்கும். ### இதில் சேருவது எனது ஸ்லாஷிங் அபாயத்தை மாற்றுமா? {#change-slashing-risk} -சிறிய அல்லது தொழில்முறையற்ற ஆபரேட்டர்களுக்கு, சுருக்கமான பதில் இல்லை என்பதாகும். விரிவான பதில் என்னவென்றால், விரைவான விழிப்பூட்டல்களுடன் ஒரு நோடுக்கு பல வேலிடேட்டர்களை இயக்கும் தொழில்முறை ஆபரேட்டர்களுக்கு, குறைவான வேலிடேட்டர்களாக ஒருங்கிணைப்பது ஸ்லாஷிங்கிற்கு எதிர்வினையாற்றும் மற்றும் தொடர் நிகழ்வுகளைத் தடுக்கும் திறனைக் குறைக்கலாம். இந்த அபாயத்தை ஈடுசெய்ய அனைத்து வேலிடேட்டர்களுக்கான ஆரம்ப ஸ்லாஷிங் *அபராதம்* 1 ETH (ஒரு 32 ETH-க்கு) இலிருந்து 0.0078125 ETH (ஒரு 32 ETH-க்கு) ஆகக் கணிசமாகக் குறைக்கப்பட்டுள்ளது. +சிறிய அல்லது தொழில்முறையற்ற ஆபரேட்டர்களுக்கு, சுருக்கமான பதில் இல்லை என்பதாகும். விரிவான பதில் என்னவென்றால், விரைவான விழிப்பூட்டல்களுடன் ஒரு நோடுக்கு பல மதிப்பீட்டாளர்களை இயக்கும் தொழில்முறை ஆபரேட்டர்களுக்கு, குறைவான மதிப்பீட்டாளர்களாக ஒருங்கிணைப்பது ஸ்லாஷிங்கிற்கு எதிர்வினையாற்றும் மற்றும் தொடர் நிகழ்வுகளைத் தடுக்கும் திறனைக் குறைக்கலாம். இந்த அபாயத்தை ஈடுசெய்ய அனைத்து மதிப்பீட்டாளர்களுக்கான ஆரம்ப ஸ்லாஷிங் *அபராதம்* 1 ETH (ஒரு 32 ETH-க்கு) இலிருந்து 0.0078125 ETH (ஒரு 32 ETH-க்கு) ஆகக் கணிசமாகக் குறைக்கப்பட்டுள்ளது. ### மாற்றுவதற்கு நான் எனது மதிப்பீட்டாளரிலிருந்து வெளியேற வேண்டுமா? {#exit-validator} @@ -159,19 +159,19 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ குறைந்தபட்சம் 27.3 மணிநேரம் ஆகும், ஆனால் ஒருங்கிணைப்புகளும் ஒரு வரிசைக்கு உட்பட்டவை. இந்த வரிசையானது டெபாசிட் மற்றும் திரும்பப் பெறும் வரிசைகளிலிருந்து சுயாதீனமானது மற்றும் அவற்றால் பாதிக்கப்படாது. -### எனது வேலிடேட்டர் குறியீட்டை நான் வைத்திருக்க முடியுமா? {#keep-validator-index} +### எனது மதிப்பீட்டாளர் குறியீட்டை நான் வைத்திருக்க முடியுமா? {#keep-validator-index} -ஆம். இருக்கும் இடத்திலேயே மாற்றுவது அதே வேலிடேட்டர் குறியீட்டை வைத்திருக்கும். நீங்கள் பல வேலிடேட்டர்களை ஒருங்கிணைத்தால், *இலக்கு மதிப்பீட்டாளரின்* குறியீட்டை மட்டுமே உங்களால் வைத்திருக்க முடியும். +ஆம். இருக்கும் இடத்திலேயே மாற்றுவது அதே மதிப்பீட்டாளர் குறியீட்டை வைத்திருக்கும். நீங்கள் பல மதிப்பீட்டாளர்களை ஒருங்கிணைத்தால், *இலக்கு மதிப்பீட்டாளரின்* குறியீட்டை மட்டுமே உங்களால் வைத்திருக்க முடியும். ### நான் சான்றளிப்புகளை (attestations) தவறவிடுவேனா? {#miss-attestations} -மற்றொரு மதிப்பீட்டாளராக ஒருங்கிணைக்கும் போது, மூல வேலிடேட்டர் வெளியேற்றப்படுகிறார் மற்றும் இலக்கு மதிப்பீட்டாளரில் இருப்பு செயலில் வருவதற்கு முன்பு ~27 மணிநேர காத்திருப்பு காலம் உள்ளது. இந்தக் காலம் **செயல்திறன் அளவீடுகளைப் பாதிக்காது**. +மற்றொரு மதிப்பீட்டாளராக ஒருங்கிணைக்கும் போது, மூல மதிப்பீட்டாளர் வெளியேற்றப்படுகிறார் மற்றும் இலக்கு மதிப்பீட்டாளரில் இருப்பு செயலில் வருவதற்கு முன்பு ~27 மணிநேர காத்திருப்பு காலம் உள்ளது. இந்தக் காலம் **செயல்திறன் அளவீடுகளைப் பாதிக்காது**. ### எனக்கு அபராதம் விதிக்கப்படுமா? {#incur-penalties} -இல்லை. உங்கள் வேலிடேட்டர் ஆன்லைனில் இருக்கும் வரை, உங்களுக்கு அபராதம் விதிக்கப்படாது. +இல்லை. உங்கள் மதிப்பீட்டாளர் ஆன்லைனில் இருக்கும் வரை, உங்களுக்கு அபராதம் விதிக்கப்படாது. -### ஒருங்கிணைக்கப்படும் வேலிடேட்டர்களின் திரும்பப் பெறும் முகவரிகள் பொருந்த வேண்டுமா? {#withdrawal-addresses-match} +### ஒருங்கிணைக்கப்படும் மதிப்பீட்டாளர்களின் திரும்பப் பெறும் முகவரிகள் பொருந்த வேண்டுமா? {#withdrawal-addresses-match} இல்லை. ஆனால் *மூலம் (source)* தனது சொந்த முகவரியிலிருந்து கோரிக்கையை அங்கீகரிக்க வேண்டும். @@ -187,11 +187,11 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ இல்லை. **Type 2** ஆக மாற்றுவது மாற்றியமைக்க முடியாதது. -### நான் பல வேலிடேட்டர்களை ஒருங்கிணைக்க விரும்பினால், முதலில் ஒவ்வொன்றையும் Type 2 ஆக மாற்ற வேண்டுமா? {#consolidate-multiple-validators} +### நான் பல மதிப்பீட்டாளர்களை ஒருங்கிணைக்க விரும்பினால், முதலில் ஒவ்வொன்றையும் Type 2 ஆக மாற்ற வேண்டுமா? {#consolidate-multiple-validators} -இல்லை! ஒரு மதிப்பீட்டாளரை Type 2 ஆக மாற்றி, பின்னர் அதை இலக்காகப் பயன்படுத்தவும். அந்த Type 2 இலக்கில் ஒருங்கிணைக்கப்பட்ட மற்ற அனைத்து வேலிடேட்டர்களும் Type 1 அல்லது Type 2 ஆக இருக்கலாம். +இல்லை! ஒரு மதிப்பீட்டாளரை Type 2 ஆக மாற்றி, பின்னர் அதை இலக்காகப் பயன்படுத்தவும். அந்த Type 2 இலக்கில் ஒருங்கிணைக்கப்பட்ட மற்ற அனைத்து மதிப்பீட்டாளர்களும் Type 1 அல்லது Type 2 ஆக இருக்கலாம். -### எனது வேலிடேட்டர் ஆஃப்லைனில் உள்ளது அல்லது 32 ETH-க்குக் கீழே உள்ளது - நான் இன்னும் அதை மாற்ற முடியுமா? {#offline-or-below-32eth} +### எனது மதிப்பீட்டாளர் ஆஃப்லைனில் உள்ளது அல்லது 32 ETH-க்குக் கீழே உள்ளது - நான் இன்னும் அதை மாற்ற முடியுமா? {#offline-or-below-32eth} ஆம். அது செயலில் இருக்கும் வரை (வெளியேறவில்லை) மற்றும் அதன் திரும்பப் பெறும் முகவரியுடன் நீங்கள் கையொப்பமிட முடியும் வரை, நீங்கள் அதை மாற்றலாம். @@ -200,5 +200,5 @@ MaxEB ஒரு வேலிடேட்டர் தனது முழு இ - [எலெக்ட்ரா கன்சென்சஸ் விவரக்குறிப்புகள் (Electra consensus specs)](https://github.com/ethereum/consensus-specs/blob/master/specs/electra/beacon-chain.md): இது நீங்கள் நம்பியிருக்க வேண்டிய 'உண்மையான' பதிப்பாகும். சந்தேகம் வரும்போது, விவரக்குறிப்புகளைப் படிக்கவும் - குறியீட்டைப் படிப்பதில் அனைவருக்கும் வசதியாக இருக்காது, எனவே [இந்த maxEB-GPT](https://chatgpt.com/g/g-67f1650fb48081918f555e0c8d1c2ae9-maxeb-gpt) விவரக்குறிப்புகளை விளக்குவதற்கு உதவலாம். *பொறுப்புத்துறப்பு: AI தகவலைத் தவறாகப் புரிந்துகொள்ளலாம் அல்லது தவறான பதில்களை உருவாக்கலாம் என்பதால், AI-ஐ அல்ல, விவரக்குறிப்புகளையே உண்மையாக நம்ப வேண்டும்* - [pectrified.com](https://pectrified.com/): ஒருங்கிணைப்புகள், டெபாசிட்டுகள் மற்றும் வரிசை காத்திருப்பு நேரங்களின் நிலையைக் காண்க -- [Ethereal](https://github.com/wealdtech/ethereal): பொதுவான வேலிடேட்டர் பணிகளை நிர்வகிப்பதற்கான சமூகம் உருவாக்கிய CLI கருவி -- [batch-validator-depositor](https://github.com/attestantio/batch-validator-depositor): பல எத்தேரியம் வேலிடேட்டர்களை ஒரே பரிவர்த்தனையில் டெபாசிட் செய்ய அனுமதிக்கும் சமூகம் உருவாக்கிய ஒப்பந்தம் \ No newline at end of file +- [Ethereal](https://github.com/wealdtech/ethereal): பொதுவான மதிப்பீட்டாளர் பணிகளை நிர்வகிப்பதற்கான சமூகம் உருவாக்கிய CLI கருவி +- [batch-validator-depositor](https://github.com/attestantio/batch-validator-depositor): பல எத்தேரியம் மதிப்பீட்டாளர்களை ஒரே பரிவர்த்தனையில் டெபாசிட் செய்ய அனுமதிக்கும் சமூகம் உருவாக்கிய ஒப்பந்தம் \ No newline at end of file diff --git a/public/content/translations/te/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/te/developers/docs/nodes-and-clients/node-architecture/index.md index 0d201699378..ba2ccd83692 100644 --- a/public/content/translations/te/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/te/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: te ఒక ఎథేరియం నోడ్ రెండు క్లయింట్‌లను కలిగి ఉంటుంది: ఒక [ఎగ్జిక్యూషన్ క్లయింట్](/developers/docs/nodes-and-clients/#execution-clients) మరియు ఒక [ఏకాభిప్రాయం క్లయింట్](/developers/docs/nodes-and-clients/#consensus-clients). ఒక నోడ్ కొత్త బ్లాక్‌ను ప్రతిపాదించాలంటే, అది ఒక [వాలిడేటర్ క్లయింట్‌ను](#validators) కూడా రన్ చేయాలి. -ఎథేరియం [ప్రూఫ్-ఆఫ్-వర్క్](/developers/docs/consensus-mechanisms/pow/) ను ఉపయోగిస్తున్నప్పుడు, ఒక పూర్తి ఎథేరియం నోడ్‌ను రన్ చేయడానికి ఒక ఎగ్జిక్యూషన్ క్లయింట్ సరిపోయేది. అయితే, [ప్రూఫ్-ఆఫ్-స్టేక్](/developers/docs/consensus-mechanisms/pow/)ను అమలు చేసినప్పటి నుండి, ఎగ్జిక్యూషన్ క్లయింట్‌ను [ఏకాభిప్రాయం క్లయింట్](/developers/docs/nodes-and-clients/#consensus-clients) అని పిలిచే మరొక సాఫ్ట్‌వేర్‌తో పాటు ఉపయోగించాలి. +ఎథేరియం [ప్రూఫ్-ఆఫ్-వర్క్](/developers/docs/consensus-mechanisms/pow/) ను ఉపయోగిస్తున్నప్పుడు, ఒక పూర్తి ఎథేరియం నోడ్‌ను రన్ చేయడానికి ఒక ఎగ్జిక్యూషన్ క్లయింట్ సరిపోయేది. అయితే, [ప్రూఫ్-ఆఫ్-స్టేక్](/developers/docs/consensus-mechanisms/pos/)ను అమలు చేసినప్పటి నుండి, ఎగ్జిక్యూషన్ క్లయింట్‌ను [ఏకాభిప్రాయం క్లయింట్](/developers/docs/nodes-and-clients/#consensus-clients) అని పిలిచే మరొక సాఫ్ట్‌వేర్‌తో పాటు ఉపయోగించాలి. కింది రేఖాచిత్రం రెండు ఎథేరియం క్లయింట్‌ల మధ్య సంబంధాన్ని చూపిస్తుంది. రెండు క్లయింట్‌లు వాటి స్వంత పీర్-టు-పీర్ (P2P) నెట్‌వర్క్‌లకు కనెక్ట్ అవుతాయి. ప్రత్యేక P2P నెట్‌వర్క్‌లు అవసరం, ఎందుకంటే ఎగ్జిక్యూషన్ క్లయింట్లు వాటి P2P నెట్‌వర్క్‌లో లావాదేవీలను గాసిప్ చేస్తాయి, తద్వారా వాటి స్థానిక లావాదేవీల పూల్‌ను నిర్వహించుకుంటాయి, అదే సమయంలో ఏకాభిప్రాయం క్లయింట్లు వాటి P2P నెట్‌వర్క్‌లో బ్లాక్‌లను గాసిప్ చేస్తాయి, తద్వారా ఏకాభిప్రాయం మరియు చైన్ వృద్ధి సాధ్యమవుతుంది. diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md index 7403a46ddb7..9bb59368c16 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: tr Bir Ethereum düğümü iki istemciden oluşur: bir [yürütüm istemcisi](/developers/docs/nodes-and-clients/#execution-clients) ve bir [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients). Bir düğümün yeni bir blok önerebilmesi için bir [doğrulayıcı istemcisi](#validators) de çalıştırması gerekir. -Ethereum [iş ispatı](/developers/docs/consensus-mechanisms/pow/) kullanırken, tam bir Ethereum düğümünü çalıştırmak için bir yürütüm istemcisi yeterliydi. Ancak, [hisse ispatı](/developers/docs/consensus-mechanisms/pow/) uygulamasından bu yana, yürütüm istemcisinin [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) adı verilen başka bir yazılımla birlikte kullanılması gerekir. +Ethereum [iş ispatı](/developers/docs/consensus-mechanisms/pow/) kullanırken, tam bir Ethereum düğümünü çalıştırmak için bir yürütüm istemcisi yeterliydi. Ancak, [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) uygulamasından bu yana, yürütüm istemcisinin [mutabakat istemcisi](/developers/docs/nodes-and-clients/#consensus-clients) adı verilen başka bir yazılımla birlikte kullanılması gerekir. Aşağıdaki şema iki Ethereum istemcisi arasındaki ilişkiyi göstermekte. İki istemci kendilerine ait ilgili eşler arası (P2P) ağlarına bağlanır. Yürütüm istemcileri P2P ağı üzerinden işlem "dedikodu"su yaparken, ayrı P2P ağlarına ihtiyaç duyulur ve bu yerel işlem havuzlarını yönetmelerine olanak sağlar. Bu süreçte de fikir birliği istemcileri P2P ağı üzerinden blok dedikodularını yaparlar ve bu da mutabakatın ve zincir büyümesinin önünü açar. diff --git a/public/content/translations/tr/restaking/index.md b/public/content/translations/tr/restaking/index.md index c22c719727b..1fe5a8ddbf6 100644 --- a/public/content/translations/tr/restaking/index.md +++ b/public/content/translations/tr/restaking/index.md @@ -144,7 +144,7 @@ AVS'ler farklı oranlar sunsa da, eETH gibi Likit Yeniden Hisseleme Jetonları (

Ethereum'un kurucu ortağı yazıyor…

- Ethereum'un kurucu ortağı Vitalik, 2021 tarihli Don't Overload Consensus adlı blog yazısında yeniden hisselemenin potansiyel riskleri konusunda uyardı. + Ethereum'un kurucu ortağı Vitalik, 2021 tarihli Don't Overload Consensus adlı blog yazısında yeniden hisselemenin potansiyel riskleri konusunda uyardı.

diff --git a/public/content/translations/uk/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/uk/developers/docs/nodes-and-clients/node-architecture/index.md index 69a58f28579..8337b8c00f3 100644 --- a/public/content/translations/uk/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/uk/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: uk Вузол Ethereum складається з двох клієнтів: [клієнта виконання](/developers/docs/nodes-and-clients/#execution-clients) та [клієнта консенсусу](/developers/docs/nodes-and-clients/#consensus-clients). Щоб вузол міг запропонувати новий блок, він також має запустити [клієнт-валідатор](#validators). -Коли Ethereum використовував [підтвердження роботи](/developers/docs/consensus-mechanisms/pow/), клієнта виконання було достатньо для запуску повного вузла Ethereum. Однак після впровадження [доказу частки](/developers/docs/consensus-mechanisms/pow/), клієнт виконання має використовуватися разом з іншим програмним забезпеченням, що називається [клієнт консенсусу](/developers/docs/nodes-and-clients/#consensus-clients). +Коли Ethereum використовував [підтвердження роботи](/developers/docs/consensus-mechanisms/pow/), клієнта виконання було достатньо для запуску повного вузла Ethereum. Однак після впровадження [доказу частки](/developers/docs/consensus-mechanisms/pos/), клієнт виконання має використовуватися разом з іншим програмним забезпеченням, що називається [клієнт консенсусу](/developers/docs/nodes-and-clients/#consensus-clients). Діаграма нижче показує відношення між двома клієнтами Ethereum. Два клієнти підключаються до своїх власних відповідних однорангових (P2P) мереж. Окремі P2P-мережі потрібні, оскільки клієнти виконання поширюють транзакції через свою P2P-мережу, що дозволяє їм керувати своїм локальним пулом транзакцій, тоді як клієнти консенсусу поширюють блоки через свою P2P-мережу, забезпечуючи консенсус і зростання ланцюга. diff --git a/public/content/translations/ur/developers/docs/apis/json-rpc/index.md b/public/content/translations/ur/developers/docs/apis/json-rpc/index.md new file mode 100644 index 00000000000..daa0b8f1b28 --- /dev/null +++ b/public/content/translations/ur/developers/docs/apis/json-rpc/index.md @@ -0,0 +1,1894 @@ +--- +title: JSON-RPC API +description: "ایتھریم کلائنٹس کے لیے ایک سٹیٹ لیس، ہلکا پھلکا ریموٹ پروسیجر کال (RPC) پروٹوکول۔" +lang: ur +--- + +کسی بھی سافٹ ویئر ایپلیکیشن کو [ایتھریم](/) بلاک چین کے ساتھ تعامل کرنے کے لیے - چاہے وہ بلاک چین کا ڈیٹا پڑھنا ہو یا نیٹ ورک پر ٹرانزیکشنز بھیجنا ہو - اسے ایک ایتھریم نوڈ سے منسلک ہونا ضروری ہے۔ + +اس مقصد کے لیے، ہر [ایتھریم کلائنٹ](/developers/docs/nodes-and-clients/#execution-clients) ایک [JSON-RPC تصریح](https://github.com/ethereum/execution-apis) کو نافذ کرتا ہے، تاکہ طریقوں (methods) کا ایک یکساں سیٹ موجود ہو جس پر ایپلیکیشنز انحصار کر سکیں، قطع نظر اس کے کہ مخصوص نوڈ یا کلائنٹ کا نفاذ کیا ہے۔ + +[JSON-RPC](https://www.jsonrpc.org/specification) ایک سٹیٹ لیس، ہلکا پھلکا ریموٹ پروسیجر کال (RPC) پروٹوکول ہے۔ یہ کئی ڈیٹا سٹرکچرز اور ان کی پروسیسنگ کے اصولوں کی وضاحت کرتا ہے۔ یہ ٹرانسپورٹ ایگنوسٹک (transport agnostic) ہے، یعنی اس کے تصورات کو ایک ہی پروسیس کے اندر، ساکٹس (sockets) پر، HTTP پر، یا پیغام رسانی کے مختلف ماحول میں استعمال کیا جا سکتا ہے۔ یہ ڈیٹا فارمیٹ کے طور پر JSON (RFC 4627) کا استعمال کرتا ہے۔ + +## کلائنٹ امپلی مینٹیشنز {#client-implementations} + +ایتھریم کلائنٹس JSON-RPC کی تخصیص کو نافذ کرتے وقت مختلف پروگرامنگ زبانیں استعمال کر سکتے ہیں۔ مخصوص پروگرامنگ زبانوں سے متعلق مزید تفصیلات کے لیے انفرادی [کلائنٹ کی دستاویزات](/developers/docs/nodes-and-clients/#execution-clients) دیکھیں۔ ہم تجویز کرتے ہیں کہ تازہ ترین API سپورٹ کی معلومات کے لیے ہر کلائنٹ کی دستاویزات چیک کریں۔ + +## سہولت بخش لائبریریاں {#convenience-libraries} + +اگرچہ آپ JSON-RPC API کے ذریعے براہ راست Ethereum کلائنٹس کے ساتھ تعامل کرنے کا انتخاب کر سکتے ہیں، لیکن dapp ڈیولپرز کے لیے اکثر آسان اختیارات موجود ہوتے ہیں۔ JSON-RPC API کے اوپر ریپرز (wrappers) فراہم کرنے کے لیے بہت سی [JavaScript](/developers/docs/apis/javascript/#available-libraries) اور [backend API](/developers/docs/apis/backend/#available-libraries) لائبریریاں موجود ہیں۔ ان لائبریریوں کے ساتھ، ڈیولپرز اپنی پسند کی پروگرامنگ زبان میں بدیہی، ایک سطری (one-line) طریقے لکھ سکتے ہیں تاکہ (پس پردہ) JSON-RPC درخواستیں شروع کی جا سکیں جو Ethereum کے ساتھ تعامل کرتی ہیں۔ + +## کنسنسس کلائنٹ APIs {#consensus-clients} + +یہ صفحہ بنیادی طور پر Ethereum ایگزیکیوشن کلائنٹس کے زیر استعمال JSON-RPC API سے متعلق ہے۔ تاہم، کنسنسس کلائنٹس میں ایک RPC API بھی ہوتا ہے جو صارفین کو نوڈ کے بارے میں معلومات حاصل کرنے، بیکن (Beacon) بلاکس، بیکن اسٹیٹ، اور کنسنسس سے متعلق دیگر معلومات براہ راست نوڈ سے طلب کرنے کی اجازت دیتا ہے۔ اس API کی دستاویزات [بیکن API ویب پیج](https://ethereum.github.io/beacon-APIs/#/) پر موجود ہیں۔ + +ایک نوڈ کے اندر کلائنٹس کے درمیان رابطے کے لیے ایک اندرونی API بھی استعمال کیا جاتا ہے - یعنی، یہ کنسنسس کلائنٹ اور ایگزیکیوشن کلائنٹ کو ڈیٹا کا تبادلہ کرنے کے قابل بناتا ہے۔ اسے 'Engine API' کہا جاتا ہے اور اس کی تفصیلات [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) پر دستیاب ہیں۔ + +## ایگزیکیوشن کلائنٹ کی تفصیلات {#spec} + +[GitHub پر مکمل JSON-RPC API کی تفصیلات پڑھیں](https://github.com/ethereum/execution-apis)۔ اس API کو [Execution API ویب پیج](https://ethereum.github.io/execution-apis/) پر دستاویزی شکل دی گئی ہے اور اس میں تمام دستیاب طریقوں کو آزمانے کے لیے ایک انسپکٹر (Inspector) شامل ہے۔ + +## روایات {#conventions} + +### ہیکس ویلیو انکوڈنگ {#hex-encoding} + +JSON پر دو اہم ڈیٹا ٹائپس پاس کی جاتی ہیں: ان فارمیٹڈ بائٹ ایریز (unformatted byte arrays) اور مقداریں (quantities)۔ دونوں کو ہیکس انکوڈنگ کے ساتھ پاس کیا جاتا ہے لیکن فارمیٹنگ کے لیے مختلف تقاضوں کے ساتھ۔ + +#### مقداریں {#quantities-encoding} + +مقداروں (انٹیجرز، نمبرز) کو انکوڈ کرتے وقت: ہیکس کے طور پر انکوڈ کریں، "0x" کا سابقہ لگائیں، جو کہ سب سے مختصر نمائندگی ہے (معمولی استثنا: صفر کو "0x0" کے طور پر پیش کیا جانا چاہیے)۔ + +یہاں کچھ مثالیں ہیں: + +- 0x41 (اعشاریہ میں 65) +- 0x400 (اعشاریہ میں 1024) +- غلط: 0x (ہمیشہ کم از کم ایک ہندسہ ہونا چاہیے - صفر "0x0" ہے) +- غلط: 0x0400 (شروع میں صفر کی اجازت نہیں ہے) +- غلط: ff (شروع میں 0x کا سابقہ ہونا ضروری ہے) + +### ان فارمیٹڈ ڈیٹا {#unformatted-data-encoding} + +ان فارمیٹڈ ڈیٹا (بائٹ ایریز، اکاؤنٹ ایڈریسز، ہیشز، بائٹ کوڈ ایریز) کو انکوڈ کرتے وقت: ہیکس کے طور پر انکوڈ کریں، "0x" کا سابقہ لگائیں، فی بائٹ دو ہیکس ہندسے۔ + +یہاں کچھ مثالیں ہیں: + +- 0x41 (سائز 1، "A") +- 0x004200 (سائز 3، "0B0") +- 0x (سائز 0، "") +- غلط: 0xf0f0f (ہندسوں کی تعداد جفت ہونی چاہیے) +- غلط: 004200 (شروع میں 0x کا سابقہ ہونا ضروری ہے) + +### بلاک پیرامیٹر {#block-parameter} + +درج ذیل میتھڈز میں ایک بلاک پیرامیٹر ہوتا ہے: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +جب ایسی درخواستیں کی جاتی ہیں جو Ethereum کی حالت (state) کے بارے میں استفسار کرتی ہیں، تو فراہم کردہ بلاک پیرامیٹر بلاک کی اونچائی (height) کا تعین کرتا ہے۔ + +بلاک پیرامیٹر کے لیے درج ذیل آپشنز ممکن ہیں: + +- `HEX String` - ایک انٹیجر بلاک نمبر +- `String "earliest"` - سب سے ابتدائی/جینیسس (genesis) بلاک کے لیے +- `String "latest"` - تازہ ترین تجویز کردہ بلاک کے لیے +- `String "safe"` - تازہ ترین محفوظ ہیڈ بلاک کے لیے +- `String "finalized"` - تازہ ترین حتمی (finalized) بلاک کے لیے +- `String "pending"` - زیر التوا حالت/ٹرانزیکشنز کے لیے + +## مثالیں + +اس صفحے پر ہم کمانڈ لائن ٹول، [curl](https://curl.se) کا استعمال کرتے ہوئے انفرادی JSON_RPC API اینڈ پوائنٹس کو استعمال کرنے کی مثالیں فراہم کرتے ہیں۔ یہ انفرادی اینڈ پوائنٹ کی مثالیں نیچے [Curl کی مثالیں](#curl-examples) سیکشن میں دی گئی ہیں۔ صفحے میں مزید نیچے، ہم Geth نوڈ، JSON_RPC API اور curl کا استعمال کرتے ہوئے ایک اسمارٹ کانٹریکٹ کو مرتب اور تعینات کرنے کے لیے ایک [مکمل مثال](#usage-example) بھی فراہم کرتے ہیں۔ + +## curl کی مثالیں {#curl-examples} + +Ethereum نوڈ کو [curl](https://curl.se) درخواستیں بھیج کر JSON_RPC API استعمال کرنے کی مثالیں ذیل میں دی گئی ہیں۔ ہر مثال میں مخصوص اینڈ پوائنٹ کی تفصیل، اس کے پیرامیٹرز، ریٹرن ٹائپ، اور اسے استعمال کرنے کے طریقے کی ایک عملی مثال شامل ہے۔ + +curl درخواستیں کنٹینٹ ٹائپ سے متعلق خرابی کا پیغام (error message) واپس کر سکتی ہیں۔ اس کی وجہ یہ ہے کہ `--data` آپشن کنٹینٹ ٹائپ کو `application/x-www-form-urlencoded` پر سیٹ کرتا ہے۔ اگر آپ کا نوڈ اس بارے میں ایرر دیتا ہے، تو کال کے شروع میں `-H "Content-Type: application/json"` رکھ کر دستی طور پر ہیڈر سیٹ کریں۔ مثالوں میں URL/IP اور پورٹ کا امتزاج بھی شامل نہیں ہے جو curl کو دیا جانے والا آخری آرگومنٹ ہونا چاہیے (جیسے، `127.0.0.1:8545`)۔ ان اضافی ڈیٹا پر مشتمل ایک مکمل curl درخواست درج ذیل شکل اختیار کرتی ہے: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## گاسپ، اسٹیٹ، ہسٹری {#gossip-state-history} + +چند بنیادی JSON-RPC میتھڈز کو ایتھیریم نیٹ ورک سے ڈیٹا درکار ہوتا ہے، اور یہ باآسانی تین اہم زمروں میں تقسیم ہوتے ہیں: _گاسپ، اسٹیٹ، اور ہسٹری_۔ ہر میتھڈ پر جانے کے لیے ان سیکشنز میں موجود لنکس کا استعمال کریں، یا میتھڈز کی مکمل فہرست دیکھنے کے لیے فہرستِ مضامین کا استعمال کریں۔ + +### گاسپ میتھڈز {#gossip-methods} + +> یہ میتھڈز چین کے ہیڈ (head) کو ٹریک کرتے ہیں۔ اسی طرح ٹرانزیکشنز نیٹ ورک میں اپنا راستہ بناتی ہیں، بلاکس میں شامل ہوتی ہیں، اور کلائنٹس کو نئے بلاکس کے بارے میں معلوم ہوتا ہے۔ + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### اسٹیٹ میتھڈز {#state_methods} + +> وہ میتھڈز جو تمام محفوظ کردہ ڈیٹا کی موجودہ اسٹیٹ کی رپورٹ دیتے ہیں۔ "اسٹیٹ" ایک بڑی شیئرڈ RAM کی طرح ہے، اور اس میں اکاؤنٹ بیلنس، کنٹریکٹ کا ڈیٹا، اور گیس کے تخمینے شامل ہوتے ہیں۔ + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### ہسٹری میتھڈز {#history_methods} + +> جینیسس (genesis) تک ہر بلاک کا تاریخی ریکارڈ حاصل کرتا ہے۔ یہ ایک بڑی اپینڈ-اونلی (append-only) فائل کی طرح ہے، اور اس میں تمام بلاک ہیڈرز، بلاک باڈیز، انکل (uncle) بلاکس، اور ٹرانزیکشن کی رسیدیں شامل ہوتی ہیں۔ + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC API پلے گراؤنڈ + +آپ API میتھڈز کو دریافت کرنے اور آزمانے کے لیے [پلے گراؤنڈ ٹول](https://ethereum-json-rpc.com) استعمال کر سکتے ہیں۔ یہ آپ کو یہ بھی دکھاتا ہے کہ مختلف نوڈ پرووائیڈرز کن میتھڈز اور نیٹ ورکس کو سپورٹ کرتے ہیں۔ + +## JSON-RPC API کے طریقے {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +موجودہ کلائنٹ کا ورژن لوٹاتا ہے۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`String` - موجودہ کلائنٹ کا ورژن + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// نتیجہ +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +دیے گئے ڈیٹا کا Keccak-256 (معیاری SHA3-256 _نہیں_) لوٹاتا ہے۔ + +**پیرامیٹرز** + +1. `DATA` - وہ ڈیٹا جسے SHA3 ہیش میں تبدیل کرنا ہے + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**واپسی** + +`DATA` - دی گئی سٹرنگ کا SHA3 نتیجہ۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// نتیجہ +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +موجودہ نیٹ ورک کی آئی ڈی (id) لوٹاتا ہے۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`String` - موجودہ نیٹ ورک کی آئی ڈی۔ + +موجودہ نیٹ ورک IDs کی مکمل فہرست [chainlist.org](https://chainlist.org) پر دستیاب ہے۔ کچھ عام یہ ہیں: + +- `1`: Ethereum Mainnet +- `11155111`: Sepolia ٹیسٹ نیٹ +- `560048` : Hoodi ٹیسٹ نیٹ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// نتیجہ +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +اگر کلائنٹ نیٹ ورک کنکشنز کے لیے فعال طور پر سن رہا ہے تو `true` لوٹاتا ہے۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`Boolean` - سنتے وقت `true`، بصورت دیگر `false`۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// نتیجہ +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +کلائنٹ سے فی الحال منسلک پیئرز (peers) کی تعداد لوٹاتا ہے۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`QUANTITY` - منسلک پیئرز کی تعداد کا انٹیجر (integer)۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// نتیجہ +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +موجودہ Ethereum پروٹوکول کا ورژن لوٹاتا ہے۔ نوٹ کریں کہ یہ طریقہ [Geth میں دستیاب نہیں ہے](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`String` - موجودہ Ethereum پروٹوکول کا ورژن + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// نتیجہ +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +سنک (sync) کی صورتحال کے بارے میں ڈیٹا کے ساتھ ایک آبجیکٹ یا `false` لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +درست واپسی کا ڈیٹا کلائنٹ کے نفاذ کے درمیان مختلف ہوتا ہے۔ جب نوڈ سنک نہیں ہو رہا ہوتا تو تمام کلائنٹس `False` لوٹاتے ہیں، اور تمام کلائنٹس درج ذیل فیلڈز لوٹاتے ہیں۔ + +`Object|Boolean`، سنک کی صورتحال کے ڈیٹا کے ساتھ ایک آبجیکٹ یا `FALSE`، جب سنک نہیں ہو رہا ہو: + +- `startingBlock`: `QUANTITY` - وہ بلاک جس پر امپورٹ شروع ہوا (صرف اس وقت ری سیٹ ہوگا، جب سنک اپنے ہیڈ تک پہنچ جائے گا) +- `currentBlock`: `QUANTITY` - موجودہ بلاک، بالکل eth_blockNumber کی طرح +- `highestBlock`: `QUANTITY` - تخمینی سب سے اونچا بلاک + +تاہم، انفرادی کلائنٹس اضافی ڈیٹا بھی فراہم کر سکتے ہیں۔ مثال کے طور پر Geth درج ذیل لوٹاتا ہے: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "currentBlock": "0x3cf522", + "healedBytecodeBytes": "0x0", + "healedBytecodes": "0x0", + "healedTrienodes": "0x0", + "healingBytecode": "0x0", + "healingTrienodes": "0x0", + "highestBlock": "0x3e0e41", + "startingBlock": "0x3cbed5", + "syncedAccountBytes": "0x0", + "syncedAccounts": "0x0", + "syncedBytecodeBytes": "0x0", + "syncedBytecodes": "0x0", + "syncedStorage": "0x0", + "syncedStorageBytes": "0x0" + } +} +``` + +جبکہ Besu لوٹاتا ہے: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +مزید تفصیلات کے لیے اپنے مخصوص کلائنٹ کی دستاویزات سے رجوع کریں۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// یا جب سنک نہ ہو رہا ہو +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +کلائنٹ کا کوائن بیس (coinbase) ایڈریس لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +> **نوٹ:** یہ طریقہ **v1.14.0** کے بعد سے متروک (deprecated) کر دیا گیا ہے اور اب تعاون یافتہ نہیں ہے۔ اس طریقے کو استعمال کرنے کی کوشش کے نتیجے میں "Method not supported" کی خرابی ظاہر ہوگی۔ + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`DATA`، 20 بائٹس - موجودہ کوائن بیس ایڈریس۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// نتیجہ +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +ری پلے سے محفوظ (replay-protected) ٹرانزیکشنز پر دستخط کرنے کے لیے استعمال ہونے والی چین آئی ڈی (chain ID) لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`chainId`، ایک سٹرنگ کے طور پر ہیکسا ڈیسیمل ویلیو جو موجودہ چین آئی ڈی کے انٹیجر کی نمائندگی کرتی ہے۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// نتیجہ +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +اگر کلائنٹ فعال طور پر نئے بلاکس کی مائننگ کر رہا ہے تو `true` لوٹاتا ہے۔ یہ صرف پروف-آف-ورک (proof-of-work) نیٹ ورکس کے لیے `true` لوٹا سکتا ہے اور [The Merge](/roadmap/merge/) کے بعد سے کچھ کلائنٹس میں دستیاب نہیں ہو سکتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`Boolean` - اگر کلائنٹ مائننگ کر رہا ہے تو `true` لوٹاتا ہے، بصورت دیگر `false`۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' + +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +فی سیکنڈ ہیشز کی تعداد لوٹاتا ہے جس کے ساتھ نوڈ مائننگ کر رہا ہے۔ یہ صرف پروف-آف-ورک نیٹ ورکس کے لیے `true` لوٹا سکتا ہے اور [The Merge](/roadmap/merge/) کے بعد سے کچھ کلائنٹس میں دستیاب نہیں ہو سکتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`QUANTITY` - فی سیکنڈ ہیشز کی تعداد۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// نتیجہ +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +wei میں فی گیس کی موجودہ قیمت کا تخمینہ لوٹاتا ہے۔ مثال کے طور پر، Besu کلائنٹ پچھلے 100 بلاکس کا جائزہ لیتا ہے اور پہلے سے طے شدہ طور پر درمیانی گیس یونٹ کی قیمت لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`QUANTITY` - wei میں موجودہ گیس کی قیمت کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// نتیجہ +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +کلائنٹ کی ملکیت والے ایڈریسز کی فہرست لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`Array of DATA`، 20 بائٹس - کلائنٹ کی ملکیت والے ایڈریسز۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +سب سے حالیہ بلاک کا نمبر لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +کوئی نہیں + +**واپسی** + +`QUANTITY` - موجودہ بلاک نمبر کا انٹیجر جس پر کلائنٹ ہے۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// نتیجہ +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +کسی دیے گئے ایڈریس پر اکاؤنٹ کا بیلنس لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 20 بائٹس - وہ ایڈریس جس کا بیلنس چیک کرنا ہے۔ +2. `QUANTITY|TAG` - انٹیجر بلاک نمبر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"`، یا `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**واپسی** + +`QUANTITY` - wei میں موجودہ بیلنس کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +کسی دیے گئے ایڈریس پر سٹوریج کی پوزیشن سے ویلیو لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 20 بائٹس - سٹوریج کا ایڈریس۔ +2. `QUANTITY` - سٹوریج میں پوزیشن کا انٹیجر۔ +3. `QUANTITY|TAG` - انٹیجر بلاک نمبر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"`، `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +**واپسی** + +`DATA` - اس سٹوریج پوزیشن پر ویلیو۔ + +**مثال** +درست پوزیشن کا حساب لگانا اس سٹوریج پر منحصر ہے جسے بازیافت کرنا ہے۔ ایڈریس `0x391694e7e0b0cce554cb130d723a9d27458f9298` کے ذریعے `0x295a70b2de5e3953354a6a8344e616ed314d7251` پر تعینات کیے گئے درج ذیل کنٹریکٹ پر غور کریں۔ + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + constructor() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +pos0 کی ویلیو بازیافت کرنا سیدھا سا ہے: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +میپ (map) کے کسی عنصر کو بازیافت کرنا مشکل ہے۔ میپ میں کسی عنصر کی پوزیشن کا حساب اس طرح لگایا جاتا ہے: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +اس کا مطلب ہے کہ pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] پر سٹوریج بازیافت کرنے کے لیے ہمیں اس کے ساتھ پوزیشن کا حساب لگانے کی ضرورت ہے: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +geth کنسول جو web3 لائبریری کے ساتھ آتا ہے، حساب لگانے کے لیے استعمال کیا جا سکتا ہے: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +اب سٹوریج لانے کے لیے: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +کسی ایڈریس سے _بھیجی گئی_ ٹرانزیکشنز کی تعداد لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 20 بائٹس - ایڈریس۔ +2. `QUANTITY|TAG` - انٹیجر بلاک نمبر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"` یا `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // تازہ ترین بلاک پر حالت +] +``` + +**واپسی** + +`QUANTITY` - اس ایڈریس سے بھیجی گئی ٹرانزیکشنز کی تعداد کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +دیے گئے بلاک ہیش سے مماثل بلاک میں ٹرانزیکشنز کی تعداد لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - بلاک کا ہیش + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**واپسی** + +`QUANTITY` - اس بلاک میں ٹرانزیکشنز کی تعداد کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +دیے گئے بلاک نمبر سے مماثل بلاک میں ٹرانزیکشنز کی تعداد لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `QUANTITY|TAG` - بلاک نمبر کا انٹیجر، یا سٹرنگ `"earliest"`، `"latest"`، `"pending"`، `"safe"` یا `"finalized"`، جیسا کہ [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) میں ہے۔ + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**واپسی** + +`QUANTITY` - اس بلاک میں ٹرانزیکشنز کی تعداد کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +دیے گئے بلاک ہیش سے مماثل بلاک میں انکلز (uncles) کی تعداد لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - بلاک کا ہیش + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**واپسی** + +`QUANTITY` - اس بلاک میں انکلز کی تعداد کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +دیے گئے بلاک نمبر سے مماثل بلاک میں انکلز کی تعداد لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `QUANTITY|TAG` - بلاک نمبر کا انٹیجر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"` یا `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0xe8", // 232 +] +``` + +**واپسی** + +`QUANTITY` - اس بلاک میں انکلز کی تعداد کا انٹیجر۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +کسی دیے گئے ایڈریس پر کوڈ لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 20 بائٹس - ایڈریس +2. `QUANTITY|TAG` - انٹیجر بلاک نمبر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"` یا `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**واپسی** + +`DATA` - دیے گئے ایڈریس سے کوڈ۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +سائن (sign) کا طریقہ اس کے ساتھ ایک Ethereum مخصوص دستخط کا حساب لگاتا ہے: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`۔ + +پیغام میں ایک سابقہ (prefix) شامل کرنے سے حسابی دستخط کو Ethereum کے مخصوص دستخط کے طور پر پہچانا جا سکتا ہے۔ یہ اس غلط استعمال کو روکتا ہے جہاں ایک بدنیتی پر مبنی ڈیپ (dapp) صوابدیدی ڈیٹا (جیسے، ٹرانزیکشن) پر دستخط کر سکتی ہے اور متاثرہ شخص کا روپ دھارنے کے لیے دستخط کا استعمال کر سکتی ہے۔ + +نوٹ: جس ایڈریس سے دستخط کرنا ہے اسے ان لاک (unlocked) ہونا چاہیے۔ + +**پیرامیٹرز** + +1. `DATA`، 20 بائٹس - ایڈریس +2. `DATA`، N بائٹس - دستخط کرنے کے لیے پیغام + +**واپسی** + +`DATA`: دستخط + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +ایک ٹرانزیکشن پر دستخط کرتا ہے جسے بعد میں [eth_sendRawTransaction](#eth_sendrawtransaction) کا استعمال کرتے ہوئے نیٹ ورک پر جمع کرایا جا سکتا ہے۔ + +**پیرامیٹرز** + +1. `Object` - ٹرانزیکشن آبجیکٹ + +- `type`: +- `from`: `DATA`، 20 بائٹس - وہ ایڈریس جہاں سے ٹرانزیکشن بھیجی گئی ہے۔ +- `to`: `DATA`، 20 بائٹس - (نیا کنٹریکٹ بناتے وقت اختیاری) وہ ایڈریس جس پر ٹرانزیکشن بھیجی گئی ہے۔ +- `gas`: `QUANTITY` - (اختیاری، ڈیفالٹ: 90000) ٹرانزیکشن پر عمل درآمد کے لیے فراہم کردہ گیس کا انٹیجر۔ یہ غیر استعمال شدہ گیس واپس کر دے گا۔ +- `gasPrice`: `QUANTITY` - (اختیاری، ڈیفالٹ: To-Be-Determined) ہر ادا شدہ گیس کے لیے استعمال ہونے والی gasPrice کا انٹیجر، Wei میں۔ +- `value`: `QUANTITY` - (اختیاری) اس ٹرانزیکشن کے ساتھ بھیجی گئی ویلیو کا انٹیجر، Wei میں۔ +- `data`: `DATA` - کسی کنٹریکٹ کا مرتب شدہ (compiled) کوڈ یا طلب کیے گئے طریقہ کار کے دستخط اور انکوڈ شدہ پیرامیٹرز کا ہیش۔ +- `nonce`: `QUANTITY` - (اختیاری) نانس (nonce) کا انٹیجر۔ یہ آپ کو اپنی زیر التواء ٹرانزیکشنز کو اوور رائٹ کرنے کی اجازت دیتا ہے جو ایک ہی نانس استعمال کرتی ہیں۔ + +**واپسی** + +`DATA`، مخصوص اکاؤنٹ کے ذریعے دستخط شدہ RLP-انکوڈ شدہ ٹرانزیکشن آبجیکٹ۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// نتیجہ +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +نئی میسج کال ٹرانزیکشن یا کنٹریکٹ کی تخلیق کرتا ہے، اگر ڈیٹا فیلڈ میں کوڈ موجود ہو، اور `from` میں بتائے گئے اکاؤنٹ کا استعمال کرتے ہوئے اس پر دستخط کرتا ہے۔ + +**پیرامیٹرز** + +1. `Object` - ٹرانزیکشن آبجیکٹ + +- `from`: `DATA`، 20 بائٹس - وہ ایڈریس جہاں سے ٹرانزیکشن بھیجی گئی ہے۔ +- `to`: `DATA`، 20 بائٹس - (نیا کنٹریکٹ بناتے وقت اختیاری) وہ ایڈریس جس پر ٹرانزیکشن بھیجی گئی ہے۔ +- `gas`: `QUANTITY` - (اختیاری، ڈیفالٹ: 90000) ٹرانزیکشن پر عمل درآمد کے لیے فراہم کردہ گیس کا انٹیجر۔ یہ غیر استعمال شدہ گیس واپس کر دے گا۔ +- `gasPrice`: `QUANTITY` - (اختیاری، ڈیفالٹ: To-Be-Determined) ہر ادا شدہ گیس کے لیے استعمال ہونے والی gasPrice کا انٹیجر۔ +- `value`: `QUANTITY` - (اختیاری) اس ٹرانزیکشن کے ساتھ بھیجی گئی ویلیو کا انٹیجر۔ +- `input`: `DATA` - کسی کنٹریکٹ کا مرتب شدہ کوڈ یا طلب کیے گئے طریقہ کار کے دستخط اور انکوڈ شدہ پیرامیٹرز کا ہیش۔ +- `nonce`: `QUANTITY` - (اختیاری) نانس کا انٹیجر۔ یہ آپ کو اپنی زیر التواء ٹرانزیکشنز کو اوور رائٹ کرنے کی اجازت دیتا ہے جو ایک ہی نانس استعمال کرتی ہیں۔ + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**واپسی** + +`DATA`، 32 بائٹس - ٹرانزیکشن ہیش، یا صفر ہیش اگر ٹرانزیکشن ابھی دستیاب نہیں ہے۔ + +جب آپ نے کوئی کنٹریکٹ بنایا ہو، تو بلاک میں ٹرانزیکشن تجویز کیے جانے کے بعد، کنٹریکٹ کا ایڈریس حاصل کرنے کے لیے [eth_getTransactionReceipt](#eth_gettransactionreceipt) کا استعمال کریں۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +دستخط شدہ ٹرانزیکشنز کے لیے نئی میسج کال ٹرانزیکشن یا کنٹریکٹ کی تخلیق کرتا ہے۔ + +**پیرامیٹرز** + +1. `DATA`، دستخط شدہ ٹرانزیکشن کا ڈیٹا۔ + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**واپسی** + +`DATA`، 32 بائٹس - ٹرانزیکشن ہیش، یا صفر ہیش اگر ٹرانزیکشن ابھی دستیاب نہیں ہے۔ + +جب آپ نے کوئی کنٹریکٹ بنایا ہو، تو بلاک میں ٹرانزیکشن تجویز کیے جانے کے بعد، کنٹریکٹ کا ایڈریس حاصل کرنے کے لیے [eth_getTransactionReceipt](#eth_gettransactionreceipt) کا استعمال کریں۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +بلاک چین پر ٹرانزیکشن بنائے بغیر فوری طور پر ایک نئی میسج کال پر عمل درآمد کرتا ہے۔ اکثر صرف پڑھنے کے لیے (read-only) سمارٹ کنٹریکٹ فنکشنز کو چلانے کے لیے استعمال کیا جاتا ہے، مثال کے طور پر ERC-20 کنٹریکٹ کے لیے `balanceOf`۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `Object` - ٹرانزیکشن کال آبجیکٹ + +- `from`: `DATA`، 20 بائٹس - (اختیاری) وہ ایڈریس جہاں سے ٹرانزیکشن بھیجی گئی ہے۔ +- `to`: `DATA`، 20 بائٹس - وہ ایڈریس جس پر ٹرانزیکشن بھیجی گئی ہے۔ +- `gas`: `QUANTITY` - (اختیاری) ٹرانزیکشن پر عمل درآمد کے لیے فراہم کردہ گیس کا انٹیجر۔ eth_call صفر گیس استعمال کرتا ہے، لیکن کچھ عمل درآمد کے لیے اس پیرامیٹر کی ضرورت ہو سکتی ہے۔ +- `gasPrice`: `QUANTITY` - (اختیاری) ہر ادا شدہ گیس کے لیے استعمال ہونے والی gasPrice کا انٹیجر +- `value`: `QUANTITY` - (اختیاری) اس ٹرانزیکشن کے ساتھ بھیجی گئی ویلیو کا انٹیجر +- `input`: `DATA` - (اختیاری) طریقہ کار کے دستخط اور انکوڈ شدہ پیرامیٹرز کا ہیش۔ تفصیلات کے لیے [Solidity دستاویزات میں Ethereum Contract ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) دیکھیں۔ + +2. `QUANTITY|TAG` - انٹیجر بلاک نمبر، یا سٹرنگ `"latest"`، `"earliest"`، `"pending"`، `"safe"` یا `"finalized"`، دیکھیں [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) + +**واپسی** + +`DATA` - عمل میں لائے گئے کنٹریکٹ کی واپسی کی ویلیو۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +اس بات کا تخمینہ تیار کرتا ہے اور لوٹاتا ہے کہ ٹرانزیکشن کو مکمل ہونے دینے کے لیے کتنی گیس ضروری ہے۔ ٹرانزیکشن کو بلاک چین میں شامل نہیں کیا جائے گا۔ نوٹ کریں کہ یہ تخمینہ ٹرانزیکشن کے ذریعے اصل میں استعمال ہونے والی گیس کی مقدار سے نمایاں طور پر زیادہ ہو سکتا ہے، جس کی مختلف وجوہات ہیں جن میں EVM میکینکس اور نوڈ کی کارکردگی شامل ہیں۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +[eth_call](#eth_call) کے پیرامیٹرز دیکھیں، سوائے اس کے کہ تمام خصوصیات اختیاری ہیں۔ اگر گیس کی کوئی حد متعین نہیں کی گئی ہے تو geth زیر التواء بلاک سے بلاک گیس کی حد کو اوپری حد کے طور پر استعمال کرتا ہے۔ نتیجے کے طور پر، جب گیس کی مقدار زیر التواء بلاک گیس کی حد سے زیادہ ہو تو لوٹایا گیا تخمینہ کال/ٹرانزیکشن پر عمل درآمد کے لیے کافی نہیں ہو سکتا ہے۔ + +**واپسی** + +`QUANTITY` - استعمال شدہ گیس کی مقدار۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +ہیش کے ذریعے بلاک کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - بلاک کا ہیش۔ +2. `Boolean` - اگر `true` ہے تو یہ مکمل ٹرانزیکشن آبجیکٹس لوٹاتا ہے، اگر `false` ہے تو صرف ٹرانزیکشنز کے ہیشز۔ + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**واپسی** + +`Object` - ایک بلاک آبجیکٹ، یا `null` جب کوئی بلاک نہیں ملا: + +- `number`: `QUANTITY` - بلاک نمبر۔ `null` جب یہ زیر التواء بلاک ہو۔ +- `hash`: `DATA`، 32 بائٹس - بلاک کا ہیش۔ `null` جب یہ زیر التواء بلاک ہو۔ +- `parentHash`: `DATA`، 32 بائٹس - پیرنٹ (parent) بلاک کا ہیش۔ +- `nonce`: `DATA`، 8 بائٹس - تیار کردہ پروف-آف-ورک کا ہیش۔ `null` جب یہ زیر التواء بلاک ہو، پروف-آف-اسٹیک (proof-of-stake) بلاکس کے لیے `0x0` (The Merge کے بعد سے) +- `sha3Uncles`: `DATA`، 32 بائٹس - بلاک میں انکلز کے ڈیٹا کا SHA3۔ +- `logsBloom`: `DATA`، 256 بائٹس - بلاک کے لاگز (logs) کے لیے بلوم فلٹر (bloom filter)۔ `null` جب یہ زیر التواء بلاک ہو۔ +- `transactionsRoot`: `DATA`، 32 بائٹس - بلاک کی ٹرانزیکشن ٹرائی (trie) کا روٹ (root)۔ +- `stateRoot`: `DATA`، 32 بائٹس - بلاک کی حتمی اسٹیٹ (state) ٹرائی کا روٹ۔ +- `receiptsRoot`: `DATA`، 32 بائٹس - بلاک کی رسیدوں (receipts) کی ٹرائی کا روٹ۔ +- `miner`: `DATA`، 20 بائٹس - اس مستفید ہونے والے کا ایڈریس جسے بلاک کے انعامات دیے گئے تھے۔ +- `difficulty`: `QUANTITY` - اس بلاک کے لیے مشکل (difficulty) کا انٹیجر۔ +- `totalDifficulty`: `QUANTITY` - اس بلاک تک چین کی کل مشکل کا انٹیجر۔ +- `extraData`: `DATA` - اس بلاک کی "اضافی ڈیٹا" فیلڈ۔ +- `size`: `QUANTITY` - بائٹس میں اس بلاک کے سائز کا انٹیجر۔ +- `gasLimit`: `QUANTITY` - اس بلاک میں زیادہ سے زیادہ گیس کی اجازت۔ +- `gasUsed`: `QUANTITY` - اس بلاک میں تمام ٹرانزیکشنز کے ذریعے استعمال ہونے والی کل گیس۔ +- `timestamp`: `QUANTITY` - یونکس ٹائم اسٹیمپ (unix timestamp) جب بلاک کو مرتب کیا گیا تھا۔ +- `transactions`: `Array` - ٹرانزیکشن آبجیکٹس کی Array، یا آخری دیے گئے پیرامیٹر کے لحاظ سے 32 بائٹس کے ٹرانزیکشن ہیشز۔ +- `uncles`: `Array` - انکل ہیشز کی Array۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// نتیجہ +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] + } +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +بلاک نمبر کے ذریعے بلاک کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `QUANTITY|TAG` - بلاک نمبر کا انٹیجر، یا سٹرنگ `"earliest"`، `"latest"`، `"pending"`، `"safe"` یا `"finalized"`، جیسا کہ [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) میں ہے۔ +2. `Boolean` - اگر `true` ہے تو یہ مکمل ٹرانزیکشن آبجیکٹس لوٹاتا ہے، اگر `false` ہے تو صرف ٹرانزیکشنز کے ہیشز۔ + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**واپسی** +دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +نتیجہ دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +ٹرانزیکشن ہیش کے ذریعے درخواست کردہ ٹرانزیکشن کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - ٹرانزیکشن کا ہیش + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**واپسی** + +`Object` - ایک ٹرانزیکشن آبجیکٹ، یا `null` جب کوئی ٹرانزیکشن نہیں ملی: + +- `blockHash`: `DATA`، 32 بائٹس - اس بلاک کا ہیش جہاں یہ ٹرانزیکشن تھی۔ `null` جب یہ زیر التواء ہو۔ +- `blockNumber`: `QUANTITY` - وہ بلاک نمبر جہاں یہ ٹرانزیکشن تھی۔ `null` جب یہ زیر التواء ہو۔ +- `from`: `DATA`، 20 بائٹس - بھیجنے والے کا ایڈریس۔ +- `gas`: `QUANTITY` - بھیجنے والے کی طرف سے فراہم کردہ گیس۔ +- `gasPrice`: `QUANTITY` - بھیجنے والے کی طرف سے Wei میں فراہم کردہ گیس کی قیمت۔ +- `hash`: `DATA`، 32 بائٹس - ٹرانزیکشن کا ہیش۔ +- `input`: `DATA` - ٹرانزیکشن کے ساتھ بھیجا گیا ڈیٹا۔ +- `nonce`: `QUANTITY` - اس سے پہلے بھیجنے والے کی طرف سے کی گئی ٹرانزیکشنز کی تعداد۔ +- `to`: `DATA`، 20 بائٹس - وصول کنندہ کا ایڈریس۔ `null` جب یہ کنٹریکٹ بنانے کی ٹرانزیکشن ہو۔ +- `transactionIndex`: `QUANTITY` - بلاک میں ٹرانزیکشنز کی انڈیکس پوزیشن کا انٹیجر۔ `null` جب یہ زیر التواء ہو۔ +- `value`: `QUANTITY` - Wei میں منتقل کی گئی ویلیو۔ +- `v`: `QUANTITY` - ECDSA ریکوری آئی ڈی +- `r`: `QUANTITY` - ECDSA دستخط r +- `s`: `QUANTITY` - ECDSA دستخط s + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// نتیجہ +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +بلاک ہیش اور ٹرانزیکشن انڈیکس پوزیشن کے ذریعے ٹرانزیکشن کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - بلاک کا ہیش۔ +2. `QUANTITY` - ٹرانزیکشن انڈیکس پوزیشن کا انٹیجر۔ + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**واپسی** +دیکھیں [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +نتیجہ دیکھیں [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +بلاک نمبر اور ٹرانزیکشن انڈیکس پوزیشن کے ذریعے ٹرانزیکشن کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `QUANTITY|TAG` - ایک بلاک نمبر، یا سٹرنگ `"earliest"`، `"latest"`، `"pending"`، `"safe"` یا `"finalized"`، جیسا کہ [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) میں ہے۔ +2. `QUANTITY` - ٹرانزیکشن انڈیکس پوزیشن۔ + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**واپسی** +دیکھیں [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +نتیجہ دیکھیں [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +ٹرانزیکشن ہیش کے ذریعے ٹرانزیکشن کی رسید لوٹاتا ہے۔ + +**نوٹ** کہ زیر التواء ٹرانزیکشنز کے لیے رسید دستیاب نہیں ہے۔ + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - ٹرانزیکشن کا ہیش + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**واپسی** +`Object` - ایک ٹرانزیکشن رسید آبجیکٹ، یا `null` جب کوئی رسید نہیں ملی: + +- `transactionHash `: `DATA`، 32 بائٹس - ٹرانزیکشن کا ہیش۔ +- `transactionIndex`: `QUANTITY` - بلاک میں ٹرانزیکشنز کی انڈیکس پوزیشن کا انٹیجر۔ +- `blockHash`: `DATA`، 32 بائٹس - اس بلاک کا ہیش جہاں یہ ٹرانزیکشن تھی۔ +- `blockNumber`: `QUANTITY` - وہ بلاک نمبر جہاں یہ ٹرانزیکشن تھی۔ +- `from`: `DATA`، 20 بائٹس - بھیجنے والے کا ایڈریس۔ +- `to`: `DATA`، 20 بائٹس - وصول کنندہ کا ایڈریس۔ null جب یہ کنٹریکٹ بنانے کی ٹرانزیکشن ہو۔ +- `cumulativeGasUsed ` : `QUANTITY ` - جب یہ ٹرانزیکشن بلاک میں عمل میں لائی گئی تو استعمال ہونے والی گیس کی کل مقدار۔ +- `effectiveGasPrice ` : `QUANTITY` - گیس کی فی یونٹ ادا کی گئی بنیادی فیس اور ٹپ کا مجموعہ۔ +- `gasUsed `: `QUANTITY ` - صرف اس مخصوص ٹرانزیکشن کے ذریعے استعمال ہونے والی گیس کی مقدار۔ +- `contractAddress `: `DATA`، 20 بائٹس - بنایا گیا کنٹریکٹ ایڈریس، اگر ٹرانزیکشن کنٹریکٹ کی تخلیق تھی، بصورت دیگر `null`۔ +- `logs`: `Array` - لاگ آبجیکٹس کی Array، جو اس ٹرانزیکشن نے تیار کیے۔ +- `logsBloom`: `DATA`، 256 بائٹس - لائٹ کلائنٹس کے لیے متعلقہ لاگز کو تیزی سے بازیافت کرنے کے لیے بلوم فلٹر۔ +- `type`: `QUANTITY` - ٹرانزیکشن کی قسم کا انٹیجر، پرانی (legacy) ٹرانزیکشنز کے لیے `0x0`، ایکسیس لسٹ (access list) کی اقسام کے لیے `0x1`، متحرک فیس (dynamic fees) کے لیے `0x2`۔ + +یہ _یا تو_ یہ بھی لوٹاتا ہے: + +- `root` : `DATA` ٹرانزیکشن کے بعد کی اسٹیٹ روٹ کے 32 بائٹس (Byzantium سے پہلے) +- `status`: `QUANTITY` یا تو `1` (کامیابی) یا `0` (ناکامی) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// نتیجہ +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // ایڈریس کی سٹرنگ اگر یہ بنایا گیا تھا + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // لاگز جیسا کہ getFilterLogs وغیرہ کے ذریعے واپس کیے گئے ہیں + }], + "logsBloom": "0x00...0", // 256 بائٹ بلوم فلٹر + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +ہیش اور انکل انڈیکس پوزیشن کے ذریعے بلاک کے انکل کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `DATA`، 32 بائٹس - بلاک کا ہیش۔ +2. `QUANTITY` - انکل کی انڈیکس پوزیشن۔ + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**واپسی** +دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +نتیجہ دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +**نوٹ**: ایک انکل میں انفرادی ٹرانزیکشنز شامل نہیں ہوتیں۔ + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +نمبر اور انکل انڈیکس پوزیشن کے ذریعے بلاک کے انکل کے بارے میں معلومات لوٹاتا ہے۔ + + + پلے گراؤنڈ میں اینڈ پوائنٹ آزمائیں + + +**پیرامیٹرز** + +1. `QUANTITY|TAG` - ایک بلاک نمبر، یا سٹرنگ `"earliest"`، `"latest"`، `"pending"`، `"safe"`، `"finalized"`، جیسا کہ [بلاک پیرامیٹر](/developers/docs/apis/json-rpc/#block-parameter) میں ہے۔ +2. `QUANTITY` - انکل کی انڈیکس پوزیشن۔ + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**واپسی** +دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +**نوٹ**: ایک انکل میں انفرادی ٹرانزیکشنز شامل نہیں ہوتیں۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +نتیجہ دیکھیں [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_newFilter {#eth_newfilter} + +اسٹیٹ تبدیل ہونے (لاگز) پر مطلع کرنے کے لیے، فلٹر کے اختیارات کی بنیاد پر ایک فلٹر آبجیکٹ بناتا ہے۔ +یہ چیک کرنے کے لیے کہ آیا اسٹیٹ تبدیل ہوئی ہے، [eth_getFilterChanges](#eth_getfilterchanges) کو کال کریں۔ + +**موضوع (topic) کے فلٹرز کی وضاحت پر ایک نوٹ:** +موضوعات ترتیب پر منحصر ہیں۔ [A, B] موضوعات والے لاگ کے ساتھ ایک ٹرانزیکشن درج ذیل موضوع کے فلٹرز سے مماثل ہوگی: + +- `[]` "کچھ بھی" +- `[A]` "پہلی پوزیشن میں A (اور اس کے بعد کچھ بھی)" +- `[null, B]` "پہلی پوزیشن میں کچھ بھی اور دوسری پوزیشن میں B (اور اس کے بعد کچھ بھی)" +- `[A, B]` "پہلی پوزیشن میں A اور دوسری پوزیشن میں B (اور اس کے بعد کچھ بھی)" +- `[[A, B], [A, B]]` "پہلی پوزیشن میں (A یا B) اور دوسری پوزیشن میں (A یا B) (اور اس کے بعد کچھ بھی)" +- **پیرامیٹرز** + +1. `Object` - فلٹر کے اختیارات: + +- `fromBlock`: `QUANTITY|TAG` - (اختیاری، ڈیفالٹ: `"latest"`) انٹیجر بلاک نمبر، یا آخری تجویز کردہ بلاک کے لیے `"latest"`، تازہ ترین محفوظ بلاک کے لیے `"safe"`، تازہ ترین حتمی بلاک کے لیے `"finalized"`، یا ان ٹرانزیکشنز کے لیے `"pending"`، `"earliest"` جو ابھی تک کسی بلاک میں نہیں ہیں۔ +- `toBlock`: `QUANTITY|TAG` - (اختیاری، ڈیفالٹ: `"latest"`) انٹیجر بلاک نمبر، یا آخری تجویز کردہ بلاک کے لیے `"latest"`، تازہ ترین محفوظ بلاک کے لیے `"safe"`، تازہ ترین حتمی بلاک کے لیے `"finalized"`، یا ان ٹرانزیکشنز کے لیے `"pending"`، `"earliest"` جو ابھی تک کسی بلاک میں نہیں ہیں۔ +- `address`: `DATA|Array`، 20 بائٹس - (اختیاری) کنٹریکٹ کا ایڈریس یا ان ایڈریسز کی فہرست جہاں سے لاگز شروع ہونے چاہئیں۔ +- `topics`: `Array of DATA`، - (اختیاری) 32 بائٹس `DATA` موضوعات کی Array۔ موضوعات ترتیب پر منحصر ہیں۔ ہر موضوع "یا" (or) کے اختیارات کے ساتھ DATA کی ایک Array بھی ہو سکتا ہے۔ + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**واپسی** +`QUANTITY` - ایک فلٹر آئی ڈی۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +نیا بلاک آنے پر مطلع کرنے کے لیے، نوڈ میں ایک فلٹر بناتا ہے۔ +یہ چیک کرنے کے لیے کہ آیا اسٹیٹ تبدیل ہوئی ہے، [eth_getFilterChanges](#eth_getfilterchanges) کو کال کریں۔ + +**پیرامیٹرز** +کوئی نہیں + +**واپسی** +`QUANTITY` - ایک فلٹر آئی ڈی۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +نئی زیر التواء ٹرانزیکشنز آنے پر مطلع کرنے کے لیے، نوڈ میں ایک فلٹر بناتا ہے۔ +یہ چیک کرنے کے لیے کہ آیا اسٹیٹ تبدیل ہوئی ہے، [eth_getFilterChanges](#eth_getfilterchanges) کو کال کریں۔ + +**پیرامیٹرز** +کوئی نہیں + +**واپسی** +`QUANTITY` - ایک فلٹر آئی ڈی۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +دی گئی آئی ڈی کے ساتھ فلٹر کو ان انسٹال کرتا ہے۔ جب مزید نگرانی (watch) کی ضرورت نہ ہو تو اسے ہمیشہ کال کیا جانا چاہیے۔ +مزید برآں، جب ایک مدت تک [eth_getFilterChanges](#eth_getfilterchanges) کے ساتھ فلٹرز کی درخواست نہیں کی جاتی ہے تو وہ ٹائم آؤٹ (timeout) ہو جاتے ہیں۔ + +**پیرامیٹرز** + +1. `QUANTITY` - فلٹر آئی ڈی۔ + +```js +params: [ + "0xb", // 11 +] +``` + +**واپسی** +`Boolean` - اگر فلٹر کامیابی سے ان انسٹال ہو گیا تو `true`، بصورت دیگر `false`۔ + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// نتیجہ +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +فلٹر کے لیے پولنگ (polling) کا طریقہ، جو پچھلے پول کے بعد سے ہونے والے لاگز کی ایک Array لوٹاتا ہے۔ + +**پیرامیٹرز** + +1. `QUANTITY` - فلٹر آئی ڈی۔ + +```js +params: [ + "0x16", // 22 +] +``` + +**واپسی** +`Array` - لاگ آبجیکٹس کی Array، یا ایک خالی Array اگر پچھلے پول کے بعد سے کچھ نہیں بدلا ہے۔ + +- `eth_newBlockFilter` کے ساتھ بنائے گئے فلٹرز کے لیے واپسی بلاک ہیشز (`DATA`، 32 بائٹس) ہیں، جیسے، `["0x3454645634534..."]`۔ +- `eth_newPendingTransactionFilter ` کے ساتھ بنائے گئے فلٹرز کے لیے واپسی ٹرانزیکشن ہیشز (`DATA`، 32 بائٹس) ہیں، جیسے، `["0x6345343454645..."]`۔ +- `eth_newFilter` کے ساتھ بنائے گئے فلٹرز کے لیے لاگز درج ذیل پیرامیٹرز کے ساتھ آبجیکٹس ہیں: + - `removed`: `TAG` - `true` جب چین کی تنظیم نو کی وجہ سے لاگ کو ہٹا دیا گیا تھا۔ `false` اگر یہ ایک درست لاگ ہے۔ + - `logIndex`: `QUANTITY` - بلاک میں لاگ انڈیکس پوزیشن کا انٹیجر۔ `null` جب یہ زیر التواء لاگ ہو۔ + - `transactionIndex`: `QUANTITY` - ٹرانزیکشنز کی انڈیکس پوزیشن کا انٹیجر جہاں سے لاگ بنایا گیا تھا۔ `null` جب یہ زیر التواء لاگ ہو۔ + - `transactionHash`: `DATA`، 32 بائٹس - ان ٹرانزیکشنز کا ہیش جہاں سے یہ لاگ بنایا گیا تھا۔ `null` جب یہ زیر التواء لاگ ہو۔ + - `blockHash`: `DATA`، 32 بائٹس - اس بلاک کا ہیش جہاں یہ لاگ تھا۔ `null` جب یہ زیر التواء ہو۔ `null` جب یہ زیر التواء لاگ ہو۔ + - `blockNumber`: `QUANTITY` - وہ بلاک نمبر جہاں یہ لاگ تھا۔ `null` جب یہ زیر التواء ہو۔ `null` جب یہ زیر التواء لاگ ہو۔ + - `address`: `DATA`، 20 بائٹس - وہ ایڈریس جہاں سے یہ لاگ شروع ہوا۔ + - `data`: `DATA` - متغیر لمبائی (variable-length) کا غیر انڈیکس شدہ لاگ ڈیٹا۔ (_solidity_ میں: صفر یا اس سے زیادہ 32 بائٹس کے غیر انڈیکس شدہ لاگ دلائل۔) + - `topics`: `Array of DATA` - انڈیکس شدہ لاگ دلائل کے 0 سے 4 32 بائٹس `DATA` کی Array۔ (_solidity_ میں: پہلا موضوع ایونٹ کے دستخط کا _ہیش_ ہے (جیسے، `Deposit(address,bytes32,uint256)`)، سوائے اس کے کہ آپ نے ایونٹ کو `anonymous` تصریح کنندہ (specifier) کے ساتھ ڈکلیئر کیا ہو۔) + +- **مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// نتیجہ +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +دی گئی آئی ڈی کے ساتھ فلٹر سے مماثل تمام لاگز کی ایک Array لوٹاتا ہے۔ + +**پیرامیٹرز** + +1. `QUANTITY` - فلٹر آئی ڈی۔ + +```js +params: [ + "0x16", // 22 +] +``` + +**واپسی** +دیکھیں [eth_getFilterChanges](#eth_getfilterchanges) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +نتیجہ دیکھیں [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getLogs {#eth_getlogs} + +کسی دیے گئے فلٹر آبجیکٹ سے مماثل تمام لاگز کی ایک Array لوٹاتا ہے۔ + +**پیرامیٹرز** + +1. `Object` - فلٹر کے اختیارات: + +- `fromBlock`: `QUANTITY|TAG` - (اختیاری، ڈیفالٹ: `"latest"`) انٹیجر بلاک نمبر، یا آخری تجویز کردہ بلاک کے لیے `"latest"`، تازہ ترین محفوظ بلاک کے لیے `"safe"`، تازہ ترین حتمی بلاک کے لیے `"finalized"`، یا ان ٹرانزیکشنز کے لیے `"pending"`، `"earliest"` جو ابھی تک کسی بلاک میں نہیں ہیں۔ +- `toBlock`: `QUANTITY|TAG` - (اختیاری، ڈیفالٹ: `"latest"`) انٹیجر بلاک نمبر، یا آخری تجویز کردہ بلاک کے لیے `"latest"`، تازہ ترین محفوظ بلاک کے لیے `"safe"`، تازہ ترین حتمی بلاک کے لیے `"finalized"`، یا ان ٹرانزیکشنز کے لیے `"pending"`، `"earliest"` جو ابھی تک کسی بلاک میں نہیں ہیں۔ +- `address`: `DATA|Array`، 20 بائٹس - (اختیاری) کنٹریکٹ کا ایڈریس یا ان ایڈریسز کی فہرست جہاں سے لاگز شروع ہونے چاہئیں۔ +- `topics`: `Array of DATA`، - (اختیاری) 32 بائٹس `DATA` موضوعات کی Array۔ موضوعات ترتیب پر منحصر ہیں۔ ہر موضوع "یا" (or) کے اختیارات کے ساتھ DATA کی ایک Array بھی ہو سکتا ہے۔ +- `blockHash`: `DATA`، 32 بائٹس - (اختیاری، **مستقبل**) EIP-234 کے اضافے کے ساتھ، `blockHash` ایک نیا فلٹر آپشن ہوگا جو لوٹائے گئے لاگز کو 32-بائٹ ہیش `blockHash` والے واحد بلاک تک محدود کرتا ہے۔ `blockHash` کا استعمال `fromBlock` = `toBlock` = ہیش `blockHash` والے بلاک نمبر کے برابر ہے۔ اگر فلٹر کے معیار میں `blockHash` موجود ہے، تو نہ تو `fromBlock` اور نہ ہی `toBlock` کی اجازت ہے۔ + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**واپسی** +دیکھیں [eth_getFilterChanges](#eth_getfilterchanges) + +**مثال** + +```js +// درخواست +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +نتیجہ دیکھیں [eth_getFilterChanges](#eth_getfilterchanges) + +## استعمال کی مثال {#usage-example} + +### JSON_RPC کا استعمال کرتے ہوئے کنٹریکٹ کو ڈیپلائے کرنا {#deploying-contract} + +اس سیکشن میں یہ دکھایا گیا ہے کہ صرف RPC انٹرفیس کا استعمال کرتے ہوئے کنٹریکٹ کو کیسے ڈیپلائے کیا جائے۔ کنٹریکٹس کو ڈیپلائے کرنے کے متبادل طریقے بھی موجود ہیں جہاں اس پیچیدگی کو چھپا دیا جاتا ہے—مثال کے طور پر، RPC انٹرفیس کے اوپر بنی لائبریریوں کا استعمال کرتے ہوئے جیسے [web3.js](https://web3js.readthedocs.io/) اور [web3.py](https://github.com/ethereum/web3.py)۔ یہ ایبسٹریکشنز عام طور پر سمجھنے میں آسان اور کم غلطیوں کا باعث بنتی ہیں، لیکن پھر بھی یہ سمجھنا مفید ہے کہ پس پردہ کیا ہو رہا ہے۔ + +ذیل میں ایک سیدھا سادہ اسمارٹ کنٹریکٹ ہے جسے `Multiply7` کہا جاتا ہے، جسے JSON-RPC انٹرفیس کا استعمال کرتے ہوئے ایک Ethereum نوڈ پر ڈیپلائے کیا جائے گا۔ یہ ٹیوٹوریل فرض کرتا ہے کہ قاری پہلے سے ہی ایک Geth نوڈ چلا رہا ہے۔ نوڈز اور کلائنٹس کے بارے میں مزید معلومات [یہاں](/developers/docs/nodes-and-clients/run-a-node) دستیاب ہے۔ براہ کرم انفرادی [کلائنٹ](/developers/docs/nodes-and-clients/) کی دستاویزات دیکھیں تاکہ یہ معلوم ہو سکے کہ نان-Geth کلائنٹس کے لیے HTTP JSON-RPC کیسے شروع کیا جائے۔ زیادہ تر کلائنٹس ڈیفالٹ کے طور پر `localhost:8545` پر سروس فراہم کرتے ہیں۔ + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +سب سے پہلا کام یہ یقینی بنانا ہے کہ HTTP RPC انٹرفیس فعال ہے۔ اس کا مطلب ہے کہ ہم اسٹارٹ اپ پر Geth کو `--http` فلیگ فراہم کرتے ہیں۔ اس مثال میں ہم ایک پرائیویٹ ڈیولپمنٹ چین پر Geth نوڈ استعمال کرتے ہیں۔ اس طریقے کا استعمال کرتے ہوئے ہمیں اصلی نیٹ ورک پر ether کی ضرورت نہیں ہے۔ + +```bash +geth --http --dev console 2>>geth.log +``` + +یہ `http://localhost:8545` پر HTTP RPC انٹرفیس شروع کر دے گا۔ + +ہم [curl](https://curl.se) کا استعمال کرتے ہوئے کوائن بیس ایڈریس (اکاؤنٹس کی ایرے سے پہلا ایڈریس حاصل کر کے) اور بیلنس بازیافت کر کے اس بات کی تصدیق کر سکتے ہیں کہ انٹرفیس چل رہا ہے۔ براہ کرم نوٹ کریں کہ ان مثالوں میں موجود ڈیٹا آپ کے لوکل نوڈ پر مختلف ہوگا۔ اگر آپ ان کمانڈز کو آزمانا چاہتے ہیں، تو دوسری curl درخواست میں موجود درخواست کے پیرامیٹرز کو پہلی درخواست سے واپس آنے والے نتیجے سے تبدیل کریں۔ + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545 +{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} + +curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 +{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} +``` + +چونکہ نمبرز ہیکس انکوڈڈ (hex encoded) ہوتے ہیں، اس لیے بیلنس wei میں ایک ہیکس اسٹرنگ کے طور پر واپس کیا جاتا ہے۔ اگر ہم بیلنس کو ether میں ایک نمبر کے طور پر دیکھنا چاہتے ہیں تو ہم Geth کنسول سے web3 استعمال کر سکتے ہیں۔ + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +اب چونکہ ہماری پرائیویٹ ڈیولپمنٹ چین پر کچھ ether موجود ہے، ہم کنٹریکٹ کو ڈیپلائے کر سکتے ہیں۔ پہلا قدم Multiply7 کنٹریکٹ کو بائٹ کوڈ میں مرتب (compile) کرنا ہے جسے EVM کو بھیجا جا سکے۔ Solidity کمپائلر، solc کو انسٹال کرنے کے لیے، [Solidity کی دستاویزات](https://docs.soliditylang.org/en/latest/installing-solidity.html) پر عمل کریں۔ (آپ شاید ایک پرانا `solc` ریلیز استعمال کرنا چاہیں تاکہ یہ [ہماری مثال کے لیے استعمال ہونے والے کمپائلر کے ورژن](https://github.com/ethereum/solidity/releases/tag/v0.4.20) سے مماثل ہو۔) + +اگلا قدم Multiply7 کنٹریکٹ کو بائٹ کوڈ میں مرتب کرنا ہے جسے EVM کو بھیجا جا سکے۔ + +```bash +echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin + +======= :Multiply7 ======= +Binary: +6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 +``` + +اب جب کہ ہمارے پاس مرتب شدہ (compiled) کوڈ موجود ہے، ہمیں یہ طے کرنے کی ضرورت ہے کہ اسے ڈیپلائے کرنے پر کتنی گیس خرچ ہوگی۔ RPC انٹرفیس میں ایک `eth_estimateGas` طریقہ (method) ہے جو ہمیں ایک تخمینہ دے گا۔ + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} +``` + +اور آخر کار کنٹریکٹ کو ڈیپلائے کریں۔ + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 +{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} +``` + +ٹرانزیکشن کو نوڈ کے ذریعے قبول کر لیا جاتا ہے اور ایک ٹرانزیکشن ہیش واپس کیا جاتا ہے۔ اس ہیش کو ٹرانزیکشن کو ٹریک کرنے کے لیے استعمال کیا جا سکتا ہے۔ اگلا قدم اس ایڈریس کا تعین کرنا ہے جہاں ہمارا کنٹریکٹ ڈیپلائے ہوا ہے۔ ہر عمل میں لائی گئی ٹرانزیکشن ایک رسید بنائے گی۔ اس رسید میں ٹرانزیکشن کے بارے میں مختلف معلومات ہوتی ہیں جیسے کہ ٹرانزیکشن کس بلاک میں شامل کی گئی تھی اور EVM کے ذریعے کتنی گیس استعمال کی گئی۔ اگر کوئی ٹرانزیکشن ایک کنٹریکٹ بناتی ہے تو اس میں کنٹریکٹ کا ایڈریس بھی شامل ہوگا۔ ہم `eth_getTransactionReceipt` RPC طریقہ استعمال کر کے رسید بازیافت کر سکتے ہیں۔ + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} +``` + +ہمارا کنٹریکٹ `0x4d03d617d700cf81935d7f797f4e2ae719648262` پر بنایا گیا تھا۔ رسید کے بجائے null نتیجہ آنے کا مطلب ہے کہ ٹرانزیکشن ابھی تک کسی بلاک میں شامل نہیں ہوئی ہے۔ کچھ دیر انتظار کریں اور چیک کریں کہ آیا آپ کا کنسینسس کلائنٹ چل رہا ہے اور دوبارہ کوشش کریں۔ + +#### اسمارٹ کنٹریکٹس کے ساتھ تعامل {#interacting-with-smart-contract} + +اس مثال میں ہم کنٹریکٹ کے `multiply` طریقے (method) کو `eth_sendTransaction` کا استعمال کرتے ہوئے ایک ٹرانزیکشن بھیجیں گے۔ + +`eth_sendTransaction` کو کئی دلائل (arguments) کی ضرورت ہوتی ہے، خاص طور پر `from`، `to` اور `data`۔ `From` ہمارے اکاؤنٹ کا پبلک ایڈریس ہے، اور `to` کنٹریکٹ کا ایڈریس ہے۔ `data` دلیل میں ایک پے لوڈ (payload) ہوتا ہے جو یہ طے کرتا ہے کہ کون سا طریقہ (method) کال کیا جانا چاہیے اور کن دلائل کے ساتھ۔ یہیں پر [ABI (ایپلیکیشن بائنری انٹرفیس)](https://docs.soliditylang.org/en/latest/abi-spec.html) کام آتا ہے۔ ABI ایک JSON فائل ہے جو یہ طے کرتی ہے کہ EVM کے لیے ڈیٹا کو کیسے بیان اور انکوڈ کیا جائے۔ + +پے لوڈ کے بائٹس یہ طے کرتے ہیں کہ کنٹریکٹ میں کون سا طریقہ کال کیا گیا ہے۔ یہ فنکشن کے نام اور اس کے آرگومنٹ کی اقسام پر Keccak ہیش کے پہلے 4 بائٹس ہیں، جو ہیکس انکوڈڈ ہوتے ہیں۔ multiply فنکشن ایک uint قبول کرتا ہے جو uint256 کا عرف (alias) ہے۔ اس سے ہمیں یہ ملتا ہے: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +اگلا قدم دلائل کو انکوڈ کرنا ہے۔ یہاں صرف ایک uint256 ہے، فرض کریں، ویلیو 6۔ ABI کا ایک سیکشن ہے جو یہ بتاتا ہے کہ uint256 اقسام کو کیسے انکوڈ کیا جائے۔ + +`int: enc(X)` X کی بگ-اینڈین ٹوز کمپلیمنٹ (big-endian two’s complement) انکوڈنگ ہے، جسے منفی X کے لیے ہائیر-آرڈر (بائیں) جانب 0xff کے ساتھ اور مثبت X کے لیے صفر بائٹس کے ساتھ پیڈ (padded) کیا جاتا ہے تاکہ لمبائی 32 بائٹس کا ملٹیپل ہو۔ + +یہ `0000000000000000000000000000000000000000000000000000000000000006` میں انکوڈ ہوتا ہے۔ + +فنکشن سلیکٹر اور انکوڈ شدہ دلیل کو ملا کر ہمارا ڈیٹا `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006` ہوگا۔ + +اسے اب نوڈ کو بھیجا جا سکتا ہے: + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 +{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} +``` + +چونکہ ایک ٹرانزیکشن بھیجی گئی تھی، اس لیے ایک ٹرانزیکشن ہیش واپس کیا گیا۔ رسید بازیافت کرنے سے یہ ملتا ہے: + +```javascript +{ + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + contractAddress: null, + cumulativeGasUsed: 22631, + gasUsed: 22631, + logs: [{ + address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + data: "0x000000000000000000000000000000000000000000000000000000000000002a", + logIndex: 0, + topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 + }], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 +} +``` + +رسید میں ایک لاگ (log) ہوتا ہے۔ یہ لاگ ٹرانزیکشن کے نفاذ پر EVM کے ذریعے تیار کیا گیا تھا اور رسید میں شامل کیا گیا تھا۔ `multiply` فنکشن دکھاتا ہے کہ `Print` ایونٹ ان پٹ کو 7 سے ضرب دے کر اٹھایا گیا تھا۔ چونکہ `Print` ایونٹ کے لیے دلیل ایک uint256 تھی، اس لیے ہم اسے ABI کے اصولوں کے مطابق ڈی کوڈ کر سکتے ہیں جس سے ہمیں متوقع اعشاریہ 42 ملے گا۔ ڈیٹا کے علاوہ یہ بات قابل غور ہے کہ ٹاپکس (topics) کا استعمال یہ طے کرنے کے لیے کیا جا سکتا ہے کہ کس ایونٹ نے لاگ بنایا: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +یہ کچھ انتہائی عام کاموں کا صرف ایک مختصر تعارف تھا، جس میں JSON-RPC کا براہ راست استعمال دکھایا گیا ہے۔ + +## متعلقہ موضوعات {#related-topics} + +- [JSON-RPC کی تفصیلات](http://www.jsonrpc.org/specification) +- [نوڈز اور کلائنٹس](/developers/docs/nodes-and-clients/) +- [JavaScript APIs](/developers/docs/apis/javascript/) +- [بیک اینڈ APIs](/developers/docs/apis/backend/) +- [ایگزیکیوشن کلائنٹس](/developers/docs/nodes-and-clients/#execution-clients) \ No newline at end of file diff --git a/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md b/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md index 8b393c5d5f6..7e1d1626eac 100644 --- a/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md +++ b/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md @@ -1,35 +1,35 @@ --- -title: Dagger-Hashimoto -description: "Dagger-Hashimoto الگورتھم پر ایک تفصیلی نظر۔" -lang: ur-in +title: "ڈیگر-ہاشیموٹو" +description: "ڈیگر-ہاشیموٹو الگورتھم کا تفصیلی جائزہ۔" +lang: ur --- -Dagger-Hashimoto Ethereum کے مائننگ الگورتھم کے لیے اصل تحقیقی نفاذ اور تفصیلات تھیں۔ [Ethash](#ethash) نے Dagger-Hashimoto کی جگہ لے لی۔ 15 ستمبر 2022 کو [The Merge](/roadmap/merge/) پر مائننگ مکمل طور پر بند کر دی گئی تھی۔ تب سے، Ethereum کو اس کے بجائے [proof-of-stake](/developers/docs/consensus-mechanisms/pos) میکانزم کا استعمال کرکے محفوظ کیا گیا ہے۔ یہ صفحہ تاریخی دلچسپی کے لیے ہے - یہاں دی گئی معلومات The Merge کے بعد کے Ethereum کے لیے اب متعلقہ نہیں ہیں۔ +ڈیگر-ہاشیموٹو (Dagger-Hashimoto) ایتھیریم کے مائننگ الگورتھم کے لیے اصل ریسرچ امپلیمنٹیشن اور تصریح (specification) تھی۔ ڈیگر-ہاشیموٹو کی جگہ [Ethash](#ethash) نے لے لی تھی۔ 15 ستمبر 2022 کو [The Merge](/roadmap/merge/) پر مائننگ کو مکمل طور پر بند کر دیا گیا تھا۔ اس کے بعد سے، ایتھیریم کو اس کے بجائے [پروف آف اسٹیک (proof-of-stake)](/developers/docs/consensus-mechanisms/pos) میکانزم کا استعمال کرتے ہوئے محفوظ کیا گیا ہے۔ یہ صفحہ تاریخی دلچسپی کے لیے ہے - یہاں موجود معلومات مرج (Merge) کے بعد والے ایتھیریم کے لیے مزید متعلقہ نہیں ہیں۔ -## شرائط {#prerequisites} +## پیشگی شرائط {#prerequisites} -اس صفحہ کو بہتر طور پر سمجھنے کے لیے، ہم تجویز کرتے ہیں کہ آپ پہلے [proof-of-work consensus](/developers/docs/consensus-mechanisms/pow)، [مائننگ](/developers/docs/consensus-mechanisms/pow/mining)، اور [مائننگ الگورتھم](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms) کے بارے میں پڑھیں۔ +اس صفحے کو بہتر طور پر سمجھنے کے لیے، ہم تجویز کرتے ہیں کہ آپ پہلے [پروف آف ورک (proof-of-work) کنسینسس](/developers/docs/consensus-mechanisms/pow)، [مائننگ](/developers/docs/consensus-mechanisms/pow/mining)، اور [مائننگ الگورتھمز](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms) کے بارے میں پڑھیں۔ -## Dagger-Hashimoto {#dagger-hashimoto} +## ڈیگر-ہاشیموٹو {#dagger-hashimoto} -Dagger-Hashimoto کا مقصد دو اہداف کو پورا کرنا ہے: +ڈیگر-ہاشیموٹو کا مقصد دو اہداف کو پورا کرنا ہے: -1. **ASIC-مزاحمت**: الگورتھم کے لیے خصوصی ہارڈ ویئر بنانے سے فائدہ ہر ممکن حد تک کم ہونا چاہیے۔ -2. **لائٹ کلائنٹ کی تصدیق کی اہلیت**: ایک بلاک کی لائٹ کلائنٹ کے ذریعے مؤثر طریقے سے تصدیق کی جانی چاہیے۔ +1. **ASIC-مزاحمت (ASIC-resistance)**: الگورتھم کے لیے مخصوص ہارڈویئر بنانے کا فائدہ جتنا ممکن ہو کم ہونا چاہیے۔ +2. **لائٹ کلائنٹ کی تصدیق (Light client verifiability)**: ایک بلاک کو لائٹ کلائنٹ کے ذریعے مؤثر طریقے سے قابل تصدیق ہونا چاہیے۔ -ایک اضافی ترمیم کے ساتھ، ہم یہ بھی بتاتے ہیں کہ اگر چاہیں تو تیسرے مقصد کو کیسے پورا کیا جائے، لیکن اضافی پیچیدگی کی قیمت پر: +ایک اضافی ترمیم کے ساتھ، ہم یہ بھی بتاتے ہیں کہ اگر چاہیں تو تیسرا ہدف کیسے پورا کیا جائے، لیکن اس کی قیمت اضافی پیچیدگی کی صورت میں ہوگی: -**مکمل چین اسٹوریج**: مائننگ کے لیے مکمل بلاک چین اسٹیٹ کے اسٹوریج کی ضرورت ہونی چاہیے (Ethereum اسٹیٹ ٹرائی کی بے قاعدہ ساخت کی وجہ سے، ہم توقع کرتے ہیں کہ کچھ کانٹ چھانٹ ممکن ہو گی، خاص طور پر کچھ اکثر استعمال ہونے والے معاہدوں کی، لیکن ہم اسے کم سے کم کرنا چاہتے ہیں)۔ +**مکمل چین اسٹوریج (Full chain storage)**: مائننگ کے لیے مکمل بلاک چین اسٹیٹ (state) کو اسٹور کرنے کی ضرورت ہونی چاہیے (ایتھیریم اسٹیٹ ٹرائی (state trie) کی بے قاعدہ ساخت کی وجہ سے، ہم توقع کرتے ہیں کہ کچھ کٹائی (pruning) ممکن ہو گی، خاص طور پر کچھ اکثر استعمال ہونے والے کنٹریکٹس کی، لیکن ہم اسے کم سے کم کرنا چاہتے ہیں)۔ ## DAG جنریشن {#dag-generation} -الگورتھم کا کوڈ ذیل میں Python میں بیان کیا جائے گا۔ سب سے پہلے، ہم مخصوص درستگی کے غیر دستخط شدہ انٹس کو سٹرنگز میں مارشل کرنے کے لیے `encode_int` دیتے ہیں۔ اس کا الٹا بھی دیا گیا ہے: +الگورتھم کا کوڈ ذیل میں Python میں بیان کیا جائے گا۔ سب سے پہلے، ہم مخصوص درستگی (precision) کے ان سائنڈ انٹیجرز (unsigned ints) کو اسٹرنگز میں مارشل کرنے کے لیے `encode_int` دیتے ہیں۔ اس کا الٹ بھی دیا گیا ہے: ```python NUM_BITS = 512 def encode_int(x): - "ایک big-endian اسکیم کا استعمال کرتے ہوئے ایک انٹیجر x کو 64 حروف کی ایک سٹرنگ کے طور پر انکوڈ کریں" + "Encode an integer x as a string of 64 characters using a big-endian scheme" o = '' for _ in range(NUM_BITS / 8): o = chr(x % 256) + o @@ -37,7 +37,7 @@ def encode_int(x): return o def decode_int(s): - "ایک big-endian اسکیم کا استعمال کرتے ہوئے ایک سٹرنگ سے ایک انٹیجر x کو انکوڈ کریں" + "Unencode an integer x from a string using a big-endian scheme" x = 0 for c in s: x *= 256 @@ -45,7 +45,7 @@ def decode_int(s): return x ``` -ہم آگے یہ فرض کرتے ہیں کہ `sha3` ایک فنکشن ہے جو ایک انٹیجر لیتا ہے اور ایک انٹیجر آؤٹ پٹ کرتا ہے، اور `dbl_sha3` ایک ڈبل-sha3 فنکشن ہے؛ اگر اس حوالہ جاتی کوڈ کو نفاذ میں تبدیل کر رہے ہیں تو استعمال کریں: +اس کے بعد ہم فرض کرتے ہیں کہ `sha3` ایک فنکشن ہے جو ایک انٹیجر لیتا ہے اور ایک انٹیجر آؤٹ پٹ کرتا ہے، اور `dbl_sha3` ایک ڈبل-sha3 فنکشن ہے؛ اگر اس حوالہ کوڈ کو امپلیمنٹیشن میں تبدیل کر رہے ہیں تو استعمال کریں: ```python from pyethereum import utils @@ -65,28 +65,28 @@ def dbl_sha3(x): الگورتھم کے لیے استعمال ہونے والے پیرامیٹرز یہ ہیں: ```python -SAFE_PRIME_512 = 2**512 - 38117 # 2**512 سے کم سب سے بڑا سیف پرائم +SAFE_PRIME_512 = 2**512 - 38117 # 2**512 سے چھوٹا سب سے بڑا محفوظ پرائم params = { - "n": 4000055296 * 8 // NUM_BITS, # ڈیٹاسیٹ کا سائز (4 گیگا بائٹس)؛ 65536 کا ملٹیپل ہونا چاہیے - "n_inc": 65536, # فی مدت n کی قدر میں اضافہ؛ 65536 کا ملٹیپل ہونا چاہیے - # epochtime=20000 کے ساتھ فی سال 882 MB کی نمو دیتا ہے - "cache_size": 2500, # لائٹ کلائنٹ کے کیشے کا سائز (لائٹ کے ذریعے منتخب کیا جا سکتا ہے - # کلائنٹ؛ الگورتھم کی تفصیلات کا حصہ نہیں) - "diff": 2**14, # مشکل (بلاک کی تشخیص کے دوران ایڈجسٹ کی گئی) - "epochtime": 100000, # بلاکس میں ایک ایپوک کی لمبائی (ڈیٹاسیٹ کتنی بار اپ ڈیٹ ہوتا ہے) - "k": 1, # ایک نوڈ کے والدین کی تعداد - "w": w, # ماڈیولر ایکسپونینشن ہیشنگ کے لیے استعمال کیا جاتا ہے - "accesses": 200, # ہاشیموٹو کے دوران ڈیٹاسیٹ تک رسائی کی تعداد - "P": SAFE_PRIME_512 # ہیشنگ اور بے ترتیب نمبر بنانے کے لیے سیف پرائم + "n": 4000055296 * 8 // NUM_BITS, # ڈیٹاسیٹ کا سائز (4 گیگا بائٹس)؛ 65536 کا ملٹیپل ہونا لازمی ہے + "n_inc": 65536, # فی مدت n کی قدر میں اضافہ؛ 65536 کا ملٹیپل ہونا لازمی ہے + # epochtime=20000 کے ساتھ ہر سال 882 MB کا اضافہ ہوتا ہے + "cache_size": 2500, # لائٹ کلائنٹ کی کیشے کا سائز (لائٹ کی جانب سے منتخب کیا جا سکتا ہے + # کلائنٹ؛ الگورتھم کی تفصیلات کا حصہ نہیں ہے) + "diff": 2**14, # مشکل (بلاک کی جانچ کے دوران ایڈجسٹ کی جاتی ہے) + "epochtime": 100000, # بلاکس میں ایپوک (epoch) کی طوالت (ڈیٹاسیٹ کو کتنی بار اپ ڈیٹ کیا جاتا ہے) + "k": 1, # ایک نوڈ کے پیرنٹس کی تعداد + "w": w, # ماڈیولر ایکسپونینشیئشن ہیشنگ کے لیے استعمال ہوتا ہے + "accesses": 200, # ہاشیموٹو (hashimoto) کے دوران ڈیٹاسیٹ تک رسائی کی تعداد + "P": SAFE_PRIME_512 # ہیشنگ اور رینڈم نمبر جنریشن کے لیے محفوظ پرائم } ``` -اس معاملے میں `P` ایک پرائم ہے جسے اس طرح منتخب کیا گیا ہے کہ `log₂(P)` 512 سے تھوڑا کم ہے، جو ان 512 بٹس سے مطابقت رکھتا ہے جنہیں ہم اپنے نمبروں کی نمائندگی کے لیے استعمال کر رہے ہیں۔ نوٹ کریں کہ اصل میں DAG کے صرف آخری نصف کو ذخیرہ کرنے کی ضرورت ہے، لہذا ڈی-فیکٹو RAM کی ضرورت 1 GB سے شروع ہوتی ہے اور فی سال 441 MB بڑھتی ہے۔ +اس صورت میں `P` ایک پرائم (prime) ہے جسے اس طرح منتخب کیا گیا ہے کہ `log₂(P)` 512 سے تھوڑا سا کم ہے، جو ان 512 بٹس سے مطابقت رکھتا ہے جنہیں ہم اپنے نمبرز کی نمائندگی کے لیے استعمال کر رہے ہیں۔ نوٹ کریں کہ دراصل DAG کا صرف پچھلا نصف حصہ اسٹور کرنے کی ضرورت ہوتی ہے، لہذا ڈی فیکٹو (de-facto) RAM کی ضرورت 1 GB سے شروع ہوتی ہے اور ہر سال 441 MB تک بڑھتی ہے۔ -### Dagger گراف بنانا {#dagger-graph-building} +### ڈیگر گراف کی تعمیر {#dagger-graph-building} -Dagger گراف بنانے کا پرمیٹیو مندرجہ ذیل طور پر بیان کیا گیا ہے: +ڈیگر گراف بنانے کا بنیادی طریقہ (primitive) درج ذیل کے طور پر بیان کیا گیا ہے: ```python def produce_dag(params, seed, length): @@ -101,15 +101,15 @@ def produce_dag(params, seed, length): return o ``` -بنیادی طور پر، یہ ایک گراف کو ایک واحد نوڈ، `sha3(seed)` کے طور پر شروع کرتا ہے، اور وہاں سے بے ترتیب پچھلے نوڈز کی بنیاد پر ترتیب وار دوسرے نوڈز کو شامل کرنا شروع کرتا ہے۔ جب ایک نیا نوڈ بنایا جاتا ہے، تو `i` سے کم کچھ انڈیکس کو بے ترتیب طور پر منتخب کرنے کے لیے سیڈ کی ایک ماڈیولر پاور کا حساب لگایا جاتا ہے (اوپر `x % i` کا استعمال کرتے ہوئے)، اور ان انڈیکس پر نوڈز کی قدروں کو `x` کے لیے ایک نئی قدر پیدا کرنے کے لیے ایک حساب میں استعمال کیا جاتا ہے، جسے پھر ایک چھوٹے پروف آف ورک فنکشن (XOR پر مبنی) میں فیڈ کیا جاتا ہے تاکہ آخر کار انڈیکس `i` پر گراف کی قدر پیدا کی جا سکے۔ اس خاص ڈیزائن کے پیچھے استدلال DAG کی ترتیب وار رسائی کو مجبور کرنا ہے؛ DAG کی اگلی قدر جس تک رسائی حاصل کی جائے گی اس کا تعین اس وقت تک نہیں کیا جا سکتا جب تک کہ موجودہ قدر معلوم نہ ہو۔ آخر میں، ماڈیولر ایکسپونینشن نتیجے کو مزید ہیش کرتا ہے۔ +بنیادی طور پر، یہ ایک گراف کو سنگل نوڈ، `sha3(seed)` کے طور پر شروع کرتا ہے، اور وہاں سے بے ترتیب پچھلے نوڈز کی بنیاد پر ترتیب وار دیگر نوڈز کو شامل کرنا شروع کرتا ہے۔ جب ایک نیا نوڈ بنایا جاتا ہے، تو `i` سے کم کچھ انڈیکسز کو تصادفی طور پر منتخب کرنے کے لیے سیڈ (seed) کی ایک ماڈیولر پاور کا حساب لگایا جاتا ہے (اوپر `x % i` کا استعمال کرتے ہوئے)، اور ان انڈیکسز پر نوڈز کی ویلیوز کو `x` کے لیے ایک نئی ویلیو بنانے کے لیے کیلکولیشن میں استعمال کیا جاتا ہے، جسے پھر ایک چھوٹے پروف آف ورک فنکشن (XOR پر مبنی) میں ڈالا جاتا ہے تاکہ بالآخر انڈیکس `i` پر گراف کی ویلیو تیار کی جا سکے۔ اس مخصوص ڈیزائن کے پیچھے منطق یہ ہے کہ DAG کی ترتیب وار رسائی (sequential access) کو مجبور کیا جائے؛ DAG کی اگلی ویلیو جس تک رسائی حاصل کی جائے گی اس کا تعین اس وقت تک نہیں کیا جا سکتا جب تک کہ موجودہ ویلیو معلوم نہ ہو۔ آخر میں، ماڈیولر ایکسپونینشیئشن (modular exponentiation) نتیجے کو مزید ہیش کرتا ہے۔ -یہ الگورتھم نمبر تھیوری کے کئی نتائج پر انحصار کرتا ہے۔ بحث کے لیے نیچے ضمیمہ دیکھیں۔ +یہ الگورتھم نمبر تھیوری کے کئی نتائج پر انحصار کرتا ہے۔ بحث کے لیے نیچے دیا گیا ضمیمہ (appendix) دیکھیں۔ -## لائٹ کلائنٹ کی تشخیص {#light-client-evaluation} +## لائٹ کلائنٹ ایویلیوایشن {#light-client-evaluation} -مذکورہ بالا گراف کی تعمیر کا مقصد گراف میں ہر نوڈ کو صرف چند نوڈز کے سب ٹری کا حساب لگا کر دوبارہ تعمیر کرنے کی اجازت دینا ہے اور صرف تھوڑی مقدار میں معاون میموری کی ضرورت ہوتی ہے۔ نوٹ کریں کہ k=1 کے ساتھ، سب ٹری صرف DAG میں پہلے عنصر تک جانے والی قدروں کا ایک سلسلہ ہے۔ +مذکورہ بالا گراف کی تعمیر کا مقصد گراف میں موجود ہر نوڈ کو صرف تھوڑی تعداد میں نوڈز کے سب ٹری (subtree) کا حساب لگا کر دوبارہ بنانے کی اجازت دینا ہے اور اس کے لیے صرف تھوڑی مقدار میں معاون میموری (auxiliary memory) کی ضرورت ہوتی ہے۔ نوٹ کریں کہ k=1 کے ساتھ، سب ٹری صرف ویلیوز کی ایک چین ہے جو DAG میں پہلے عنصر تک جاتی ہے۔ -DAG کے لیے لائٹ کلائنٹ کمپیوٹنگ فنکشن مندرجہ ذیل طور پر کام کرتا ہے: +DAG کے لیے لائٹ کلائنٹ کمپیوٹنگ فنکشن اس طرح کام کرتا ہے: ```python def quick_calc(params, seed, p): @@ -131,13 +131,13 @@ def quick_calc(params, seed, p): return quick_calc_cached(p) ``` -بنیادی طور پر، یہ صرف مذکورہ بالا الگورتھم کی دوبارہ تحریر ہے جو پورے DAG کے لیے قدروں کا حساب لگانے کے لوپ کو ہٹاتا ہے اور پہلے والے نوڈ لک اپ کو ریکرسیو کال یا کیشے لک اپ سے بدل دیتا ہے۔ نوٹ کریں کہ `k=1` کے لیے کیشے غیر ضروری ہے، حالانکہ مزید اصلاح اصل میں DAG کی پہلی چند ہزار قدروں کا پہلے سے حساب لگاتی ہے اور اسے حساب کے لیے ایک جامد کیشے کے طور پر رکھتی ہے؛ اس کے کوڈ کے نفاذ کے لیے ضمیمہ دیکھیں۔ +بنیادی طور پر، یہ محض مندرجہ بالا الگورتھم کو دوبارہ لکھنا ہے جو پورے DAG کے لیے ویلیوز کا حساب لگانے کے لوپ کو ہٹاتا ہے اور پہلے والے نوڈ لک اپ (lookup) کو ریکرسیو کال (recursive call) یا کیشے (cache) لک اپ سے بدل دیتا ہے۔ نوٹ کریں کہ `k=1` کے لیے کیشے غیر ضروری ہے، حالانکہ ایک مزید آپٹیمائزیشن دراصل DAG کی پہلی چند ہزار ویلیوز کا پہلے سے حساب لگاتی ہے اور اسے کمپیوٹیشنز کے لیے ایک جامد (static) کیشے کے طور پر رکھتی ہے؛ اس کی کوڈ امپلیمنٹیشن کے لیے ضمیمہ دیکھیں۔ ## DAGs کا ڈبل بفر {#double-buffer} -ایک مکمل کلائنٹ میں، مذکورہ بالا فارمولے سے تیار کردہ 2 DAGs کا ایک [_ڈبل بفر_](https://wikipedia.org/wiki/Multiple_buffering) استعمال کیا جاتا ہے۔ خیال یہ ہے کہ DAGs مذکورہ بالا پیرامیٹرز کے مطابق ہر `epochtime` تعداد کے بلاکس پر تیار کیے جاتے ہیں۔ کلائنٹ تازہ ترین تیار کردہ DAG استعمال کرنے کے بجائے، پچھلا والا استعمال کرتا ہے۔ اس کا فائدہ یہ ہے کہ یہ DAGs کو وقت کے ساتھ تبدیل کرنے کی اجازت دیتا ہے بغیر کسی ایسے قدم کو شامل کرنے کی ضرورت کے جہاں مائنرز کو اچانک تمام ڈیٹا کا دوبارہ حساب لگانا پڑے۔ بصورت دیگر، باقاعدہ وقفوں پر چین پروسیسنگ میں اچانک عارضی سست روی اور مرکزیت میں ڈرامائی طور پر اضافہ ہونے کا امکان ہے۔ اس طرح تمام ڈیٹا کا دوبارہ حساب لگانے سے پہلے ان چند منٹوں کے اندر 51% حملے کا خطرہ ہوتا ہے۔ +ایک فل کلائنٹ میں، مندرجہ بالا فارمولے کے ذریعے تیار کردہ 2 DAGs کا ایک [_ڈبل بفر (double buffer)_](https://wikipedia.org/wiki/Multiple_buffering) استعمال کیا جاتا ہے۔ خیال یہ ہے کہ اوپر دیے گئے پیرامیٹرز کے مطابق ہر `epochtime` بلاکس کی تعداد پر DAGs تیار کیے جاتے ہیں۔ کلائنٹ کے تازہ ترین تیار کردہ DAG کو استعمال کرنے کے بجائے، یہ پچھلا والا استعمال کرتا ہے۔ اس کا فائدہ یہ ہے کہ یہ DAGs کو وقت کے ساتھ تبدیل کرنے کی اجازت دیتا ہے بغیر کسی ایسے قدم کو شامل کرنے کی ضرورت کے جہاں مائنرز کو اچانک تمام ڈیٹا کا دوبارہ حساب لگانا پڑے۔ بصورت دیگر، باقاعدہ وقفوں پر چین پروسیسنگ میں اچانک عارضی سست روی اور ڈرامائی طور پر سینٹرلائزیشن بڑھنے کا امکان ہے۔ اس طرح تمام ڈیٹا کا دوبارہ حساب لگائے جانے سے پہلے ان چند منٹوں کے اندر 51% حملے کے خطرات ہوتے ہیں۔ -ایک بلاک کے لیے کام کا حساب لگانے کے لیے استعمال ہونے والے DAGs کا سیٹ بنانے کے لیے استعمال ہونے والا الگورتھم مندرجہ ذیل ہے: +ایک بلاک کے لیے کام کا حساب لگانے کے لیے استعمال ہونے والے DAGs کا سیٹ بنانے کے لیے استعمال ہونے والا الگورتھم درج ذیل ہے: ```python def get_prevhash(n): @@ -164,7 +164,7 @@ def get_daggerset(params, block): dagsz = get_dagsize(params, block) seedset = get_seedset(params, block) if seedset["front_hash"] <= 0: - # No back buffer is possible, just make front buffer + # کوئی بیک بفر ممکن نہیں، صرف فرنٹ بفر بنائیں return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), "block_number": 0}} else: @@ -174,9 +174,9 @@ def get_daggerset(params, block): "block_number": seedset["back_number"]}} ``` -## Hashimoto {#hashimoto} +## ہاشیموٹو {#hashimoto} -اصل Hashimoto کے پیچھے خیال یہ ہے کہ بلاک چین کو بطور ڈیٹاسیٹ استعمال کیا جائے، ایک ایسا حساب انجام دیا جائے جو بلاک چین سے N انڈیکس منتخب کرتا ہے، ان انڈیکس پر ٹرانزیکشنز کو جمع کرتا ہے، اس ڈیٹا کا XOR انجام دیتا ہے، اور نتیجے کا ہیش واپس کرتا ہے۔ تھڈیئس ڈرائجا کا اصل الگورتھم، مطابقت کے لیے Python میں ترجمہ کیا گیا، مندرجہ ذیل ہے: +اصل ہاشیموٹو کے پیچھے خیال یہ ہے کہ بلاک چین کو ایک ڈیٹاسیٹ کے طور پر استعمال کیا جائے، ایک ایسی کمپیوٹیشن کی جائے جو بلاک چین سے N انڈیکسز کو منتخب کرے، ان انڈیکسز پر ٹرانزیکشنز کو اکٹھا کرے، اس ڈیٹا کا XOR کرے، اور نتیجے کا ہیش واپس کرے۔ Thaddeus Dryja کا اصل الگورتھم، جسے مستقل مزاجی کے لیے Python میں ترجمہ کیا گیا ہے، درج ذیل ہے: ```python def orig_hashimoto(prev_hash, merkle_root, list_of_transactions, nonce): @@ -189,7 +189,7 @@ def orig_hashimoto(prev_hash, merkle_root, list_of_transactions, nonce): return txid_mix ^ (nonce << 192) ``` -بدقسمتی سے، جبکہ Hashimoto کو RAM ہارڈ سمجھا جاتا ہے، یہ 256 بٹ ریاضی پر انحصار کرتا ہے، جس میں کافی کمپیوٹیشنل اوور ہیڈ ہوتا ہے۔ تاہم، Dagger-Hashimoto اس مسئلے کو حل کرنے کے لیے اپنے ڈیٹاسیٹ کو انڈیکس کرتے وقت صرف سب سے کم اہم 64 بٹس کا استعمال کرتا ہے۔ +بدقسمتی سے، اگرچہ ہاشیموٹو کو RAM ہارڈ سمجھا جاتا ہے، یہ 256-بٹ ارتھمیٹک پر انحصار کرتا ہے، جس میں کافی کمپیوٹیشنل اوور ہیڈ ہوتا ہے۔ تاہم، ڈیگر-ہاشیموٹو اس مسئلے کو حل کرنے کے لیے اپنے ڈیٹاسیٹ کو انڈیکس کرتے وقت صرف سب سے کم اہم (least significant) 64 بٹس کا استعمال کرتا ہے۔ ```python def hashimoto(dag, dagsize, params, header, nonce): @@ -200,7 +200,7 @@ def hashimoto(dag, dagsize, params, header, nonce): return dbl_sha3(mix) ``` -ڈبل SHA3 کا استعمال صفر-ڈیٹا، قریب-فوری پری-ویریفکیشن کی ایک شکل کی اجازت دیتا ہے، صرف اس بات کی تصدیق کرتا ہے کہ ایک درست درمیانی قدر فراہم کی گئی تھی۔ پروف آف ورک کی یہ بیرونی تہہ انتہائی ASIC-فرینڈلی اور کافی کمزور ہے، لیکن DDoS کو مزید مشکل بنانے کے لیے موجود ہے کیونکہ ایک ایسا بلاک بنانے کے لیے کام کی وہ چھوٹی سی مقدار کرنا ضروری ہے جسے فوری طور پر مسترد نہیں کیا جائے گا۔ یہاں لائٹ کلائنٹ ورژن ہے: +ڈبل SHA3 کا استعمال زیرو-ڈیٹا، تقریباً فوری پری-ویریفکیشن (pre-verification) کی ایک شکل کی اجازت دیتا ہے، جو صرف اس بات کی تصدیق کرتا ہے کہ ایک درست درمیانی ویلیو فراہم کی گئی تھی۔ پروف آف ورک کی یہ بیرونی تہہ انتہائی ASIC-دوست اور کافی کمزور ہے، لیکن یہ DDoS کو مزید مشکل بنانے کے لیے موجود ہے کیونکہ اس چھوٹی سی مقدار کا کام کرنا ضروری ہے تاکہ ایک ایسا بلاک تیار کیا جا سکے جسے فوری طور پر مسترد نہ کیا جائے۔ یہاں لائٹ کلائنٹ ورژن ہے: ```python def quick_hashimoto(seed, dagsize, params, header, nonce): @@ -213,7 +213,7 @@ def quick_hashimoto(seed, dagsize, params, header, nonce): ## مائننگ اور تصدیق {#mining-and-verifying} -اب، آئیے اس سب کو مائننگ الگورتھم میں ایک ساتھ رکھتے ہیں: +اب، آئیے ان سب کو مائننگ الگورتھم میں ایک ساتھ رکھیں: ```python def mine(daggerset, params, block): @@ -239,7 +239,7 @@ def verify(daggerset, params, block, nonce): return result * params["diff"] < 2**256 ``` -لائٹ کلائنٹ فرینڈلی تصدیق: +لائٹ کلائنٹ کے موافق تصدیق: ```python def light_verify(params, header, nonce): @@ -249,57 +249,57 @@ def light_verify(params, header, nonce): return result * params["diff"] < 2**256 ``` -نیز، نوٹ کریں کہ Dagger-Hashimoto بلاک ہیڈر پر اضافی تقاضے عائد کرتا ہے: +اس کے علاوہ، نوٹ کریں کہ ڈیگر-ہاشیموٹو بلاک ہیڈر پر اضافی تقاضے عائد کرتا ہے: -- دو-تہہ کی تصدیق کے کام کرنے کے لیے، ایک بلاک ہیڈر میں نونس اور درمیانی قدر دونوں پری-sha3 ہونی چاہئیں۔ -- کہیں، ایک بلاک ہیڈر کو موجودہ سیڈ سیٹ کا sha3 ذخیرہ کرنا چاہیے۔ +- ٹو-لیئر (two-layer) تصدیق کے کام کرنے کے لیے، ایک بلاک ہیڈر میں نانس (nonce) اور درمیانی ویلیو pre-sha3 دونوں کا ہونا ضروری ہے +- کہیں نہ کہیں، ایک بلاک ہیڈر کو موجودہ سیڈسیٹ (seedset) کا sha3 اسٹور کرنا چاہیے -## مزید پڑھیں {#further-reading} +## مزید مطالعہ {#further-reading} -_کسی کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_ +_کسی ایسے کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحے میں ترمیم کریں اور اسے شامل کریں!_ ## ضمیمہ {#appendix} -جیسا کہ اوپر ذکر کیا گیا ہے، DAG جنریشن کے لیے استعمال ہونے والا RNG نمبر تھیوری کے کچھ نتائج پر انحصار کرتا ہے۔ سب سے پہلے، ہم یہ یقین دہانی فراہم کرتے ہیں کہ Lehmer RNG جو `picker` متغیر کی بنیاد ہے اس کا ایک وسیع دور ہے۔ دوسرا، ہم دکھاتے ہیں کہ `pow(x,3,P)`، `x` کو `1` یا `P-1` پر میپ نہیں کرے گا بشرطیکہ شروع کرنے کے لیے `x ∈ [2,P-2]` ہو۔ آخر میں، ہم دکھاتے ہیں کہ جب ہیشنگ فنکشن کے طور پر علاج کیا جاتا ہے تو `pow(x,3,P)` کی تصادم کی شرح کم ہوتی ہے۔ +جیسا کہ اوپر ذکر کیا گیا ہے، DAG جنریشن کے لیے استعمال ہونے والا RNG نمبر تھیوری کے کچھ نتائج پر انحصار کرتا ہے۔ سب سے پہلے، ہم یہ یقین دہانی کراتے ہیں کہ Lehmer RNG جو `picker` ویری ایبل کی بنیاد ہے، اس کا پیریڈ (period) وسیع ہے۔ دوسرا، ہم دکھاتے ہیں کہ `pow(x,3,P)` `x` کو `1` یا `P-1` پر میپ نہیں کرے گا بشرطیکہ شروع کرنے کے لیے `x ∈ [2,P-2]` ہو۔ آخر میں، ہم دکھاتے ہیں کہ جب `pow(x,3,P)` کو ہیشنگ فنکشن کے طور پر سمجھا جاتا ہے تو اس میں تصادم (collision) کی شرح کم ہوتی ہے۔ ### Lehmer رینڈم نمبر جنریٹر {#lehmer-random-number} -جبکہ `produce_dag` فنکشن کو غیر جانبدارانہ بے ترتیب نمبر تیار کرنے کی ضرورت نہیں ہے، ایک ممکنہ خطرہ یہ ہے کہ `seed**i % P` صرف مٹھی بھر قدریں لیتا ہے۔ یہ ان مائنرز کو فائدہ فراہم کر سکتا ہے جو پیٹرن کو پہچانتے ہیں ان لوگوں پر جو نہیں پہچانتے ہیں۔ +اگرچہ `produce_dag` فنکشن کو غیر جانبدارانہ (unbiased) رینڈم نمبرز تیار کرنے کی ضرورت نہیں ہے، لیکن ایک ممکنہ خطرہ یہ ہے کہ `seed**i % P` صرف مٹھی بھر ویلیوز لیتا ہے۔ یہ ان مائنرز کو فائدہ پہنچا سکتا ہے جو پیٹرن کو پہچانتے ہیں ان کے مقابلے میں جو نہیں پہچانتے۔ -اس سے بچنے کے لیے، نمبر تھیوری کے ایک نتیجے کی اپیل کی جاتی ہے۔ ایک [_سیف پرائم_](https://en.wikipedia.org/wiki/Safe_prime) کو ایک پرائم `P` کے طور پر بیان کیا گیا ہے جیسے `(P-1)/2` بھی پرائم ہے۔ [ضرب گروپ](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) `ℤ/nℤ` کے ایک رکن `x` کا _آرڈر_ کم سے کم `m` کے طور پر بیان کیا گیا ہے جیسے کہ
xᵐ mod P ≡ 1
+اس سے بچنے کے لیے، نمبر تھیوری کے ایک نتیجے سے رجوع کیا جاتا ہے۔ ایک [_سیف پرائم (Safe Prime)_](https://en.wikipedia.org/wiki/Safe_prime) کو ایک پرائم `P` کے طور پر بیان کیا جاتا ہے کہ `(P-1)/2` بھی پرائم ہو۔ [ملٹیپلیکیٹو گروپ (multiplicative group)](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) `ℤ/nℤ` کے ایک ممبر `x` کے _آرڈر (order)_ کو کم از کم `m` کے طور پر بیان کیا جاتا ہے کہ
xᵐ mod P ≡ 1
ان تعریفوں کو دیکھتے ہوئے، ہمارے پاس ہے: -> مشاہدہ 1۔ `x` کو ایک سیف پرائم `P` کے لیے ضرب گروپ `ℤ/Pℤ` کا رکن ہونے دیں۔ اگر `x mod P ≠ 1 mod P` اور `x mod P ≠ P-1 mod P`، تو `x` کا آرڈر یا تو `P-1` ہے یا `(P-1)/2`۔ +> مشاہدہ 1۔ فرض کریں کہ `x` ایک سیف پرائم `P` کے لیے ملٹیپلیکیٹو گروپ `ℤ/Pℤ` کا ممبر ہے۔ اگر `x mod P ≠ 1 mod P` اور `x mod P ≠ P-1 mod P` ہے، تو `x` کا آرڈر یا تو `P-1` ہے یا `(P-1)/2`۔ -_ثبوت_۔ چونکہ `P` ایک سیف پرائم ہے، تب [Lagrange کے تھیورم][lagrange] کے ذریعے ہمارے پاس یہ ہے کہ `x` کا آرڈر یا تو `1`، `2`، `(P-1)/2`، یا `P-1` ہے۔ +_ثبوت_۔ چونکہ `P` ایک سیف پرائم ہے، اس لیے [Lagrange's Theorem][lagrange] کے مطابق ہمارے پاس `x` کا آرڈر یا تو `1`، `2`، `(P-1)/2`، یا `P-1` ہے۔ -`x` کا آرڈر `1` نہیں ہو سکتا، چونکہ فرما کے چھوٹے تھیورم کے ذریعے ہمارے پاس ہے: +`x` کا آرڈر `1` نہیں ہو سکتا، کیونکہ Fermat's Little Theorem کے مطابق ہمارے پاس ہے: -
xP-1 mod P ≡ 1
+
xP-1 mod P ≡ 1
-لہذا `x` کو `ℤ/nℤ` کی ایک ضربی شناخت ہونا چاہیے، جو کہ منفرد ہے۔ چونکہ ہم نے مفروضے کے مطابق یہ فرض کیا ہے کہ `x ≠ 1` ہے، یہ ممکن نہیں ہے۔ +لہذا `x` کو `ℤ/nℤ` کی ایک ملٹیپلیکیٹو شناخت (multiplicative identity) ہونا چاہیے، جو منفرد ہے۔ چونکہ ہم نے فرض کیا تھا کہ `x ≠ 1` ہے، اس لیے یہ ممکن نہیں ہے۔ -`x` کا آرڈر `2` نہیں ہو سکتا جب تک کہ `x = P-1` نہ ہو، چونکہ یہ اس بات کی خلاف ورزی کرے گا کہ `P` پرائم ہے۔ +`x` کا آرڈر `2` نہیں ہو سکتا جب تک کہ `x = P-1` نہ ہو، کیونکہ یہ اس بات کی خلاف ورزی کرے گا کہ `P` پرائم ہے۔ -مذکورہ بالا تجویز سے، ہم یہ پہچان سکتے ہیں کہ `(picker * init) % P` کو دہرانے سے سائیکل کی لمبائی کم از کم `(P-1)/2` ہو گی۔ اس کی وجہ یہ ہے کہ ہم نے `P` کو دو کی اعلی طاقت کے تقریباً برابر ایک سیف پرائم کے طور پر منتخب کیا ہے، اور `init` وقفہ `[2,2**256+1]` میں ہے۔ `P` کی شدت کو دیکھتے ہوئے، ہمیں ماڈیولر ایکسپونینشن سے کبھی بھی سائیکل کی توقع نہیں کرنی چاہیے۔ +مذکورہ بالا تجویز سے، ہم یہ تسلیم کر سکتے ہیں کہ `(picker * init) % P` کو دہرانے سے سائیکل کی لمبائی کم از کم `(P-1)/2` ہوگی۔ اس کی وجہ یہ ہے کہ ہم نے `P` کو ایک سیف پرائم کے طور پر منتخب کیا ہے جو تقریباً دو کی اعلیٰ پاور کے برابر ہے، اور `init` وقفہ `[2,2**256+1]` میں ہے۔ `P` کی وسعت کو دیکھتے ہوئے، ہمیں کبھی بھی ماڈیولر ایکسپونینشیئشن سے سائیکل کی توقع نہیں کرنی چاہیے۔ -جب ہم DAG میں پہلا سیل تفویض کر رہے ہیں (متغیر جس پر `init` کا لیبل لگا ہوا ہے)، ہم `pow(sha3(seed) + 2, 3, P)` کا حساب لگاتے ہیں۔ پہلی نظر میں، یہ اس بات کی ضمانت نہیں دیتا کہ نتیجہ نہ تو `1` ہے اور نہ ہی `P-1`۔ تاہم، چونکہ `P-1` ایک سیف پرائم ہے، ہمارے پاس مندرجہ ذیل اضافی یقین دہانی ہے، جو مشاہدہ 1 کا نتیجہ ہے: +جب ہم DAG میں پہلا سیل تفویض کر رہے ہوتے ہیں (ویری ایبل جس کا لیبل `init` ہے)، تو ہم `pow(sha3(seed) + 2, 3, P)` کا حساب لگاتے ہیں۔ پہلی نظر میں، یہ اس بات کی ضمانت نہیں دیتا کہ نتیجہ نہ تو `1` ہے اور نہ ہی `P-1`۔ تاہم، چونکہ `P-1` ایک سیف پرائم ہے، اس لیے ہمارے پاس درج ذیل اضافی یقین دہانی ہے، جو مشاہدہ 1 کا نتیجہ (corollary) ہے: -> مشاہدہ 2۔ `x` کو ایک سیف پرائم `P` کے لیے ضرب گروپ `ℤ/Pℤ` کا رکن ہونے دیں، اور `w` کو ایک قدرتی عدد ہونے دیں۔ اگر `x mod P ≠ 1 mod P` اور `x mod P ≠ P-1 mod P`، نیز `w mod P ≠ P-1 mod P` اور `w mod P ≠ 0 mod P`، تو `xʷ mod P ≠ 1 mod P` اور `xʷ mod P ≠ P-1 mod P` +> مشاہدہ 2۔ فرض کریں کہ `x` ایک سیف پرائم `P` کے لیے ملٹیپلیکیٹو گروپ `ℤ/Pℤ` کا ممبر ہے، اور `w` ایک قدرتی عدد (natural number) ہے۔ اگر `x mod P ≠ 1 mod P` اور `x mod P ≠ P-1 mod P` ہے، اور ساتھ ہی `w mod P ≠ P-1 mod P` اور `w mod P ≠ 0 mod P` ہے، تو `xʷ mod P ≠ 1 mod P` اور `xʷ mod P ≠ P-1 mod P` -### ماڈیولر ایکسپونینشن بطور ہیش فنکشن {#modular-exponentiation} +### ہیش فنکشن کے طور پر ماڈیولر ایکسپونینشیئشن {#modular-exponentiation} -`P` اور `w` کی کچھ قدروں کے لیے، فنکشن `pow(x, w, P)` میں بہت سے تصادم ہو سکتے ہیں۔ مثال کے طور پر، `pow(x,9,19)` صرف `{1,18}` کی قدریں لیتا ہے۔ +`P` اور `w` کی مخصوص ویلیوز کے لیے، فنکشن `pow(x, w, P)` میں بہت سے تصادم (collisions) ہو سکتے ہیں۔ مثال کے طور پر، `pow(x,9,19)` صرف `{1,18}` ویلیوز لیتا ہے۔ -یہ دیکھتے ہوئے کہ `P` پرائم ہے، تب ایک ماڈیولر ایکسپونینشن ہیشنگ فنکشن کے لیے ایک مناسب `w` مندرجہ ذیل نتیجے کا استعمال کرتے ہوئے منتخب کیا جا سکتا ہے: +یہ دیکھتے ہوئے کہ `P` پرائم ہے، تو ماڈیولر ایکسپونینشیئشن ہیشنگ فنکشن کے لیے ایک مناسب `w` کو درج ذیل نتیجے کا استعمال کرتے ہوئے منتخب کیا جا سکتا ہے: -> مشاہدہ 3۔ `P` کو ایک پرائم ہونے دیں؛ `w` اور `P-1` نسبتاً پرائم ہیں اگر اور صرف اگر `ℤ/Pℤ` میں تمام `a` اور `b` کے لیے:
`aʷ mod P ≡ bʷ mod P` اگر اور صرف اگر `a mod P ≡ b mod P`
+> مشاہدہ 3۔ فرض کریں کہ `P` ایک پرائم ہے؛ `w` اور `P-1` نسبتاً پرائم (relatively prime) ہیں اگر اور صرف اگر `ℤ/Pℤ` میں تمام `a` اور `b` کے لیے:
`aʷ mod P ≡ bʷ mod P` اگر اور صرف اگر `a mod P ≡ b mod P`
-اس طرح، یہ دیکھتے ہوئے کہ `P` پرائم ہے اور `w` نسبتاً `P-1` کے پرائم ہے، ہمارے پاس یہ ہے کہ `|{pow(x, w, P) : x ∈ ℤ}| = P`، جس کا مطلب ہے کہ ہیشنگ فنکشن میں تصادم کی کم سے کم ممکنہ شرح ہے۔ +اس طرح، یہ دیکھتے ہوئے کہ `P` پرائم ہے اور `w`، `P-1` کے لحاظ سے نسبتاً پرائم ہے، ہمارے پاس `|{pow(x, w, P) : x ∈ ℤ}| = P` ہے، جس کا مطلب ہے کہ ہیشنگ فنکشن میں تصادم کی شرح کم از کم ممکنہ حد تک ہے۔ -خاص صورت میں کہ `P` ایک سیف پرائم ہے جیسا کہ ہم نے منتخب کیا ہے، تب `P-1` کے صرف عوامل 1، 2، `(P-1)/2` اور `P-1` ہیں۔ چونکہ `P` > 7، ہم جانتے ہیں کہ 3 نسبتاً `P-1` کے پرائم ہے، لہذا `w=3` مذکورہ بالا تجویز کو پورا کرتا ہے۔ +اس خاص صورت میں کہ `P` ایک سیف پرائم ہے جیسا کہ ہم نے منتخب کیا ہے، تو `P-1` کے صرف 1، 2، `(P-1)/2` اور `P-1` فیکٹرز ہیں۔ چونکہ `P` > 7 ہے، ہم جانتے ہیں کہ 3، `P-1` کے لحاظ سے نسبتاً پرائم ہے، لہذا `w=3` مندرجہ بالا تجویز کو پورا کرتا ہے۔ -## زیادہ موثر کیشے پر مبنی تشخیصی الگورتھم {#cache-based-evaluation} +## زیادہ مؤثر کیشے پر مبنی ایویلیوایشن الگورتھم {#cache-based-evaluation} ```python def quick_calc(params, seed, p): @@ -327,4 +327,4 @@ def quick_hashimoto_cached(cache, dagsize, params, header, nonce): for _ in range(params["accesses"]): mix ^= quick_calc_cached(cache, params, m + (mix & mask) % m) return dbl_sha3(mix) -``` +``` \ No newline at end of file diff --git a/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index bd5a268ae70..530fa991ec2 100644 --- a/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/ur/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -1,61 +1,61 @@ --- title: Ethash -description: "ایتھ ہیش الگورتھم پر ایک تفصیلی نظر۔" -lang: ur-in +description: "Ethash الگورتھم کا تفصیلی جائزہ۔" +lang: ur --- - Ethash ایتھیریم کا پروف آف ورک مائننگ الگورتھم تھا۔ پروف آف ورک کو اب **مکمل طور پر بند** کر دیا گیا ہے اور ایتھیریم کو اب اس کے بجائے [پروف آف اسٹیک](/developers/docs/consensus-mechanisms/pos/) کا استعمال کرکے محفوظ کیا گیا ہے۔ [دی مرج](/roadmap/merge/)، [پروف آف اسٹیک](/developers/docs/consensus-mechanisms/pos/) اور [اسٹیکنگ](/staking/) کے بارے میں مزید پڑھیں۔ یہ صفحہ تاریخی دلچسپی کے لیے ہے! + Ethash ایتھیریم کا proof-of-work مائننگ الگورتھم تھا۔ Proof-of-work کو اب **مکمل طور پر بند کر دیا گیا ہے** اور ایتھیریم کو اب اس کے بجائے [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) کا استعمال کرتے ہوئے محفوظ کیا گیا ہے۔ [The Merge](/roadmap/merge/)، [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) اور [اسٹیکنگ](/staking/) کے بارے میں مزید پڑھیں۔ یہ صفحہ تاریخی دلچسپی کے لیے ہے! -ایتھ ہیش [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) الگورتھم کا ایک ترمیم شدہ ورژن ہے۔ ایتھ ہیش پروف-آف-ورک [میموری ہارڈ](https://wikipedia.org/wiki/Memory-hard_function) ہے، جس کے بارے میں سوچا گیا تھا کہ یہ الگورتھم کو ASIC مزاحم بناتا ہے۔ ایتھ ہیش ASICs آخرکار تیار ہو گئے تھے لیکن GPU مائننگ اس وقت تک ایک قابل عمل آپشن تھا جب تک کہ پروف-آف-ورک کو بند نہیں کر دیا گیا۔ ایتھ ہیش اب بھی دیگر غیر-ایتھیریم پروف-آف-ورک نیٹ ورکس پر دوسرے کوائنز کو مائن کرنے کے لئے استعمال کیا جاتا ہے۔ +Ethash [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) الگورتھم کا ایک ترمیم شدہ ورژن ہے۔ Ethash proof-of-work [میموری ہارڈ](https://wikipedia.org/wiki/Memory-hard_function) ہے، جس کے بارے میں خیال کیا جاتا تھا کہ یہ الگورتھم کو ASIC کے خلاف مزاحم بناتا ہے۔ بالآخر Ethash ASICs تیار کر لیے گئے لیکن proof-of-work کے بند ہونے تک GPU مائننگ اب بھی ایک قابل عمل آپشن تھا۔ Ethash اب بھی دیگر غیر ایتھیریم proof-of-work نیٹ ورکس پر دیگر کوائنز مائن کرنے کے لیے استعمال ہوتا ہے۔ -## ایتھ ہیش کیسے کام کرتا ہے؟ {#how-does-ethash-work} +## Ethash کیسے کام کرتا ہے؟ {#how-does-ethash-work} -میموری ہارڈنس ایک پروف آف ورک الگورتھم کے ساتھ حاصل کی جاتی ہے جس کے لئے نانس اور بلاک ہیڈر پر منحصر ایک مقررہ وسیلہ کے سب سیٹ کو منتخب کرنے کی ضرورت ہوتی ہے۔ اس وسیلہ (کچھ گیگا بائٹس سائز میں) کو DAG کہا جاتا ہے۔ DAG ہر 30000 بلاکس پر تبدیل ہوتا ہے، ایک ~125 گھنٹے کی ونڈو جسے ایپوک کہا جاتا ہے (تقریباً 5.2 دن) اور اسے جنریٹ ہونے میں کچھ وقت لگتا ہے۔ چونکہ DAG صرف بلاک کی اونچائی پر منحصر ہے، اسے پہلے سے جنریٹ کیا جا سکتا ہے، لیکن اگر ایسا نہیں ہے تو کلائنٹ کو بلاک بنانے کے لئے اس عمل کے اختتام تک انتظار کرنے کی ضرورت ہے۔ اگر کلائنٹس وقت سے پہلے DAGs کو پہلے سے جنریٹ اور کیش نہیں کرتے ہیں تو نیٹ ورک کو ہر ایپوک کی منتقلی پر بڑے پیمانے پر بلاک میں تاخیر کا سامنا کرنا پڑ سکتا ہے۔ نوٹ کریں کہ پروف-آف-ورک کی تصدیق کے لئے DAG کو جنریٹ کرنے کی ضرورت نہیں ہے جو بنیادی طور پر کم CPU اور چھوٹی میموری دونوں کے ساتھ تصدیق کی اجازت دیتا ہے۔ +میموری ہارڈنیس ایک proof of work الگورتھم کے ساتھ حاصل کی جاتی ہے جس کے لیے nonce اور بلاک ہیڈر پر منحصر ایک مقررہ وسیلے کے سب سیٹس کا انتخاب درکار ہوتا ہے۔ اس وسیلے (جس کا سائز چند گیگا بائٹس ہوتا ہے) کو DAG کہا جاتا ہے۔ DAG کو ہر 30000 بلاکس کے بعد تبدیل کیا جاتا ہے، جو کہ تقریباً 125 گھنٹے کا دورانیہ ہے جسے epoch کہا جاتا ہے (تقریباً 5.2 دن) اور اسے بننے میں کچھ وقت لگتا ہے۔ چونکہ DAG کا انحصار صرف بلاک کی اونچائی پر ہوتا ہے، اس لیے اسے پہلے سے بنایا جا سکتا ہے، لیکن اگر ایسا نہیں ہوتا تو کلائنٹ کو بلاک بنانے کے لیے اس عمل کے اختتام تک انتظار کرنا پڑتا ہے۔ اگر کلائنٹس وقت سے پہلے DAGs کو پہلے سے نہیں بناتے اور کیشے (cache) نہیں کرتے تو نیٹ ورک کو ہر epoch کی منتقلی پر بڑے پیمانے پر بلاک کی تاخیر کا سامنا کرنا پڑ سکتا ہے۔ نوٹ کریں کہ proof-of-work کی تصدیق کے لیے DAG بنانے کی ضرورت نہیں ہے، جو بنیادی طور پر کم CPU اور چھوٹی میموری دونوں کے ساتھ تصدیق کی اجازت دیتا ہے۔ -الگورتھم جو عمومی راستہ اختیار کرتا ہے وہ حسب ذیل ہے: +الگورتھم کا عمومی طریقہ کار درج ذیل ہے: -1. ایک **سیڈ** موجود ہے جسے اس وقت تک بلاک ہیڈرز کو اسکین کرکے ہر بلاک کے لئے شمار کیا جاسکتا ہے۔ -2. سیڈ سے، کوئی **16 MB کا سیوڈو رینڈم کیش** شمار کر سکتا ہے۔ لائٹ کلائنٹس کیش کو اسٹور کرتے ہیں۔ -3. کیش سے، ہم ایک **1 GB ڈیٹاسیٹ** جنریٹ کر سکتے ہیں، اس خصوصیت کے ساتھ کہ ڈیٹاسیٹ میں ہر آئٹم کیش سے صرف چند آئٹمز پر منحصر ہے۔ فل کلائنٹس اور مائنرز ڈیٹاسیٹ کو اسٹور کرتے ہیں۔ ڈیٹاسیٹ وقت کے ساتھ خطی طور پر بڑھتا ہے۔ -4. مائننگ میں ڈیٹاسیٹ کے بے ترتیب سلائسز کو پکڑنا اور انہیں ایک ساتھ ہیش کرنا شامل ہے۔ کیش کا استعمال کرکے کم میموری کے ساتھ تصدیق کی جا سکتی ہے تاکہ ڈیٹاسیٹ کے ان مخصوص ٹکڑوں کو دوبارہ جنریٹ کیا جا سکے جن کی آپ کو ضرورت ہے، لہذا آپ کو صرف کیش کو اسٹور کرنے کی ضرورت ہے۔ +1. ایک **seed** موجود ہوتا ہے جس کا حساب ہر بلاک کے لیے اس مقام تک بلاک ہیڈرز کو اسکین کر کے لگایا جا سکتا ہے۔ +2. seed سے، کوئی بھی **16 MB pseudorandom cache** کا حساب لگا سکتا ہے۔ لائٹ کلائنٹس کیشے کو اسٹور کرتے ہیں۔ +3. کیشے سے، ہم ایک **1 GB ڈیٹاسیٹ** بنا سکتے ہیں، اس خصوصیت کے ساتھ کہ ڈیٹاسیٹ میں ہر آئٹم کیشے کے صرف چند آئٹمز پر منحصر ہوتا ہے۔ فل کلائنٹس اور مائنرز ڈیٹاسیٹ کو اسٹور کرتے ہیں۔ ڈیٹاسیٹ وقت کے ساتھ لکیری طور پر بڑھتا ہے۔ +4. مائننگ میں ڈیٹاسیٹ کے بے ترتیب حصوں کو پکڑنا اور انہیں ایک ساتھ ہیش کرنا شامل ہے۔ تصدیق کم میموری کے ساتھ کیشے کا استعمال کرتے ہوئے ڈیٹاسیٹ کے مخصوص حصوں کو دوبارہ بنانے کے لیے کی جا سکتی ہے جن کی آپ کو ضرورت ہوتی ہے، لہذا آپ کو صرف کیشے کو اسٹور کرنے کی ضرورت ہے۔ -بڑا ڈیٹاسیٹ ہر 30000 بلاکس میں ایک بار اپ ڈیٹ ہوتا ہے، لہذا ایک مائنر کی زیادہ تر کوشش ڈیٹاسیٹ کو پڑھنے کی ہوگی، نہ کہ اس میں تبدیلیاں کرنے کی۔ +بڑے ڈیٹاسیٹ کو ہر 30000 بلاکس میں ایک بار اپ ڈیٹ کیا جاتا ہے، لہذا مائنر کی زیادہ تر کوشش ڈیٹاسیٹ کو پڑھنے میں صرف ہوگی، نہ کہ اس میں تبدیلیاں کرنے میں۔ ## تعریفیں {#definitions} -ہم مندرجہ ذیل تعریفیں استعمال کرتے ہیں: +ہم درج ذیل تعریفیں استعمال کرتے ہیں: ``` -WORD_BYTES = 4 # لفظ میں بائٹس -DATASET_BYTES_INIT = 2**30 # جینیسس پر ڈیٹاسیٹ میں بائٹس -DATASET_BYTES_GROWTH = 2**23 # فی ایپوک ڈیٹاسیٹ کی بڑھوتری -CACHE_BYTES_INIT = 2**24 # جینیسس پر کیش میں بائٹس -CACHE_BYTES_GROWTH = 2**17 # فی ایپوک کیش کی بڑھوتری -CACHE_MULTIPLIER=1024 # کیش کے مقابلے میں DAG کا سائز -EPOCH_LENGTH = 30000 # فی ایپوک بلاکس -MIX_BYTES = 128 # مکس کی چوڑائی -HASH_BYTES = 64 # بائٹس میں ہیش کی لمبائی -DATASET_PARENTS = 256 # ہر ڈیٹاسیٹ عنصر کے پیرنٹس کی تعداد -CACHE_ROUNDS = 3 # کیش پروڈکشن میں راؤنڈز کی تعداد -ACCESSES = 64 # ہاشیموٹو لوپ میں رسائیوں کی تعداد +WORD_BYTES = 4 # bytes in word +DATASET_BYTES_INIT = 2**30 # bytes in dataset at genesis +DATASET_BYTES_GROWTH = 2**23 # dataset growth per epoch +CACHE_BYTES_INIT = 2**24 # bytes in cache at genesis +CACHE_BYTES_GROWTH = 2**17 # cache growth per epoch +CACHE_MULTIPLIER=1024 # Size of the DAG relative to the cache +EPOCH_LENGTH = 30000 # blocks per epoch +MIX_BYTES = 128 # width of mix +HASH_BYTES = 64 # hash length in bytes +DATASET_PARENTS = 256 # number of parents of each dataset element +CACHE_ROUNDS = 3 # number of rounds in cache production +ACCESSES = 64 # number of accesses in hashimoto loop ``` ### 'SHA3' کا استعمال {#sha3} -ایتھیریم کی ڈیولپمنٹ SHA3 اسٹینڈرڈ کی ڈیولپمنٹ کے ساتھ موافق تھی، اور اسٹینڈرڈز کے عمل نے حتمی ہیش الگورتھم کی پیڈنگ میں دیر سے تبدیلی کی، تاکہ ایتھیریم کے "sha3_256" اور "sha3_512" ہیشز معیاری sha3 ہیشز نہیں ہیں، بلکہ ایک متغیر ہیں جسے اکثر دوسرے سیاق و سباق میں "Keccak-256" اور "Keccak-512" کہا جاتا ہے۔ بحث دیکھیں، مثال کے طور پر، [یہاں](https://eips.ethereum.org/EIPS/eip-1803)، [یہاں](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use)، یا [یہاں](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)۔ +ایتھیریم کی ڈیولپمنٹ SHA3 معیار کی ڈیولپمنٹ کے ساتھ ہی ہوئی، اور معیارات کے عمل نے حتمی ہیش الگورتھم کی پیڈنگ میں تاخیر سے تبدیلی کی، تاکہ ایتھیریم کے "sha3_256" اور "sha3_512" ہیشز معیاری sha3 ہیشز نہ ہوں، بلکہ ایک قسم جسے اکثر دیگر سیاق و سباق میں "Keccak-256" اور "Keccak-512" کہا جاتا ہے۔ بحث دیکھیں، مثال کے طور پر، [یہاں](https://eips.ethereum.org/EIPS/eip-1803)، [یہاں](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use)، یا [یہاں](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)۔ -براہ کرم اس بات کو ذہن میں رکھیں کیونکہ ذیل میں الگورتھم کی تفصیل میں "sha3" ہیشز کا حوالہ دیا گیا ہے۔ +براہ کرم اسے ذہن میں رکھیں کیونکہ ذیل میں الگورتھم کی تفصیل میں "sha3" ہیشز کا حوالہ دیا گیا ہے۔ ## پیرامیٹرز {#parameters} -ایتھ ہیش کے کیش اور ڈیٹاسیٹ کے پیرامیٹرز بلاک نمبر پر منحصر ہیں۔ کیش کا سائز اور ڈیٹاسیٹ کا سائز دونوں خطی طور پر بڑھتے ہیں؛ تاہم، ہم ہمیشہ خطی طور پر بڑھتی ہوئی حد سے نیچے سب سے زیادہ پرائم لیتے ہیں تاکہ چکری رویے کی طرف لے جانے والی حادثاتی باقاعدگیوں کے خطرے کو کم کیا جا سکے۔ +Ethash کے کیشے اور ڈیٹاسیٹ کے پیرامیٹرز بلاک نمبر پر منحصر ہیں۔ کیشے کا سائز اور ڈیٹاسیٹ کا سائز دونوں لکیری طور پر بڑھتے ہیں؛ تاہم، ہم ہمیشہ لکیری طور پر بڑھنے والی حد سے نیچے سب سے زیادہ پرائم (prime) لیتے ہیں تاکہ حادثاتی باقاعدگیوں کے خطرے کو کم کیا جا سکے جو سائیکلک رویے کا باعث بنتے ہیں۔ ```python def get_cache_size(block_number): @@ -73,17 +73,17 @@ def get_full_size(block_number): return sz ``` -ڈیٹاسیٹ اور کیش سائز کی قدروں کی جدولیں ضمیمہ میں فراہم کی گئی ہیں۔ +ڈیٹاسیٹ اور کیشے کے سائز کی قدروں کے ٹیبلز ضمیمہ میں فراہم کیے گئے ہیں۔ -## کیش جنریشن {#cache-generation} +## کیشے جنریشن {#cache-generation} -اب، ہم کیش تیار کرنے کے لئے فنکشن کی وضاحت کرتے ہیں: +اب، ہم کیشے بنانے کے لیے فنکشن کی وضاحت کرتے ہیں: ```python def mkcache(cache_size, seed): n = cache_size // HASH_BYTES - # ترتیب وار ابتدائی ڈیٹاسیٹ تیار کریں + # ابتدائی ڈیٹاسیٹ کو ترتیب وار تیار کریں o = [sha3_512(seed)] for i in range(1, n): o.append(sha3_512(o[-1])) @@ -97,11 +97,11 @@ def mkcache(cache_size, seed): return o ``` -کیش پروڈکشن کے عمل میں پہلے ترتیب وار 32 MB میموری کو بھرنا شامل ہے، پھر سرجیو ڈیمین لرنر کے [_اسٹرکٹ میموری ہارڈ ہیشنگ فنکشنز_ (2014)](http://www.hashcash.org/papers/memohash.pdf) سے _RandMemoHash_ الگورتھم کے دو پاسز انجام دینا شامل ہے۔ آؤٹ پٹ 524288 64-بائٹ قدروں کا ایک سیٹ ہے۔ +کیشے بنانے کے عمل میں پہلے ترتیب وار 32 MB میموری کو بھرنا شامل ہے، پھر Sergio Demian Lerner کے _RandMemoHash_ الگورتھم کے دو پاسز کو [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf) سے انجام دینا شامل ہے۔ آؤٹ پٹ 524288 64-بائٹ ویلیوز کا ایک سیٹ ہے۔ ## ڈیٹا ایگریگیشن فنکشن {#date-aggregation-function} -ہم کچھ معاملات میں XOR کے غیر-ایسوسی ایٹیو متبادل کے طور پر [FNV ہیش](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) سے متاثر ایک الگورتھم استعمال کرتے ہیں۔ نوٹ کریں کہ ہم پرائم کو پورے 32-بٹ ان پٹ سے ضرب دیتے ہیں، FNV-1 اسپیک کے برعکس جو پرائم کو باری باری ایک بائٹ (آکٹیٹ) سے ضرب دیتا ہے۔ +ہم کچھ معاملات میں XOR کے غیر متعلقہ متبادل کے طور پر [FNV ہیش](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) سے متاثر ایک الگورتھم استعمال کرتے ہیں۔ نوٹ کریں کہ ہم پرائم کو مکمل 32-بٹ ان پٹ کے ساتھ ضرب دیتے ہیں، اس کے برعکس FNV-1 اسپیک جو پرائم کو باری باری ایک بائٹ (octet) کے ساتھ ضرب دیتا ہے۔ ```python FNV_PRIME = 0x01000193 @@ -110,28 +110,28 @@ def fnv(v1, v2): return ((v1 * FNV_PRIME) ^ v2) % 2**32 ``` -براہ کرم نوٹ کریں، یہاں تک کہ یلو پیپر بھی fnv کو v1\*(FNV_PRIME ^ v2) کے طور پر بیان کرتا ہے، تمام موجودہ نفاذات مستقل طور پر اوپر دی گئی تعریف کا استعمال کرتے ہیں۔ +براہ کرم نوٹ کریں، یہاں تک کہ یلو پیپر fnv کو v1*(FNV_PRIME ^ v2) کے طور پر بیان کرتا ہے، تمام موجودہ نفاذ مستقل طور پر مندرجہ بالا تعریف کا استعمال کرتے ہیں۔ -## مکمل ڈیٹاسیٹ کا حساب {#full-dataset-calculation} +## مکمل ڈیٹاسیٹ کیلکولیشن {#full-dataset-calculation} -مکمل 1 GB ڈیٹاسیٹ میں ہر 64 بائٹ کا آئٹم اس طرح شمار کیا جاتا ہے: +مکمل 1 GB ڈیٹاسیٹ میں ہر 64-بائٹ آئٹم کا حساب اس طرح لگایا جاتا ہے: ```python def calc_dataset_item(cache, i): n = len(cache) r = HASH_BYTES // WORD_BYTES - # مکس کو شروع کریں + # مکس کو انیشلائز کریں mix = copy.copy(cache[i % n]) mix[0] ^= i mix = sha3_512(mix) - # اسے i پر مبنی بہت سے بے ترتیب کیش نوڈز کے ساتھ fnv کریں + # i کی بنیاد پر بہت سے رینڈم کیشے نوڈز کے ساتھ اسے fnv کریں for j in range(DATASET_PARENTS): cache_index = fnv(i ^ j, mix[j % r]) mix = map(fnv, mix, cache[cache_index % n]) return sha3_512(mix) ``` -بنیادی طور پر، ہم 256 سیوڈو رینڈملی منتخب کیش نوڈز سے ڈیٹا کو یکجا کرتے ہیں، اور اسے ڈیٹاسیٹ نوڈ کا حساب لگانے کے لئے ہیش کرتے ہیں۔ پھر پورا ڈیٹاسیٹ اس کے ذریعہ تیار کیا جاتا ہے: +بنیادی طور پر، ہم 256 pseudorandomly منتخب کردہ کیشے نوڈس سے ڈیٹا کو یکجا کرتے ہیں، اور ڈیٹاسیٹ نوڈ کا حساب لگانے کے لیے اسے ہیش کرتے ہیں۔ پھر پورا ڈیٹاسیٹ اس کے ذریعے تیار کیا جاتا ہے: ```python def calc_dataset(full_size, cache): @@ -140,20 +140,20 @@ def calc_dataset(full_size, cache): ## مین لوپ {#main-loop} -اب، ہم مرکزی "ہاشیموٹو" جیسے لوپ کی وضاحت کرتے ہیں، جہاں ہم ایک خاص ہیڈر اور نانس کے لئے اپنی حتمی قدر پیدا کرنے کے لئے مکمل ڈیٹاسیٹ سے ڈیٹا جمع کرتے ہیں۔ نیچے دیے گئے کوڈ میں، `header` ایک _چھوٹے_ بلاک ہیڈر کی RLP نمائندگی کے SHA3-256 _ہیش_ کی نمائندگی کرتا ہے، یعنی، ایک ہیڈر جس میں **mixHash** اور **nonce** کے فیلڈز شامل نہیں ہیں۔ `nonce` ایک 64 بٹ غیر سائن شدہ انٹیجر کے آٹھ بائٹس ہیں جو بگ-اینڈین ترتیب میں ہیں۔ لہذا `nonce[::-1]` اس قدر کی آٹھ بائٹ کی لٹل-اینڈین نمائندگی ہے: +اب، ہم مرکزی "hashimoto" جیسے لوپ کی وضاحت کرتے ہیں، جہاں ہم ایک مخصوص ہیڈر اور nonce کے لیے اپنی حتمی ویلیو تیار کرنے کے لیے مکمل ڈیٹاسیٹ سے ڈیٹا اکٹھا کرتے ہیں۔ ذیل کے کوڈ میں، `header` ایک _truncated_ بلاک ہیڈر کی RLP نمائندگی کے SHA3-256 _ہیش_ کی نمائندگی کرتا ہے، یعنی ایک ہیڈر جس میں **mixHash** اور **nonce** فیلڈز شامل نہیں ہیں۔ `nonce` بگ-اینڈین ترتیب میں 64 بٹ ان سائنڈ انٹیجر کے آٹھ بائٹس ہیں۔ لہذا `nonce[::-1]` اس ویلیو کی آٹھ بائٹ لٹل-اینڈین نمائندگی ہے: ```python def hashimoto(header, nonce, full_size, dataset_lookup): n = full_size / HASH_BYTES w = MIX_BYTES // WORD_BYTES mixhashes = MIX_BYTES / HASH_BYTES - # 64 بائٹ سیڈ میں ہیڈر+نانس کو یکجا کریں + # header+nonce کو ملا کر 64 بائٹ کا سیڈ بنائیں s = sha3_512(header + nonce[::-1]) # نقل شدہ s کے ساتھ مکس شروع کریں mix = [] for _ in range(MIX_BYTES / HASH_BYTES): mix.extend(s) - # بے ترتیب ڈیٹاسیٹ نوڈز میں مکس کریں + # رینڈم ڈیٹاسیٹ نوڈز کو مکس میں شامل کریں for i in range(ACCESSES): p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes newdata = [] @@ -176,9 +176,9 @@ def hashimoto_full(full_size, dataset, header, nonce): return hashimoto(header, nonce, full_size, lambda x: dataset[x]) ``` -بنیادی طور پر، ہم 128 بائٹس چوڑا ایک "مکس" برقرار رکھتے ہیں، اور بار بار ترتیب وار مکمل ڈیٹاسیٹ سے 128 بائٹس حاصل کرتے ہیں اور اسے مکس کے ساتھ یکجا کرنے کے لئے `fnv` فنکشن کا استعمال کرتے ہیں۔ ترتیب وار رسائی کے 128 بائٹس استعمال کیے جاتے ہیں تاکہ الگورتھم کا ہر راؤنڈ ہمیشہ RAM سے ایک پورا صفحہ حاصل کرے، ٹرانسلیشن لوک اسائیڈ بفر مسز کو کم سے کم کرتا ہے جس سے ASICs نظریاتی طور پر بچنے کے قابل ہوں گے۔ +بنیادی طور پر، ہم 128 بائٹس چوڑا ایک "mix" برقرار رکھتے ہیں، اور بار بار ترتیب وار مکمل ڈیٹاسیٹ سے 128 بائٹس لاتے ہیں اور اسے mix کے ساتھ جوڑنے کے لیے `fnv` فنکشن کا استعمال کرتے ہیں۔ ترتیب وار رسائی کے 128 بائٹس استعمال کیے جاتے ہیں تاکہ الگورتھم کا ہر راؤنڈ ہمیشہ RAM سے ایک مکمل صفحہ لائے، جس سے ٹرانسلیشن لک اسائیڈ بفر مسز کو کم کیا جا سکے جن سے ASICs نظریاتی طور پر بچنے کے قابل ہوں گے۔ -اگر اس الگورتھم کا آؤٹ پٹ مطلوبہ ہدف سے کم ہے، تو نانس درست ہے۔ نوٹ کریں کہ آخر میں `sha3_256` کا اضافی اطلاق اس بات کو یقینی بناتا ہے کہ ایک درمیانی نانس موجود ہے جسے یہ ثابت کرنے کے لئے فراہم کیا جا سکتا ہے کہ کم از کم تھوڑا سا کام کیا گیا تھا؛ اس فوری بیرونی PoW تصدیق کو اینٹی-DDoS مقاصد کے لئے استعمال کیا جا سکتا ہے۔ یہ اس بات کی شماریاتی یقین دہانی فراہم کرنے کا بھی کام کرتا ہے کہ نتیجہ ایک غیر جانبدار، 256 بٹ نمبر ہے۔ +اگر اس الگورتھم کا آؤٹ پٹ مطلوبہ ہدف سے کم ہے، تو nonce درست ہے۔ نوٹ کریں کہ آخر میں `sha3_256` کا اضافی اطلاق اس بات کو یقینی بناتا ہے کہ ایک درمیانی nonce موجود ہے جو یہ ثابت کرنے کے لیے فراہم کیا جا سکتا ہے کہ کم از کم تھوڑا سا کام کیا گیا تھا؛ یہ فوری بیرونی PoW تصدیق اینٹی-DDoS مقاصد کے لیے استعمال کی جا سکتی ہے۔ یہ شماریاتی یقین دہانی فراہم کرنے کا بھی کام کرتا ہے کہ نتیجہ ایک غیر جانبدار، 256-بٹ نمبر ہے۔ ## مائننگ {#mining} @@ -186,7 +186,7 @@ def hashimoto_full(full_size, dataset, header, nonce): ```python def mine(full_size, dataset, header, difficulty): - # ہیش کے ساتھ اسی ہندسے پر موازنہ کرنے کے لئے ہدف کو صفر-پیڈ کریں + # ہیش کے ساتھ ایک ہی ہندسے پر موازنہ کرنے کے لیے ٹارگٹ کو زیرو-پیڈ (zero-pad) کریں target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) @@ -195,9 +195,9 @@ def mine(full_size, dataset, header, difficulty): return nonce ``` -## سیڈ ہیش کی تعریف کرنا {#seed-hash} +## سیڈ ہیش کی تعریف {#seed-hash} -کسی دیے گئے بلاک کے اوپر مائن کرنے کے لئے استعمال ہونے والے سیڈ ہیش کا حساب لگانے کے لئے، ہم مندرجہ ذیل الگورتھم کا استعمال کرتے ہیں: +سیڈ ہیش کا حساب لگانے کے لیے جو کسی دیے گئے بلاک کے اوپر مائن کرنے کے لیے استعمال کیا جائے گا، ہم درج ذیل الگورتھم استعمال کرتے ہیں: ```python def get_seedhash(block): @@ -207,20 +207,20 @@ def mine(full_size, dataset, header, difficulty): return s ``` -نوٹ کریں کہ ہموار مائننگ اور تصدیق کے لئے، ہم مستقبل کے سیڈ ہیشز اور ڈیٹاسیٹس کو ایک الگ تھریڈ میں پہلے سے شمار کرنے کی تجویز دیتے ہیں۔ +نوٹ کریں کہ ہموار مائننگ اور تصدیق کے لیے، ہم تجویز کرتے ہیں کہ مستقبل کے سیڈ ہیشز اور ڈیٹاسیٹس کو ایک الگ تھریڈ میں پہلے سے شمار کیا جائے۔ -## مزید پڑھیں {#further-reading} +## مزید مطالعہ {#further-reading} -_کسی کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_ +_کسی ایسے کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_ ## ضمیمہ {#appendix} -اگر آپ اوپر دیے گئے پائتھن اسپیک کو کوڈ کے طور پر چلانے میں دلچسپی رکھتے ہیں تو مندرجہ ذیل کوڈ کو پہلے شامل کیا جانا چاہئے۔ +اگر آپ مندرجہ بالا Python اسپیک کو کوڈ کے طور پر چلانے میں دلچسپی رکھتے ہیں تو درج ذیل کوڈ کو پہلے شامل کیا جانا چاہیے۔ ```python import sha3, copy -# لٹل اینڈین بٹ آرڈرنگ فرض کرتا ہے (انٹیل آرکیٹیکچرز کی طرح) +# لٹل اینڈئن (little endian) بٹ آرڈرنگ فرض کرتا ہے (بالکل انٹیل آرکیٹیکچرز کی طرح) def decode_int(s): return int(s[::-1].encode('hex'), 16) if s else 0 @@ -248,7 +248,7 @@ def serialize_cache(ds): serialize_dataset = serialize_cache -# sha3 ہیش فنکشن، 64 بائٹس آؤٹ پٹ کرتا ہے +# sha3 ہیش فنکشن، 64 بائٹس آؤٹ پٹ دیتا ہے def sha3_512(x): return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) @@ -267,7 +267,7 @@ def isprime(x): ### ڈیٹا سائزز {#data-sizes} -مندرجہ ذیل لک اپ ٹیبلز ڈیٹا سائزز اور کیش سائزز کے تقریباً 2048 ٹیبولیٹڈ ایپوکس فراہم کرتی ہیں۔ +درج ذیل لک اپ ٹیبلز ڈیٹا سائزز اور کیشے سائزز کے تقریباً 2048 ٹیبولیٹڈ epochs فراہم کرتے ہیں۔ ```python def get_datasize(block_number): @@ -993,7 +993,7 @@ cache_sizes = [ 265287488, 265418432, 265550528, 265681216, 265813312, 265943488, 266075968, 266206144, 266337728, 266468032, 266600384, 266731072, 266862272, 266993344, 267124288, 267255616, 267386432, 267516992, -267648704, 26777728, 267910592, 268040512, 268172096, 268302784, +267648704, 267777728, 267910592, 268040512, 268172096, 268302784, 268435264, 268566208, 268696256, 268828096, 268959296, 269090368, 269221312, 269352256, 269482688, 269614784, 269745856, 269876416, 270007616, 270139328, 270270272, 270401216, 270531904, 270663616, @@ -1016,4 +1016,4 @@ cache_sizes = [ 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 284950208, 285081536] -``` +``` \ No newline at end of file diff --git a/public/content/translations/ur/developers/docs/dapps/index.md b/public/content/translations/ur/developers/docs/dapps/index.md index bdf0941cb59..893ecc5eeed 100644 --- a/public/content/translations/ur/developers/docs/dapps/index.md +++ b/public/content/translations/ur/developers/docs/dapps/index.md @@ -1,96 +1,104 @@ --- -title: "Dapps کا تکنیکی تعارف" +title: "ڈی ایپس (dapps) کا تکنیکی تعارف" description: -lang: ur-in +lang: ur --- -ایک وکندریقرت ایپلیکیشن (dapp) ایک وکندریقرت نیٹ ورک پر بنائی گئی ایک ایپلیکیشن ہے جو ایک [اسمارٹ کنٹریکٹ](/developers/docs/smart-contracts/) اور ایک فرنٹ اینڈ یوزر انٹرفیس کو یکجا کرتی ہے۔ Ethereum پر، اسمارٹ کنٹریکٹس قابل رسائی اور شفاف ہیں – کھلے APIs کی طرح – لہذا آپ کی dapp میں کسی اور کا لکھا ہوا اسمارٹ کنٹریکٹ بھی شامل ہو سکتا ہے۔ +ایک ڈی سینٹرلائزڈ ایپلیکیشن (dapp) ایک ایسی ایپلیکیشن ہے جو ڈی سینٹرلائزڈ نیٹ ورک پر بنائی گئی ہے اور یہ ایک [اسمارٹ کانٹریکٹ](/developers/docs/smart-contracts/) اور فرنٹ اینڈ یوزر انٹرفیس کو یکجا کرتی ہے۔ [ایتھیریم (Ethereum)](/) پر، اسمارٹ کانٹریکٹس قابل رسائی اور شفاف ہوتے ہیں – بالکل اوپن APIs کی طرح – لہذا آپ کی ڈی ایپ (dapp) میں کوئی ایسا اسمارٹ کانٹریکٹ بھی شامل ہو سکتا ہے جو کسی اور نے لکھا ہو۔ -## شرائط {#prerequisites} +## پیشگی شرائط {#prerequisites} -dapps کے بارے میں جاننے سے پہلے، آپ کو [بلاک چین کی بنیادی باتوں](/developers/docs/intro-to-ethereum/) کا احاطہ کرنا چاہئے اور Ethereum نیٹ ورک اور یہ کیسے وکندریقرت ہے اس کے بارے میں پڑھنا چاہئے۔ +ڈی ایپس کے بارے میں سیکھنے سے پہلے، آپ کو [بلاک چین کی بنیادی باتوں](/developers/docs/intro-to-ethereum/) کا احاطہ کرنا چاہیے اور ایتھیریم نیٹ ورک اور اس کے ڈی سینٹرلائزڈ ہونے کے بارے میں پڑھنا چاہیے۔ -## ایک dapp کی تعریف {#definition-of-a-dapp} +## ڈی ایپ (dapp) کی تعریف {#definition-of-a-dapp} -ایک dapp کا بیک اینڈ کوڈ ایک وکندریقرت پیئر-ٹو-پیئر نیٹ ورک پر چلتا ہے۔ اس کا موازنہ ایک ایسی ایپ سے کریں جہاں بیک اینڈ کوڈ مرکزی سرورز پر چل رہا ہو۔ +ایک ڈی ایپ کا بیک اینڈ کوڈ ایک ڈی سینٹرلائزڈ پیئر ٹو پیئر (peer-to-peer) نیٹ ورک پر چلتا ہے۔ اس کا موازنہ ایک ایسی ایپ سے کریں جہاں بیک اینڈ کوڈ سینٹرلائزڈ سرورز پر چل رہا ہو۔ -ایک dapp میں کسی بھی زبان میں لکھا فرنٹ اینڈ کوڈ اور یوزر انٹرفیس ہو سکتے ہیں (بالکل ایک ایپ کی طرح) تاکہ اس کے بیک اینڈ پر کال کی جا سکے۔ مزید یہ کہ، اس کے فرنٹ اینڈ کو [IPFS](https://ipfs.io/) جیسے وکندریقرت اسٹوریج پر ہوسٹ کیا جا سکتا ہے۔ +ایک ڈی ایپ میں فرنٹ اینڈ کوڈ اور یوزر انٹرفیس کسی بھی زبان میں لکھے جا سکتے ہیں (بالکل ایک عام ایپ کی طرح) تاکہ اس کے بیک اینڈ کو کالز کی جا سکیں۔ مزید برآں، اس کا فرنٹ اینڈ ڈی سینٹرلائزڈ اسٹوریج جیسے کہ [IPFS](https://ipfs.io/) پر ہوسٹ کیا جا سکتا ہے۔ -- **وکندریقرت** - dapps، Ethereum پر کام کرتی ہیں، ایک کھلا عوامی وکندریقرت پلیٹ فارم جہاں کسی ایک شخص یا گروہ کا کنٹرول نہیں ہوتا -- **ڈیٹرمنسٹک** - dapps اس ماحول سے قطع نظر ایک ہی فنکشن انجام دیتی ہیں جس میں انہیں عمل میں لایا جاتا ہے -- **ٹیورنگ کمپلیٹ** - dapps مطلوبہ وسائل دیے جانے پر کوئی بھی کارروائی انجام دے سکتی ہیں -- **الگ تھلگ** - dapps کو ایک ورچوئل ماحول میں عمل میں لایا جاتا ہے جسے Ethereum ورچوئل مشین کہا جاتا ہے تاکہ اگر اسمارٹ کنٹریکٹ میں کوئی بگ ہو تو یہ بلاک چین نیٹ ورک کے معمول کے کام میں رکاوٹ نہ ڈالے +- **ڈی سینٹرلائزڈ (Decentralized)** - ڈی ایپس ایتھیریم پر کام کرتی ہیں، جو ایک اوپن پبلک ڈی سینٹرلائزڈ پلیٹ فارم ہے جہاں کسی ایک شخص یا گروپ کا کنٹرول نہیں ہوتا +- **ڈیٹرمینسٹک (Deterministic)** - ڈی ایپس اس ماحول سے قطع نظر وہی فنکشن انجام دیتی ہیں جس میں انہیں ایگزیکیوٹ کیا جاتا ہے +- **ٹیورنگ کمپلیٹ (Turing complete)** - مطلوبہ وسائل دیے جانے پر ڈی ایپس کوئی بھی عمل انجام دے سکتی ہیں +- **آئسولیٹڈ (Isolated)** - ڈی ایپس کو ایک ورچوئل ماحول میں ایگزیکیوٹ کیا جاتا ہے جسے ایتھیریم ورچوئل مشین (Ethereum Virtual Machine) کہا جاتا ہے تاکہ اگر اسمارٹ کانٹریکٹ میں کوئی بگ ہو، تو یہ بلاک چین نیٹ ورک کے معمول کے کام میں رکاوٹ نہ ڈالے -### اسمارٹ کنٹریکٹس پر {#on-smart-contracts} +### اسمارٹ کانٹریکٹس کے بارے میں {#on-smart-contracts} -dapps کا تعارف کرانے کے لیے، ہمیں اسمارٹ کنٹریکٹس کا تعارف کرانے کی ضرورت ہے – بہتر اصطلاح کی کمی کی وجہ سے ایک dapp کا بیک اینڈ۔ تفصیلی جائزہ کے لیے، [اسمارٹ کنٹریکٹس](/developers/docs/smart-contracts/) پر ہمارے سیکشن پر جائیں۔ +ڈی ایپس کو متعارف کرانے کے لیے، ہمیں اسمارٹ کانٹریکٹس کو متعارف کرانے کی ضرورت ہے – جو کہ بہتر اصطلاح کی عدم موجودگی میں ایک ڈی ایپ کا بیک اینڈ ہے۔ تفصیلی جائزے کے لیے، ہمارے [اسمارٹ کانٹریکٹس](/developers/docs/smart-contracts/) کے سیکشن پر جائیں۔ -ایک اسمارٹ کنٹریکٹ کوڈ ہے جو Ethereum بلاک چین پر رہتا ہے اور بالکل اسی طرح چلتا ہے جیسا کہ پروگرام کیا گیا ہے۔ ایک بار جب اسمارٹ کنٹریکٹس نیٹ ورک پر تعینات ہو جاتے ہیں تو آپ انہیں تبدیل نہیں کر سکتے۔ Dapps کو وکندریقرت کیا جا سکتا ہے کیونکہ وہ کسی فرد یا کمپنی کے بجائے کنٹریکٹ میں لکھی گئی منطق کے ذریعے کنٹرول ہوتے ہیں۔ اس کا یہ بھی مطلب ہے کہ آپ کو اپنے کنٹریکٹس کو بہت احتیاط سے ڈیزائن کرنے اور انہیں اچھی طرح سے ٹیسٹ کرنے کی ضرورت ہے۔ +اسمارٹ کانٹریکٹ وہ کوڈ ہے جو ایتھیریم بلاک چین پر موجود ہوتا ہے اور بالکل اسی طرح چلتا ہے جیسا کہ اسے پروگرام کیا گیا ہو۔ ایک بار جب اسمارٹ کانٹریکٹس نیٹ ورک پر ڈیپلائے ہو جائیں تو آپ انہیں تبدیل نہیں کر سکتے۔ ڈی ایپس ڈی سینٹرلائزڈ ہو سکتی ہیں کیونکہ وہ کانٹریکٹ میں لکھی گئی لاجک کے ذریعے کنٹرول ہوتی ہیں، نہ کہ کسی فرد یا کمپنی کے ذریعے۔ اس کا مطلب یہ بھی ہے کہ آپ کو اپنے کانٹریکٹس کو بہت احتیاط سے ڈیزائن کرنے اور ان کی مکمل ٹیسٹنگ کرنے کی ضرورت ہے۔ -## dapp ڈیولپمنٹ کے فوائد {#benefits-of-dapp-development} +## ڈی ایپ ڈیولپمنٹ کے فوائد {#benefits-of-dapp-development} -- **زیرو ڈاؤن ٹائم** – ایک بار جب اسمارٹ کنٹریکٹ بلاک چین پر تعینات ہو جاتا ہے، تو نیٹ ورک بحیثیت مجموعی ہمیشہ ان کلائنٹس کی خدمت کرنے کے قابل ہوگا جو کنٹریکٹ کے ساتھ تعامل کرنا چاہتے ہیں۔ لہذا، بدنیتی پر مبنی اداکار انفرادی dapps کو نشانہ بناتے ہوئے سروس سے انکار (denial-of-service) حملے شروع نہیں کر سکتے ہیں۔ -- **رازداری** – آپ کو ایک dapp کو تعینات کرنے یا اس کے ساتھ تعامل کرنے کے لیے حقیقی دنیا کی شناخت فراہم کرنے کی ضرورت نہیں ہے۔ -- **سنسرشپ کے خلاف مزاحمت** – نیٹ ورک پر کوئی بھی واحد ادارہ صارفین کو ٹرانزیکشنز جمع کرنے، dapps تعینات کرنے، یا بلاک چین سے ڈیٹا پڑھنے سے نہیں روک سکتا۔ -- **ڈیٹا کی مکمل سالمیت** – بلاک چین پر ذخیرہ شدہ ڈیٹا کرپٹوگرافک پریمیٹیوز کی بدولت ناقابل تغیر اور ناقابل تردید ہے۔ بدنیتی پر مبنی اداکار ان ٹرانزیکشنز یا دیگر ڈیٹا کو جعلی نہیں بنا سکتے جو پہلے ہی عوامی کر دیا گیا ہو۔ -- **بے اعتماد شمار/قابل تصدیق رویہ** – اسمارٹ کنٹریکٹس کا تجزیہ کیا جا سکتا ہے اور ان کی پیش قیاسی طریقوں سے عمل درآمد کی ضمانت دی جاتی ہے، بغیر کسی مرکزی اتھارٹی پر بھروسہ کرنے کی ضرورت کے۔ روایتی ماڈلز میں یہ سچ نہیں ہے؛ مثال کے طور پر، جب ہم آن لائن بینکنگ سسٹم استعمال کرتے ہیں، تو ہمیں یہ بھروسہ کرنا پڑتا ہے کہ مالیاتی ادارے ہمارے مالیاتی ڈیٹا کا غلط استعمال نہیں کریں گے، ریکارڈز میں چھیڑ چھاڑ نہیں کریں گے، یا ہیک نہیں ہوں گے۔ +- **زیرو ڈاؤن ٹائم (Zero downtime)** – ایک بار جب اسمارٹ کانٹریکٹ بلاک چین پر ڈیپلائے ہو جاتا ہے، تو پورا نیٹ ورک ہمیشہ ان کلائنٹس کو سروس فراہم کرنے کے قابل ہو گا جو کانٹریکٹ کے ساتھ تعامل کرنا چاہتے ہیں۔ لہذا، بدنیتی پر مبنی عناصر انفرادی ڈی ایپس کو نشانہ بناتے ہوئے ڈینائل آف سروس (denial-of-service) حملے نہیں کر سکتے۔ +- **پرائیویسی (Privacy)** – آپ کو کسی ڈی ایپ کو ڈیپلائے کرنے یا اس کے ساتھ تعامل کرنے کے لیے حقیقی دنیا کی شناخت فراہم کرنے کی ضرورت نہیں ہے۔ +- **سنسرشپ کے خلاف مزاحمت (Resistance to censorship)** – نیٹ ورک پر کوئی بھی واحد ادارہ صارفین کو ٹرانزیکشنز جمع کرانے، ڈی ایپس ڈیپلائے کرنے، یا بلاک چین سے ڈیٹا پڑھنے سے نہیں روک سکتا۔ +- **ڈیٹا کی مکمل انٹیگریٹی (Complete data integrity)** – بلاک چین پر اسٹور کیا گیا ڈیٹا کرپٹوگرافک پریمیٹوز (cryptographic primitives) کی بدولت ناقابل تغیر اور ناقابل تردید ہے۔ بدنیتی پر مبنی عناصر ان ٹرانزیکشنز یا دیگر ڈیٹا میں جعل سازی نہیں کر سکتے جو پہلے ہی پبلک ہو چکا ہو۔ +- **ٹرسٹ لیس کمپیوٹیشن/قابل تصدیق رویہ (Trustless computation/verifiable behavior)** – اسمارٹ کانٹریکٹس کا تجزیہ کیا جا سکتا ہے اور اس بات کی ضمانت دی جاتی ہے کہ وہ کسی مرکزی اتھارٹی پر بھروسہ کیے بغیر، متوقع طریقوں سے ایگزیکیوٹ ہوں گے۔ روایتی ماڈلز میں ایسا نہیں ہوتا؛ مثال کے طور پر، جب ہم آن لائن بینکنگ سسٹم استعمال کرتے ہیں، تو ہمیں یہ بھروسہ کرنا پڑتا ہے کہ مالیاتی ادارے ہمارے مالیاتی ڈیٹا کا غلط استعمال نہیں کریں گے، ریکارڈز میں چھیڑ چھاڑ نہیں کریں گے، یا ہیک نہیں ہوں گے۔ -## dapp ڈیولپمنٹ کے نقصانات {#drawbacks-of-dapp-development} +## ڈی ایپ ڈیولپمنٹ کے نقصانات {#drawbacks-of-dapp-development} -- **دیکھ بھال** – Dapps کی دیکھ بھال کرنا مشکل ہو سکتا ہے کیونکہ بلاک چین پر شائع کردہ کوڈ اور ڈیٹا میں ترمیم کرنا مشکل ہوتا ہے۔ ڈیولپرز کے لیے ایک بار تعینات ہونے کے بعد اپنی dapps (یا ایک dapp کے ذریعے ذخیرہ کردہ بنیادی ڈیٹا) میں اپ ڈیٹس کرنا مشکل ہوتا ہے، چاہے پرانے ورژن میں بگز یا سیکیورٹی خطرات کی نشاندہی ہی کیوں نہ کی گئی ہو۔ -- **کارکردگی کا اوورہیڈ** – کارکردگی کا ایک بہت بڑا اوورہیڈ ہے، اور اسکیلنگ واقعی مشکل ہے۔ سیکیورٹی، سالمیت، شفافیت، اور بھروسے کی وہ سطح حاصل کرنے کے لیے جس کی Ethereum خواہش کرتا ہے، ہر نوڈ ہر ٹرانزیکشن کو چلاتا اور ذخیرہ کرتا ہے۔ اس کے علاوہ، پروف-آف-اسٹیک اتفاق رائے میں بھی وقت لگتا ہے۔ -- **نیٹ ورک کی بھیڑ** – جب ایک dapp بہت زیادہ حسابی وسائل استعمال کرتی ہے، تو پورا نیٹ ورک بیک اپ ہو جاتا ہے۔ فی الحال، نیٹ ورک فی سیکنڈ صرف 10-15 ٹرانزیکشنز پر کارروائی کر سکتا ہے؛ اگر ٹرانزیکشنز اس سے زیادہ تیزی سے بھیجی جا رہی ہیں، تو غیر تصدیق شدہ ٹرانزیکشنز کا پول تیزی سے بڑھ سکتا ہے۔ -- **صارف کا تجربہ** – صارف دوست تجربات کو انجینئر کرنا زیادہ مشکل ہو سکتا ہے کیونکہ اوسط آخری صارف کو بلاک چین کے ساتھ واقعی محفوظ طریقے سے تعامل کرنے کے لیے ضروری ٹول اسٹیک قائم کرنا بہت مشکل لگ سکتا ہے۔ -- **مرکزیت** – صارف دوست اور ڈیولپر دوست حل جو Ethereum کی بنیادی تہہ کے اوپر بنائے گئے ہیں وہ بالآخر مرکزی خدمات کی طرح ہی نظر آ سکتے ہیں۔ مثال کے طور پر، ایسی خدمات سرور سائیڈ پر کیز یا دیگر حساس معلومات کو ذخیرہ کر سکتی ہیں، ایک مرکزی سرور کا استعمال کرتے ہوئے ایک فرنٹ اینڈ پیش کر سکتی ہیں، یا بلاک چین پر لکھنے سے پہلے ایک مرکزی سرور پر اہم کاروباری منطق چلا سکتی ہیں۔ مرکزیت بلاک چین کے روایتی ماڈل پر حاصل بہت سے (اگر تمام نہیں تو) فوائد کو ختم کر دیتی ہے۔ +- **مینٹیننس (Maintenance)** – ڈی ایپس کو مینٹین کرنا مشکل ہو سکتا ہے کیونکہ بلاک چین پر پبلش کیے گئے کوڈ اور ڈیٹا میں ترمیم کرنا مشکل ہوتا ہے۔ ڈیولپرز کے لیے اپنی ڈی ایپس (یا ڈی ایپ کے ذریعے اسٹور کیے گئے بنیادی ڈیٹا) میں اپ ڈیٹس کرنا مشکل ہوتا ہے جب وہ ایک بار ڈیپلائے ہو جائیں، یہاں تک کہ اگر پرانے ورژن میں بگز یا سیکیورٹی خطرات کی نشاندہی ہو جائے۔ +- **پرفارمنس اوور ہیڈ (Performance overhead)** – اس میں پرفارمنس کا بہت بڑا اوور ہیڈ ہوتا ہے، اور اسکیلنگ (scaling) واقعی مشکل ہے۔ سیکیورٹی، انٹیگریٹی، شفافیت، اور قابل اعتمادی کی اس سطح کو حاصل کرنے کے لیے جس کی ایتھیریم خواہش رکھتا ہے، ہر نوڈ ہر ٹرانزیکشن کو چلاتا اور اسٹور کرتا ہے۔ اس کے علاوہ، پروف آف اسٹیک (proof-of-stake) کنسینسس میں بھی وقت لگتا ہے۔ +- **نیٹ ورک کنجیشن (Network congestion)** – جب ایک ڈی ایپ بہت زیادہ کمپیوٹیشنل وسائل استعمال کرتی ہے، تو پورا نیٹ ورک سست ہو جاتا ہے۔ فی الحال، نیٹ ورک فی سیکنڈ صرف 10-15 ٹرانزیکشنز پروسیس کر سکتا ہے؛ اگر ٹرانزیکشنز اس سے زیادہ تیزی سے بھیجی جا رہی ہیں، تو غیر تصدیق شدہ ٹرانزیکشنز کا پول تیزی سے بڑھ سکتا ہے۔ +- **یوزر ایکسپیرینس (User experience)** – یوزر فرینڈلی تجربات کو انجینئر کرنا مشکل ہو سکتا ہے کیونکہ اوسط اینڈ یوزر کے لیے بلاک چین کے ساتھ واقعی محفوظ طریقے سے تعامل کرنے کے لیے ضروری ٹول اسٹیک سیٹ اپ کرنا بہت مشکل ہو سکتا ہے۔ +- **سینٹرلائزیشن (Centralization)** – ایتھیریم کی بیس لیئر کے اوپر بنائے گئے یوزر فرینڈلی اور ڈیولپر فرینڈلی سلوشنز بالآخر سینٹرلائزڈ سروسز کی طرح ہی لگ سکتے ہیں۔ مثال کے طور پر، ایسی سروسز کیز (keys) یا دیگر حساس معلومات کو سرور سائیڈ پر اسٹور کر سکتی ہیں، سینٹرلائزڈ سرور کا استعمال کرتے ہوئے فرنٹ اینڈ پیش کر سکتی ہیں، یا بلاک چین پر لکھنے سے پہلے کسی سینٹرلائزڈ سرور پر اہم بزنس لاجک چلا سکتی ہیں۔ سینٹرلائزیشن روایتی ماڈل کے مقابلے میں بلاک چین کے بہت سے (اگر تمام نہیں تو) فوائد کو ختم کر دیتی ہے۔ -## کیا آپ زیادہ بصری سیکھنے والے ہیں؟ {#visual-learner} +## کیا آپ بصری طور پر بہتر سیکھتے ہیں؟ {#visual-learner} -## dapps بنانے کے لیے ٹولز {#dapp-tools} +## ڈی ایپس بنانے کے ٹولز {#dapp-tools} -**Scaffold-ETH _- ایک ایسے فرنٹ اینڈ کا استعمال کرتے ہوئے Solidity کے ساتھ تیزی سے تجربہ کریں جو آپ کے اسمارٹ کنٹریکٹ کے مطابق ہو۔_** +**Scaffold-ETH _- ایک ایسے فرنٹ اینڈ کا استعمال کرتے ہوئے Solidity کے ساتھ تیزی سے تجربہ کریں جو آپ کے اسمارٹ کانٹریکٹ کے مطابق ڈھل جاتا ہے۔_** - [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) -- [مثالی dapp](https://punkwallet.io/) +- [مثالی ڈی ایپ](https://punkwallet.io/) -**Create Eth App _- ایک کمانڈ سے Ethereum سے چلنے والی ایپس بنائیں۔_** +**Create Eth App _- ایک کمانڈ کے ساتھ ایتھیریم سے چلنے والی ایپس بنائیں۔_** - [GitHub](https://github.com/paulrberg/create-eth-app) -**One Click Dapp _- ایک [ABI](/glossary/#abi) سے dapp فرنٹ اینڈ بنانے کے لیے FOSS ٹول۔_** +**One Click Dapp _- ایک [ABI](/glossary/#abi) سے ڈی ایپ فرنٹ اینڈز بنانے کے لیے FOSS ٹول۔_** - [oneclickdapp.com](https://oneclickdapp.com) - [GitHub](https://github.com/oneclickdapp/oneclickdapp-v1) -**Etherflow _- Ethereum ڈیولپرز کے لیے اپنے نوڈ کو ٹیسٹ کرنے، اور براؤزر سے RPC کالز کمپوز اور ڈیبگ کرنے کے لیے FOSS ٹول۔_** +**Etherflow _- ایتھیریم ڈیولپرز کے لیے اپنے نوڈ کو ٹیسٹ کرنے، اور براؤزر سے RPC کالز کو کمپوز اور ڈیبگ کرنے کے لیے FOSS ٹول۔_** - [etherflow.quiknode.io](https://etherflow.quiknode.io/) - [GitHub](https://github.com/abunsen/etherflow) -**thirdweb _- ہر زبان میں SDKs، اسمارٹ کنٹریکٹس، ٹولز، اور web3 ڈیولپمنٹ کے لیے انفراسٹرکچر۔_** +**thirdweb _- ہر زبان میں SDKs، اسمارٹ کانٹریکٹس، ٹولز، اور web3 ڈیولپمنٹ کے لیے انفراسٹرکچر۔_** - [ہوم پیج](https://thirdweb.com/) -- [ڈاکومینٹیشن](https://portal.thirdweb.com/) +- [ڈاکیومنٹیشن](https://portal.thirdweb.com/) - [GitHub](https://github.com/thirdweb-dev/) -**Crossmint _- اسمارٹ کنٹریکٹس تعینات کرنے، کریڈٹ کارڈ اور کراس چین ادائیگیوں کو فعال کرنے، اور NFTs بنانے، تقسیم کرنے، بیچنے، ذخیرہ کرنے، اور ترمیم کرنے کے لیے APIs استعمال کرنے کے لیے انٹرپرائز-گریڈ web3 ڈیولپمنٹ پلیٹ فارم۔_** +**Crossmint _- اسمارٹ کانٹریکٹس ڈیپلائے کرنے، کریڈٹ کارڈ اور کراس چین پیمنٹس کو فعال کرنے، اور NFTs بنانے، تقسیم کرنے، فروخت کرنے، اسٹور کرنے اور ان میں ترمیم کرنے کے لیے APIs استعمال کرنے کے لیے انٹرپرائز گریڈ web3 ڈیولپمنٹ پلیٹ فارم۔_** - [crossmint.com](https://www.crossmint.com) -- [ڈاکومینٹیشن](https://docs.crossmint.com) +- [ڈاکیومنٹیشن](https://docs.crossmint.com) - [Discord](https://discord.com/invite/crossmint) -## مزید پڑھیں {#further-reading} +## مزید مطالعہ {#further-reading} -- [dapps کو دریافت کریں](/apps) -- [The Architecture of a Web 3.0 application](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ -- [وکندریقرت ایپلیکیشنز کے لیے 2021 کی گائیڈ](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ -- [وکندریقرت ایپس کیا ہیں؟](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ -- [مشہور dapps](https://www.alchemy.com/dapps) - _Alchemy_ +- [ڈی ایپس دریافت کریں](/apps) +- [ایک Web 3.0 ایپلیکیشن کا آرکیٹیکچر](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [ڈی سینٹرلائزڈ ایپلیکیشنز کے لیے 2021 کی گائیڈ](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ +- [ڈی سینٹرلائزڈ ایپس کیا ہیں؟](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ +- [مقبول ڈی ایپس](https://www.alchemy.com/dapps) - _Alchemy_ -_کسی کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_ +_کسی ایسے کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحے میں ترمیم کریں اور اسے شامل کریں!_ ## متعلقہ موضوعات {#related-topics} -- [Ethereum اسٹیک کا تعارف](/developers/docs/ethereum-stack/) +- [ایتھیریم اسٹیک کا تعارف](/developers/docs/ethereum-stack/) - [ڈیولپمنٹ فریم ورکس](/developers/docs/frameworks/) + +## ٹیوٹوریلز: ایتھیریم پر ایپس اور فرنٹ اینڈز بنائیں {#tutorials} + +- [Uniswap-v2 کانٹریکٹ واک تھرو](/developers/tutorials/uniswap-v2-annotated-code/) _– Uniswap v2 کور کانٹریکٹس کا ایک تفصیلی واک تھرو جو بتاتا ہے کہ AMM کیسے کام کرتا ہے۔_ +- [اپنے کانٹریکٹ کے لیے یوزر انٹرفیس بنانا](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) _– ایک جدید React + wagmi فرنٹ اینڈ کیسے بنائیں جو آپ کے اسمارٹ کانٹریکٹ سے جڑتا ہو۔_ +- [ابتدائی افراد کے لیے ہیلو ورلڈ اسمارٹ کانٹریکٹ – فل اسٹیک](/developers/tutorials/hello-world-smart-contract-fullstack/) _– اینڈ ٹو اینڈ ٹیوٹوریل: ایک سادہ اسمارٹ کانٹریکٹ لکھیں، ڈیپلائے کریں، اور اس کے لیے فرنٹ اینڈ بنائیں۔_ +- [web3 ایپس کے لیے سرور کمپوننٹس اور ایجنٹس](/developers/tutorials/server-components/) _– TypeScript سرور کمپوننٹس کیسے لکھیں جو بلاک چین ایونٹس کو سنتے ہیں اور ٹرانزیکشنز کے ساتھ جواب دیتے ہیں۔_ +- [ڈی سینٹرلائزڈ یوزر انٹرفیسز کے لیے IPFS](/developers/tutorials/ipfs-decentralized-ui/) _– سنسرشپ کے خلاف مزاحمت کے لیے اپنی ڈی ایپ کے فرنٹ اینڈ کو IPFS پر کیسے ہوسٹ کریں۔_ \ No newline at end of file diff --git a/public/content/translations/ur/developers/tutorials/secret-state/index.md b/public/content/translations/ur/developers/tutorials/secret-state/index.md index c5ba70e0f39..f3017d3eb00 100644 --- a/public/content/translations/ur/developers/tutorials/secret-state/index.md +++ b/public/content/translations/ur/developers/tutorials/secret-state/index.md @@ -1,49 +1,41 @@ --- -title: "خفیہ اسٹیٹ کے لیے زیرو نالج کا استعمال" -description: "آن چین گیمز محدود ہیں کیونکہ وہ کوئی پوشیدہ معلومات نہیں رکھ سکتے۔ اس ٹیوٹوریل کو پڑھنے کے بعد، ایک قاری زیرو نالج پروفز اور سرور کمپونینٹس کو ملا کر ایک خفیہ اسٹیٹ، آف چین، کمپونینٹ کے ساتھ قابل تصدیق گیمز بنا سکے گا۔ اس کو کرنے کی تکنیک کا مظاہرہ ایک مائن سویپر گیم بنا کر کیا جائے گا۔" -author: Ori Pomerantz -tags: - [ - "سرور", - "آف چین", - "مرکزی", - "زیرو-نالج", - "zokrates", - "mud" - ] +title: "خفیہ اسٹیٹ کے لیے زیرو-نالج کا استعمال" +description: "آن چین گیمز محدود ہیں کیونکہ وہ کوئی بھی پوشیدہ معلومات نہیں رکھ سکتیں۔ اس ٹیوٹوریل کو پڑھنے کے بعد، قاری زیرو-نالج پروفز اور سرور کے اجزاء کو ملا کر ایک خفیہ اسٹیٹ، آف چین، جزو کے ساتھ قابل تصدیق گیمز بنانے کے قابل ہو جائے گا۔ ایسا کرنے کی تکنیک کو مائن سویپر گیم بنا کر دکھایا جائے گا۔" +author: "اوری پومرانٹز" +tags: ["سرور", "آف چین", "مرکزی", "زیرو-نالج", "zokrates", "mud", "پرائیویسی"] skill: advanced -breadcrumb: "ZK خفیہ حالت" +breadcrumb: "ZK خفیہ اسٹیٹ" lang: ur published: 2025-03-15 --- -_بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر جو کچھ بھی پوسٹ کیا جاتا ہے وہ سب کے پڑھنے کے لیے کھلا ہے۔ یہ ضروری ہے، کیونکہ بلاک چین اس پر مبنی ہے کہ کوئی بھی اس کی تصدیق کر سکے۔ تاہم، گیمز اکثر خفیہ اسٹیٹ پر انحصار کرتے ہیں۔ مثال کے طور پر، [مائن سویپر](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) کے گیم کا کوئی مطلب نہیں بنتا اگر آپ صرف ایک بلاک چین ایکسپلورر پر جا کر نقشہ دیکھ سکتے ہیں۔ +_بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر پوسٹ کی گئی ہر چیز ہر کسی کے پڑھنے کے لیے کھلی ہوتی ہے۔ یہ ضروری ہے، کیونکہ بلاک چین کی بنیاد اس بات پر ہے کہ کوئی بھی اس کی تصدیق کر سکے۔ تاہم، گیمز اکثر خفیہ اسٹیٹ پر انحصار کرتی ہیں۔ مثال کے طور پر، [minesweeper]() گیم کا بالکل کوئی مطلب نہیں بنتا اگر آپ صرف بلاک چین ایکسپلورر پر جا کر نقشہ دیکھ سکیں۔ -سب سے آسان حل یہ ہے کہ خفیہ اسٹیٹ کو رکھنے کے لیے ایک [سرور کمپونینٹ](/developers/tutorials/server-components/) کا استعمال کیا جائے۔ تاہم، ہم بلاک چین کا استعمال اس لیے کرتے ہیں تاکہ گیم ڈیولپر کی طرف سے دھوکہ دہی کو روکا جا سکے۔ ہمیں سرور کمپونینٹ کی ایمانداری کو یقینی بنانے کی ضرورت ہے۔ سرور اسٹیٹ کا ایک ہیش فراہم کر سکتا ہے، اور [زیرو نالج پروفز](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) کا استعمال کر کے یہ ثابت کر سکتا ہے کہ ایک چال کے نتیجے کا حساب لگانے کے لیے استعمال کیا گیا اسٹیٹ صحیح ہے۔ +سب سے آسان حل یہ ہے کہ خفیہ اسٹیٹ کو رکھنے کے لیے ایک [سرور جزو](/developers/tutorials/server-components/) کا استعمال کیا جائے۔ تاہم، ہم بلاک چین کا استعمال اس لیے کرتے ہیں تاکہ گیم ڈیولپر کی طرف سے دھوکہ دہی کو روکا جا سکے۔ ہمیں سرور کے جزو کی ایمانداری کو یقینی بنانے کی ضرورت ہے۔ سرور اسٹیٹ کا ہیش فراہم کر سکتا ہے، اور [زیرو-نالج پروفز](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) کا استعمال کر کے یہ ثابت کر سکتا ہے کہ کسی اقدام کے نتیجے کا حساب لگانے کے لیے استعمال ہونے والی اسٹیٹ درست ہے۔ -اس مضمون کو پڑھنے کے بعد آپ جان جائیں گے کہ اس قسم کا خفیہ اسٹیٹ رکھنے والا سرور، اسٹیٹ دکھانے کے لیے ایک کلائنٹ، اور دونوں کے درمیان مواصلات کے لیے ایک آن چین کمپونینٹ کیسے بنایا جائے۔ ہم جو اہم ٹولز استعمال کریں گے وہ یہ ہیں: +اس مضمون کو پڑھنے کے بعد آپ جان جائیں گے کہ اس قسم کا خفیہ اسٹیٹ رکھنے والا سرور، اسٹیٹ دکھانے کے لیے ایک کلائنٹ، اور ان دونوں کے درمیان رابطے کے لیے ایک آن چین جزو کیسے بنایا جائے۔ ہم جو اہم ٹولز استعمال کریں گے وہ یہ ہوں گے: -| ٹول | مقصد | ورژن پر تصدیق شدہ | -| --------------------------------------------- | ------------------------------------------- | --------------------------------------: | -| [Zokrates](https://zokrates.github.io/) | زیرو نالج پروفز اور ان کی تصدیق | 1.1.9 | -| [Typescript](https://www.typescriptlang.org/) | سرور اور کلائنٹ دونوں کے لیے پروگرامنگ زبان | 5.4.2 | -| [Node](https://nodejs.org/en) | سرور چلانا | 20.18.2 | -| [Viem](https://viem.sh/) | بلاک چین کے ساتھ مواصلات | 2.9.20 | -| [MUD](https://mud.dev/) | آن چین ڈیٹا مینجمنٹ | 2.0.12 | -| [React](https://react.dev/) | کلائنٹ یوزر انٹرفیس | 18.2.0 | -| [Vite](https://vitejs.dev/) | کلائنٹ کوڈ کی سرونگ | 4.2.1 | +| ٹول | مقصد | تصدیق شدہ ورژن | +| --------------------------------------------- | ------------------------------------------------------- | ------------------: | +| [Zokrates](https://zokrates.github.io/) | زیرو-نالج پروفز اور ان کی تصدیق | 1.1.9 | +| [Typescript](https://www.typescriptlang.org/) | سرور اور کلائنٹ دونوں کے لیے پروگرامنگ زبان | 5.4.2 | +| [Node](https://nodejs.org/en) | سرور چلانا | 20.18.2 | +| [Viem](https://viem.sh/) | بلاک چین کے ساتھ رابطہ | 2.9.20 | +| [MUD](https://mud.dev/) | آن چین ڈیٹا مینجمنٹ | 2.0.12 | +| [React](https://react.dev/) | کلائنٹ یوزر انٹرفیس | 18.2.0 | +| [Vite](https://vitejs.dev/) | کلائنٹ کوڈ پیش کرنا | 4.2.1 | ## مائن سویپر کی مثال {#minesweeper} -[مائن سویپر](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) ایک ایسا گیم ہے جس میں ایک مائن فیلڈ کے ساتھ ایک خفیہ نقشہ شامل ہے۔ کھلاڑی ایک مخصوص مقام پر کھودنے کا انتخاب کرتا ہے۔ اگر اس مقام پر کوئی مائن ہے، تو گیم ختم ہو جاتا ہے۔ ورنہ، کھلاڑی کو اس مقام کے آس پاس کے آٹھ چوکوروں میں مائنز کی تعداد ملتی ہے۔ +[Minesweeper]() ایک ایسی گیم ہے جس میں مائن فیلڈ کے ساتھ ایک خفیہ نقشہ شامل ہوتا ہے۔ کھلاڑی کسی مخصوص جگہ پر کھدائی کرنے کا انتخاب کرتا ہے۔ اگر اس جگہ پر کوئی مائن (بارودی سرنگ) ہو، تو گیم ختم ہو جاتی ہے۔ بصورت دیگر، کھلاڑی کو اس جگہ کے ارد گرد آٹھ چوکور خانوں میں موجود مائنز کی تعداد مل جاتی ہے۔ -یہ ایپلیکیشن [MUD](https://mud.dev/) کا استعمال کرتے ہوئے لکھی گئی ہے، جو ایک ایسا فریم ورک ہے جو ہمیں [کی-ویلیو ڈیٹا بیس](https://aws.amazon.com/nosql/key-value/) کا استعمال کرتے ہوئے آن چین ڈیٹا اسٹور کرنے اور اس ڈیٹا کو خود بخود آف چین کمپونینٹس کے ساتھ سنکرونائز کرنے کی اجازت دیتا ہے۔ سنکرونائزیشن کے علاوہ، MUD رسائی کنٹرول فراہم کرنا آسان بناتا ہے، اور دوسرے صارفین کے لیے ہماری ایپلیکیشن کو بغیر اجازت کے [توسیع](https://mud.dev/guides/extending-a-world) دینا بھی آسان بناتا ہے۔ +یہ ایپلیکیشن [MUD](https://mud.dev/) کا استعمال کرتے ہوئے لکھی گئی ہے، جو ایک ایسا فریم ورک ہے جو ہمیں [کی-ویلیو ڈیٹا بیس](https://aws.amazon.com/nosql/key-value/) کا استعمال کرتے ہوئے آن چین ڈیٹا اسٹور کرنے اور اس ڈیٹا کو آف چین اجزاء کے ساتھ خود بخود ہم آہنگ کرنے کی سہولت دیتا ہے۔ ہم آہنگی کے علاوہ، MUD رسائی کنٹرول فراہم کرنا آسان بناتا ہے، اور دوسرے صارفین کے لیے ہماری ایپلیکیشن کو بغیر اجازت کے [توسیع](https://mud.dev/guides/extending-a-world) دینا آسان بناتا ہے۔ ### مائن سویپر کی مثال چلانا {#running-minesweeper-example} مائن سویپر کی مثال چلانے کے لیے: -1. یقینی بنائیں کہ آپ نے [پیشگی شرائط انسٹال کر لی ہیں](https://mud.dev/quickstart#prerequisites): [Node](https://mud.dev/quickstart#prerequisites), [Foundry](https://book.getfoundry.sh/getting-started/installation), [`git`](https://git-scm.com/downloads), [`pnpm`](https://git-scm.com/downloads), اور [`mprocs`](https://github.com/pvolok/mprocs)۔ +1. یقینی بنائیں کہ آپ نے [ضروریات انسٹال کر لی ہیں](https://mud.dev/quickstart#prerequisites): [Node](https://mud.dev/quickstart#prerequisites)، [Foundry](https://book.getfoundry.sh/getting-started/installation)، [`git`](https://git-scm.com/downloads)، [`pnpm`](https://git-scm.com/downloads)، اور [`mprocs`](https://github.com/pvolok/mprocs)۔ 2. ریپوزٹری کو کلون کریں۔ @@ -59,9 +51,9 @@ _بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر npm install -g mprocs ``` - اگر `pnpm install` کے حصے کے طور پر Foundry انسٹال کیا گیا تھا، تو آپ کو کمانڈ لائن شیل کو دوبارہ شروع کرنے کی ضرورت ہے۔ + اگر Foundry کو `pnpm install` کے حصے کے طور پر انسٹال کیا گیا تھا، تو آپ کو کمانڈ لائن شیل کو دوبارہ شروع کرنے کی ضرورت ہے۔ -4. کنٹریکٹس کو کمپائل کریں +4. کنٹریکٹس کو مرتب (کمپائل) کریں ```sh copy cd packages/contracts @@ -69,19 +61,20 @@ _بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر cd ../.. ``` + 5. پروگرام شروع کریں (بشمول ایک [anvil](https://book.getfoundry.sh/anvil/) بلاک چین) اور انتظار کریں۔ ```sh copy mprocs ``` - نوٹ کریں کہ اسٹارٹ اپ میں کافی وقت لگتا ہے۔ پیشرفت دیکھنے کے لیے، پہلے نیچے کے تیر کا استعمال کرتے ہوئے _کنٹریکٹس_ ٹیب پر اسکرول کریں تاکہ MUD کنٹریکٹس کو ڈیپلائے ہوتے دیکھیں۔ جب آپ کو _فائل کی تبدیلیوں کا انتظار ہے…_ کا پیغام ملے، تو کنٹریکٹس ڈیپلائے ہو چکے ہیں اور مزید پیشرفت _سرور_ ٹیب میں ہوگی۔ وہاں، آپ اس وقت تک انتظار کریں جب تک آپ کو _ویریفائر ایڈریس: 0x...._ کا پیغام نہ مل جائے۔ + نوٹ کریں کہ اسٹارٹ اپ میں کافی وقت لگتا ہے۔ پیش رفت دیکھنے کے لیے، پہلے نیچے والے تیر کا استعمال کرتے ہوئے _contracts_ ٹیب پر اسکرول کریں تاکہ MUD کنٹریکٹس کو تعینات ہوتے ہوئے دیکھ سکیں۔ جب آپ کو _Waiting for file changes…_ کا پیغام ملے، تو کنٹریکٹس تعینات ہو چکے ہیں اور مزید پیش رفت _server_ ٹیب میں ہوگی۔ وہاں، آپ اس وقت تک انتظار کریں جب تک کہ آپ کو _Verifier address: 0x...._ کا پیغام نہ مل جائے۔ - اگر یہ مرحلہ کامیاب ہو جاتا ہے، تو آپ کو `mprocs` اسکرین نظر آئے گی، جس میں بائیں طرف مختلف پروسیسز اور دائیں طرف فی الحال منتخب کردہ پروسیس کے لیے کنسول آؤٹ پٹ ہوگا۔ + اگر یہ مرحلہ کامیاب ہو جاتا ہے، تو آپ کو `mprocs` اسکرین نظر آئے گی، جس کے بائیں جانب مختلف پروسیسز اور دائیں جانب فی الحال منتخب کردہ پروسیس کا کنسول آؤٹ پٹ ہوگا۔ - ![mprocs اسکرین](./mprocs.png) + ![The mprocs screen](./mprocs.png) - اگر `mprocs` کے ساتھ کوئی مسئلہ ہے، تو آپ چاروں پروسیسز کو دستی طور پر چلا سکتے ہیں، ہر ایک کو اپنی کمانڈ لائن ونڈو میں: + اگر `mprocs` کے ساتھ کوئی مسئلہ ہے، تو آپ چاروں پروسیسز کو دستی طور پر چلا سکتے ہیں، ہر ایک کو اس کی اپنی کمانڈ لائن ونڈو میں: - **Anvil** @@ -90,7 +83,7 @@ _بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر anvil --base-fee 0 --block-time 2 ``` - - **کنٹریکٹس** + - **کنٹریکٹس** ```sh cd packages/contracts @@ -102,175 +95,174 @@ _بلاک چین پر کوئی راز نہیں ہوتے_۔ بلاک چین پر ```sh cd packages/server pnpm start - ``` + ``` - **کلائنٹ** ```sh cd packages/client pnpm run dev - ``` + ``` -6. اب آپ [کلائنٹ](http://localhost:3000) پر براؤز کر سکتے ہیں، **نیا گیم** پر کلک کریں، اور کھیلنا شروع کر سکتے ہیں۔ +6. اب آپ [کلائنٹ](http://localhost:3000) پر براؤز کر سکتے ہیں، **New Game** پر کلک کریں، اور کھیلنا شروع کریں۔ ### ٹیبلز {#tables} ہمیں آن چین [کئی ٹیبلز](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts) کی ضرورت ہے۔ -- `Configuration`: یہ ٹیبل ایک سنگلٹن ہے، اس میں کوئی کلید نہیں ہے اور ایک ہی ریکارڈ ہے۔ اس کا استعمال گیم کی کنفیگریشن کی معلومات کو رکھنے کے لیے کیا جاتا ہے: - - `height`: ایک مائن فیلڈ کی اونچائی - - `width`: ایک مائن فیلڈ کی چوڑائی +- `Configuration`: یہ ٹیبل ایک سنگلٹن ہے، اس کی کوئی کلید نہیں ہے اور اس میں ایک ہی ریکارڈ ہے۔ یہ گیم کنفیگریشن کی معلومات رکھنے کے لیے استعمال ہوتا ہے: + - `height`: مائن فیلڈ کی اونچائی + - `width`: مائن فیلڈ کی چوڑائی - `numberOfBombs`: ہر مائن فیلڈ میں بموں کی تعداد - -- `VerifierAddress`: یہ ٹیبل بھی ایک سنگلٹن ہے۔ اس کا استعمال کنفیگریشن کے ایک حصے کو رکھنے کے لیے کیا جاتا ہے، یعنی ویریفائر کنٹریکٹ (`verifier`) کا ایڈریس۔ ہم اس معلومات کو `Configuration` ٹیبل میں رکھ سکتے تھے، لیکن یہ ایک مختلف کمپونینٹ، یعنی سرور کے ذریعہ سیٹ کیا جاتا ہے، لہذا اسے ایک الگ ٹیبل میں رکھنا آسان ہے۔ +- `VerifierAddress`: یہ ٹیبل بھی ایک سنگلٹن ہے۔ یہ کنفیگریشن کا ایک حصہ، تصدیق کنندہ کنٹریکٹ (`verifier`) کا ایڈریس رکھنے کے لیے استعمال ہوتا ہے۔ ہم یہ معلومات `Configuration` ٹیبل میں رکھ سکتے تھے، لیکن یہ ایک مختلف جزو، سرور کے ذریعے سیٹ کی جاتی ہے، اس لیے اسے الگ ٹیبل میں رکھنا آسان ہے۔ - `PlayerGame`: کلید کھلاڑی کا ایڈریس ہے۔ ڈیٹا یہ ہے: - - `gameId`: 32 بائٹ کی ویلیو جو اس نقشے کا ہیش ہے جس پر کھلاڑی کھیل رہا ہے (گیم شناخت کنندہ)۔ - - `win`: ایک بولین جو یہ بتاتا ہے کہ آیا کھلاڑی نے گیم جیت لیا ہے۔ - - `lose`: ایک بولین جو یہ بتاتا ہے کہ آیا کھلاڑی نے گیم ہار دیا ہے۔ + - `gameId`: 32-بائٹ ویلیو جو اس نقشے کا ہیش ہے جس پر کھلاڑی کھیل رہا ہے (گیم شناخت کنندہ)۔ + - `win`: ایک بولین جو بتاتا ہے کہ آیا کھلاڑی نے گیم جیت لی ہے۔ + - `lose`: ایک بولین جو بتاتا ہے کہ آیا کھلاڑی گیم ہار گیا ہے۔ - `digNumber`: گیم میں کامیاب کھدائیوں کی تعداد۔ -- `GamePlayer`: یہ ٹیبل الٹی میپنگ رکھتا ہے، `gameId` سے کھلاڑی کے ایڈریس تک۔ +- `GamePlayer`: یہ ٹیبل ریورس میپنگ رکھتا ہے، `gameId` سے کھلاڑی کے ایڈریس تک۔ -- `Map`: کلید تین ویلیوز کا ایک ٹوپل ہے: +- `Map`: کلید تین اقدار کا ایک ٹپل ہے: - - `gameId`: 32 بائٹ کی ویلیو جو اس نقشے کا ہیش ہے جس پر کھلاڑی کھیل رہا ہے (گیم شناخت کنندہ)۔ + - `gameId`: 32-بائٹ ویلیو جو اس نقشے کا ہیش ہے جس پر کھلاڑی کھیل رہا ہے (گیم شناخت کنندہ)۔ - `x` کوآرڈینیٹ - `y` کوآرڈینیٹ - ویلیو ایک واحد نمبر ہے۔ اگر بم کا پتہ چلا تو یہ 255 ہے۔ ورنہ، یہ اس مقام کے ارد گرد بموں کی تعداد جمع ایک ہے۔ ہم صرف بموں کی تعداد کا استعمال نہیں کر سکتے، کیونکہ ڈیفالٹ طور پر EVM میں تمام اسٹوریج اور MUD میں تمام قطار کی ویلیوز صفر ہوتی ہیں۔ ہمیں "کھلاڑی نے ابھی تک یہاں کھدائی نہیں کی ہے" اور "کھلاڑی نے یہاں کھدائی کی، اور پایا کہ ارد گرد صفر بم ہیں" کے درمیان فرق کرنے کی ضرورت ہے۔ + ویلیو ایک واحد نمبر ہے۔ اگر بم کا پتہ چل جائے تو یہ 255 ہے۔ بصورت دیگر، یہ اس جگہ کے ارد گرد بموں کی تعداد جمع ایک ہے۔ ہم صرف بموں کی تعداد استعمال نہیں کر سکتے، کیونکہ پہلے سے طے شدہ طور پر EVM میں تمام اسٹوریج اور MUD میں تمام قطاروں کی اقدار صفر ہوتی ہیں۔ ہمیں "کھلاڑی نے ابھی تک یہاں کھدائی نہیں کی ہے" اور "کھلاڑی نے یہاں کھدائی کی، اور پایا کہ ارد گرد صفر بم ہیں" کے درمیان فرق کرنے کی ضرورت ہے۔ -اس کے علاوہ، کلائنٹ اور سرور کے درمیان مواصلات آن چین کمپونینٹ کے ذریعے ہوتی ہے۔ یہ بھی ٹیبلز کا استعمال کرتے ہوئے نافذ کیا گیا ہے۔ +اس کے علاوہ، کلائنٹ اور سرور کے درمیان رابطہ آن چین جزو کے ذریعے ہوتا ہے۔ اسے بھی ٹیبلز کا استعمال کرتے ہوئے لاگو کیا گیا ہے۔ -- `PendingGame`: نیا گیم شروع کرنے کے لیے غیر خدمتی درخواستیں۔ -- `PendingDig`: ایک مخصوص گیم میں ایک مخصوص جگہ پر کھودنے کے لیے غیر خدمتی درخواستیں۔ یہ ایک [آف چین ٹیبل](https://mud.dev/store/tables#types-of-tables) ہے، جس کا مطلب ہے کہ یہ EVM اسٹوریج میں نہیں لکھا جاتا، یہ صرف ایونٹس کا استعمال کرتے ہوئے آف چین پڑھا جا سکتا ہے۔ +- `PendingGame`: نئی گیم شروع کرنے کی غیر حل شدہ درخواستیں۔ +- `PendingDig`: کسی مخصوص گیم میں مخصوص جگہ پر کھدائی کرنے کی غیر حل شدہ درخواستیں۔ یہ ایک [آف چین ٹیبل](https://mud.dev/store/tables#types-of-tables) ہے، جس کا مطلب ہے کہ یہ EVM اسٹوریج میں نہیں لکھی جاتی، یہ صرف ایونٹس کا استعمال کرتے ہوئے آف چین پڑھنے کے قابل ہے۔ ### ایگزیکیوشن اور ڈیٹا فلو {#execution-data-flows} -یہ فلو کلائنٹ، آن چین کمپونینٹ، اور سرور کے درمیان ایگزیکیوشن کو مربوط کرتے ہیں۔ +یہ فلوز کلائنٹ، آن چین جزو، اور سرور کے درمیان ایگزیکیوشن کو مربوط کرتے ہیں۔ -#### ابتدا {#initialization-flow} +#### ابتدا (Initialization) {#initialization-flow} جب آپ `mprocs` چلاتے ہیں، تو یہ اقدامات ہوتے ہیں: -1. [`mprocs`](https://github.com/pvolok/mprocs) چار کمپونینٹس چلاتا ہے: +1. [`mprocs`](https://github.com/pvolok/mprocs) چار اجزاء چلاتا ہے: - [Anvil](https://book.getfoundry.sh/anvil/)، جو ایک مقامی بلاک چین چلاتا ہے - - [کنٹریکٹس](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/contracts)، جو MUD کے لیے کنٹریکٹس کو کمپائل (اگر ضرورت ہو) اور ڈیپلائے کرتا ہے - - [کلائنٹ](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/client)، جو UI اور کلائنٹ کوڈ کو ویب براؤزرز پر سرو کرنے کے لیے [Vite](https://vitejs.dev/) چلاتا ہے۔ - - [سرور](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/server)، جو سرور کے اعمال انجام دیتا ہے + - [Contracts](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/contracts)، جو MUD کے لیے کنٹریکٹس کو مرتب (اگر ضرورت ہو) اور تعینات کرتا ہے + - [Client](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/client)، جو ویب براؤزرز کو UI اور کلائنٹ کوڈ پیش کرنے کے لیے [Vite](https://vitejs.dev/) چلاتا ہے۔ + - [Server](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/server)، جو سرور کے افعال انجام دیتا ہے -2. `contracts` پیکج MUD کنٹریکٹس کو ڈیپلائے کرتا ہے اور پھر [ `PostDeploy.s.sol` اسکرپٹ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol) چلاتا ہے۔ یہ اسکرپٹ کنفیگریشن سیٹ کرتا ہے۔ گٹ ہب سے کوڈ [ایک 10x5 مائن فیلڈ کی وضاحت کرتا ہے جس میں آٹھ مائنز ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol#L23)۔ +2. `contracts` پیکج MUD کنٹریکٹس کو تعینات کرتا ہے اور پھر [`PostDeploy.s.sol` اسکرپٹ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol) چلاتا ہے۔ یہ اسکرپٹ کنفیگریشن سیٹ کرتا ہے۔ گٹ ہب کا کوڈ [ایک 10x5 مائن فیلڈ کی وضاحت کرتا ہے جس میں آٹھ مائنز ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol#L23)۔ -3. [سرور](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts) [MUD کو سیٹ اپ کر کے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L6) شروع ہوتا ہے۔ دیگر چیزوں کے علاوہ، یہ ڈیٹا سنکرونائزیشن کو فعال کرتا ہے، تاکہ متعلقہ ٹیبلز کی ایک کاپی سرور کی میموری میں موجود ہو۔ +3. [سرور](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts) [MUD سیٹ اپ کرنے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L6) سے شروع ہوتا ہے۔ دیگر چیزوں کے علاوہ، یہ ڈیٹا کی ہم آہنگی کو فعال کرتا ہے، تاکہ متعلقہ ٹیبلز کی ایک کاپی سرور کی میموری میں موجود ہو۔ -4. سرور ایک فنکشن کو سبسکرائب کرتا ہے تاکہ [جب `Configuration` ٹیبل تبدیل ہو](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L23) تو اسے ایگزیکیوٹ کیا جائے۔ [یہ فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L24-L168) `PostDeploy.s.sol` کے ایگزیکیوٹ ہونے اور ٹیبل میں ترمیم کرنے کے بعد کال کیا جاتا ہے۔ +4. سرور ایک فنکشن کو سبسکرائب کرتا ہے جسے [جب `Configuration` ٹیبل تبدیل ہو](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L23) تو عمل میں لایا جائے۔ [یہ فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L24-L168) `PostDeploy.s.sol` کے چلنے اور ٹیبل میں ترمیم کرنے کے بعد کال کیا جاتا ہے۔ -5. جب سرور انیشیئلائزیشن فنکشن کے پاس کنفیگریشن ہوتی ہے، تو [یہ `zkFunctions` کو کال کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L34-L35) تاکہ [سرور کے زیرو نالج حصے](#using-zokrates-from-typescript) کو انیشیئلائز کیا جا سکے۔ یہ اس وقت تک نہیں ہو سکتا جب تک کہ ہمیں کنفیگریشن نہ مل جائے کیونکہ زیرو نالج فنکشنز کو مائن فیلڈ کی چوڑائی اور اونچائی کو مستقل کے طور پر رکھنا ہوتا ہے۔ +5. جب سرور انیشلائزیشن فنکشن کے پاس کنفیگریشن آ جاتی ہے، تو یہ [سرور کے زیرو-نالج حصے](#using-zokrates-from-typescript) کو شروع کرنے کے لیے [`zkFunctions` کو کال کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L34-L35)۔ یہ اس وقت تک نہیں ہو سکتا جب تک ہمیں کنفیگریشن نہ مل جائے کیونکہ زیرو-نالج فنکشنز میں مائن فیلڈ کی چوڑائی اور اونچائی کو مستقل (constants) کے طور پر رکھنا ہوتا ہے۔ -6. سرور کا زیرو نالج حصہ انیشیئلائز ہونے کے بعد، اگلا قدم [زیرو نالج ویریفیکیشن کنٹریکٹ کو بلاک چین پر ڈیپلائے کرنا](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L42-L53) اور MUD میں ویریفائی ایڈریس سیٹ کرنا ہے۔ +6. سرور کا زیرو-نالج حصہ شروع ہونے کے بعد، اگلا قدم [زیرو-نالج تصدیقی کنٹریکٹ کو بلاک چین پر تعینات کرنا](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L42-L53) اور MUD میں تصدیق کنندہ کا ایڈریس سیٹ کرنا ہے۔ -7. آخر میں، ہم اپ ڈیٹس کو سبسکرائب کرتے ہیں تاکہ ہم دیکھ سکیں کہ جب کوئی کھلاڑی یا تو [نیا گیم شروع کرنے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) کی درخواست کرتا ہے یا [موجودہ گیم میں کھدائی کرنے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73-L108) کی درخواست کرتا ہے۔ +7. آخر میں، ہم اپ ڈیٹس کو سبسکرائب کرتے ہیں تاکہ ہم دیکھ سکیں کہ کب کوئی کھلاڑی [نئی گیم شروع کرنے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) یا [موجودہ گیم میں کھدائی کرنے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73-L108) کی درخواست کرتا ہے۔ -#### نیا گیم {#new-game-flow} +#### نئی گیم {#new-game-flow} -جب کھلاڑی نیا گیم کی درخواست کرتا ہے تو یہ ہوتا ہے۔ +جب کھلاڑی نئی گیم کی درخواست کرتا ہے تو یہ ہوتا ہے۔ -1. اگر اس کھلاڑی کے لیے کوئی گیم جاری نہیں ہے، یا ایک ہے لیکن اس کا گیم آئی ڈی صفر ہے، تو کلائنٹ ایک [نیا گیم بٹن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175) دکھاتا ہے۔ جب صارف اس بٹن کو دباتا ہے، تو [React `newGame` فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L96) چلاتا ہے۔ +1. اگر اس کھلاڑی کے لیے کوئی گیم جاری نہیں ہے، یا کوئی گیم ہے لیکن اس کی gameId صفر ہے، تو کلائنٹ ایک [نئی گیم کا بٹن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175) دکھاتا ہے۔ جب صارف اس بٹن کو دباتا ہے، تو [React `newGame` فنکشن چلاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L96)۔ -2. [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L43-L46) ایک `System` کال ہے۔ MUD میں تمام کالز `World` کنٹریکٹ کے ذریعے روٹ کی جاتی ہیں، اور زیادہ تر معاملات میں آپ `__` کو کال کرتے ہیں۔ اس معاملے میں، کال `app__newGame` پر ہوتی ہے، جسے MUD پھر [`GameSystem` میں `newGame` پر](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L16-L22) روٹ کرتا ہے۔ +2. [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L43-L46) ایک `System` کال ہے۔ MUD میں تمام کالز `World` کنٹریکٹ کے ذریعے روٹ کی جاتی ہیں، اور زیادہ تر معاملات میں آپ `__` کو کال کرتے ہیں۔ اس صورت میں، کال `app__newGame` کو کی جاتی ہے، جسے MUD پھر [`GameSystem` میں `newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L16-L22) پر روٹ کر دیتا ہے۔ -3. آن چین فنکشن چیک کرتا ہے کہ کھلاڑی کا کوئی گیم جاری نہیں ہے، اور اگر نہیں ہے تو [درخواست کو `PendingGame` ٹیبل میں شامل کر دیتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L21)۔ +3. آن چین فنکشن چیک کرتا ہے کہ کھلاڑی کی کوئی گیم جاری تو نہیں ہے، اور اگر نہیں ہے تو [درخواست کو `PendingGame` ٹیبل میں شامل کر دیتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L21)۔ -4. سرور `PendingGame` میں تبدیلی کا پتہ لگاتا ہے اور [سبسکرائب شدہ فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) چلاتا ہے۔ یہ فنکشن [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L110-L114) کو کال کرتا ہے، جو بدلے میں [`createGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L116-L144) کو کال کرتا ہے۔ +4. سرور `PendingGame` میں تبدیلی کا پتہ لگاتا ہے اور [سبسکرائب شدہ فنکشن چلاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71)۔ یہ فنکشن [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L110-L114) کو کال کرتا ہے، جو بدلے میں [`createGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L116-L144) کو کال کرتا ہے۔ -5. سب سے پہلے `createGame` [مناسب تعداد میں مائنز کے ساتھ ایک بے ترتیب نقشہ بناتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L120-L135)۔ پھر، یہ [`makeMapBorders`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L147-L166) کو خالی بارڈرز کے ساتھ ایک نقشہ بنانے کے لیے کال کرتا ہے، جو Zokrates کے لیے ضروری ہے۔ آخر میں، `createGame` [`calculateMapHash`](#calculateMapHash) کو کال کرتا ہے، تاکہ نقشے کا ہیش حاصل کیا جا سکے، جسے گیم آئی ڈی کے طور پر استعمال کیا جاتا ہے۔ +5. `createGame` سب سے پہلا کام یہ کرتا ہے کہ [مناسب تعداد میں مائنز کے ساتھ ایک بے ترتیب نقشہ بناتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L120-L135)۔ پھر، یہ خالی بارڈرز کے ساتھ نقشہ بنانے کے لیے [`makeMapBorders`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L147-L166) کو کال کرتا ہے، جو Zokrates کے لیے ضروری ہے۔ آخر میں، `createGame` نقشے کا ہیش حاصل کرنے کے لیے [`calculateMapHash`](#calculateMapHash) کو کال کرتا ہے، جسے گیم ID کے طور پر استعمال کیا جاتا ہے۔ -6. `newGame` فنکشن نئے گیم کو `gamesInProgress` میں شامل کرتا ہے۔ +6. `newGame` فنکشن نئی گیم کو `gamesInProgress` میں شامل کرتا ہے۔ -7. سرور جو آخری کام کرتا ہے وہ [`app__newGameResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L38-L43) کو کال کرنا ہے، جو آن چین ہے۔ یہ فنکشن ایک مختلف `System` میں ہے، [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol)، تاکہ رسائی کنٹرول کو فعال کیا جا سکے۔ رسائی کنٹرول [MUD کنفیگریشن فائل](https://mud.dev/config) میں بیان کیا گیا ہے، [`mud.config.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts#L67-L72)۔ +7. سرور آخری کام یہ کرتا ہے کہ [`app__newGameResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L38-L43) کو کال کرتا ہے، جو آن چین ہے۔ یہ فنکشن رسائی کنٹرول کو فعال کرنے کے لیے ایک مختلف `System`، [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) میں ہے۔ رسائی کنٹرول کی وضاحت [MUD کنفیگریشن فائل](https://mud.dev/config)، [`mud.config.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts#L67-L72) میں کی گئی ہے۔ - رسائی کی فہرست صرف ایک ہی ایڈریس کو `System` کال کرنے کی اجازت دیتی ہے۔ یہ سرور فنکشنز تک رسائی کو ایک ہی ایڈریس تک محدود کرتا ہے، تاکہ کوئی بھی سرور کی نقالی نہ کر سکے۔ + رسائی کی فہرست صرف ایک ہی ایڈریس کو `System` کو کال کرنے کی اجازت دیتی ہے۔ یہ سرور کے فنکشنز تک رسائی کو ایک ہی ایڈریس تک محدود کر دیتا ہے، تاکہ کوئی بھی سرور کا روپ نہ دھار سکے۔ -8. آن چین کمپونینٹ متعلقہ ٹیبلز کو اپ ڈیٹ کرتا ہے: +8. آن چین جزو متعلقہ ٹیبلز کو اپ ڈیٹ کرتا ہے: - `PlayerGame` میں گیم بنائیں۔ - - `GamePlayer` میں الٹی میپنگ سیٹ کریں۔ - - `PendingGame` سے درخواست کو ہٹا دیں۔ + - `GamePlayer` میں ریورس میپنگ سیٹ کریں۔ + - `PendingGame` سے درخواست ہٹا دیں۔ -9. سرور `PendingGame` میں تبدیلی کی نشاندہی کرتا ہے، لیکن کچھ نہیں کرتا کیونکہ [`wantsGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L58-L60) غلط ہے۔ +9. سرور `PendingGame` میں تبدیلی کی نشاندہی کرتا ہے، لیکن کچھ نہیں کرتا کیونکہ [`wantsGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L58-L60) غلط (false) ہے۔ -10. کلائنٹ پر [`gameRecord`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L143-L148) کو کھلاڑی کے ایڈریس کے لیے `PlayerGame` انٹری پر سیٹ کیا جاتا ہے۔ جب `PlayerGame` تبدیل ہوتا ہے، تو `gameRecord` بھی تبدیل ہوتا ہے۔ +10. کلائنٹ پر [`gameRecord`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L143-L148) کو کھلاڑی کے ایڈریس کے لیے `PlayerGame` اندراج پر سیٹ کیا جاتا ہے۔ جب `PlayerGame` تبدیل ہوتا ہے، تو `gameRecord` بھی تبدیل ہو جاتا ہے۔ -11. اگر `gameRecord` میں کوئی ویلیو ہے، اور گیم جیتا یا ہارا نہیں گیا ہے، تو کلائنٹ [نقشہ دکھاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190)۔ +11. اگر `gameRecord` میں کوئی ویلیو ہے، اور گیم جیتی یا ہاری نہیں گئی ہے، تو کلائنٹ [نقشہ دکھاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190)۔ -#### کھدائی {#dig-flow} +#### کھدائی (Dig) {#dig-flow} -1. کھلاڑی [نقشے کے سیل کے بٹن پر کلک کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L188)، جو [`dig` فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L33-L36) کو کال کرتا ہے۔ یہ فنکشن [`dig` کو آن چین](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L24-L32) کال کرتا ہے۔ +1. کھلاڑی [نقشے کے سیل کے بٹن پر کلک کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L188)، جو [`dig` فنکشن](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L33-L36) کو کال کرتا ہے۔ یہ فنکشن [آن چین `dig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L24-L32) کو کال کرتا ہے۔ -2. آن چین کمپونینٹ [کئی سینیٹی چیکس انجام دیتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L25-L30)، اور اگر کامیاب ہو جاتا ہے تو کھدائی کی درخواست کو [`PendingDig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L31) میں شامل کر دیتا ہے۔ +2. آن چین جزو [کئی سینیٹی چیکس انجام دیتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L25-L30)، اور اگر کامیاب ہو جائے تو کھدائی کی درخواست کو [`PendingDig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L31) میں شامل کر دیتا ہے۔ -3. سرور [`PendingDig` میں تبدیلی کا پتہ لگاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73)۔ [اگر یہ درست ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L75-L84)، تو یہ [زیرو نالج کوڈ کو کال کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L86-L95) (نیچے بیان کیا گیا ہے) تاکہ نتیجہ اور اس کے درست ہونے کا ثبوت دونوں پیدا کیا جا سکے۔ +3. سرور [`PendingDig` میں تبدیلی کا پتہ لگاتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73)۔ [اگر یہ درست ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L75-L84)، تو یہ نتیجہ اور اس کے درست ہونے کا ثبوت دونوں تیار کرنے کے لیے [زیرو-نالج کوڈ کو کال کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L86-L95) (جس کی وضاحت نیچے کی گئی ہے)۔ 4. [سرور](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L97-L107) آن چین [`digResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L45-L64) کو کال کرتا ہے۔ -5. `digResponse` دو کام کرتا ہے۔ سب سے پہلے، یہ [زیرو نالج پروف](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L47-L61) کو چیک کرتا ہے۔ پھر، اگر پروف چیک ہو جاتا ہے، تو یہ [`processDigResult`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L67-L86) کو کال کرتا ہے تاکہ نتیجے کو دراصل پروسیس کیا جا سکے۔ +5. `digResponse` دو کام کرتا ہے۔ سب سے پہلے، یہ [زیرو نالج پروف](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L47-L61) چیک کرتا ہے۔ پھر، اگر ثبوت درست ثابت ہوتا ہے، تو یہ دراصل نتیجے پر کارروائی کرنے کے لیے [`processDigResult`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L67-L86) کو کال کرتا ہے۔ -6. `processDigResult` چیک کرتا ہے کہ آیا گیم [ہار](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L76-L78) گیا ہے یا [جیت](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L83-L86) لیا گیا ہے، اور [`Map`، یعنی آن چین نقشے کو اپ ڈیٹ کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L80)۔ +6. `processDigResult` چیک کرتا ہے کہ آیا گیم [ہاری](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L76-L78) یا [جیتی](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L83-L86) گئی ہے، اور [آن چین نقشہ، `Map` کو اپ ڈیٹ کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L80)۔ -7. کلائنٹ خود بخود اپ ڈیٹس اٹھاتا ہے اور [کھلاڑی کو دکھائے گئے نقشے کو اپ ڈیٹ کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190)، اور اگر قابل اطلاق ہو تو کھلاڑی کو بتاتا ہے کہ یہ جیت ہے یا ہار۔ +7. کلائنٹ خود بخود اپ ڈیٹس اٹھا لیتا ہے اور [کھلاڑی کو دکھائے گئے نقشے کو اپ ڈیٹ کرتا ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190)، اور اگر قابل اطلاق ہو تو کھلاڑی کو بتاتا ہے کہ یہ جیت ہے یا ہار۔ ## Zokrates کا استعمال {#using-zokrates} -اوپر بیان کیے گئے فلو میں ہم نے زیرو نالج حصوں کو نظر انداز کر دیا، انہیں ایک بلیک باکس کے طور پر سمجھا۔ اب آئیے اسے کھول کر دیکھتے ہیں کہ وہ کوڈ کیسے لکھا گیا ہے۔ +اوپر بیان کیے گئے فلوز میں ہم نے زیرو-نالج حصوں کو چھوڑ دیا تھا، انہیں ایک بلیک باکس کے طور پر سمجھتے ہوئے۔ اب آئیے اسے کھولتے ہیں اور دیکھتے ہیں کہ وہ کوڈ کیسے لکھا گیا ہے۔ ### نقشے کی ہیشنگ {#hashing-map} -ہم [یہ جاوا اسکرپٹ کوڈ](https://github.com/ZK-Plus/ICBC24_Tutorial_Compute-Offchain-Verify-onchain/tree/solutions/exercise) [Poseidon](https://www.poseidon-hash.info) کو نافذ کرنے کے لیے استعمال کر سکتے ہیں، جو ہمارا استعمال کردہ Zokrates ہیش فنکشن ہے۔ تاہم، جبکہ یہ تیز ہوگا، یہ صرف Zokrates ہیش فنکشن کا استعمال کرنے سے زیادہ پیچیدہ بھی ہوگا۔ یہ ایک ٹیوٹوریل ہے، اور اس لیے کوڈ کو سادگی کے لیے بہتر بنایا گیا ہے، نہ کہ کارکردگی کے لیے۔ لہذا، ہمیں دو مختلف Zokrates پروگراموں کی ضرورت ہے، ایک صرف ایک نقشے (`hash`) کے ہیش کا حساب لگانے کے لیے اور دوسرا نقشے (`dig`) پر کسی مقام پر کھدائی کے نتیجے کا زیرو نالج پروف بنانے کے لیے۔ +ہم [Poseidon](https://www.poseidon-hash.info) کو لاگو کرنے کے لیے [یہ جاوا اسکرپٹ کوڈ](https://github.com/ZK-Plus/ICBC24_Tutorial_Compute-Offchain-Verify-onchain/tree/solutions/exercise) استعمال کر سکتے ہیں، جو کہ Zokrates ہیش فنکشن ہے جسے ہم استعمال کرتے ہیں۔ تاہم، اگرچہ یہ تیز تر ہوگا، لیکن یہ صرف Zokrates ہیش فنکشن استعمال کرنے سے زیادہ پیچیدہ بھی ہوگا۔ یہ ایک ٹیوٹوریل ہے، اور اس لیے کوڈ کو سادگی کے لیے بہتر بنایا گیا ہے، کارکردگی کے لیے نہیں۔ لہذا، ہمیں دو مختلف Zokrates پروگراموں کی ضرورت ہے، ایک صرف نقشے کا ہیش (`hash`) شمار کرنے کے لیے اور دوسرا دراصل نقشے پر کسی جگہ کھدائی کے نتیجے کا زیرو-نالج پروف (`dig`) بنانے کے لیے۔ ### ہیش فنکشن {#hash-function} -یہ وہ فنکشن ہے جو ایک نقشے کے ہیش کا حساب لگاتا ہے۔ ہم اس کوڈ کا لائن بہ لائن جائزہ لیں گے۔ +یہ وہ فنکشن ہے جو نقشے کا ہیش شمار کرتا ہے۔ ہم اس کوڈ کا لائن بہ لائن جائزہ لیں گے۔ ``` import "hashes/poseidon/poseidon.zok" as poseidon; import "utils/pack/bool/pack128.zok" as pack128; ``` -یہ دو لائنیں [Zokrates اسٹینڈرڈ لائبریری](https://zokrates.github.io/toolbox/stdlib.html) سے دو فنکشن درآمد کرتی ہیں۔ [پہلا فنکشن](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/hashes/poseidon/poseidon.zok) ایک [Poseidon ہیش](https://www.poseidon-hash.info/) ہے۔ یہ [`field` عناصر](https://zokrates.github.io/language/types.html#field) کی ایک صف لیتا ہے اور ایک `field` لوٹاتا ہے۔ +یہ دو لائنیں [Zokrates معیاری لائبریری](https://zokrates.github.io/toolbox/stdlib.html) سے دو فنکشنز درآمد کرتی ہیں۔ [پہلا فنکشن](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/hashes/poseidon/poseidon.zok) ایک [Poseidon ہیش](https://www.poseidon-hash.info/) ہے۔ یہ [`field` عناصر](https://zokrates.github.io/language/types.html#field) کی ایک سرنی (array) لیتا ہے اور ایک `field` واپس کرتا ہے۔ -Zokrates میں فیلڈ عنصر عام طور پر 256 بٹس سے کم لمبا ہوتا ہے، لیکن زیادہ نہیں۔ کوڈ کو آسان بنانے کے لیے، ہم نقشے کو 512 بٹس تک محدود کرتے ہیں، اور چار فیلڈز کی ایک صف کو ہیش کرتے ہیں، اور ہر فیلڈ میں ہم صرف 128 بٹس استعمال کرتے ہیں۔ [ `pack128` فنکشن](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/utils/pack/bool/pack128.zok) اس مقصد کے لیے 128 بٹس کی ایک صف کو `field` میں تبدیل کرتا ہے۔ +Zokrates میں فیلڈ عنصر عام طور پر 256 بٹس سے کم لمبا ہوتا ہے، لیکن زیادہ نہیں۔ کوڈ کو آسان بنانے کے لیے، ہم نقشے کو 512 بٹس تک محدود کرتے ہیں، اور چار فیلڈز کی ایک سرنی کو ہیش کرتے ہیں، اور ہر فیلڈ میں ہم صرف 128 بٹس استعمال کرتے ہیں۔ [`pack128` فنکشن](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/utils/pack/bool/pack128.zok) اس مقصد کے لیے 128 بٹس کی سرنی کو `field` میں تبدیل کرتا ہے۔ ``` def hashMap(bool[${width+2}][${height+2}] map) -> field { ``` -یہ لائن ایک فنکشن کی تعریف شروع کرتی ہے۔ `hashMap` کو `map` نامی ایک ہی پیرامیٹر ملتا ہے، جو ایک دو جہتی `bool`(ean) صف ہے۔ نقشے کا سائز `width+2` ضرب `height+2` ہے ان وجوہات کی بنا پر جو [نیچے بیان کی گئی ہیں](#why-map-border)۔ +یہ لائن فنکشن کی تعریف شروع کرتی ہے۔ `hashMap` کو `map` نامی ایک واحد پیرامیٹر ملتا ہے، جو ایک دو جہتی `bool`(ean) سرنی ہے۔ نقشے کا سائز `width+2` بائی `height+2` ہے ان وجوہات کی بنا پر جن کی [وضاحت نیچے کی گئی ہے](#why-map-border)۔ -ہم `${width+2}` اور `${height+2}` استعمال کر سکتے ہیں کیونکہ Zokrates پروگرام اس ایپلیکیشن میں [ٹیمپلیٹ اسٹرنگز](https://www.w3schools.com/js/js_string_templates.asp) کے طور پر محفوظ ہیں۔ `${` اور `}` کے درمیان کوڈ کا جاوا اسکرپٹ کے ذریعے جائزہ لیا جاتا ہے، اور اس طرح پروگرام کو مختلف نقشے کے سائز کے لیے استعمال کیا جا سکتا ہے۔ نقشہ پیرامیٹر میں اس کے چاروں طرف ایک مقام چوڑا بارڈر ہے جس میں کوئی بم نہیں ہے، یہی وجہ ہے کہ ہمیں چوڑائی اور اونچائی میں دو کا اضافہ کرنے کی ضرورت ہے۔ +ہم `${width+2}` اور `${height+2}` استعمال کر سکتے ہیں کیونکہ Zokrates پروگرام اس ایپلیکیشن میں [ٹیمپلیٹ اسٹرنگز](https://www.w3schools.com/js/js_string_templates.asp) کے طور پر محفوظ کیے گئے ہیں۔ `${` اور `}` کے درمیان موجود کوڈ کا جائزہ جاوا اسکرپٹ کے ذریعے لیا جاتا ہے، اور اس طرح پروگرام کو مختلف نقشے کے سائز کے لیے استعمال کیا جا سکتا ہے۔ نقشے کے پیرامیٹر کے چاروں طرف ایک لوکیشن چوڑا بارڈر ہوتا ہے جس میں کوئی بم نہیں ہوتا، یہی وجہ ہے کہ ہمیں چوڑائی اور اونچائی میں دو کا اضافہ کرنے کی ضرورت ہے۔ -واپسی کی قیمت ایک `field` ہے جس میں ہیش ہوتا ہے۔ +واپسی کی ویلیو ایک `field` ہے جس میں ہیش ہوتا ہے۔ ``` bool[512] mut map1d = [false; 512]; ``` -نقشہ دو جہتی ہے۔ تاہم، `pack128` فنکشن دو جہتی صفوں کے ساتھ کام نہیں کرتا ہے۔ لہذا ہم پہلے نقشے کو 512 بائٹ کی صف میں ہموار کرتے ہیں، `map1d` کا استعمال کرتے ہوئے۔ ڈیفالٹ کے طور پر Zokrates متغیرات مستقل ہوتے ہیں، لیکن ہمیں اس صف کو ایک لوپ میں اقدار تفویض کرنے کی ضرورت ہے، لہذا ہم اسے [`mut`](https://zokrates.github.io/language/variables.html#mutability) کے طور پر بیان کرتے ہیں۔ +نقشہ دو جہتی ہے۔ تاہم، `pack128` فنکشن دو جہتی سرنیوں کے ساتھ کام نہیں کرتا ہے۔ اس لیے ہم پہلے `map1d` کا استعمال کرتے ہوئے نقشے کو 512-بائٹ سرنی میں فلیٹ کرتے ہیں۔ پہلے سے طے شدہ طور پر Zokrates متغیرات مستقل (constants) ہوتے ہیں، لیکن ہمیں ایک لوپ میں اس سرنی کو اقدار تفویض کرنے کی ضرورت ہے، اس لیے ہم اسے [`mut`](https://zokrates.github.io/language/variables.html#mutability) کے طور پر بیان کرتے ہیں۔ -ہمیں صف کو شروع کرنے کی ضرورت ہے کیونکہ Zokrates میں `undefined` نہیں ہے۔ تاثر `[false; 512]` کا مطلب ہے [512 `false` اقدار کی ایک صف](https://zokrates.github.io/language/types.html#declaration-and-initialization)۔ +ہمیں سرنی کو شروع کرنے کی ضرورت ہے کیونکہ Zokrates میں `undefined` نہیں ہوتا ہے۔ `[false; 512]` اظہار کا مطلب ہے [512 `false` اقدار کی ایک سرنی](https://zokrates.github.io/language/types.html#declaration-and-initialization)۔ ``` u32 mut counter = 0; ``` -ہمیں ان بٹس کے درمیان فرق کرنے کے لیے ایک کاؤنٹر کی بھی ضرورت ہے جو ہم نے `map1d` میں پہلے ہی بھر دیے ہیں اور جو نہیں بھرے۔ +ہمیں ان بٹس کے درمیان فرق کرنے کے لیے ایک کاؤنٹر کی بھی ضرورت ہے جو ہم نے پہلے ہی `map1d` میں بھر دی ہیں اور جو ہم نے نہیں بھری ہیں۔ ``` for u32 x in 0..${width+2} { ``` -یہ ہے کہ آپ Zokrates میں [`for` لوپ](https://zokrates.github.io/language/control_flow.html#for-loops) کا اعلان کیسے کرتے ہیں۔ ایک Zokrates `for` لوپ کی مقررہ حدود ہونی چاہئیں، کیونکہ جبکہ یہ ایک لوپ کی طرح لگتا ہے، کمپائلر دراصل اسے "کھول" دیتا ہے۔ تاثر `${width+2}` ایک کمپائل ٹائم مستقل ہے کیونکہ `width` ٹائپ اسکرپٹ کوڈ کے ذریعے کمپائلر کو کال کرنے سے پہلے سیٹ کیا جاتا ہے۔ +اس طرح آپ Zokrates میں ایک [`for` لوپ](https://zokrates.github.io/language/control_flow.html#for-loops) کا اعلان کرتے ہیں۔ Zokrates `for` لوپ کی حدود مقرر ہونی چاہئیں، کیونکہ اگرچہ یہ ایک لوپ معلوم ہوتا ہے، لیکن کمپائلر دراصل اسے "انرول" کرتا ہے۔ اظہار `${width+2}` ایک کمپائل ٹائم مستقل ہے کیونکہ `width` کو ٹائپ اسکرپٹ کوڈ کے ذریعے کمپائلر کو کال کرنے سے پہلے سیٹ کیا جاتا ہے۔ ``` for u32 y in 0..${height+2} { @@ -280,7 +272,7 @@ Zokrates میں فیلڈ عنصر عام طور پر 256 بٹس سے کم لمب } ``` -نقشے میں ہر مقام کے لیے، اس قدر کو `map1d` صف میں ڈالیں اور کاؤنٹر میں اضافہ کریں۔ +نقشے میں ہر مقام کے لیے، اس ویلیو کو `map1d` سرنی میں رکھیں اور کاؤنٹر میں اضافہ کریں۔ ``` field[4] hashMe = [ @@ -291,18 +283,18 @@ Zokrates میں فیلڈ عنصر عام طور پر 256 بٹس سے کم لمب ]; ``` -`pack128` `map1d` سے چار `field` اقدار کی ایک صف بنانے کے لیے۔ Zokrates میں `array[a..b]` کا مطلب ہے صف کا وہ ٹکڑا جو `a` سے شروع ہوتا ہے اور `b-1` پر ختم ہوتا ہے۔ +`map1d` سے چار `field` اقدار کی ایک سرنی بنانے کے لیے `pack128`۔ Zokrates میں `array[a..b]` کا مطلب سرنی کا وہ حصہ ہے جو `a` سے شروع ہوتا ہے اور `b-1` پر ختم ہوتا ہے۔ ``` return poseidon(hashMe); } ``` -اس صف کو ہیش میں تبدیل کرنے کے لیے `poseidon` کا استعمال کریں۔ +اس سرنی کو ہیش میں تبدیل کرنے کے لیے `poseidon` کا استعمال کریں۔ ### ہیش پروگرام {#hash-program} -سرور کو گیم شناخت کنندہ بنانے کے لیے براہ راست `hashMap` کو کال کرنے کی ضرورت ہے۔ تاہم، Zokrates صرف `main` فنکشن کو شروع کرنے کے لیے کال کر سکتا ہے، لہذا ہم ایک `main` کے ساتھ ایک پروگرام بناتے ہیں جو ہیش فنکشن کو کال کرتا ہے۔ +سرور کو گیم شناخت کنندگان بنانے کے لیے براہ راست `hashMap` کو کال کرنے کی ضرورت ہے۔ تاہم، Zokrates شروع کرنے کے لیے صرف ایک پروگرام پر `main` فنکشن کو کال کر سکتا ہے، اس لیے ہم ایک ایسا پروگرام بناتے ہیں جس میں ایک `main` ہو جو ہیش فنکشن کو کال کرے۔ ``` ${hashFragment} @@ -312,9 +304,9 @@ def main(bool[${width+2}][${height+2}] map) -> field { } ``` -### کھدائی پروگرام {#dig-program} +### کھدائی کا پروگرام {#dig-program} -یہ ایپلیکیشن کا زیرو نالج حصہ کا دل ہے، جہاں ہم وہ ثبوت تیار کرتے ہیں جو کھدائی کے نتائج کی تصدیق کے لیے استعمال ہوتے ہیں۔ +یہ ایپلیکیشن کے زیرو-نالج حصے کا دل ہے، جہاں ہم وہ ثبوت تیار کرتے ہیں جو کھدائی کے نتائج کی تصدیق کے لیے استعمال ہوتے ہیں۔ ``` ${hashFragment} @@ -327,9 +319,9 @@ def map2mineCount(bool[${width+2}][${height+2}] map, u32 x, u32 y) -> u8 { #### نقشے کا بارڈر کیوں {#why-map-border} -زیرو نالج پروف [حسابی سرکٹس](https://medium.com/web3studio/simple-explanations-of-arithmetic-circuits-and-zero-knowledge-proofs-806e59a79785) کا استعمال کرتے ہیں، جن میں `if` اسٹیٹمنٹ کا کوئی آسان مساوی نہیں ہوتا ہے۔ اس کے بجائے، وہ [مشروط آپریٹر](https://en.wikipedia.org/wiki/Ternary_conditional_operator) کے مساوی کا استعمال کرتے ہیں۔ اگر `a` صفر یا ایک ہو سکتا ہے، تو آپ `if a { b } else { c }` کا حساب `ab+(1-a)c` کے طور پر کر سکتے ہیں۔ +زیرو-نالج پروفز [ریاضیاتی سرکٹس](https://medium.com/web3studio/simple-explanations-of-arithmetic-circuits-and-zero-knowledge-proofs-806e59a79785) کا استعمال کرتے ہیں، جن میں `if` اسٹیٹمنٹ کا کوئی آسان متبادل نہیں ہوتا ہے۔ اس کے بجائے، وہ [مشروط آپریٹر](https://en.wikipedia.org/wiki/Ternary_conditional_operator) کا متبادل استعمال کرتے ہیں۔ اگر `a` صفر یا ایک ہو سکتا ہے، تو آپ `if a { b } else { c }` کا حساب `ab+(1-a)c` کے طور پر لگا سکتے ہیں۔ -اس کی وجہ سے، ایک Zokrates `if` اسٹیٹمنٹ ہمیشہ دونوں شاخوں کا جائزہ لیتا ہے۔ مثال کے طور پر، اگر آپ کے پاس یہ کوڈ ہے: +اس کی وجہ سے، Zokrates کی `if` اسٹیٹمنٹ ہمیشہ دونوں شاخوں کا جائزہ لیتی ہے۔ مثال کے طور پر، اگر آپ کے پاس یہ کوڈ ہے: ``` bool[5] arr = [false; 5]; @@ -337,29 +329,29 @@ u32 index=10; return if index>4 { 0 } else { arr[index] } ``` -اس میں خرابی ہوگی، کیونکہ اسے `arr[10]` کا حساب لگانے کی ضرورت ہے، چاہے وہ قدر بعد میں صفر سے ضرب دی جائے۔ +یہ ایرر دے گا، کیونکہ اسے `arr[10]` کا حساب لگانے کی ضرورت ہے، حالانکہ اس ویلیو کو بعد میں صفر سے ضرب دیا جائے گا۔ -یہی وجہ ہے کہ ہمیں نقشے کے چاروں طرف ایک مقام چوڑا بارڈر کی ضرورت ہے۔ ہمیں کسی مقام کے ارد گرد مائنز کی کل تعداد کا حساب لگانے کی ضرورت ہے، اور اس کا مطلب ہے کہ ہمیں اس مقام سے ایک قطار اوپر اور نیچے، بائیں اور دائیں کو دیکھنے کی ضرورت ہے، جہاں ہم کھدائی کر رہے ہیں۔ جس کا مطلب ہے کہ وہ مقام Zokrates کو فراہم کردہ نقشے کی صف میں موجود ہونا چاہیے۔ +یہی وجہ ہے کہ ہمیں نقشے کے چاروں طرف ایک لوکیشن چوڑا بارڈر درکار ہے۔ ہمیں کسی مقام کے ارد گرد مائنز کی کل تعداد کا حساب لگانے کی ضرورت ہے، اور اس کا مطلب ہے کہ ہمیں اس مقام کے ایک قطار اوپر اور نیچے، بائیں اور دائیں دیکھنا ہوگا جہاں ہم کھدائی کر رہے ہیں۔ جس کا مطلب ہے کہ وہ مقامات اس نقشے کی سرنی میں موجود ہونے چاہئیں جو Zokrates کو فراہم کی گئی ہے۔ ``` def main(private bool[${width+2}][${height+2}] map, u32 x, u32 y) -> (field, u8) { ``` -ڈیفالٹ کے طور پر Zokrates ثبوتوں میں ان کے ان پٹ شامل ہوتے ہیں۔ یہ جاننا کوئی فائدہ مند نہیں ہے کہ کسی جگہ کے ارد گرد پانچ مائنز ہیں جب تک کہ آپ کو حقیقت میں یہ نہ معلوم ہو کہ وہ کون سی جگہ ہے (اور آپ اسے صرف اپنی درخواست سے نہیں ملا سکتے، کیونکہ تب پروور مختلف اقدار کا استعمال کر سکتا ہے اور آپ کو اس کے بارے میں نہیں بتا سکتا)۔ تاہم، ہمیں نقشے کو خفیہ رکھنے کی ضرورت ہے، جبکہ اسے Zokrates کو فراہم کرتے ہوئے۔ حل یہ ہے کہ ایک `private` پیرامیٹر کا استعمال کیا جائے، ایک ایسا جو ثبوت سے _ظاہر_ نہیں ہوتا ہے۔ +پہلے سے طے شدہ طور پر Zokrates پروفز میں ان کے ان پٹس شامل ہوتے ہیں۔ یہ جاننے کا کوئی فائدہ نہیں کہ کسی جگہ کے ارد گرد پانچ مائنز ہیں جب تک کہ آپ کو حقیقت میں یہ معلوم نہ ہو کہ وہ کون سی جگہ ہے (اور آپ اسے صرف اپنی درخواست سے نہیں ملا سکتے، کیونکہ تب ثابت کرنے والا مختلف اقدار استعمال کر سکتا ہے اور آپ کو اس کے بارے میں نہیں بتائے گا)۔ تاہم، ہمیں Zokrates کو فراہم کرتے ہوئے نقشے کو خفیہ رکھنے کی ضرورت ہے۔ اس کا حل ایک `private` پیرامیٹر استعمال کرنا ہے، جو ثبوت کے ذریعے ظاہر _نہیں_ ہوتا ہے۔ -اس سے غلط استعمال کا ایک اور راستہ کھلتا ہے۔ پروور صحیح کوآرڈینیٹس کا استعمال کر سکتا ہے، لیکن مقام کے ارد گرد کسی بھی تعداد میں مائنز کے ساتھ ایک نقشہ بنا سکتا ہے، اور ممکنہ طور پر خود مقام پر بھی۔ اس غلط استعمال کو روکنے کے لیے، ہم زیرو نالج پروف کو نقشے کا ہیش شامل کرتے ہیں، جو گیم شناخت کنندہ ہے۔ +اس سے غلط استعمال کا ایک اور راستہ کھلتا ہے۔ ثابت کرنے والا درست کوآرڈینیٹس استعمال کر سکتا ہے، لیکن اس مقام کے ارد گرد، اور ممکنہ طور پر خود اس مقام پر کسی بھی تعداد میں مائنز کے ساتھ ایک نقشہ بنا سکتا ہے۔ اس غلط استعمال کو روکنے کے لیے، ہم زیرو نالج پروف میں نقشے کا ہیش شامل کرتے ہیں، جو کہ گیم شناخت کنندہ ہے۔ ``` return (hashMap(map), ``` -یہاں واپسی کی قیمت ایک ٹوپل ہے جس میں نقشہ ہیش صف اور کھدائی کا نتیجہ شامل ہے۔ +یہاں واپسی کی ویلیو ایک ٹپل ہے جس میں نقشے کی ہیش سرنی کے ساتھ ساتھ کھدائی کا نتیجہ بھی شامل ہے۔ ``` if map2mineCount(map, x, y) > 0 { 0xFF } else { ``` -اگر خود مقام پر کوئی بم ہو تو ہم 255 کو ایک خاص قدر کے طور پر استعمال کرتے ہیں۔ +ہم 255 کو ایک خاص ویلیو کے طور پر استعمال کرتے ہیں اگر اس مقام پر خود کوئی بم ہو۔ ``` map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) + @@ -370,31 +362,31 @@ def main(private bool[${width+2}][${height+2}] map, u32 x, u32 y) -> (field, u8) } ``` -اگر کھلاڑی نے کسی مائن کو نہیں مارا ہے، تو مقام کے ارد گرد کے علاقے کے لیے مائن کاؤنٹ شامل کریں اور اسے واپس کریں۔ +اگر کھلاڑی کسی مائن سے نہیں ٹکرایا ہے، تو اس مقام کے ارد گرد کے علاقے کے لیے مائن کی گنتی شامل کریں اور اسے واپس کریں۔ ### TypeScript سے Zokrates کا استعمال {#using-zokrates-from-typescript} Zokrates کا ایک کمانڈ لائن انٹرفیس ہے، لیکن اس پروگرام میں ہم اسے [TypeScript کوڈ](https://zokrates.github.io/toolbox/zokrates_js.html) میں استعمال کرتے ہیں۔ -Zokrates تعریفوں پر مشتمل لائبریری کو [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) کہا جاتا ہے۔ +وہ لائبریری جس میں Zokrates کی تعریفیں شامل ہیں اسے [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) کہا جاتا ہے۔ ```typescript import { initialize as zokratesInitialize } from "zokrates-js" ``` -[Zokrates جاوا اسکرپٹ بائنڈنگز](https://zokrates.github.io/toolbox/zokrates_js.html) کو درآمد کریں۔ ہمیں صرف [`initialize`](https://zokrates.github.io/toolbox/zokrates_js.html#initialize) فنکشن کی ضرورت ہے کیونکہ یہ ایک وعدہ لوٹاتا ہے جو تمام Zokrates تعریفوں کو حل کرتا ہے۔ +[Zokrates JavaScript بائنڈنگز](https://zokrates.github.io/toolbox/zokrates_js.html) درآمد کریں۔ ہمیں صرف [`initialize`](https://zokrates.github.io/toolbox/zokrates_js.html#initialize) فنکشن کی ضرورت ہے کیونکہ یہ ایک پرامس (promise) واپس کرتا ہے جو تمام Zokrates تعریفوں کو حل کرتا ہے۔ ```typescript export const zkFunctions = async (width: number, height: number) : Promise => { ``` -Zokrates کی طرح، ہم بھی صرف ایک فنکشن برآمد کرتے ہیں، جو [غیر ہم آہنگ](https://www.w3schools.com/js/js_async.asp) بھی ہے۔ جب یہ بالآخر واپس آتا ہے، تو یہ کئی فنکشن فراہم کرتا ہے جیسا کہ ہم نیچے دیکھیں گے۔ +خود Zokrates کی طرح، ہم بھی صرف ایک فنکشن برآمد کرتے ہیں، جو کہ [asynchronous](https://www.w3schools.com/js/js_async.asp) بھی ہے۔ جب یہ بالآخر واپس آتا ہے، تو یہ کئی فنکشنز فراہم کرتا ہے جیسا کہ ہم نیچے دیکھیں گے۔ ```typescript const zokrates = await zokratesInitialize() ``` -Zokrates کو شروع کریں، لائبریری سے ہمیں ہر چیز حاصل کریں۔ +Zokrates کو شروع کریں، لائبریری سے وہ سب کچھ حاصل کریں جس کی ہمیں ضرورت ہے۔ ```typescript const hashFragment = ` @@ -421,27 +413,27 @@ const digProgram = ` ` ``` -اگلا ہمارے پاس ہیش فنکشن اور دو Zokrates پروگرام ہیں جو ہم نے اوپر دیکھے۔ +اس کے بعد ہمارے پاس ہیش فنکشن اور دو Zokrates پروگرام ہیں جو ہم نے اوپر دیکھے ہیں۔ ```typescript const digCompiled = zokrates.compile(digProgram) const hashCompiled = zokrates.compile(hashProgram) ``` -یہاں ہم ان پروگراموں کو کمپائل کرتے ہیں۔ +یہاں ہم ان پروگراموں کو مرتب (کمپائل) کرتے ہیں۔ ```typescript -// Create the keys for zero knowledge verification. -// On a production system you'd want to use a setup ceremony. +// زیرو نالج ویریفکیشن کے لیے کیز بنائیں۔ +// پروڈکشن سسٹم پر آپ سیٹ اپ سیریمونی استعمال کرنا چاہیں گے۔ // (https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony). const keySetupResults = zokrates.setup(digCompiled.program, "") const verifierKey = keySetupResults.vk const proverKey = keySetupResults.pk ``` -ایک پروڈکشن سسٹم پر ہم ایک زیادہ پیچیدہ [سیٹ اپ تقریب](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) کا استعمال کر سکتے ہیں، لیکن یہ ایک مظاہرے کے لیے کافی ہے۔ یہ کوئی مسئلہ نہیں ہے کہ صارفین پروور کی جان سکتے ہیں - وہ پھر بھی اسے چیزوں کو ثابت کرنے کے لیے استعمال نہیں کر سکتے جب تک کہ وہ سچ نہ ہوں۔ کیونکہ ہم اینٹروپی کی وضاحت کرتے ہیں (دوسرا پیرامیٹر، `""`)، نتائج ہمیشہ ایک جیسے ہی ہوں گے۔ +پروڈکشن سسٹم پر ہم ایک زیادہ پیچیدہ [سیٹ اپ تقریب](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) استعمال کر سکتے ہیں، لیکن یہ مظاہرے کے لیے کافی ہے۔ یہ کوئی مسئلہ نہیں ہے کہ صارفین پروور کی (prover key) جان سکتے ہیں - وہ اب بھی اسے چیزوں کو ثابت کرنے کے لیے استعمال نہیں کر سکتے جب تک کہ وہ سچ نہ ہوں۔ چونکہ ہم اینٹروپی (دوسرا پیرامیٹر، `""`) کی وضاحت کرتے ہیں، اس لیے نتائج ہمیشہ ایک جیسے ہی ہوں گے۔ -**نوٹ:** Zokrates پروگراموں کی تالیف اور کلید کی تخلیق سست عمل ہیں۔ انہیں ہر بار دہرانے کی ضرورت نہیں ہے، صرف اس وقت جب نقشے کا سائز تبدیل ہوتا ہے۔ ایک پروڈکشن سسٹم پر آپ انہیں ایک بار کریں گے، اور پھر آؤٹ پٹ کو اسٹور کریں گے۔ میں یہاں صرف سادگی کی خاطر ایسا نہیں کر رہا ہوں۔ +**نوٹ:** Zokrates پروگراموں کی تالیف (compilation) اور کلید کی تخلیق سست عمل ہیں۔ انہیں ہر بار دہرانے کی ضرورت نہیں ہے، صرف اس وقت جب نقشے کا سائز تبدیل ہو۔ پروڈکشن سسٹم پر آپ انہیں ایک بار کریں گے، اور پھر آؤٹ پٹ کو محفوظ کر لیں گے۔ یہاں ایسا نہ کرنے کی واحد وجہ سادگی ہے۔ #### `calculateMapHash` {#calculateMapHash} @@ -456,13 +448,13 @@ const calculateMapHash = function (hashMe: boolean[][]): string { } ``` -[`computeWitness`](https://zokrates.github.io/toolbox/zokrates_js.html#computewitnessartifacts-args-options) فنکشن دراصل Zokrates پروگرام چلاتا ہے۔ یہ دو فیلڈز کے ساتھ ایک ڈھانچہ لوٹاتا ہے: `output`، جو ایک JSON سٹرنگ کے طور پر پروگرام کا آؤٹ پٹ ہے، اور `witness`، جو نتیجے کا زیرو نالج پروف بنانے کے لیے درکار معلومات ہے۔ یہاں ہمیں صرف آؤٹ پٹ کی ضرورت ہے۔ +[`computeWitness`](https://zokrates.github.io/toolbox/zokrates_js.html#computewitnessartifacts-args-options) فنکشن دراصل Zokrates پروگرام چلاتا ہے۔ یہ دو فیلڈز کے ساتھ ایک اسٹرکچر واپس کرتا ہے: `output`، جو کہ JSON اسٹرنگ کے طور پر پروگرام کا آؤٹ پٹ ہے، اور `witness`، جو کہ نتیجے کا زیرو نالج پروف بنانے کے لیے درکار معلومات ہے۔ یہاں ہمیں صرف آؤٹ پٹ کی ضرورت ہے۔ -آؤٹ پٹ `"31337"` کی شکل میں ایک سٹرنگ ہے، جو کوٹیشن مارکس میں بند ایک اعشاریہ نمبر ہے۔ لیکن `viem` کے لیے ہمیں جو آؤٹ پٹ چاہیے وہ `0x60A7` کی شکل میں ایک ہیکساڈیسیمل نمبر ہے۔ لہذا ہم کوٹیشن مارکس کو ہٹانے کے لیے `.slice(1,-1)` کا استعمال کرتے ہیں اور پھر باقی سٹرنگ کو، جو ایک اعشاریہ نمبر ہے، ایک [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) میں تبدیل کرنے کے لیے `BigInt` کا استعمال کرتے ہیں۔ `.toString(16)` اس `BigInt` کو ایک ہیکساڈیسیمل سٹرنگ میں تبدیل کرتا ہے، اور `"0x"+` ہیکساڈیسیمل نمبروں کے لیے مارکر شامل کرتا ہے۔ +آؤٹ پٹ `"31337"` کی شکل میں ایک اسٹرنگ ہے، جو کوٹیشن مارکس میں بند ایک اعشاریہ نمبر ہے۔ لیکن `viem` کے لیے ہمیں جو آؤٹ پٹ درکار ہے وہ `0x60A7` کی شکل میں ایک ہیکسا ڈیسیمل نمبر ہے۔ اس لیے ہم کوٹیشن مارکس ہٹانے کے لیے `.slice(1,-1)` استعمال کرتے ہیں اور پھر باقی اسٹرنگ، جو کہ ایک اعشاریہ نمبر ہے، کو [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) میں چلانے کے لیے `BigInt` استعمال کرتے ہیں۔ `.toString(16)` اس `BigInt` کو ہیکسا ڈیسیمل اسٹرنگ میں تبدیل کرتا ہے، اور `"0x"+` ہیکسا ڈیسیمل نمبرز کے لیے مارکر کا اضافہ کرتا ہے۔ ```typescript -// Dig and return a zero knowledge proof of the result -// (server-side code) +// کھودیں اور نتیجے کا زیرو نالج پروف واپس کریں۔ +// (سرور سائیڈ کوڈ) ``` زیرو نالج پروف میں عوامی ان پٹس (`x` اور `y`) اور نتائج (نقشے کا ہیش اور بموں کی تعداد) شامل ہیں۔ @@ -473,13 +465,13 @@ const calculateMapHash = function (hashMe: boolean[][]): string { throw new Error("Trying to dig outside the map") ``` -یہ چیک کرنا کہ آیا کوئی انڈیکس Zokrates میں حد سے باہر ہے، ایک مسئلہ ہے، لہذا ہم اسے یہاں کرتے ہیں۔ +Zokrates میں یہ چیک کرنا ایک مسئلہ ہے کہ آیا کوئی انڈیکس حد سے باہر ہے، اس لیے ہم اسے یہاں کرتے ہیں۔ ```typescript const runResults = zokrates.computeWitness(digCompiled, [map, `${x}`, `${y}`]) ``` -کھدائی پروگرام پر عمل کریں۔ +کھدائی کا پروگرام چلائیں۔ ```typescript const proof = zokrates.generateProof( @@ -491,7 +483,7 @@ const runResults = zokrates.computeWitness(digCompiled, [map, `${x}`, `${y}`]) } ``` -[`generateProof`](https://zokrates.github.io/toolbox/zokrates_js.html#generateproofprogram-witness-provingkey-entropy) کا استعمال کریں اور ثبوت واپس کریں۔ +[`generateProof`](https://zokrates.github.io/toolbox/zokrates_js.html#generateproofprogram-witness-provingkey-entropy) استعمال کریں اور ثبوت واپس کریں۔ ```typescript const solidityVerifier = ` @@ -500,7 +492,7 @@ const solidityVerifier = ` ` ``` -ایک Solidity ویریفائر، ایک سمارٹ کنٹریکٹ جسے ہم بلاک چین پر تعینات کر سکتے ہیں اور `digCompiled.program` کے ذریعے تیار کردہ ثبوتوں کی تصدیق کے لیے استعمال کر سکتے ہیں۔ +ایک Solidity تصدیق کنندہ، ایک اسمارٹ کنٹریکٹ جسے ہم بلاک چین پر تعینات کر سکتے ہیں اور `digCompiled.program` کے ذریعے تیار کردہ ثبوتوں کی تصدیق کے لیے استعمال کر سکتے ہیں۔ ```typescript return { @@ -511,19 +503,19 @@ const solidityVerifier = ` } ``` -آخر میں، ہر وہ چیز واپس کریں جس کی دوسرے کوڈ کو ضرورت ہو سکتی ہے۔ +آخر میں، وہ سب کچھ واپس کریں جس کی دوسرے کوڈ کو ضرورت ہو سکتی ہے۔ -## سیکیورٹی ٹیسٹ {#security-tests} +## سیکیورٹی ٹیسٹس {#security-tests} -سیکیورٹی ٹیسٹ اہم ہیں کیونکہ ایک فنکشنلٹی بگ بالآخر خود کو ظاہر کر دے گا۔ لیکن اگر ایپلیکیشن غیر محفوظ ہے، تو یہ ممکنہ طور پر ایک طویل عرصے تک چھپی رہے گی اس سے پہلے کہ یہ کسی کے دھوکہ دہی اور دوسروں سے تعلق رکھنے والے وسائل سے بچ نکلنے سے ظاہر ہو۔ +سیکیورٹی ٹیسٹس اہم ہیں کیونکہ فعالیت کا بگ بالآخر خود کو ظاہر کر دے گا۔ لیکن اگر ایپلیکیشن غیر محفوظ ہے، تو اس کے طویل عرصے تک پوشیدہ رہنے کا امکان ہے اس سے پہلے کہ یہ کسی کے دھوکہ دہی کرنے اور دوسروں کے وسائل لے کر فرار ہونے سے ظاہر ہو۔ -### اجازتیں {#permissions} +### اجازتیں (Permissions) {#permissions} -اس گیم میں ایک مراعات یافتہ ادارہ ہے، سرور۔ یہ واحد صارف ہے جسے [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) میں فنکشنز کو کال کرنے کی اجازت ہے۔ ہم [`cast`](https://book.getfoundry.sh/cast/) کا استعمال کر سکتے ہیں تاکہ یہ تصدیق کی جا سکے کہ اجازت یافتہ فنکشنز کی کالز صرف سرور اکاؤنٹ کے طور پر ہی کی جا سکتی ہیں۔ +اس گیم میں ایک مراعات یافتہ ہستی ہے، سرور۔ یہ واحد صارف ہے جسے [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) میں فنکشنز کو کال کرنے کی اجازت ہے۔ ہم یہ تصدیق کرنے کے لیے [`cast`](https://book.getfoundry.sh/cast/) کا استعمال کر سکتے ہیں کہ اجازت یافتہ فنکشنز کو کالز کی اجازت صرف سرور اکاؤنٹ کے طور پر ہے۔ -[سرور کی نجی کلید `setupNetwork.ts` میں ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/mud/setupNetwork.ts#L52)۔ +[سرور کی پرائیویٹ کی `setupNetwork.ts` میں ہے](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/mud/setupNetwork.ts#L52)۔ -1. `anvil` (بلاک چین) چلانے والے کمپیوٹر پر، یہ ماحولیاتی متغیرات سیٹ کریں۔ +1. اس کمپیوٹر پر جو `anvil` (بلاک چین) چلاتا ہے، یہ ماحولیاتی متغیرات (environment variables) سیٹ کریں۔ ```sh copy WORLD_ADDRESS=0x8d8b6b8414e1e3dcfd4168561b9be6bd3bf6ec4b @@ -531,37 +523,37 @@ const solidityVerifier = ` AUTHORIZED_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d ``` -2. `cast` کا استعمال کریں تاکہ تصدیق کنندہ کا پتہ ایک غیر مجاز پتے کے طور پر سیٹ کرنے کی کوشش کی جا سکے۔ +2. تصدیق کنندہ کا ایڈریس غیر مجاز ایڈریس کے طور پر سیٹ کرنے کی کوشش کرنے کے لیے `cast` کا استعمال کریں۔ ```sh copy cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $UNAUTHORIZED_KEY ``` - نہ صرف `cast` ایک ناکامی کی اطلاع دیتا ہے، بلکہ آپ براؤزر پر گیم میں **MUD Dev Tools** کھول سکتے ہیں، **ٹیبلز** پر کلک کر سکتے ہیں، اور **app\_\_VerifierAddress** کو منتخب کر سکتے ہیں۔ دیکھیں کہ پتہ صفر نہیں ہے۔ + نہ صرف `cast` ناکامی کی اطلاع دیتا ہے، بلکہ آپ براؤزر پر گیم میں **MUD Dev Tools** کھول سکتے ہیں، **Tables** پر کلک کر سکتے ہیں، اور **app\_\_VerifierAddress** کو منتخب کر سکتے ہیں۔ دیکھیں کہ ایڈریس صفر نہیں ہے۔ -3. ویریفائر ایڈریس کو سرور کے ایڈریس کے طور پر سیٹ کریں۔ +3. تصدیق کنندہ کا ایڈریس سرور کے ایڈریس کے طور پر سیٹ کریں۔ ```sh copy cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $AUTHORIZED_KEY ``` - **app\_\_VerifiedAddress** میں پتہ اب صفر ہونا چاہیے۔ + **app\_\_VerifiedAddress** میں ایڈریس اب صفر ہونا چاہیے۔ -ایک ہی `System` میں تمام MUD فنکشنز ایک ہی ایکسیس کنٹرول سے گزرتے ہیں، لہذا میں اس ٹیسٹ کو کافی سمجھتا ہوں۔ اگر آپ نہیں کرتے ہیں، تو آپ [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) میں دیگر فنکشنز کو چیک کر سکتے ہیں۔ +ایک ہی `System` میں تمام MUD فنکشنز ایک ہی رسائی کنٹرول سے گزرتے ہیں، اس لیے میں اس ٹیسٹ کو کافی سمجھتا ہوں۔ اگر آپ نہیں سمجھتے، تو آپ [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) میں دیگر فنکشنز چیک کر سکتے ہیں۔ -### زیرو نالج کے غلط استعمال {#zero-knowledge-abuses} +### زیرو-نالج کے غلط استعمال {#zero-knowledge-abuses} -Zokrates کی تصدیق کے لیے ریاضی اس ٹیوٹوریل (اور میری صلاحیتوں) کے دائرہ سے باہر ہے۔ تاہم، ہم زیرو نالج کوڈ پر مختلف چیک چلا سکتے ہیں تاکہ یہ تصدیق کی جا سکے کہ اگر اسے صحیح طریقے سے نہیں کیا گیا تو یہ ناکام ہو جاتا ہے۔ ان تمام ٹیسٹوں کے لیے ہمیں [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) کو تبدیل کرنے اور پوری ایپلیکیشن کو دوبارہ شروع کرنے کی ضرورت ہوگی۔ سرور پروسیس کو دوبارہ شروع کرنا کافی نہیں ہے، کیونکہ یہ ایپلیکیشن کو ایک ناممکن حالت میں ڈال دیتا ہے (کھلاڑی کا ایک گیم جاری ہے، لیکن گیم اب سرور کے لیے دستیاب نہیں ہے)۔ +Zokrates کی تصدیق کرنے کے لیے ریاضی اس ٹیوٹوریل (اور میری صلاحیتوں) کے دائرہ کار سے باہر ہے۔ تاہم، ہم زیرو-نالج کوڈ پر مختلف چیکس چلا سکتے ہیں تاکہ یہ تصدیق کی جا سکے کہ اگر یہ صحیح طریقے سے نہیں کیا گیا ہے تو یہ ناکام ہو جاتا ہے۔ ان تمام ٹیسٹوں کے لیے ہمیں [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) کو تبدیل کرنے اور پوری ایپلیکیشن کو دوبارہ شروع کرنے کی ضرورت ہوگی۔ سرور کے عمل کو دوبارہ شروع کرنا کافی نہیں ہے، کیونکہ یہ ایپلیکیشن کو ایک ناممکن حالت میں ڈال دیتا ہے (کھلاڑی کی ایک گیم جاری ہے، لیکن گیم اب سرور کو دستیاب نہیں ہے)۔ #### غلط جواب {#wrong-answer} -سب سے آسان امکان زیرو نالج پروف میں غلط جواب فراہم کرنا ہے۔ ایسا کرنے کے لیے، ہم `zkDig` کے اندر جاتے ہیں اور [لائن 91 میں ترمیم کرتے ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L91): +سب سے آسان امکان زیرو-نالج پروف میں غلط جواب فراہم کرنا ہے۔ ایسا کرنے کے لیے، ہم `zkDig` کے اندر جاتے ہیں اور [لائن 91 میں ترمیم کرتے ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L91): ```ts proof.inputs[3] = "0x" + "1".padStart(64, "0") ``` -اس کا مطلب ہے کہ ہم ہمیشہ دعویٰ کریں گے کہ ایک بم ہے، چاہے صحیح جواب کچھ بھی ہو۔ اس ورژن کے ساتھ کھیلنے کی کوشش کریں، اور آپ `pnpm dev` اسکرین کے **سرور** ٹیب میں یہ خرابی دیکھیں گے: +اس کا مطلب ہے کہ ہم ہمیشہ دعویٰ کریں گے کہ ایک بم ہے، قطع نظر اس کے کہ صحیح جواب کیا ہے۔ اس ورژن کے ساتھ کھیلنے کی کوشش کریں، اور آپ کو `pnpm dev` اسکرین کے **server** ٹیب میں یہ ایرر نظر آئے گا: ``` cause: { @@ -573,11 +565,11 @@ e206661696c' }, ``` -تو اس قسم کی دھوکہ دہی ناکام ہو جاتی ہے۔ +تو اس قسم کا دھوکہ ناکام ہو جاتا ہے۔ #### غلط ثبوت {#wrong-proof} -کیا ہوتا ہے اگر ہم صحیح معلومات فراہم کریں، لیکن ثبوت کا ڈیٹا غلط ہو؟ اب، لائن 91 کو اس سے بدل دیں: +کیا ہوگا اگر ہم صحیح معلومات فراہم کریں، لیکن صرف ثبوت کا ڈیٹا غلط ہو؟ اب، لائن 91 کو اس سے تبدیل کریں: ```ts proof.proof = { @@ -590,13 +582,13 @@ proof.proof = { } ``` -یہ اب بھی ناکام رہتا ہے، لیکن اب یہ بغیر کسی وجہ کے ناکام ہوجاتا ہے کیونکہ یہ ویریفائر کال کے دوران ہوتا ہے۔ +یہ اب بھی ناکام ہوتا ہے، لیکن اب یہ بغیر کسی وجہ کے ناکام ہوتا ہے کیونکہ یہ تصدیق کنندہ کی کال کے دوران ہوتا ہے۔ -### ایک صارف زیرو ٹرسٹ کوڈ کی تصدیق کیسے کر سکتا ہے؟ {#user-verify-zero-trust} +### صارف زیرو ٹرسٹ کوڈ کی تصدیق کیسے کر سکتا ہے؟ {#user-verify-zero-trust} -اسمارٹ معاہدوں کی تصدیق کرنا نسبتاً آسان ہے۔ عام طور پر، ڈیولپر سورس کوڈ کو ایک بلاک ایکسپلورر پر شائع کرتا ہے، اور بلاک ایکسپلورر اس بات کی تصدیق کرتا ہے کہ سورس کوڈ [معاہدے کی تعیناتی کے لین دین](/developers/docs/smart-contracts/deploying/) میں کوڈ کو کمپائل کرتا ہے۔ MUD `System`s کے معاملے میں یہ [تھوڑا زیادہ پیچیدہ](https://mud.dev/cli/verify) ہے، لیکن زیادہ نہیں۔ +اسمارٹ کنٹریکٹس کی تصدیق کرنا نسبتاً آسان ہے۔ عام طور پر، ڈیولپر سورس کوڈ کو بلاک ایکسپلورر پر شائع کرتا ہے، اور بلاک ایکسپلورر اس بات کی تصدیق کرتا ہے کہ سورس کوڈ [کنٹریکٹ کی تعیناتی کی ٹرانزیکشن](/developers/docs/smart-contracts/deploying/) میں موجود کوڈ میں مرتب (کمپائل) ہوتا ہے۔ MUD `System`s کے معاملے میں یہ [تھوڑا زیادہ پیچیدہ](https://mud.dev/cli/verify) ہے، لیکن زیادہ نہیں۔ -یہ زیرو نالج کے ساتھ زیادہ مشکل ہے۔ ویریفائر میں کچھ مستقل شامل ہوتے ہیں اور ان پر کچھ حسابات چلاتے ہیں۔ یہ آپ کو نہیں بتاتا کہ کیا ثابت کیا جا رہا ہے۔ +زیرو-نالج کے ساتھ یہ مشکل ہے۔ تصدیق کنندہ میں کچھ مستقل (constants) شامل ہوتے ہیں اور ان پر کچھ حساب کتاب چلاتا ہے۔ اس سے آپ کو یہ نہیں پتہ چلتا کہ کیا ثابت کیا جا رہا ہے۔ ```solidity function verifyingKey() pure internal returns (VerifyingKey memory vk) { @@ -604,13 +596,12 @@ proof.proof = { vk.beta = Pairing.G2Point([uint256(0x2cebd0fbd21aca01910581537b21ae4fed46bc0e524c055059aa164ba0a6b62b), uint256(0x18fd4a7bc386cf03a95af7163d5359165acc4e7961cb46519e6d9ee4a1e2b7e9)], [uint256(0x11449dee0199ef6d8eebfe43b548e875c69e7ce37705ee9a00c81fe52f11a009), uint256(0x066d0c83b32800d3f335bb9e8ed5e2924cf00e77e6ec28178592eac9898e1a00)]); ``` -حل، کم از کم جب تک بلاک ایکسپلوررز اپنے صارف انٹرفیس میں Zokrates کی تصدیق شامل نہیں کر لیتے، یہ ہے کہ ایپلیکیشن ڈیولپرز Zokrates پروگراموں کو دستیاب کرائیں، اور کم از کم کچھ صارفین انہیں مناسب تصدیقی کلید کے ساتھ خود کمپائل کریں۔ +اس کا حل، کم از کم اس وقت تک جب تک کہ بلاک ایکسپلوررز اپنے یوزر انٹرفیس میں Zokrates کی تصدیق شامل نہ کر لیں، یہ ہے کہ ایپلیکیشن ڈیولپرز Zokrates پروگرامز کو دستیاب کرائیں، اور کم از کم کچھ صارفین انہیں مناسب تصدیقی کلید کے ساتھ خود مرتب کریں۔ ایسا کرنے کے لیے: 1. [Zokrates انسٹال کریں](https://zokrates.github.io/gettingstarted.html)۔ - -2. ایک فائل بنائیں، `dig.zok`، Zokrates پروگرام کے ساتھ۔ نیچے دیا گیا کوڈ یہ فرض کرتا ہے کہ آپ نے اصل نقشے کا سائز، 10x5، رکھا ہے۔ +2. Zokrates پروگرام کے ساتھ ایک فائل، `dig.zok` بنائیں۔ نیچے دیا گیا کوڈ یہ فرض کرتا ہے کہ آپ نے نقشے کا اصل سائز، 10x5 رکھا ہے۔ ```zokrates import "utils/pack/bool/pack128.zok" as pack128; @@ -638,7 +629,7 @@ proof.proof = { } - // The number of mines in location (x,y) + // مقام (x,y) پر مائنز کی تعداد def map2mineCount(bool[12][7] map, u32 x, u32 y) -> u8 { return if map[x+1][y+1] { 1 } else { 0 }; } @@ -654,14 +645,14 @@ proof.proof = { } ``` -3. Zokrates کوڈ کو کمپائل کریں اور تصدیقی کلید بنائیں۔ تصدیقی کلید اسی اینٹروپی کے ساتھ بنانی ہوگی جو اصل سرور میں استعمال کی گئی تھی، [اس معاملے میں ایک خالی سٹرنگ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L67)۔ +3. Zokrates کوڈ کو مرتب کریں اور تصدیقی کلید بنائیں۔ تصدیقی کلید کو اسی اینٹروپی کے ساتھ بنانا ہوگا جو اصل سرور میں استعمال ہوئی تھی، [اس صورت میں ایک خالی اسٹرنگ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L67)۔ ```sh copy zokrates compile --input dig.zok zokrates setup -e "" ``` -4. اپنا Solidity ویریفائر خود بنائیں، اور تصدیق کریں کہ یہ بلاک چین پر موجود ویریفائر سے فنکشنل طور پر یکساں ہے (سرور ایک تبصرہ شامل کرتا ہے، لیکن یہ اہم نہیں ہے)۔ +4. خود سے Solidity تصدیق کنندہ بنائیں، اور تصدیق کریں کہ یہ عملی طور پر بلاک چین پر موجود تصدیق کنندہ سے مماثل ہے (سرور ایک تبصرہ شامل کرتا ہے، لیکن یہ اہم نہیں ہے)۔ ```sh copy zokrates export-verifier @@ -670,73 +661,72 @@ proof.proof = { ## ڈیزائن کے فیصلے {#design} -کسی بھی کافی پیچیدہ ایپلیکیشن میں مسابقتی ڈیزائن کے اہداف ہوتے ہیں جن کے لیے سمجھوتہ کی ضرورت ہوتی ہے۔ آئیے کچھ سمجھوتوں کو دیکھتے ہیں اور یہ کہ موجودہ حل دوسرے اختیارات سے کیوں بہتر ہے۔ +کسی بھی کافی پیچیدہ ایپلیکیشن میں مسابقتی ڈیزائن کے اہداف ہوتے ہیں جن کے لیے سمجھوتہ (trade-offs) کی ضرورت ہوتی ہے۔ آئیے کچھ سمجھوتوں پر نظر ڈالتے ہیں اور دیکھتے ہیں کہ موجودہ حل دیگر اختیارات پر کیوں ترجیح رکھتا ہے۔ -### زیرو نالج کیوں {#why-zero-knowledge} +### زیرو-نالج کیوں {#why-zero-knowledge} -مائن سویپر کے لیے آپ کو حقیقت میں زیرو نالج کی ضرورت نہیں ہے۔ سرور ہمیشہ نقشہ رکھ سکتا ہے، اور پھر گیم ختم ہونے پر اس سب کو ظاہر کر سکتا ہے۔ پھر، گیم کے اختتام پر، سمارٹ کنٹریکٹ نقشے کے ہیش کا حساب لگا سکتا ہے، تصدیق کر سکتا ہے کہ یہ میل کھاتا ہے، اور اگر ایسا نہیں ہوتا ہے تو سرور کو سزا دے سکتا ہے یا گیم کو مکمل طور پر نظر انداز کر سکتا ہے۔ +مائن سویپر کے لیے آپ کو واقعی زیرو-نالج کی ضرورت نہیں ہے۔ سرور ہمیشہ نقشہ رکھ سکتا ہے، اور پھر گیم ختم ہونے پر اسے مکمل طور پر ظاہر کر سکتا ہے۔ پھر، گیم کے اختتام پر، اسمارٹ کنٹریکٹ نقشے کے ہیش کا حساب لگا سکتا ہے، تصدیق کر سکتا ہے کہ یہ مماثل ہے، اور اگر ایسا نہیں ہوتا ہے تو سرور کو جرمانہ کر سکتا ہے یا گیم کو مکمل طور پر نظر انداز کر سکتا ہے۔ -میں نے یہ آسان حل استعمال نہیں کیا کیونکہ یہ صرف اچھی طرح سے متعین اختتامی حالت والے مختصر گیمز کے لیے کام کرتا ہے۔ جب ایک گیم ممکنہ طور پر لامحدود ہو (جیسے کہ [خود مختار دنیاؤں](https://0xparc.org/blog/autonomous-worlds) کے معاملے میں)، آپ کو ایک ایسے حل کی ضرورت ہے جو حالت کو _ظاہر کیے بغیر_ ثابت کرے۔ +میں نے یہ آسان حل استعمال نہیں کیا کیونکہ یہ صرف ان مختصر گیمز کے لیے کام کرتا ہے جن کی اختتامی حالت (end state) واضح طور پر متعین ہو۔ جب کوئی گیم ممکنہ طور پر لامحدود ہو (جیسا کہ [خود مختار دنیاؤں](https://0xparc.org/blog/autonomous-worlds) کے معاملے میں)، تو آپ کو ایک ایسے حل کی ضرورت ہوتی ہے جو اسٹیٹ کو ظاہر کیے _بغیر_ اسے ثابت کرے۔ -ایک ٹیوٹوریل کے طور پر اس مضمون کو ایک مختصر گیم کی ضرورت تھی جو سمجھنے میں آسان ہو، لیکن یہ تکنیک طویل گیمز کے لیے سب سے زیادہ مفید ہے۔ +ایک ٹیوٹوریل کے طور پر اس مضمون کو ایک مختصر گیم کی ضرورت تھی جسے سمجھنا آسان ہو، لیکن یہ تکنیک طویل گیمز کے لیے سب سے زیادہ مفید ہے۔ ### Zokrates کیوں؟ {#why-zokrates} -[Zokrates](https://zokrates.github.io/) واحد زیرو نالج لائبریری دستیاب نہیں ہے، لیکن یہ ایک عام، [امپیریٹو](https://en.wikipedia.org/wiki/Imperative_programming) پروگرامنگ زبان کی طرح ہے اور بولین متغیرات کو سپورٹ کرتی ہے۔ +[Zokrates](https://zokrates.github.io/) دستیاب واحد زیرو-نالج لائبریری نہیں ہے، لیکن یہ ایک عام، [امپیریٹو (imperative)](https://en.wikipedia.org/wiki/Imperative_programming) پروگرامنگ زبان سے ملتی جلتی ہے اور بولین متغیرات کو سپورٹ کرتی ہے۔ -آپ کی ایپلیکیشن کے لیے، مختلف ضروریات کے ساتھ، آپ [Circum](https://docs.circom.io/getting-started/installation/) یا [Cairo](https://www.cairo-lang.org/tutorials/getting-started-with-cairo/) کا استعمال کرنا پسند کر سکتے ہیں۔ +اپنی ایپلیکیشن کے لیے، مختلف ضروریات کے ساتھ، آپ [Circum](https://docs.circom.io/getting-started/installation/) یا [Cairo](https://www.cairo-lang.org/tutorials/getting-started-with-cairo/) استعمال کرنے کو ترجیح دے سکتے ہیں۔ -### Zokrates کو کب کمپائل کریں {#when-compile-zokrates} +### Zokrates کو کب مرتب (کمپائل) کیا جائے {#when-compile-zokrates} -اس پروگرام میں ہم Zokrates پروگراموں کو [ہر بار سرور شروع ہونے پر](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L60-L61) کمپائل کرتے ہیں۔ یہ واضح طور پر وسائل کا ضیاع ہے، لیکن یہ ایک ٹیوٹوریل ہے، جو سادگی کے لیے بہتر بنایا گیا ہے۔ +اس پروگرام میں ہم Zokrates پروگراموں کو [ہر بار سرور شروع ہونے پر](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L60-L61) مرتب کرتے ہیں۔ یہ واضح طور پر وسائل کا ضیاع ہے، لیکن یہ ایک ٹیوٹوریل ہے، جسے سادگی کے لیے بہتر بنایا گیا ہے۔ -اگر میں پروڈکشن لیول کی ایپلیکیشن لکھ رہا ہوتا، تو میں چیک کرتا کہ آیا میرے پاس اس مائن فیلڈ سائز پر کمپائل شدہ Zokrates پروگراموں کے ساتھ ایک فائل ہے، اور اگر ایسا ہے تو اسے استعمال کرتا۔ یہی بات آن چین پر ویریفائر کنٹریکٹ کی تعیناتی پر بھی لاگو ہوتی ہے۔ +اگر میں پروڈکشن لیول کی ایپلیکیشن لکھ رہا ہوتا، تو میں چیک کرتا کہ آیا میرے پاس اس مائن فیلڈ سائز پر مرتب شدہ Zokrates پروگراموں والی کوئی فائل ہے، اور اگر ایسا ہے تو اسے استعمال کرتا۔ آن چین تصدیق کنندہ کنٹریکٹ تعینات کرنے کے لیے بھی یہی بات درست ہے۔ -### ویریفائر اور پروور کیز بنانا {#key-creation} +### تصدیق کنندہ اور پروور کیز بنانا {#key-creation} -[کلید کی تخلیق](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L63-L69) ایک اور خالص حساب ہے جسے ایک دیے گئے مائن فیلڈ سائز کے لیے ایک سے زیادہ بار کرنے کی ضرورت نہیں ہے۔ ایک بار پھر، یہ صرف سادگی کی خاطر ایک بار کیا جاتا ہے۔ +[کلید کی تخلیق](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L63-L69) ایک اور خالص حساب کتاب ہے جسے دیے گئے مائن فیلڈ سائز کے لیے ایک سے زیادہ بار کرنے کی ضرورت نہیں ہے۔ ایک بار پھر، یہ سادگی کی خاطر صرف ایک بار کیا جاتا ہے۔ -مزید برآں، ہم [ایک سیٹ اپ تقریب](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) کا استعمال کر سکتے ہیں۔ ایک سیٹ اپ تقریب کا فائدہ یہ ہے کہ آپ کو زیرو نالج پروف پر دھوکہ دینے کے لیے یا تو اینٹروپی یا ہر شریک سے کچھ درمیانی نتیجہ کی ضرورت ہوتی ہے۔ اگر کم از کم ایک تقریب کا شریک ایماندار ہے اور اس معلومات کو حذف کر دیتا ہے، تو زیرو نالج پروف کچھ حملوں سے محفوظ ہیں۔ تاہم، یہ تصدیق کرنے کا _کوئی میکانزم_ نہیں ہے کہ معلومات کو ہر جگہ سے حذف کر دیا گیا ہے۔ اگر زیرو نالج پروف انتہائی اہم ہیں، تو آپ سیٹ اپ تقریب میں حصہ لینا چاہتے ہیں۔ +اس کے علاوہ، ہم [ایک سیٹ اپ تقریب](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) استعمال کر سکتے ہیں۔ سیٹ اپ تقریب کا فائدہ یہ ہے کہ آپ کو زیرو-نالج پروف پر دھوکہ دینے کے لیے ہر شریک سے اینٹروپی یا کچھ درمیانی نتیجہ درکار ہوتا ہے۔ اگر کم از کم ایک تقریب کا شریک ایماندار ہے اور اس معلومات کو حذف کر دیتا ہے، تو زیرو-نالج پروفز بعض حملوں سے محفوظ رہتے ہیں۔ تاہم، اس بات کی تصدیق کرنے کا _کوئی طریقہ کار نہیں_ ہے کہ معلومات کو ہر جگہ سے حذف کر دیا گیا ہے۔ اگر زیرو-نالج پروفز انتہائی اہم ہیں، تو آپ سیٹ اپ تقریب میں حصہ لینا چاہیں گے۔ -یہاں ہم [پرپیچوئل پاورز آف ٹاؤ](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) پر انحصار کرتے ہیں، جس میں درجنوں شرکاء تھے۔ یہ شاید کافی محفوظ ہے، اور بہت آسان ہے۔ ہم کلید کی تخلیق کے دوران اینٹروپی بھی شامل نہیں کرتے ہیں، جس سے صارفین کے لیے [زیرو نالج کنفیگریشن کی تصدیق کرنا](#user-verify-zero-trust) آسان ہو جاتا ہے۔ +یہاں ہم [perpetual powers of tau](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) پر انحصار کرتے ہیں، جس میں درجنوں شرکاء تھے۔ یہ شاید کافی محفوظ ہے، اور بہت آسان ہے۔ ہم کلید کی تخلیق کے دوران اینٹروپی بھی شامل نہیں کرتے ہیں، جس سے صارفین کے لیے [زیرو-نالج کنفیگریشن کی تصدیق کرنا](#user-verify-zero-trust) آسان ہو جاتا ہے۔ -### کہاں تصدیق کریں {#where-verification} +### تصدیق کہاں کی جائے {#where-verification} -ہم زیرو نالج پروف کو یا تو آن چین (جس پر گیس خرچ ہوتی ہے) یا کلائنٹ میں ( [`verify`](https://zokrates.github.io/toolbox/zokrates_js.html#verifyverificationkey-proof) کا استعمال کرتے ہوئے) تصدیق کر سکتے ہیں۔ میں نے پہلا انتخاب کیا، کیونکہ یہ آپ کو [ویریفائر کی تصدیق کرنے](#user-verify-zero-trust) کی اجازت دیتا ہے اور پھر اس بات پر بھروسہ کرتا ہے کہ جب تک اس کے لیے کنٹریکٹ کا پتہ وہی رہتا ہے، اس میں کوئی تبدیلی نہیں آتی ہے۔ اگر کلائنٹ پر تصدیق کی جاتی، تو آپ کو ہر بار کلائنٹ ڈاؤن لوڈ کرنے پر موصول ہونے والے کوڈ کی تصدیق کرنی پڑتی۔ +ہم زیرو-نالج پروفز کی تصدیق یا تو آن چین (جس پر گیس خرچ ہوتی ہے) یا کلائنٹ میں ([`verify`](https://zokrates.github.io/toolbox/zokrates_js.html#verifyverificationkey-proof) کا استعمال کرتے ہوئے) کر سکتے ہیں۔ میں نے پہلے کا انتخاب کیا، کیونکہ یہ آپ کو ایک بار [تصدیق کنندہ کی تصدیق کرنے](#user-verify-zero-trust) دیتا ہے اور پھر اس بات پر بھروسہ کرنے دیتا ہے کہ جب تک اس کا کنٹریکٹ ایڈریس یکساں رہتا ہے یہ تبدیل نہیں ہوتا۔ اگر تصدیق کلائنٹ پر کی گئی ہوتی، تو آپ کو ہر بار کلائنٹ ڈاؤن لوڈ کرنے پر موصول ہونے والے کوڈ کی تصدیق کرنی پڑتی۔ -نیز، جبکہ یہ گیم سنگل پلیئر ہے، بہت سے بلاک چین گیمز ملٹی پلیئر ہیں۔ آن چین تصدیق کا مطلب ہے کہ آپ صرف ایک بار زیرو نالج پروف کی تصدیق کرتے ہیں۔ اسے کلائنٹ میں کرنے کے لیے ہر کلائنٹ کو آزادانہ طور پر تصدیق کرنے کی ضرورت ہوگی۔ +اس کے علاوہ، اگرچہ یہ گیم سنگل پلیئر ہے، لیکن بہت سی بلاک چین گیمز ملٹی پلیئر ہوتی ہیں۔ آن چین تصدیق کا مطلب ہے کہ آپ زیرو-نالج پروف کی تصدیق صرف ایک بار کرتے ہیں۔ اسے کلائنٹ میں کرنے کے لیے ہر کلائنٹ کو آزادانہ طور پر تصدیق کرنے کی ضرورت ہوگی۔ -### نقشے کو TypeScript یا Zokrates میں فلیٹ کریں؟ {#where-flatten} +### نقشے کو TypeScript میں فلیٹ کریں یا Zokrates میں؟ {#where-flatten} -عام طور پر، جب پروسیسنگ یا تو TypeScript یا Zokrates میں کی جا سکتی ہے، تو اسے TypeScript میں کرنا بہتر ہے، جو بہت تیز ہے، اور زیرو نالج پروف کی ضرورت نہیں ہے۔ یہی وجہ ہے، مثال کے طور پر، کہ ہم Zokrates کو ہیش فراہم نہیں کرتے ہیں اور اسے یہ تصدیق کرنے کے لیے کہتے ہیں کہ یہ درست ہے۔ ہیشنگ کو Zokrates کے اندر کرنا پڑتا ہے، لیکن واپس کیے گئے ہیش اور آن چین ہیش کے درمیان مماثلت اس کے باہر ہو سکتی ہے۔ +عام طور پر، جب پروسیسنگ TypeScript یا Zokrates دونوں میں کی جا سکتی ہے، تو اسے TypeScript میں کرنا بہتر ہے، جو بہت تیز ہے، اور اس کے لیے زیرو-نالج پروفز کی ضرورت نہیں ہوتی ہے۔ مثال کے طور پر، یہی وجہ ہے کہ ہم Zokrates کو ہیش فراہم نہیں کرتے اور اس سے یہ تصدیق نہیں کرواتے کہ یہ درست ہے۔ ہیشنگ Zokrates کے اندر کی جانی چاہیے، لیکن واپس کیے گئے ہیش اور آن چین ہیش کے درمیان مماثلت اس کے باہر ہو سکتی ہے۔ -تاہم، ہم اب بھی [Zokrates میں نقشے کو فلیٹ کرتے ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L15-L20)، جبکہ ہم اسے TypeScript میں کر سکتے تھے۔ وجہ یہ ہے کہ دوسرے اختیارات، میری رائے میں، بدتر ہیں۔ +تاہم، ہم اب بھی [Zokrates میں نقشے کو فلیٹ کرتے ہیں](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L15-L20)، جبکہ ہم اسے TypeScript میں کر سکتے تھے۔ اس کی وجہ یہ ہے کہ میری رائے میں، دوسرے اختیارات بدتر ہیں۔ -- Zokrates کوڈ کو بولین کی ایک جہتی صف فراہم کریں، اور دو جہتی نقشہ حاصل کرنے کے لیے `x*(height+2) - +y` جیسے تاثر کا استعمال کریں۔ یہ [کوڈ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L44-L47) کو قدرے زیادہ پیچیدہ بنا دے گا، لہذا میں نے فیصلہ کیا کہ کارکردگی کا فائدہ ایک ٹیوٹوریل کے لیے اس کے قابل نہیں ہے۔ +- Zokrates کوڈ کو بولین کی ایک جہتی سرنی فراہم کریں، اور دو جہتی نقشہ حاصل کرنے کے لیے `x*(height+2)+y` جیسا اظہار استعمال کریں۔ اس سے [کوڈ](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L44-L47) کچھ زیادہ پیچیدہ ہو جائے گا، اس لیے میں نے فیصلہ کیا کہ ٹیوٹوریل کے لیے کارکردگی کا فائدہ اس کے قابل نہیں ہے۔ -- Zokrates کو ایک جہتی صف اور دو جہتی صف دونوں بھیجیں۔ تاہم، اس حل سے ہمیں کچھ حاصل نہیں ہوتا۔ Zokrates کوڈ کو یہ تصدیق کرنی ہوگی کہ اسے فراہم کردہ ایک جہتی صف واقعی دو جہتی صف کی صحیح نمائندگی ہے۔ تو کارکردگی میں کوئی فائدہ نہیں ہوگا۔ +- Zokrates کو ایک جہتی سرنی اور دو جہتی سرنی دونوں بھیجیں۔ تاہم، اس حل سے ہمیں کچھ حاصل نہیں ہوتا۔ Zokrates کوڈ کو اس بات کی تصدیق کرنی ہوگی کہ اسے فراہم کی گئی ایک جہتی سرنی واقعی دو جہتی سرنی کی درست نمائندگی ہے۔ اس لیے کارکردگی میں کوئی فائدہ نہیں ہوگا۔ -- Zokrates میں دو جہتی صف کو فلیٹ کریں۔ یہ سب سے آسان آپشن ہے، لہذا میں نے اسے منتخب کیا۔ +- Zokrates میں دو جہتی سرنی کو فلیٹ کریں۔ یہ سب سے آسان آپشن ہے، اس لیے میں نے اسے منتخب کیا۔ -### نقشوں کو کہاں اسٹور کریں {#where-store-maps} +### نقشے کہاں محفوظ کیے جائیں {#where-store-maps} -اس ایپلیکیشن میں [`gamesInProgress`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L20) صرف میموری میں ایک متغیر ہے۔ اس کا مطلب ہے کہ اگر آپ کا سرور مر جاتا ہے اور اسے دوبارہ شروع کرنے کی ضرورت ہے، تو اس میں محفوظ تمام معلومات ضائع ہو جاتی ہیں۔ نہ صرف کھلاڑی اپنا کھیل جاری رکھنے سے قاصر ہیں، بلکہ وہ نیا کھیل بھی شروع نہیں کر سکتے کیونکہ آن چین جزو سوچتا ہے کہ ان کا ابھی بھی ایک کھیل جاری ہے۔ +اس ایپلیکیشن میں [`gamesInProgress`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L20) میموری میں محض ایک متغیر ہے۔ اس کا مطلب ہے کہ اگر آپ کا سرور بند ہو جاتا ہے اور اسے دوبارہ شروع کرنے کی ضرورت ہوتی ہے، تو اس کی محفوظ کردہ تمام معلومات ضائع ہو جاتی ہیں۔ نہ صرف کھلاڑی اپنی گیم جاری رکھنے سے قاصر رہتے ہیں، بلکہ وہ نئی گیم بھی شروع نہیں کر سکتے کیونکہ آن چین جزو سمجھتا ہے کہ ان کی گیم ابھی بھی جاری ہے۔ -یہ واضح طور پر ایک پروڈکشن سسٹم کے لیے خراب ڈیزائن ہے، جس میں آپ اس معلومات کو ایک ڈیٹا بیس میں محفوظ کریں گے۔ میں نے یہاں ایک متغیر کا استعمال صرف اس لیے کیا کیونکہ یہ ایک ٹیوٹوریل ہے اور سادگی سب سے اہم غور ہے۔ +یہ واضح طور پر پروڈکشن سسٹم کے لیے برا ڈیزائن ہے، جس میں آپ اس معلومات کو ڈیٹا بیس میں محفوظ کریں گے۔ یہاں متغیر استعمال کرنے کی واحد وجہ یہ ہے کہ یہ ایک ٹیوٹوریل ہے اور سادگی بنیادی غور طلب بات ہے۔ ## نتیجہ: کن حالات میں یہ مناسب تکنیک ہے؟ {#conclusion} -تو، اب آپ جانتے ہیں کہ ایک سرور کے ساتھ ایک گیم کیسے لکھنا ہے جو خفیہ حالت کو اسٹور کرتا ہے جو آن چین سے تعلق نہیں رکھتا۔ لیکن کن معاملات میں آپ کو ایسا کرنا چاہیے؟ دو اہم غور ہیں۔ +تو، اب آپ جانتے ہیں کہ ایک ایسے سرور کے ساتھ گیم کیسے لکھی جائے جو خفیہ اسٹیٹ کو محفوظ کرتا ہے جس کا تعلق آن چین سے نہیں ہے۔ لیکن آپ کو کن صورتوں میں ایسا کرنا چاہیے؟ دو اہم غور طلب باتیں ہیں۔ -- _طویل چلنے والا کھیل_: [جیسا کہ اوپر ذکر کیا گیا ہے](#why-zero-knowledge)، ایک مختصر کھیل میں آپ صرف کھیل ختم ہونے کے بعد حالت کو شائع کر سکتے ہیں اور پھر ہر چیز کی تصدیق کروا سکتے ہیں۔ لیکن یہ ایک آپشن نہیں ہے جب کھیل میں لمبا یا غیر معینہ وقت لگتا ہے، اور حالت کو خفیہ رکھنے کی ضرورت ہے۔ +- _طویل چلنے والی گیم_: [جیسا کہ اوپر ذکر کیا گیا ہے](#why-zero-knowledge)، ایک مختصر گیم میں آپ گیم ختم ہونے کے بعد اسٹیٹ کو شائع کر سکتے ہیں اور پھر ہر چیز کی تصدیق کروا سکتے ہیں۔ لیکن یہ اس وقت کوئی آپشن نہیں ہوتا جب گیم طویل یا غیر معینہ وقت لیتی ہو، اور اسٹیٹ کو خفیہ رکھنے کی ضرورت ہو۔ -- _کچھ مرکزیت قابل قبول_: زیرو نالج پروف سالمیت کی تصدیق کر سکتے ہیں، کہ کوئی ادارہ نتائج کو جعلی نہیں بنا رہا ہے۔ جو وہ نہیں کر سکتے وہ یہ یقینی بنانا ہے کہ ادارہ اب بھی دستیاب ہوگا اور پیغامات کا جواب دے گا۔ ان حالات میں جہاں دستیابی کو بھی غیر مرکزی کرنے کی ضرورت ہے، زیرو نالج پروف ایک کافی حل نہیں ہیں، اور آپ کو [ملٹی پارٹی کمپیوٹیشن](https://en.wikipedia.org/wiki/Secure_multi-party_computation) کی ضرورت ہے۔ +- _کچھ مرکزیت قابل قبول ہے_: زیرو-نالج پروفز سالمیت کی تصدیق کر سکتے ہیں، کہ کوئی ہستی نتائج کو جعلی نہیں بنا رہی ہے۔ وہ جو نہیں کر سکتے وہ یہ یقینی بنانا ہے کہ ہستی اب بھی دستیاب ہوگی اور پیغامات کا جواب دے گی۔ ایسی صورتحال میں جہاں دستیابی کو بھی غیر مرکزی بنانے کی ضرورت ہو، زیرو-نالج پروفز کافی حل نہیں ہیں، اور آپ کو [ملٹی پارٹی کمپیوٹیشن](https://en.wikipedia.org/wiki/Secure_multi-party_computation) کی ضرورت ہوتی ہے۔ [میرے مزید کام کے لیے یہاں دیکھیں](https://cryptodocguy.pro/)۔ ### اعترافات {#acknowledgements} -- الوارو الونسو نے اس مضمون کا ایک مسودہ پڑھا اور Zokrates کے بارے میں میری کچھ غلط فہمیوں کو دور کیا۔ +- الوارو الونسو نے اس مضمون کا مسودہ پڑھا اور Zokrates کے بارے میں میری کچھ غلط فہمیوں کو دور کیا۔ -کوئی بھی باقی غلطیاں میری ذمہ داری ہیں۔ +باقی ماندہ کوئی بھی غلطی میری ذمہ داری ہے۔ \ No newline at end of file diff --git a/public/content/translations/ur/ethereum-forks/index.md b/public/content/translations/ur/ethereum-forks/index.md index 4c6dca17053..119baa1131c 100644 --- a/public/content/translations/ur/ethereum-forks/index.md +++ b/public/content/translations/ur/ethereum-forks/index.md @@ -1,69 +1,79 @@ --- title: "تمام ایتھیریم فورکس کی ٹائم لائن (2014 سے اب تک)" -description: "ایتھیریم بلاک چین کی تاریخ بشمول اہم سنگ میل، ریلیز، اور فورکس۔" -lang: ur-in +description: "ایتھیریم بلاک چین کی تاریخ جس میں اہم سنگ میل، ریلیزز اور فورکس شامل ہیں۔" +lang: ur sidebarDepth: 1 --- # تمام ایتھیریم فورکس کی ٹائم لائن (2014 سے اب تک) {#the-history-of-ethereum} -ایتھیریم بلاک چین کے تمام اہم سنگ میل، فورکس، اور اپ ڈیٹس کی ایک ٹائم لائن۔ +[Ethereum](/) بلاک چین کے تمام اہم سنگ میل، فورکس اور اپ ڈیٹس کی ٹائم لائن۔ - + -فورکس تب ہوتے ہیں جب نیٹ ورک میں بڑی تکنیکی اپ گریڈ یا تبدیلیاں کرنے کی ضرورت ہوتی ہے – یہ عام طور پر [ایتھیریم امپروومنٹ پروپوزلز (EIPs)](/eips/) سے پیدا ہوتے ہیں اور پروٹوکول کے "قواعد" کو بدل دیتے ہیں۔ +فورکس اس وقت ہوتے ہیں جب نیٹ ورک میں بڑی تکنیکی اپ گریڈز یا تبدیلیاں کرنے کی ضرورت ہوتی ہے – یہ عام طور پر [Ethereum Improvement Proposals (EIPs)](/eips/) سے نکلتے ہیں اور پروٹوکول کے "قواعد" کو تبدیل کرتے ہیں۔ -جب روایتی، مرکزی طور پر کنٹرول کیے جانے والے سافٹ ویئر میں اپ گریڈ کی ضرورت ہوتی ہے، تو کمپنی صرف آخری صارف کے لیے ایک نیا ورژن شائع کرتی ہے۔ بلاک چینز مختلف طریقے سے کام کرتی ہیں کیونکہ یہاں کوئی مرکزی ملکیت نہیں ہوتی۔ [Ethereum کلائنٹس](/developers/docs/nodes-and-clients/) کو نئے فورک قوانین کو نافذ کرنے کے لیے اپنے سافٹ ویئر کو اپ ڈیٹ کرنا ہوگا۔ اس کے علاوہ بلاک کریئٹرز (پروف-آف-ورک کی دنیا میں مائنرز، پروف-آف-اسٹیک کی دنیا میں ویلیڈیٹرز) اور نوڈز کو نئے قواعد کے مطابق بلاکس بنانا اور ان کی توثیق کرنی چاہیے۔ [کنسینسس میکانزم پر مزید](/developers/docs/consensus-mechanisms/) +جب روایتی، مرکزی کنٹرول والے سافٹ ویئر میں اپ گریڈ کی ضرورت ہوتی ہے، تو کمپنی آخری صارف کے لیے صرف ایک نیا ورژن شائع کر دیتی ہے۔ بلاک چینز مختلف طریقے سے کام کرتی ہیں کیونکہ ان کی کوئی مرکزی ملکیت نہیں ہوتی۔ [ایتھیریم کلائنٹس](/developers/docs/nodes-and-clients/) کو نئے فورک کے قواعد کو نافذ کرنے کے لیے اپنے سافٹ ویئر کو اپ ڈیٹ کرنا ضروری ہے۔ اس کے علاوہ بلاک بنانے والوں (proof-of-work کی دنیا میں مائنرز، proof-of-stake کی دنیا میں ویلیڈیٹرز) اور نوڈز کو نئے قواعد کے مطابق بلاکس بنانے اور توثیق کرنے کی ضرورت ہوتی ہے۔ [کنسینسس میکانزم کے بارے میں مزید](/developers/docs/consensus-mechanisms/) -یہ قاعدے کی تبدیلیاں نیٹ ورک میں عارضی تقسیم پیدا کر سکتی ہیں۔ نئے بلاکس نئے قواعد یا پرانے قواعد کے مطابق تیار کیے جا سکتے ہیں۔ فورکس پر عام طور پر پہلے سے اتفاق کیا جاتا ہے تاکہ کلائنٹس تبدیلیوں کو یکجا طور پر اپنائیں اور اپ گریڈ کے ساتھ والا فورک مرکزی چین بن جائے۔ تاہم، شاذ و نادر صورتوں میں، فورکس پر اختلافات نیٹ ورک کو مستقل طور پر تقسیم کرنے کا سبب بن سکتے ہیں – خاص طور پر DAO فورک کے ساتھ ایتھیریم کلاسک کی تخلیق۔ - - - - -ایتھیریم کی بنیاد بننے والا سافٹ ویئر دو حصوں پر مشتمل ہے، جنہیں [ایگزیکیوشن لیئر](/glossary/#execution-layer) اور [کنسینسس لیئر](/glossary/#consensus-layer) کہا جاتا ہے۔ - -**ایگزیکیوشن اپ گریڈ کا نام** - -2021 سے، **ایگزیکیوشن لیئر** کے اپ گریڈز کا نام تاریخی ترتیب میں [پچھلے Devcon مقامات](https://devcon.org/en/past-events/) کے شہر کے ناموں کے مطابق رکھا گیا ہے: - -| اپ گریڈ کا نام | Devcon سال | Devcon نمبر | اپ گریڈ کی تاریخ | -| -------------- | ---------- | ----------- | ---------------- | -| برلن | 2014 | 0 | 15 اپریل، 2021 | -| لندن | 2015 | I | 5 اگست، 2021 | -| شنگھائی | 2016 | II | 12 اپریل، 2023 | -| کینکن | 2017 | III | 13 مارچ، 2024 | -| **پراگ** | 2018 | IV | TBD - اگلا | -| _اوساکا_ | 2019 | V | TBD | -| _بوگوٹا_ | 2022 | VI | TBD | -| _بینکاک_ | 2024 | VII | TBD | - -**کنسینسس اپ گریڈ کا نام** +قواعد کی یہ تبدیلیاں نیٹ ورک میں عارضی تقسیم پیدا کر سکتی ہیں۔ نئے بلاکس نئے یا پرانے قواعد کے مطابق تیار کیے جا سکتے ہیں۔ فورکس پر عام طور پر وقت سے پہلے اتفاق کیا جاتا ہے تاکہ کلائنٹس متفقہ طور پر تبدیلیاں اپنائیں اور اپ گریڈز والا فورک مین چین بن جائے۔ تاہم، شاذ و نادر صورتوں میں، فورکس پر اختلافات نیٹ ورک کو مستقل طور پر تقسیم کرنے کا سبب بن سکتے ہیں – جس میں سب سے نمایاں DAO فورک کے ساتھ Ethereum Classic کی تخلیق ہے۔ -[بیکن چین](/glossary/#beacon-chain) کے آغاز کے بعد سے، **کنسینسس لیئر** کے اپ گریڈز کا نام آسمانی ستاروں کے نام پر رکھا گیا ہے جو حروف تہجی کی ترتیب میں آگے بڑھتے ہیں: - -| اپ گریڈ کا نام | اپ گریڈ کی تاریخ | -| ------------------------------------------------------------- | ---------------- | -| بیکن چین جینیسس | 1 دسمبر، 2020 | -| [Altair](https://en.wikipedia.org/wiki/Altair) | 27 اکتوبر، 2021 | -| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | 6 ستمبر، 2022 | -| [Capella](https://en.wikipedia.org/wiki/Capella) | 12 اپریل، 2023 | -| [Deneb](https://en.wikipedia.org/wiki/Deneb) | 13 مارچ، 2024 | -| [**Electra**](https://en.wikipedia.org/wiki/Electra_\(star\)) | TBD - اگلا | -| [_Fulu_](https://en.wikipedia.org/wiki/Fulu_\(star\)) | TBD | - -**مشترکہ نام** + -ایگزیکیوشن اور کنسینسس اپ گریڈز ابتدائی طور پر مختلف اوقات میں نافذ کیے گئے تھے، لیکن 2022 میں [دی مرج](/roadmap/merge/) کے بعد انہیں بیک وقت تعینات کیا گیا ہے۔ اسی طرح، ان اپ گریڈز کے حوالوں کو آسان بنانے کے لیے ایک ہی مشترکہ اصطلاح کا استعمال کرتے ہوئے عام بول چال کی اصطلاحات سامنے آئی ہیں۔ یہ _شنگھائی-کپیلا_ اپ گریڈ کے ساتھ شروع ہوا، جسے عام طور پر "**شپیلا**" کہا جاتا ہے، اور یہ _کینکن-دینیب_ (**ڈینکن**)، اور _پراگ-الیکٹرا_ (**پیکٹرا**) اپ گریڈز کے ساتھ جاری ہے۔ + + +ایتھیریم کا بنیادی سافٹ ویئر دو حصوں پر مشتمل ہے، جنہیں [ایگزیکیوشن لیئر](/glossary/#execution-layer) اور [کنسینسس لیئر](/glossary/#consensus-layer) کہا جاتا ہے۔ + +**ایگزیکیوشن اپ گریڈ کی نامزدگی** + +2021 سے، **ایگزیکیوشن لیئر** کے اپ گریڈز کو تاریخی ترتیب میں [پچھلے Devcon اور Devconnect کے مقامات](https://devcon.org/en/past-events/) کے شہروں کے ناموں کے مطابق نام دیا گیا ہے: + +| اپ گریڈ کا نام | Devcon(nect) کا سال | Devcon نمبر | اپ گریڈ کی تاریخ | +| -------------- | ----------------- | ------------- | ------------ | +| Berlin | 2014 | 0 | 15 اپریل 2021 | +| London | 2015 | I | 5 اگست 2021 | +| Shanghai | 2016 | II | 12 اپریل 2023 | +| Cancun | 2017 | III | 13 مارچ 2024 | +| Prague | 2018 | IV | 7 مئی 2025 | +| Osaka | 2019 | V | 3 دسمبر 2025 | +| **Amsterdam** | 2022 | Devconnect | TBD - Next | +| _Bogotá_ | 2022 | VI | TBD | +| _Istanbul_ | 2023 | Devconnect | TBD | +| _Bangkok_ | 2024 | VII | TBD | +| _Buenos Aires_ | 2025 | Devconnect | TBD | +| _Mumbai_ | 2026 | VIII | TBD | + +**کنسینسس اپ گریڈ کی نامزدگی** + +[بیکن چین](/glossary/#beacon-chain) کے آغاز کے بعد سے، **کنسینسس لیئر** کے اپ گریڈز کو حروف تہجی کی ترتیب سے شروع ہونے والے آسمانی ستاروں کے نام پر رکھا گیا ہے: + +| اپ گریڈ کا نام | اپ گریڈ کی تاریخ | +| --------------------------------------------------------- | ------------ | +| Beacon Chain genesis | 1 دسمبر 2020 | +| [Altair](https://en.wikipedia.org/wiki/Altair) | 27 اکتوبر 2021 | +| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | 6 ستمبر 2022 | +| [Capella](https://en.wikipedia.org/wiki/Capella) | 12 اپریل 2023 | +| [Deneb](https://en.wikipedia.org/wiki/Deneb) | 13 مارچ 2024 | +| [Electra]() | 7 مئی 2025 | +| [Fulu]() | 3 دسمبر 2025 | +| [**Gloas**](https://en.wikipedia.org/wiki/WASP-13) | TBD - Next | +| [_Heze_](https://en.wikipedia.org/wiki/Zeta_Virginis) | TBD | + +**مشترکہ نامزدگی** + +ایگزیکیوشن اور کنسینسس اپ گریڈز ابتدائی طور پر مختلف اوقات میں متعارف کرائے گئے تھے، لیکن 2022 میں [The Merge](/roadmap/merge/) کے بعد انہیں بیک وقت تعینات کیا گیا ہے۔ اس طرح، ایک ہی مشترکہ اصطلاح کا استعمال کرتے ہوئے ان اپ گریڈز کے حوالوں کو آسان بنانے کے لیے بول چال کی اصطلاحات ابھری ہیں۔ اس کا آغاز _Shanghai-Capella_ اپ گریڈ سے ہوا، جسے عام طور پر "**Shapella**" کہا جاتا ہے، اور یہ بعد کے اپ گریڈز کے ساتھ جاری ہے۔ + +| ایگزیکیوشن اپ گریڈ | کنسینسس اپ گریڈ | مختصر نام | +| ----------------- | ----------------- | ------------- | +| Shanghai | Capella | "Shapella" | +| Cancun | Deneb | "Dencun" | +| Prague | Electra | "Pectra" | +| Osaka | Fulu | "Fusaka" | +| Amsterdam | Gloas | "Glamsterdam" | +| Bogotá | Heze | "Hegotá" | -| ایگزیکیوشن اپ گریڈ | کنسینسس اپ گریڈ | مختصر نام | -| ------------------ | --------------- | ---------- | -| شنگھائی | Capella | "Shapella" | -| کینکن | Deneb | "Dencun" | -| پراگ | Electra | "Pectra" | -| اوساکا | Fulu | "Fusaka" | -کچھ خاص طور پر اہم ماضی کے اپ گریڈز کے بارے میں معلومات پر سیدھے جائیں: [دی بیکن چین](/roadmap/beacon-chain/)؛ [دی مرج](/roadmap/merge/)؛ اور [EIP-1559](#london) +ماضی کے کچھ خاص طور پر اہم اپ گریڈز کے بارے میں معلومات پر براہ راست جائیں: [The Beacon Chain](/roadmap/beacon-chain/)؛ [The Merge](/roadmap/merge/)؛ اور [EIP-1559](#london) مستقبل کے پروٹوکول اپ گریڈز تلاش کر رہے ہیں؟ [ایتھیریم روڈ میپ پر آنے والے اپ گریڈز کے بارے میں جانیں](/roadmap/)۔ @@ -75,51 +85,52 @@ sidebarDepth: 1 -[Fusaka پر مزید](/roadmap/fusaka/) +[Fusaka کے بارے میں مزید](/roadmap/fusaka/) ### Prague-Electra ("Pectra") {#pectra} -پراگ-الیکٹرا ("پیکٹرا") اپ گریڈ میں ایتھیریم پروٹوکول میں کئی بہتری شامل تھی جس کا مقصد تمام صارفین، لیئر 2 نیٹ ورکس، اسٹیکرز اور نوڈ آپریٹرز کے تجربے کو بڑھانا تھا۔ +Prague-Electra ("Pectra") اپ گریڈ میں ایتھیریم پروٹوکول میں کئی بہتری شامل ہیں جن کا مقصد تمام صارفین، لیئر 2 نیٹ ورکس، سٹیکرز اور نوڈ آپریٹرز کے تجربے کو بڑھانا ہے۔ -اسٹیکنگ کو کمپاؤنڈنگ ویلیڈیٹر اکاؤنٹس کے ساتھ اپ گریڈ کیا گیا، اور ایگزیکیوشن ودڈرال ایڈریس کا استعمال کرتے ہوئے اسٹیک شدہ فنڈز پر بہتر کنٹرول حاصل ہوا۔ EIP-7251 نے ایک واحد ویلیڈیٹر کے لیے زیادہ سے زیادہ مؤثر بیلنس کو 2048 تک بڑھا دیا، جس سے اسٹیکرز کے لیے سرمائے کی کارکردگی میں بہتری آئی۔ EIP-7002 نے ایک ایگزیکیوشن اکاؤنٹ کو ویلیڈیٹر کے اعمال کو محفوظ طریقے سے ٹرگر کرنے کے قابل بنایا، بشمول باہر نکلنا، یا فنڈز کے کچھ حصوں کو نکالنا، ETH اسٹیکرز کے تجربے کو بہتر بنانا، جبکہ نوڈ آپریٹرز کے لیے جوابدہی کو مضبوط کرنے میں مدد کرنا۔ +کمپاؤنڈنگ ویلیڈیٹر اکاؤنٹس کے ساتھ سٹیکنگ کو اپ گریڈ کیا گیا، اور ایگزیکیوشن کی واپسی کے پتے کا استعمال کرتے ہوئے سٹیک کیے گئے فنڈز پر کنٹرول کو بہتر بنایا گیا۔ EIP-7251 نے ایک ویلیڈیٹر کے لیے زیادہ سے زیادہ موثر بیلنس کو 2048 تک بڑھا دیا، جس سے سٹیکرز کے لیے سرمائے کی کارکردگی میں بہتری آئی۔ EIP-7002 نے ایک ایگزیکیوشن اکاؤنٹ کو محفوظ طریقے سے ویلیڈیٹر کے اعمال کو متحرک کرنے کے قابل بنایا، بشمول باہر نکلنا، یا فنڈز کے کچھ حصوں کو نکالنا، جس سے ETH سٹیکرز کے تجربے میں بہتری آئی، جبکہ نوڈ آپریٹرز کے لیے جوابدہی کو مضبوط بنانے میں مدد ملی۔ -اپ گریڈ کے دیگر حصوں نے عام صارفین کے تجربے کو بہتر بنانے پر توجہ مرکوز کی۔ EIP-7702 نے ایک باقاعدہ غیر اسمارٹ کنٹریکٹ اکاؤنٹ ([EOA](/glossary/#eoa)) کے لیے اسمارٹ کنٹریکٹ کی طرح کوڈ پر عمل درآمد کرنے کی صلاحیت لائی۔ اس نے روایتی ایتھیریم اکاؤنٹس کے لیے لامحدود نئی فعالیت کو کھول دیا، جیسے ٹرانزیکشن بیچنگ، گیس اسپانسرشپ، متبادل تصدیق، قابل پروگرام اخراجات کے کنٹرول، اکاؤنٹ ریکوری میکانزم اور بہت کچھ۔ +اپ گریڈ کے دیگر حصوں نے باقاعدہ صارفین کے تجربے کو بہتر بنانے پر توجہ مرکوز کی۔ EIP-7702 نے ایک باقاعدہ نان سمارٹ کنٹریکٹ اکاؤنٹ ([EOA](/glossary/#eoa)) کے لیے سمارٹ کنٹریکٹ کی طرح کوڈ پر عمل کرنے کی صلاحیت متعارف کرائی۔ اس نے روایتی ایتھیریم اکاؤنٹس کے لیے لامحدود نئی فعالیت کو کھول دیا، جیسے ٹرانزیکشن بیچنگ، گیس سپانسرشپ، متبادل تصدیق، قابل پروگرام اخراجات کے کنٹرول، اکاؤنٹ کی بازیابی کے طریقہ کار اور بہت کچھ۔ - + -سدھارنے صارف کا تجربہ: +بہتر صارف کا تجربہ:
  • EIP-7702 - EOA اکاؤنٹ کوڈ سیٹ کریں
  • -
  • EIP-7691 - بلاب تھروپٹ میں اضافہ
  • -
  • EIP-7623 - کال ڈیٹا لاگت میں اضافہ
  • -
  • EIP-7840 - EL کنفگ فائلوں میں بلاب شیڈول شامل کریں
  • +
  • EIP-7691 - Blob تھرو پٹ میں اضافہ
  • +
  • EIP-7623 - کال ڈیٹا کی لاگت میں اضافہ
  • +
  • EIP-7840 - EL کنفیگریشن فائلوں میں blob شیڈول شامل کریں
-بہتر اسٹیکنگ کا تجربہ: +بہتر سٹیکنگ کا تجربہ:
  • EIP-7251 - MAX_EFFECTIVE_BALANCE میں اضافہ کریں
  • -
  • EIP-7002 - ایگزیکیوشن لیئر ٹرگر ایبل ایگزٹس
  • -
  • EIP-7685 - عمومی مقصد کے ایگزیکیوشن لیئر کی درخواستیں
  • -
  • EIP-6110 - چین پر ویلیڈیٹر ڈپازٹس کی فراہمی
  • +
  • EIP-7002 - ایگزیکیوشن لیئر کے قابل محرک اخراج
  • +
  • EIP-7685 - عام مقصد کی ایگزیکیوشن لیئر کی درخواستیں
  • +
  • EIP-6110 - آن چین ویلیڈیٹر ڈپازٹس فراہم کریں
پروٹوکول کی کارکردگی اور سیکیورٹی میں بہتری:
    -
  • EIP-2537 - BLS12-381 کرو آپریشنز کے لیے پری کمپائل
  • -
  • EIP-2935 - اسٹیٹ میں تاریخی بلاک ہیشز کو محفوظ کریں
  • +
  • EIP-2537 - BLS12-381 کریو آپریشنز کے لیے پری کمپائل
  • +
  • EIP-2935 - تاریخی بلاک ہیشز کو سٹیٹ میں محفوظ کریں
  • EIP-7549 - کمیٹی انڈیکس کو Attestation سے باہر منتقل کریں
+
- [Pectra.wtf](https://pectra.wtf) -- [پیکٹرا اسٹیکنگ کے تجربے کو کیسے بہتر بنائے گا](https://www.kiln.fi/post/next-ethereum-upgrade-how-pectra-will-enhance-the-staking-experience) -- [الیکٹرا اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/electra/) -- [پراگ-الیکٹرا ("پیکٹرا") عمومی سوالات](/roadmap/pectra/) +- [Pectra سٹیکنگ کے تجربے کو کیسے بہتر بنائے گا](https://www.kiln.fi/post/next-ethereum-upgrade-how-pectra-will-enhance-the-staking-experience) +- [Electra اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/electra/) +- [Prague-Electra ("Pectra") کے اکثر پوچھے گئے سوالات](/roadmap/pectra/) @@ -129,50 +140,52 @@ sidebarDepth: 1 -#### کینکن کا خلاصہ {#cancun-summary} +#### Cancun کا خلاصہ {#cancun-summary} -کینکن اپ گریڈ میں ایتھیریم کے _ایگزیکیوشن_ میں بہتری کا ایک سیٹ شامل ہے جس کا مقصد اسکیل ایبلٹی کو بہتر بنانا ہے، ساتھ ہی دینیب کنسینسس اپ گریڈز کے ساتھ۔ +Cancun اپ گریڈ میں Deneb کنسینسس اپ گریڈز کے ساتھ مل کر، اسکیل ایبلٹی کو بہتر بنانے کے مقصد سے ایتھیریم کی _ایگزیکیوشن_ میں بہتری کا ایک مجموعہ شامل ہے۔ -خاص طور پر اس میں EIP-4844 شامل ہے، جسے **پروٹو-ڈینک شارڈنگ** کہا جاتا ہے، جو لیئر 2 رول اپس کے لیے ڈیٹا اسٹوریج کی لاگت کو نمایاں طور پر کم کرتا ہے۔ یہ ڈیٹا "بلابز" کے تعارف کے ذریعے حاصل کیا جاتا ہے جو رول اپس کو مختصر مدت کے لیے مین نیٹ پر ڈیٹا پوسٹ کرنے کے قابل بناتا ہے۔ اس کے نتیجے میں لیئر 2 رول اپس کے صارفین کے لیے ٹرانزیکشن فیس نمایاں طور پر کم ہو جاتی ہے۔ +خاص طور پر اس میں EIP-4844 شامل ہے، جسے **Proto-Danksharding** کے نام سے جانا جاتا ہے، جو لیئر 2 رول اپس کے لیے ڈیٹا سٹوریج کی لاگت کو نمایاں طور پر کم کرتا ہے۔ یہ ڈیٹا "blobs" کے تعارف کے ذریعے حاصل کیا گیا ہے جو رول اپس کو مختصر مدت کے لیے مین نیٹ پر ڈیٹا پوسٹ کرنے کے قابل بناتا ہے۔ اس کے نتیجے میں لیئر 2 رول اپس کے صارفین کے لیے ٹرانزیکشن فیس نمایاں طور پر کم ہو جاتی ہے۔ - +
    -
  • EIP-1153 - عارضی اسٹوریج آپ کوڈز
  • +
  • EIP-1153 - ٹرانزینٹ سٹوریج اوپ کوڈز
  • EIP-4788 - EVM میں بیکن بلاک روٹ
  • -
  • EIP-4844 - شارڈ بلاب ٹرانزیکشنز (پروٹو-ڈینک شارڈنگ)
  • +
  • EIP-4844 - شارڈ بلاب ٹرانزیکشنز (Proto-Danksharding)
  • EIP-5656 - MCOPY - میموری کاپی کرنے کی ہدایت
  • -
  • EIP-6780 - SELFDESTRUCT صرف اسی ٹرانزیکشن میں
  • -
  • EIP-7516 - BLOBBASEFEE آپ کوڈ
  • +
  • EIP-6780 - SELFDESTRUCT صرف ایک ہی ٹرانزیکشن میں
  • +
  • EIP-7516 - BLOBBASEFEE اوپ کوڈ
+
- [لیئر 2 رول اپس](/layer-2/) -- [پروٹو-ڈینک شارڈنگ](/roadmap/scaling/#proto-danksharding) -- [ڈینک شارڈنگ](/roadmap/danksharding/) -- [کینکن اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) +- [Proto-Danksharding](/roadmap/scaling/#proto-danksharding) +- [Danksharding](/roadmap/danksharding/) +- [Cancun اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) -#### دینیب کا خلاصہ {#deneb-summary} +#### Deneb کا خلاصہ {#deneb-summary} -دینیب اپ گریڈ میں ایتھیریم کے _کنسینسس_ میں بہتری کا ایک سیٹ شامل ہے جس کا مقصد اسکیل ایبلٹی کو بہتر بنانا ہے۔ یہ اپ گریڈ کینکن ایگزیکیوشن اپ گریڈز کے ساتھ مل کر پروٹو-ڈینک شارڈنگ (EIP-4844) کو فعال کرنے کے لیے آتا ہے، ساتھ ہی بیکن چین میں دیگر بہتریوں کے ساتھ۔ +Deneb اپ گریڈ میں اسکیل ایبلٹی کو بہتر بنانے کے مقصد سے ایتھیریم کے _کنسینسس_ میں بہتری کا ایک مجموعہ شامل ہے۔ یہ اپ گریڈ بیکن چین میں دیگر بہتریوں کے ساتھ، Proto-Danksharding (EIP-4844) کو فعال کرنے کے لیے Cancun ایگزیکیوشن اپ گریڈز کے ساتھ مل کر آتا ہے۔ -پہلے سے تیار کردہ دستخط شدہ "رضاکارانہ ایگزٹ میسجز" اب ایکسپائر نہیں ہوتے، اس طرح تیسرے فریق کے نوڈ آپریٹر کے ساتھ اپنے فنڈز کو اسٹیک کرنے والے صارفین کو زیادہ کنٹرول ملتا ہے۔ اس دستخط شدہ ایگزٹ میسج کے ساتھ، اسٹیکرز نوڈ آپریشن کو تفویض کر سکتے ہیں جبکہ کسی بھی وقت محفوظ طریقے سے باہر نکلنے اور اپنے فنڈز نکالنے کی صلاحیت کو برقرار رکھتے ہیں، بغیر کسی سے اجازت مانگے۔ +پہلے سے تیار کردہ دستخط شدہ "رضاکارانہ اخراج کے پیغامات" کی میعاد اب ختم نہیں ہوتی، اس طرح تھرڈ پارٹی نوڈ آپریٹر کے ساتھ اپنے فنڈز سٹیک کرنے والے صارفین کو زیادہ کنٹرول ملتا ہے۔ اس دستخط شدہ اخراج کے پیغام کے ساتھ، سٹیکرز کسی سے اجازت مانگنے کی ضرورت کے بغیر، کسی بھی وقت محفوظ طریقے سے باہر نکلنے اور اپنے فنڈز نکالنے کی صلاحیت کو برقرار رکھتے ہوئے نوڈ آپریشن تفویض کر سکتے ہیں۔ -EIP-7514 ETH کے اجراء میں سختی لاتا ہے جس میں "چرن" کی شرح کو محدود کیا جاتا ہے کہ ویلیڈیٹرز فی ایپوک آٹھ (8) تک نیٹ ورک میں شامل ہو سکتے ہیں۔ چونکہ ETH کا اجراء کل اسٹیک شدہ ETH کے متناسب ہے، اس لیے شامل ہونے والے ویلیڈیٹرز کی تعداد کو محدود کرنا نئے جاری کردہ ETH کی _شرح نمو_ کو محدود کرتا ہے، جبکہ نوڈ آپریٹرز کے لیے ہارڈویئر کی ضروریات کو بھی کم کرتا ہے، جس سے ڈی سینٹرلائزیشن میں مدد ملتی ہے۔ +EIP-7514 نیٹ ورک میں شامل ہونے والے ویلیڈیٹرز کی "چرن" (churn) کی شرح کو آٹھ (8) فی ایپوک (epoch) تک محدود کر کے ETH کے اجراء کو سخت کرتا ہے۔ چونکہ ETH کا اجراء کل سٹیک کیے گئے ETH کے متناسب ہے، اس لیے شامل ہونے والے ویلیڈیٹرز کی تعداد کو محدود کرنے سے نئے جاری کردہ ETH کی _شرح نمو_ محدود ہو جاتی ہے، جبکہ نوڈ آپریٹرز کے لیے ہارڈویئر کی ضروریات کو بھی کم کرتا ہے، جس سے ڈی سینٹرلائزیشن میں مدد ملتی ہے۔ - +
  • EIP-4788 - EVM میں بیکن بلاک روٹ
  • EIP-4844 - شارڈ بلاب ٹرانزیکشنز
  • -
  • EIP-7044 - مستقل طور پر درست دستخط شدہ رضاکارانہ ایگزٹس
  • -
  • EIP-7045 - زیادہ سے زیادہ اٹیسٹیشن انکلوژن سلاٹ میں اضافہ کریں
  • +
  • EIP-7044 - مستقل طور پر درست دستخط شدہ رضاکارانہ اخراج
  • +
  • EIP-7045 - زیادہ سے زیادہ attestation شمولیت کے سلاٹ میں اضافہ
  • EIP-7514 - زیادہ سے زیادہ ایپوک چرن کی حد شامل کریں
+
-- [دینیب اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/deneb/) -- [کینکن-دینیب ("ڈینکن") عمومی سوالات](/roadmap/dencun/) +- [Deneb اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/deneb/) +- [Cancun-Deneb ("Dencun") کے اکثر پوچھے گئے سوالات](/roadmap/dencun/) @@ -182,54 +195,56 @@ EIP-7514 ETH کے اجراء میں سختی لاتا ہے جس میں "چرن" -#### شنگھائی کا خلاصہ {#shanghai-summary} +#### Shanghai کا خلاصہ {#shanghai-summary} -شنگھائی اپ گریڈ نے ایگزیکیوشن لیئر میں اسٹیکنگ ودڈرالز کو لایا۔ کپیلا اپ گریڈ کے ساتھ مل کر، اس نے بلاکس کو ودڈرال آپریشنز قبول کرنے کے قابل بنایا، جو اسٹیکرز کو بیکن چین سے ایگزیکیوشن لیئر میں اپنے ETH نکالنے کی اجازت دیتا ہے۔ +Shanghai اپ گریڈ نے ایگزیکیوشن لیئر میں سٹیکنگ کی واپسی (withdrawals) متعارف کرائی۔ Capella اپ گریڈ کے ساتھ مل کر، اس نے بلاکس کو واپسی کے آپریشنز قبول کرنے کے قابل بنایا، جو سٹیکرز کو بیکن چین سے ایگزیکیوشن لیئر میں اپنا ETH نکالنے کی اجازت دیتا ہے۔ - +
    -
  • EIP-3651COINBASE ایڈریس کو وارم شروع کرتا ہے
  • +
  • EIP-3651COINBASE ایڈریس کو وارم (warm) شروع کرتا ہے
  • EIP-3855نئی PUSH0 ہدایت
  • -
  • EIP-3860انٹ کوڈ کو محدود اور میٹر کریں
  • -
  • EIP-4895بیکن چین پش ودڈرالز بطور آپریشنز
  • -
  • EIP-6049 - SELFDESTRUCT کو ڈیپریکیٹ کریں
  • +
  • EIP-3860initcode کو محدود اور میٹر کریں
  • +
  • EIP-4895بیکن چین پش کی واپسی بطور آپریشنز
  • +
  • EIP-6049 - SELFDESTRUCT کو متروک کریں
+
-- [شنگھائی اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) +- [Shanghai اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) -#### کپیلا کا خلاصہ {#capella-summary} +#### Capella کا خلاصہ {#capella-summary} -کپیلا اپ گریڈ کنسینسس لیئر (بیکن چین) کا تیسرا بڑا اپ گریڈ تھا اور اس نے اسٹیکنگ ودڈرالز کو فعال کیا۔ کپیلا ایگزیکیوشن لیئر اپ گریڈ، شنگھائی، کے ساتھ ہم آہنگی سے ہوا اور اس نے اسٹیکنگ ودڈرال کی فعالیت کو فعال کیا۔ +Capella اپ گریڈ کنسینسس لیئر (بیکن چین) کا تیسرا بڑا اپ گریڈ تھا اور اس نے سٹیکنگ کی واپسی کو فعال کیا۔ Capella ایگزیکیوشن لیئر اپ گریڈ، Shanghai کے ساتھ ہم آہنگی سے ہوا، اور سٹیکنگ کی واپسی کی فعالیت کو فعال کیا۔ -اس کنسینسس لیئر اپ گریڈ نے ان اسٹیکرز کے لیے یہ صلاحیت لائی جنہوں نے اپنے ابتدائی ڈپازٹ کے ساتھ ودڈرال کی اسناد فراہم نہیں کی تھیں کہ وہ ایسا کر سکیں، اس طرح ودڈرالز کو فعال کیا گیا۔ +اس کنسینسس لیئر اپ گریڈ نے ان سٹیکرز کے لیے صلاحیت متعارف کرائی جنہوں نے اپنے ابتدائی ڈپازٹ کے ساتھ واپسی کی اسناد فراہم نہیں کی تھیں تاکہ وہ ایسا کر سکیں، اس طرح واپسی کو فعال کیا گیا۔ -اپ گریڈ نے خودکار اکاؤنٹ سویپنگ کی فعالیت بھی فراہم کی، جو کسی بھی دستیاب انعامات کی ادائیگیوں یا مکمل ودڈرالز کے لیے ویلیڈیٹر اکاؤنٹس پر مسلسل کارروائی کرتی ہے۔ +اپ گریڈ نے خودکار اکاؤنٹ سویپنگ (sweeping) کی فعالیت بھی فراہم کی، جو کسی بھی دستیاب انعامات کی ادائیگیوں یا مکمل واپسی کے لیے ویلیڈیٹر اکاؤنٹس پر مسلسل کارروائی کرتی ہے۔ -- [اسٹیکنگ ودڈرالز پر مزید](/staking/withdrawals/)۔ -- [کپیلا اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/capella/) +- [سٹیکنگ کی واپسی کے بارے میں مزید](/staking/withdrawals/)۔ +- [Capella اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/capella/) ## 2022 {#2022} -### پیرس (دی مرج) {#paris} +### Paris (The Merge) {#paris} #### خلاصہ {#paris-summary} -پیرس اپ گریڈ پروف-آف-ورک بلاک چین کے 58750000000000000000000 کی [ٹرمینل ٹوٹل ڈفیکلٹی](/glossary/#terminal-total-difficulty) کو عبور کرنے سے شروع ہوا۔ یہ 15 ستمبر 2022 کو بلاک 15537393 پر ہوا، جس نے اگلے بلاک میں پیرس اپ گریڈ کو شروع کیا۔ پیرس [دی مرج](/roadmap/merge/) کی منتقلی تھی - اس کی سب سے بڑی خصوصیت [پروف-آف-ورک](/developers/docs/consensus-mechanisms/pow) مائننگ الگورتھم اور اس سے منسلک کنسینسس لاجک کو بند کرنا اور اس کے بجائے [پروف-آف-اسٹیک](/developers/docs/consensus-mechanisms/pos) کو آن کرنا تھا۔ پیرس خود [ایگزیکیوشن کلائنٹس](/developers/docs/nodes-and-clients/#execution-clients) (کنسینسس لیئر پر Bellatrix کے برابر) کا ایک اپ گریڈ تھا جس نے انہیں اپنے منسلک [کنسینسس کلائنٹس](/developers/docs/nodes-and-clients/#consensus-clients) سے ہدایات لینے کے قابل بنایا۔ اس کے لیے اندرونی API طریقوں کا ایک نیا سیٹ درکار تھا، جسے اجتماعی طور پر [انجن API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) کہا جاتا ہے، کو فعال کیا جائے۔ یہ [ہومسٹیڈ](#homestead) کے بعد ایتھیریم کی تاریخ میں سب سے اہم اپ گریڈ تھا! +Paris اپ گریڈ proof-of-work بلاک چین کے 58750000000000000000000 کی [ٹرمینل ٹوٹل ڈیفیکلٹی](/glossary/#terminal-total-difficulty) کو عبور کرنے سے متحرک ہوا۔ یہ 15 ستمبر 2022 کو بلاک 15537393 پر ہوا، جس نے اگلے بلاک پر Paris اپ گریڈ کو متحرک کیا۔ Paris [The Merge](/roadmap/merge/) کی منتقلی تھی - اس کی سب سے بڑی خصوصیت [proof-of-work](/developers/docs/consensus-mechanisms/pow) مائننگ الگورتھم اور اس سے منسلک کنسینسس لاجک کو بند کرنا اور اس کی بجائے [proof-of-stake](/developers/docs/consensus-mechanisms/pos) کو آن کرنا تھا۔ Paris بذات خود [ایگزیکیوشن کلائنٹس](/developers/docs/nodes-and-clients/#execution-clients) (کنسینسس لیئر پر Bellatrix کے مساوی) کا ایک اپ گریڈ تھا جس نے انہیں اپنے منسلک [کنسینسس کلائنٹس](/developers/docs/nodes-and-clients/#consensus-clients) سے ہدایات لینے کے قابل بنایا۔ اس کے لیے اندرونی API طریقوں کے ایک نئے سیٹ کو فعال کرنے کی ضرورت تھی، جسے اجتماعی طور پر [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) کہا جاتا ہے۔ یہ بلاشبہ [Homestead](#homestead) کے بعد ایتھیریم کی تاریخ کا سب سے اہم اپ گریڈ تھا! -- [پیرس اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) +- [Paris اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) - +
    -
  • EIP-3675کنسینسس کو پروف-آف-اسٹیک میں اپ گریڈ کریں
  • -
  • EIP-4399DIFFICULTY آپ کوڈ کو PREVRANDAO سے تبدیل کریں
  • +
  • EIP-3675کنسینسس کو Proof-of-Stake میں اپ گریڈ کریں
  • +
  • EIP-4399DIFFICULTY اوپ کوڈ کو PREVRANDAO سے تبدیل کریں
+
--- @@ -240,49 +255,51 @@ EIP-7514 ETH کے اجراء میں سختی لاتا ہے جس میں "چرن" #### خلاصہ {#bellatrix-summary} -بیلاٹرکس اپ گریڈ [بیکن چین](/roadmap/beacon-chain) کے لیے دوسرا طے شدہ اپ گریڈ تھا، جو چین کو [دی مرج](/roadmap/merge/) کے لیے تیار کرتا ہے۔ یہ ویلیڈیٹر کے جرمانے کو غیرفعالیت اور سلیش ایبل جرائم کے لیے ان کی پوری قدروں تک لاتا ہے۔ بیلاٹرکس میں فورک کے انتخاب کے قواعد میں ایک اپ ڈیٹ بھی شامل ہے تاکہ چین کو دی مرج اور آخری پروف-آف-ورک بلاک سے پہلے پروف-آف-اسٹیک بلاک میں منتقلی کے لیے تیار کیا جا سکے۔ اس میں کنسینسس کلائنٹس کو 58750000000000000000000 کی [ٹرمینل ٹوٹل ڈفیکلٹی](/glossary/#terminal-total-difficulty) سے آگاہ کرنا شامل ہے۔ +Bellatrix اپ گریڈ [بیکن چین](/roadmap/beacon-chain) کے لیے دوسرا شیڈول شدہ اپ گریڈ تھا، جو چین کو [The Merge](/roadmap/merge/) کے لیے تیار کر رہا تھا۔ یہ غیر فعالی اور قابل سزا (slashable) جرائم کے لیے ویلیڈیٹر کے جرمانوں کو ان کی مکمل اقدار تک لاتا ہے۔ Bellatrix میں فورک کے انتخاب کے قواعد میں ایک اپ ڈیٹ بھی شامل ہے تاکہ چین کو The Merge اور آخری proof-of-work بلاک سے پہلے proof-of-stake بلاک میں منتقلی کے لیے تیار کیا جا سکے۔ اس میں کنسینسس کلائنٹس کو 58750000000000000000000 کی [ٹرمینل ٹوٹل ڈیفیکلٹی](/glossary/#terminal-total-difficulty) سے آگاہ کرنا شامل ہے۔ -- [بیلاٹرکس اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/bellatrix) +- [Bellatrix اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/bellatrix) --- -### گرے گلیشیئر {#gray-glacier} +### Gray Glacier {#gray-glacier} #### خلاصہ {#gray-glacier-summary} -گرے گلیشیئر نیٹ ورک اپ گریڈ نے [ڈفیکلٹی بم](/glossary/#difficulty-bomb) کو تین ماہ پیچھے دھکیل دیا۔ یہ اس اپ گریڈ میں متعارف کرائی گئی واحد تبدیلی ہے، اور یہ [ایرو گلیشیئر](#arrow-glacier) اور [میور گلیشیئر](#muir-glacier) اپ گریڈز کی نوعیت سے ملتی جلتی ہے۔ اسی طرح کی تبدیلیاں [بازنطیم](#byzantium)، [کانسٹینٹینوپل](#constantinople) اور [لندن](#london) نیٹ ورک اپ گریڈز پر کی گئی ہیں۔ +Gray Glacier نیٹ ورک اپ گریڈ نے [ڈیفیکلٹی بم](/glossary/#difficulty-bomb) کو تین ماہ پیچھے دھکیل دیا۔ اس اپ گریڈ میں متعارف کرائی گئی یہ واحد تبدیلی ہے، اور یہ نوعیت میں [Arrow Glacier](#arrow-glacier) اور [Muir Glacier](#muir-glacier) اپ گریڈز سے ملتی جلتی ہے۔ اسی طرح کی تبدیلیاں [Byzantium](#byzantium)، [Constantinople](#constantinople) اور [London](#london) نیٹ ورک اپ گریڈز پر کی گئی ہیں۔ -- [ای ایف بلاگ - گرے گلیشیئر اپ گریڈ کا اعلان](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement) +- [EF بلاگ - Gray Glacier اپ گریڈ کا اعلان](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement) - +
    -
  • EIP-5133ڈفیکلٹی بم کو ستمبر 2022 تک موخر کرتا ہے
  • +
  • EIP-5133ڈیفیکلٹی بم کو ستمبر 2022 تک موخر کرتا ہے
+
## 2021 {#2021} -### ایرو گلیشیئر {#arrow-glacier} +### Arrow Glacier {#arrow-glacier} #### خلاصہ {#arrow-glacier-summary} -ایرو گلیشیئر نیٹ ورک اپ گریڈ نے [ڈفیکلٹی بم](/glossary/#difficulty-bomb) کو کئی ماہ پیچھے دھکیل دیا۔ یہ اس اپ گریڈ میں متعارف کرائی گئی واحد تبدیلی ہے، اور یہ [میور گلیشیئر](#muir-glacier) اپ گریڈ کی نوعیت سے ملتی جلتی ہے۔ اسی طرح کی تبدیلیاں [بازنطیم](#byzantium)، [کانسٹینٹینوپل](#constantinople) اور [لندن](#london) نیٹ ورک اپ گریڈز پر کی گئی ہیں۔ +Arrow Glacier نیٹ ورک اپ گریڈ نے [ڈیفیکلٹی بم](/glossary/#difficulty-bomb) کو کئی ماہ پیچھے دھکیل دیا۔ اس اپ گریڈ میں متعارف کرائی گئی یہ واحد تبدیلی ہے، اور یہ نوعیت میں [Muir Glacier](#muir-glacier) اپ گریڈ سے ملتی جلتی ہے۔ اسی طرح کی تبدیلیاں [Byzantium](#byzantium)، [Constantinople](#constantinople) اور [London](#london) نیٹ ورک اپ گریڈز پر کی گئی ہیں۔ -- [ای ایف بلاگ - ایرو گلیشیئر اپ گریڈ کا اعلان](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement) -- [ایتھیریم کیٹ ہرڈرز - ایتھیریم ایرو گلیشیئر اپ گریڈ](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) +- [EF بلاگ - Arrow Glacier اپ گریڈ کا اعلان](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement) +- [Ethereum Cat Herders - ایتھیریم Arrow Glacier اپ گریڈ](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) - +
    -
  • EIP-4345ڈفیکلٹی بم کو جون 2022 تک موخر کرتا ہے
  • +
  • EIP-4345ڈیفیکلٹی بم کو جون 2022 تک موخر کرتا ہے
+
--- @@ -293,89 +310,91 @@ EIP-7514 ETH کے اجراء میں سختی لاتا ہے جس میں "چرن" #### خلاصہ {#altair-summary} -Altair اپ گریڈ [بیکن چین](/roadmap/beacon-chain) کے لیے پہلا طے شدہ اپ گریڈ تھا۔ اس نے "سنک کمیٹیوں" کے لیے سپورٹ شامل کی—لائٹ کلائنٹس کو فعال کیا، اور ویلیڈیٹر کی غیرفعالیت اور سلیشنگ جرمانے میں اضافہ کیا جیسے جیسے ترقی دی مرج کی طرف بڑھی۔ +Altair اپ گریڈ [بیکن چین](/roadmap/beacon-chain) کے لیے پہلا شیڈول شدہ اپ گریڈ تھا۔ اس نے "سنک کمیٹیوں" (sync committees) کے لیے تعاون شامل کیا—جس سے لائٹ کلائنٹس فعال ہوئے، اور The Merge کی طرف ترقی کے ساتھ ساتھ ویلیڈیٹر کی غیر فعالی اور سلیشنگ (slashing) کے جرمانوں میں اضافہ ہوا۔ - [Altair اپ گریڈ کی تفصیلات پڑھیں](https://github.com/ethereum/consensus-specs/tree/master/specs/altair) -#### مزے کی بات! {#altair-fun-fact} +#### دلچسپ حقیقت! {#altair-fun-fact} -Altair پہلا بڑا نیٹ ورک اپ گریڈ تھا جس کا ایک عین رول آؤٹ وقت تھا۔ اس سے پہلے ہر اپ گریڈ پروف-آف-ورک چین پر ایک اعلان کردہ بلاک نمبر پر مبنی تھا، جہاں بلاک کا وقت مختلف ہوتا ہے۔ بیکن چین کو پروف-آف-ورک کے لیے حل کرنے کی ضرورت نہیں ہے، اور اس کے بجائے یہ وقت پر مبنی ایپوک سسٹم پر کام کرتا ہے جس میں 32 بارہ سیکنڈ کے "سلاٹس" ہوتے ہیں جہاں ویلیڈیٹرز بلاکس تجویز کر سکتے ہیں۔ اسی لیے ہم بالکل جانتے تھے کہ ہم ایپوک 74,240 پر کب پہنچیں گے اور Altair لائیو ہو جائے گا! +Altair پہلا بڑا نیٹ ورک اپ گریڈ تھا جس کا رول آؤٹ کا وقت بالکل درست تھا۔ اس سے پہلے کا ہر اپ گریڈ proof-of-work چین پر اعلان کردہ بلاک نمبر پر مبنی تھا، جہاں بلاک کے اوقات مختلف ہوتے ہیں۔ بیکن چین کو proof-of-work کو حل کرنے کی ضرورت نہیں ہے، اور اس کے بجائے یہ وقت پر مبنی ایپوک (epoch) سسٹم پر کام کرتا ہے جو 32 بارہ سیکنڈ کے "سلاٹس" پر مشتمل ہوتا ہے جہاں ویلیڈیٹرز بلاکس تجویز کر سکتے ہیں۔ یہی وجہ ہے کہ ہم بالکل جانتے تھے کہ ہم کب ایپوک 74,240 پر پہنچیں گے اور Altair لائیو ہو جائے گا! - [بلاک کا وقت](/developers/docs/blocks/#block-time) --- -### لندن {#london} +### London {#london} #### خلاصہ {#london-summary} -لندن اپ گریڈ نے [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) متعارف کرایا، جس نے ٹرانزیکشن فیس مارکیٹ میں اصلاحات کیں، ساتھ ہی گیس ریفنڈز کو سنبھالنے کے طریقے اور [آئس ایج](/glossary/#ice-age) شیڈول میں بھی تبدیلیاں کیں۔ +London اپ گریڈ نے [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) متعارف کرایا، جس نے ٹرانزیکشن فیس مارکیٹ میں اصلاحات کیں، اس کے ساتھ گیس ریفنڈز کو سنبھالنے کے طریقے اور [آئس ایج](/glossary/#ice-age) کے شیڈول میں تبدیلیاں کیں۔ -#### لندن اپ گریڈ / EIP-1559 کیا تھا؟ {#eip-1559} +#### London اپ گریڈ / EIP-1559 کیا تھا؟ {#eip-1559} -لندن اپ گریڈ سے پہلے، ایتھیریم میں فکسڈ سائز کے بلاکس تھے۔ زیادہ نیٹ ورک ڈیمانڈ کے وقت، یہ بلاکس پوری صلاحیت پر کام کرتے تھے۔ نتیجتاً، صارفین کو اکثر ایک بلاک میں شامل ہونے کے لیے ڈیمانڈ کم ہونے کا انتظار کرنا پڑتا تھا، جس سے صارف کا تجربہ خراب ہوتا تھا۔ لندن اپ گریڈ نے ایتھیریم میں متغیر سائز کے بلاکس متعارف کرائے۔ +London اپ گریڈ سے پہلے، ایتھیریم میں مقررہ سائز کے بلاکس تھے۔ نیٹ ورک کی زیادہ مانگ کے اوقات میں، یہ بلاکس پوری صلاحیت پر کام کرتے تھے۔ نتیجے کے طور پر، صارفین کو اکثر بلاک میں شامل ہونے کے لیے مانگ کم ہونے کا انتظار کرنا پڑتا تھا، جس کی وجہ سے صارف کا تجربہ خراب ہوتا تھا۔ London اپ گریڈ نے ایتھیریم میں متغیر سائز کے بلاکس متعارف کرائے۔ -ایتھیریم نیٹ ورک پر ٹرانزیکشن فیس کا حساب لگانے کا طریقہ اگست 2021 کے [لندن اپ گریڈ](/ethereum-forks/#london) کے ساتھ بدل گیا۔ لندن اپ گریڈ سے پہلے، فیس کا حساب `بیس` اور `ترجیحی` فیس کو الگ کیے بغیر کیا جاتا تھا، جیسا کہ ذیل میں ہے: +اگست 2021 کے [London اپ گریڈ](/ethereum-forks/#london) کے ساتھ ایتھیریم نیٹ ورک پر ٹرانزیکشن فیس کا حساب لگانے کا طریقہ بدل گیا۔ London اپ گریڈ سے پہلے، فیس کا حساب `base` اور `priority` فیس کو الگ کیے بغیر اس طرح لگایا جاتا تھا: -فرض کریں ایلس کو باب کو 1 ETH ادا کرنا ہے۔ ٹرانزیکشن میں، گیس کی حد 21,000 یونٹس ہے، اور گیس کی قیمت 200 gwei ہے۔ +فرض کریں کہ ایلس کو باب کو 1 ETH ادا کرنا تھا۔ ٹرانزیکشن میں، گیس کی حد 21,000 یونٹس ہے، اور گیس کی قیمت 200 gwei ہے۔ -کل فیس یہ ہوتی: `گیس یونٹس (حد) * فی یونٹ گیس کی قیمت` یعنی `21,000 * 200 = 4,200,000 gwei` یا 0.0042 ETH +کل فیس یہ ہوتی: `گیس یونٹس (حد) * گیس کی قیمت فی یونٹ` یعنی `21,000 * 200 = 4,200,000 gwei` یا 0.0042 ETH -لندن اپ گریڈ میں [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) کے نفاذ نے ٹرانزیکشن فیس کے میکانزم کو مزید پیچیدہ بنا دیا، لیکن گیس کی فیس کو زیادہ قابل قیاس بنا دیا، جس کے نتیجے میں ٹرانزیکشن فیس کی مارکیٹ زیادہ موثر ہو گئی۔ صارفین `maxFeePerGas` کے ساتھ ٹرانزیکشن جمع کر سکتے ہیں جو اس بات سے مطابقت رکھتا ہے کہ وہ ٹرانزیکشن کو انجام دینے کے لیے کتنی رقم ادا کرنے کو تیار ہیں، یہ جانتے ہوئے کہ وہ گیس کی مارکیٹ قیمت (`baseFeePerGas`) سے زیادہ ادا نہیں کریں گے، اور کوئی بھی اضافی رقم، اپنی ٹپ کو منہا کر کے، واپس حاصل کریں گے۔ +London اپ گریڈ میں [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) کے نفاذ نے ٹرانزیکشن فیس کے طریقہ کار کو مزید پیچیدہ بنا دیا، لیکن گیس کی فیس کو زیادہ قابل پیشین گوئی بنا دیا، جس کے نتیجے میں ٹرانزیکشن فیس کی مارکیٹ زیادہ موثر ہو گئی۔ صارفین ایک `maxFeePerGas` کے ساتھ ٹرانزیکشنز جمع کروا سکتے ہیں جو اس بات سے مطابقت رکھتا ہے کہ وہ ٹرانزیکشن کو انجام دینے کے لیے کتنی رقم ادا کرنے کو تیار ہیں، یہ جانتے ہوئے کہ وہ گیس کی مارکیٹ قیمت (`baseFeePerGas`) سے زیادہ ادا نہیں کریں گے، اور کوئی بھی اضافی رقم، ان کی ٹپ کو منہا کر کے، واپس کر دی جائے گی۔ -[EIP-1559 کی وضاحت](https://www.youtube.com/watch?v=MGemhK9t44Q) +یہ ویڈیو EIP-1559 اور اس کے فوائد کی وضاحت کرتی ہے: [EIP-1559 کی وضاحت](https://www.youtube.com/watch?v=MGemhK9t44Q) -- [کیا آپ ایک ڈیپ ڈیولپر ہیں؟ اپنی لائبریریوں اور ٹولنگ کو اپ گریڈ کرنا یقینی بنائیں۔](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) +- [کیا آپ ڈیپ (dapp) ڈویلپر ہیں؟ اپنی لائبریریوں اور ٹولنگ کو اپ گریڈ کرنا یقینی بنائیں۔](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) - [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2021/07/15/london-mainnet-announcement) -- [ایتھیریم کیٹ ہرڈر کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) +- [Ethereum Cat Herder کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) - +
  • EIP-1559ٹرانزیکشن فیس مارکیٹ کو بہتر بناتا ہے
  • -
  • EIP-3198ایک بلاک سے BASEFEE واپس کرتا ہے
  • +
  • EIP-3198بلاک سے BASEFEE واپس کرتا ہے
  • EIP-3529 - EVM آپریشنز کے لیے گیس ریفنڈز کو کم کرتا ہے
  • EIP-3541 - 0xEF سے شروع ہونے والے کنٹریکٹس کو تعینات کرنے سے روکتا ہے
  • EIP-3554آئس ایج کو دسمبر 2021 تک موخر کرتا ہے
+
--- -### برلن {#berlin} +### Berlin {#berlin} #### خلاصہ {#berlin-summary} -برلن اپ گریڈ نے کچھ EVM اعمال کے لیے گیس کی لاگت کو بہتر بنایا، اور متعدد ٹرانزیکشن اقسام کے لیے سپورٹ میں اضافہ کیا۔ +Berlin اپ گریڈ نے کچھ EVM اعمال کے لیے گیس کی لاگت کو بہتر بنایا، اور متعدد ٹرانزیکشن اقسام کے لیے تعاون میں اضافہ کیا۔ - [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement) -- [ایتھیریم کیٹ ہرڈر کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) +- [Ethereum Cat Herder کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) - +
  • EIP-2565ModExp گیس کی لاگت کو کم کرتا ہے
  • -
  • EIP-2718متعدد ٹرانزیکشن اقسام کے لیے آسان سپورٹ کو فعال کرتا ہے
  • -
  • EIP-2929اسٹیٹ ایکسس آپ کوڈز کے لیے گیس کی لاگت میں اضافہ
  • +
  • EIP-2718متعدد ٹرانزیکشن اقسام کے لیے آسان تعاون کو فعال کرتا ہے
  • +
  • EIP-2929سٹیٹ تک رسائی کے اوپ کوڈز کے لیے گیس کی لاگت میں اضافہ
  • EIP-2930اختیاری رسائی کی فہرستیں شامل کرتا ہے
+
## 2020 {#2020} -### بیکن چین جینیسس {#beacon-chain-genesis} +### بیکن چین کی ابتدا {#beacon-chain-genesis} #### خلاصہ {#beacon-chain-genesis-summary} -[بیکن چین](/roadmap/beacon-chain/) کو محفوظ طریقے سے بھیجنے کے لیے 32 اسٹیک شدہ ETH کے 16384 ڈپازٹس کی ضرورت تھی۔ یہ 27 نومبر کو ہوا، اور بیکن چین نے 1 دسمبر، 2020 کو بلاکس تیار کرنا شروع کر دیا۔ +[بیکن چین](/roadmap/beacon-chain/) کو محفوظ طریقے سے شروع کرنے کے لیے 32 سٹیک شدہ ETH کے 16384 ڈپازٹس کی ضرورت تھی۔ یہ 27 نومبر کو ہوا، اور بیکن چین نے 1 دسمبر 2020 کو بلاکس بنانا شروع کر دیے۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21) @@ -385,181 +404,187 @@ Altair پہلا بڑا نیٹ ورک اپ گریڈ تھا جس کا ایک عی --- -### اسٹیکنگ ڈپازٹ کنٹریکٹ تعینات کیا گیا {#staking-deposit-contract} +### سٹیکنگ ڈپازٹ کنٹریکٹ تعینات کیا گیا {#staking-deposit-contract} #### خلاصہ {#deposit-contract-summary} -اسٹیکنگ ڈپازٹ کنٹریکٹ نے ایتھیریم ایکو سسٹم میں [اسٹیکنگ](/glossary/#staking) متعارف کرائی۔ اگرچہ یہ ایک [مین نیٹ](/glossary/#mainnet) کنٹریکٹ تھا، لیکن اس کا [بیکن چین](/roadmap/beacon-chain/) کو لانچ کرنے کی ٹائم لائن پر براہ راست اثر پڑا، جو ایک اہم [ایتھیریم اپ گریڈ](/roadmap/) ہے۔ +سٹیکنگ ڈپازٹ کنٹریکٹ نے ایتھیریم ایکو سسٹم میں [سٹیکنگ](/glossary/#staking) متعارف کرائی۔ اگرچہ یہ ایک [مین نیٹ](/glossary/#mainnet) کنٹریکٹ تھا، لیکن اس کا [بیکن چین](/roadmap/beacon-chain/) کے آغاز کی ٹائم لائن پر براہ راست اثر پڑا، جو کہ ایک اہم [ایتھیریم اپ گریڈ](/roadmap/) ہے۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19) - اسٹیکنگ + سٹیکنگ --- -### میور گلیشیئر {#muir-glacier} +### Muir Glacier {#muir-glacier} #### خلاصہ {#muir-glacier-summary} -میور گلیشیئر فورک نے [ڈفیکلٹی بم](/glossary/#difficulty-bomb) میں تاخیر متعارف کرائی۔ [پروف-آف-ورک](/developers/docs/consensus-mechanisms/pow/) کنسینسس میکانزم کی بلاک ڈفیکلٹی میں اضافے نے ٹرانزیکشن بھیجنے اور ڈیپس استعمال کرنے کے انتظار کے اوقات کو بڑھا کر ایتھیریم کی استعمال پذیری کو کم کرنے کا خطرہ پیدا کیا۔ +Muir Glacier فورک نے [ڈیفیکلٹی بم](/glossary/#difficulty-bomb) میں تاخیر متعارف کرائی۔ [proof-of-work](/developers/docs/consensus-mechanisms/pow/) کنسینسس میکانزم کی بلاک ڈیفیکلٹی میں اضافے نے ٹرانزیکشنز بھیجنے اور ڈیپس (dapps) استعمال کرنے کے انتظار کے اوقات میں اضافہ کر کے ایتھیریم کے استعمال کو کم کرنے کا خطرہ پیدا کر دیا تھا۔ - [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement) -- [ایتھیریم کیٹ ہرڈر کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) +- [Ethereum Cat Herder کی وضاحت پڑھیں](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) - +
    -
  • EIP-2384ڈفیکلٹی بم کو مزید 4,000,000 بلاکس، یا ~611 دنوں کے لیے موخر کرتا ہے۔
  • +
  • EIP-2384ڈیفیکلٹی بم کو مزید 4,000,000 بلاکس، یا ~611 دنوں کے لیے موخر کرتا ہے۔
+
## 2019 {#2019} -### استنبول {#istanbul} +### Istanbul {#istanbul} #### خلاصہ {#istanbul-summary} -استنبول فورک: +Istanbul فورک: - [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine) میں کچھ اعمال کی [گیس](/glossary/#gas) کی لاگت کو بہتر بنایا۔ -- ڈینیئل-آف-سروس حملے کی لچک کو بہتر بنایا۔ -- SNARKs اور STARKs پر مبنی [لیئر 2 اسکیلنگ](/developers/docs/scaling/#layer-2-scaling) حل کو زیادہ کارکرد بنایا۔ -- ایتھیریم اور Zcash کو آپس میں کام کرنے کے قابل بنایا۔ +- ڈینائل آف سروس (denial-of-service) حملوں کے خلاف لچک کو بہتر بنایا۔ +- SNARKs اور STARKs پر مبنی [لیئر 2 اسکیلنگ](/developers/docs/scaling/#layer-2-scaling) کے حل کو زیادہ کارآمد بنایا۔ +- ایتھیریم اور Zcash کو ایک دوسرے کے ساتھ کام کرنے کے قابل بنایا۔ - کنٹریکٹس کو مزید تخلیقی افعال متعارف کرانے کی اجازت دی۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement) - +
    -
  • EIP-152ایتھیریم کو Zcash جیسی پرائیویسی محفوظ رکھنے والی کرنسی کے ساتھ کام کرنے کی اجازت دیتا ہے۔
  • +
  • EIP-152ایتھیریم کو Zcash جیسی پرائیویسی محفوظ کرنے والی کرنسی کے ساتھ کام کرنے کی اجازت دیتا ہے۔
  • EIP-1108[گیس](/glossary/#gas) کی لاگت کو بہتر بنانے کے لیے سستی کرپٹوگرافی۔
  • -
  • EIP-1344CHAINID [آپ کوڈ](/developers/docs/ethereum-stack/#ethereum-virtual-machine) شامل کرکے ایتھیریم کو ری پلے حملوں سے بچاتا ہے۔
  • -
  • EIP-1884کھپت کی بنیاد پر آپ کوڈ گیس کی قیمتوں کو بہتر بنانا۔
  • -
  • EIP-2028کال ڈیٹا کی لاگت کو کم کرتا ہے تاکہ بلاکس میں زیادہ ڈیٹا کی اجازت دی جا سکے – [لیئر 2 اسکیلنگ](/developers/docs/scaling/#layer-2-scaling) کے لیے اچھا ہے۔
  • -
  • EIP-2200دیگر آپ کوڈ گیس کی قیمت میں تبدیلیاں۔
  • +
  • EIP-1344CHAINID [اوپ کوڈ](/developers/docs/ethereum-stack/#ethereum-virtual-machine) شامل کر کے ایتھیریم کو ری پلے (replay) حملوں سے بچاتا ہے۔
  • +
  • EIP-1884کھپت کی بنیاد پر اوپ کوڈ گیس کی قیمتوں کو بہتر بنانا۔
  • +
  • EIP-2028بلاکس میں مزید ڈیٹا کی اجازت دینے کے لیے CallData کی لاگت کو کم کرتا ہے – [لیئر 2 اسکیلنگ](/developers/docs/scaling/#layer-2-scaling) کے لیے اچھا ہے۔
  • +
  • EIP-2200دیگر اوپ کوڈ گیس کی قیمتوں میں تبدیلیاں۔
+
--- -### کانسٹینٹینوپل {#constantinople} +### Constantinople {#constantinople} #### خلاصہ {#constantinople-summary} -کانسٹینٹینوپل فورک: +Constantinople فورک: -- بلاک [مائننگ](/developers/docs/consensus-mechanisms/pow/mining/) کے انعامات کو 3 سے 2 ETH تک کم کر دیا۔ -- یقینی بنایا کہ [پروف-آف-اسٹیک کے نفاذ](#beacon-chain-genesis) سے پہلے بلاک چین منجمد نہ ہو۔ +- بلاک [مائننگ](/developers/docs/consensus-mechanisms/pow/mining/) کے انعامات کو 3 سے کم کر کے 2 ETH کر دیا۔ +- اس بات کو یقینی بنایا کہ [proof-of-stake کے نفاذ](#beacon-chain-genesis) سے پہلے بلاک چین منجمد نہ ہو۔ - [EVM](/developers/docs/ethereum-stack/#ethereum-virtual-machine) میں کچھ اعمال کی [گیس](/glossary/#gas) کی لاگت کو بہتر بنایا۔ -- ان ایڈریسز کے ساتھ تعامل کرنے کی صلاحیت شامل کی جو ابھی تک نہیں بنائے گئے ہیں۔ +- ان پتوں کے ساتھ تعامل کرنے کی صلاحیت شامل کی جو ابھی تک نہیں بنائے گئے ہیں۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement) - +
  • EIP-145کچھ آن چین اعمال کی لاگت کو بہتر بناتا ہے۔
  • -
  • EIP-1014آپ کو ان ایڈریسز کے ساتھ تعامل کرنے کی اجازت دیتا ہے جو ابھی تک نہیں بنائے گئے ہیں۔
  • -
  • EIP-1052دوسرے کنٹریکٹ کے کوڈ کا ہیش حاصل کرنے کے لیے EXTCODEHASH ہدایت متعارف کراتا ہے۔
  • -
  • EIP-1234یقینی بناتا ہے کہ پروف-آف-اسٹیک سے پہلے بلاک چین منجمد نہ ہو اور بلاک انعام کو 3 سے 2 ETH تک کم کرتا ہے۔
  • +
  • EIP-1014آپ کو ان پتوں کے ساتھ تعامل کرنے کی اجازت دیتا ہے جو ابھی تک نہیں بنائے گئے ہیں۔
  • +
  • EIP-1052کسی دوسرے کنٹریکٹ کے کوڈ کا ہیش بازیافت کرنے کے لیے EXTCODEHASH ہدایت متعارف کراتا ہے۔
  • +
  • EIP-1234اس بات کو یقینی بناتا ہے کہ proof-of-stake سے پہلے بلاک چین منجمد نہ ہو اور بلاک کے انعام کو 3 سے کم کر کے 2 ETH کر دیتا ہے۔
+
## 2017 {#2017} -### بازنطیم {#byzantium} +### Byzantium {#byzantium} #### خلاصہ {#byzantium-summary} -بازنطیم فورک: +Byzantium فورک: -- بلاک [مائننگ](/developers/docs/consensus-mechanisms/pow/mining/) کے انعامات کو 5 سے 3 ETH تک کم کر دیا۔ -- [ڈفیکلٹی بم](/glossary/#difficulty-bomb) کو ایک سال کے لیے موخر کر دیا۔ -- دوسرے کنٹریکٹس کو غیر-اسٹیٹ تبدیل کرنے والی کالز کرنے کی صلاحیت شامل کی۔ +- بلاک [مائننگ](/developers/docs/consensus-mechanisms/pow/mining/) کے انعامات کو 5 سے کم کر کے 3 ETH کر دیا۔ +- [ڈیفیکلٹی بم](/glossary/#difficulty-bomb) کو ایک سال کے لیے موخر کر دیا۔ +- دوسرے کنٹریکٹس کو نان سٹیٹ چینجنگ (non-state-changing) کالز کرنے کی صلاحیت شامل کی۔ - [لیئر 2 اسکیلنگ](/developers/docs/scaling/#layer-2-scaling) کی اجازت دینے کے لیے کچھ کرپٹوگرافی کے طریقے شامل کیے۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement) - +
    -
  • EIP-140REVERT آپ کوڈ شامل کرتا ہے۔
  • -
  • EIP-658کامیابی یا ناکامی کی نشاندہی کرنے کے لیے ٹرانزیکشن کی رسیدوں میں اسٹیٹس فیلڈ شامل کیا گیا۔
  • -
  • EIP-196[ZK-Snarks](/developers/docs/scaling/zk-rollups/) کی اجازت دینے کے لیے بیضوی کرو اور اسکیلر ضرب کو شامل کرتا ہے۔
  • -
  • EIP-197[ZK-Snarks](/developers/docs/scaling/zk-rollups/) کی اجازت دینے کے لیے بیضوی کرو اور اسکیلر ضرب کو شامل کرتا ہے۔
  • +
  • EIP-140REVERT اوپ کوڈ شامل کرتا ہے۔
  • +
  • EIP-658کامیابی یا ناکامی کی نشاندہی کرنے کے لیے ٹرانزیکشن کی رسیدوں میں سٹیٹس فیلڈ شامل کی گئی۔
  • +
  • EIP-196[ZK-Snarks](/developers/docs/scaling/zk-rollups/) کی اجازت دینے کے لیے ایلیپٹک کریو (elliptic curve) اور اسکیلر ضرب شامل کرتا ہے۔
  • +
  • EIP-197[ZK-Snarks](/developers/docs/scaling/zk-rollups/) کی اجازت دینے کے لیے ایلیپٹک کریو اور اسکیلر ضرب شامل کرتا ہے۔
  • EIP-198RSA دستخط کی تصدیق کو فعال کرتا ہے۔
  • -
  • EIP-211متغیر لمبائی کی واپسی کی قدروں کے لیے سپورٹ شامل کرتا ہے۔
  • -
  • EIP-214STATICCALL آپ کوڈ شامل کرتا ہے، جو دوسرے کنٹریکٹس کو غیر-اسٹیٹ تبدیل کرنے والی کالز کی اجازت دیتا ہے۔
  • -
  • EIP-100ڈفیکلٹی ایڈجسٹمنٹ فارمولے کو تبدیل کرتا ہے۔
  • -
  • EIP-649[ڈفیکلٹی بم](/glossary/#difficulty-bomb) کو 1 سال کے لیے موخر کرتا ہے اور بلاک انعام کو 5 سے 3 ETH تک کم کرتا ہے۔
  • +
  • EIP-211متغیر لمبائی کی واپسی کی اقدار کے لیے تعاون شامل کرتا ہے۔
  • +
  • EIP-214STATICCALL اوپ کوڈ شامل کرتا ہے، جو دوسرے کنٹریکٹس کو نان سٹیٹ چینجنگ کالز کی اجازت دیتا ہے۔
  • +
  • EIP-100ڈیفیکلٹی ایڈجسٹمنٹ کے فارمولے کو تبدیل کرتا ہے۔
  • +
  • EIP-649[ڈیفیکلٹی بم](/glossary/#difficulty-bomb) کو 1 سال کے لیے موخر کرتا ہے اور بلاک کے انعام کو 5 سے کم کر کے 3 ETH کر دیتا ہے۔
+
## 2016 {#2016} -### اسپیوریس ڈریگن {#spurious-dragon} +### Spurious Dragon {#spurious-dragon} #### خلاصہ {#spurious-dragon-summary} -اسپیوریس ڈریگن فورک نیٹ ورک پر ڈینیئل آف سروس (DoS) حملوں (ستمبر/اکتوبر 2016) کا دوسرا جواب تھا جس میں شامل ہیں: +Spurious Dragon فورک نیٹ ورک پر ڈینائل آف سروس (DoS) حملوں (ستمبر/اکتوبر 2016) کا دوسرا ردعمل تھا جس میں شامل ہیں: -- نیٹ ورک پر مستقبل کے حملوں کو روکنے کے لیے آپ کوڈ کی قیمتوں کو ٹیون کرنا۔ -- بلاک چین اسٹیٹ کے "ڈی بلوٹ" کو فعال کرنا۔ -- ری پلے حملے سے تحفظ شامل کرنا۔ +- نیٹ ورک پر مستقبل کے حملوں کو روکنے کے لیے اوپ کوڈ کی قیمتوں کا تعین کرنا۔ +- بلاک چین کی سٹیٹ کے "ڈی بلوٹ" (debloat) کو فعال کرنا۔ +- ری پلے (replay) حملے سے تحفظ شامل کرنا۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon) - +
    -
  • EIP-155ایک ایتھیریم چین سے ٹرانزیکشنز کو متبادل چین پر دوبارہ نشر ہونے سے روکتا ہے، مثال کے طور پر ایک ٹیسٹ نیٹ ٹرانزیکشن کو مرکزی ایتھیریم چین پر دوبارہ چلایا جانا۔
  • -
  • EIP-160EXP آپ کوڈ کی قیمتوں کو ایڈجسٹ کرتا ہے – کمپیوٹیشنل طور پر مہنگے کنٹریکٹ آپریشنز کے ذریعے نیٹ ورک کو سست کرنا زیادہ مشکل بناتا ہے۔
  • -
  • EIP-161DoS حملوں کے ذریعے شامل کیے گئے خالی اکاؤنٹس کو ہٹانے کی اجازت دیتا ہے۔
  • -
  • EIP-170بلاک چین پر ایک کنٹریکٹ کے لیے زیادہ سے زیادہ کوڈ سائز کو تبدیل کرتا ہے – 24576 بائٹس تک۔
  • +
  • EIP-155ایک ایتھیریم چین کی ٹرانزیکشنز کو متبادل چین پر دوبارہ نشر ہونے سے روکتا ہے، مثال کے طور پر مین ایتھیریم چین پر ٹیسٹ نیٹ ٹرانزیکشن کا ری پلے ہونا۔
  • +
  • EIP-160EXP اوپ کوڈ کی قیمتوں کو ایڈجسٹ کرتا ہے – کمپیوٹیشنل طور پر مہنگے کنٹریکٹ آپریشنز کے ذریعے نیٹ ورک کو سست کرنا زیادہ مشکل بناتا ہے۔
  • +
  • EIP-161DOS حملوں کے ذریعے شامل کیے گئے خالی اکاؤنٹس کو ہٹانے کی اجازت دیتا ہے۔
  • +
  • EIP-170بلاک چین پر کنٹریکٹ کے زیادہ سے زیادہ کوڈ سائز کو تبدیل کر کے 24576 بائٹس کر دیتا ہے۔
+
--- -### ٹینجرین وسل {#tangerine-whistle} +### Tangerine whistle {#tangerine-whistle} #### خلاصہ {#tangerine-whistle-summary} -ٹینجرین وسل فورک نیٹ ورک پر ڈینیئل آف سروس (DoS) حملوں (ستمبر/اکتوبر 2016) کا پہلا جواب تھا جس میں شامل ہیں: +Tangerine Whistle فورک نیٹ ورک پر ڈینائل آف سروس (DoS) حملوں (ستمبر/اکتوبر 2016) کا پہلا ردعمل تھا جس میں شامل ہیں: - کم قیمت والے آپریشن کوڈز سے متعلق نیٹ ورک کی صحت کے فوری مسائل کو حل کرنا۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork) - +
    -
  • EIP-150اسپام حملوں میں استعمال ہونے والے آپ کوڈز کی گیس کی لاگت میں اضافہ کرتا ہے۔
  • -
  • EIP-158ایتھیریم پروٹوکول کے پہلے ورژن میں خامیوں کی وجہ سے بہت کم لاگت پر اسٹیٹ میں ڈالے گئے بڑی تعداد میں خالی اکاؤنٹس کو ہٹا کر اسٹیٹ کے سائز کو کم کرتا ہے۔
  • +
  • EIP-150ان اوپ کوڈز کی گیس کی لاگت میں اضافہ کرتا ہے جو سپیم حملوں میں استعمال ہو سکتے ہیں۔
  • +
  • EIP-158بڑی تعداد میں خالی اکاؤنٹس کو ہٹا کر سٹیٹ کے سائز کو کم کرتا ہے جو ایتھیریم پروٹوکول کے ابتدائی ورژن میں خامیوں کی وجہ سے بہت کم قیمت پر سٹیٹ میں ڈالے گئے تھے۔
+
--- @@ -570,59 +595,60 @@ Altair پہلا بڑا نیٹ ورک اپ گریڈ تھا جس کا ایک عی #### خلاصہ {#dao-fork-summary} -DAO فورک [2016 DAO حملے](https://www.coindesk.com/learn/understanding-the-dao-attack/) کے جواب میں تھا جہاں ایک غیر محفوظ [DAO](/glossary/#dao) کنٹریکٹ سے ایک ہیک میں 3.6 ملین سے زیادہ ETH نکال لیے گئے تھے۔ فورک نے فنڈز کو ناقص کنٹریکٹ سے ایک [نئے کنٹریکٹ](https://eth.blockscout.com/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754) میں منتقل کر دیا جس کا ایک ہی فنکشن تھا: ودڈرا۔ جس نے بھی فنڈز کھوئے تھے وہ اپنے بٹوے میں ہر 100 DAO ٹوکن کے لیے 1 ETH نکال سکتا تھا۔ +DAO فورک [2016 کے DAO حملے](https://www.coindesk.com/learn/understanding-the-dao-attack/) کے جواب میں تھا جہاں ایک غیر محفوظ [DAO](/glossary/#dao) کنٹریکٹ سے ہیک کے ذریعے 3.6 ملین سے زیادہ ETH نکال لیے گئے تھے۔ فورک نے فنڈز کو ناقص کنٹریکٹ سے ایک [نئے کنٹریکٹ](https://eth.blockscout.com/address/0xbf4ed7b27f1d666546e30d74d50d173d20bca754) میں منتقل کر دیا جس کا ایک ہی فنکشن تھا: نکالنا (withdraw)۔ جس کسی کے بھی فنڈز ضائع ہوئے وہ اپنے بٹوے میں موجود ہر 100 DAO ٹوکنز کے بدلے 1 ETH نکال سکتا تھا۔ -اس کارروائی پر Ethereum کمیونٹی نے ووٹ دیا تھا۔ کوئی بھی ETH ہولڈر [ووٹنگ پلیٹ فارم](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/) پر ٹرانزیکشن کے ذریعے ووٹ دے سکتا تھا۔ فورک کرنے کے فیصلے کو 85% سے زیادہ ووٹ ملے۔ +اس لائحہ عمل پر ایتھیریم کمیونٹی نے ووٹ دیا۔ کوئی بھی ETH ہولڈر [ایک ووٹنگ پلیٹ فارم](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/) پر ٹرانزیکشن کے ذریعے ووٹ دینے کے قابل تھا۔ فورک کرنے کا فیصلہ 85% سے زیادہ ووٹوں تک پہنچ گیا۔ -کچھ مائنرز نے فورک کرنے سے انکار کر دیا کیونکہ DAO واقعہ پروٹوکول میں کوئی خرابی نہیں تھی۔ انہوں نے [Ethereum Classic](https://ethereumclassic.org/) تشکیل دی۔ +کچھ مائنرز نے فورک کرنے سے انکار کر دیا کیونکہ DAO کا واقعہ پروٹوکول میں کوئی نقص نہیں تھا۔ انہوں نے آگے بڑھ کر [Ethereum Classic](https://ethereumclassic.org/) تشکیل دیا۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2016/07/20/hard-fork-completed) --- -### ہومسٹیڈ {#homestead} +### Homestead {#homestead} #### خلاصہ {#homestead-summary} -ہومسٹیڈ فورک جس نے مستقبل کی طرف دیکھا۔ اس میں کئی پروٹوکول تبدیلیاں اور ایک نیٹ ورکنگ تبدیلی شامل تھی جس نے ایتھیریم کو مزید نیٹ ورک اپ گریڈ کرنے کی صلاحیت دی۔ +Homestead فورک جس نے مستقبل کی طرف دیکھا۔ اس میں کئی پروٹوکول تبدیلیاں اور ایک نیٹ ورکنگ تبدیلی شامل تھی جس نے ایتھیریم کو مزید نیٹ ورک اپ گریڈ کرنے کی صلاحیت دی۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2016/02/29/homestead-release) - +
    -
  • EIP-2کنٹریکٹ بنانے کے عمل میں ترمیم کرتا ہے۔
  • -
  • EIP-7نیا آپ کوڈ شامل کرتا ہے: DELEGATECALL
  • +
  • EIP-2کنٹریکٹ بنانے کے عمل میں ترامیم کرتا ہے۔
  • +
  • EIP-7نیا اوپ کوڈ شامل کرتا ہے: DELEGATECALL
  • EIP-8devp2p فارورڈ مطابقت کی ضروریات متعارف کراتا ہے
+
## 2015 {#2015} -### فرنٹیئر تھاونگ {#frontier-thawing} +### Frontier thawing {#frontier-thawing} #### خلاصہ {#frontier-thawing-summary} -فرنٹیئر تھاونگ فورک نے فی [بلاک](/glossary/#block) 5,000 [گیس](/glossary/#gas) کی حد کو ختم کر دیا اور ڈیفالٹ گیس کی قیمت 51 [gwei](/glossary/#gwei) مقرر کر دی۔ اس نے ٹرانزیکشنز کی اجازت دی – ٹرانزیکشنز کے لیے 21,000 گیس کی ضرورت ہوتی ہے۔ [ڈفیکلٹی بم](/glossary/#difficulty-bomb) کو مستقبل میں [پروف-آف-اسٹیک](/glossary/#pos) کی طرف ہارڈ فورک کو یقینی بنانے کے لیے متعارف کرایا گیا تھا۔ +Frontier thawing فورک نے فی [بلاک](/glossary/#block) 5,000 [گیس](/glossary/#gas) کی حد کو ہٹا دیا اور ڈیفالٹ گیس کی قیمت 51 [gwei](/glossary/#gwei) مقرر کی۔ اس نے ٹرانزیکشنز کی اجازت دی – ٹرانزیکشنز کے لیے 21,000 گیس درکار ہوتی ہے۔ [ڈیفیکلٹی بم](/glossary/#difficulty-bomb) کو متعارف کرایا گیا تاکہ مستقبل میں [proof-of-stake](/glossary/#pos) کے لیے ہارڈ فورک کو یقینی بنایا جا سکے۔ - [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2015/08/04/the-thawing-frontier) - [ایتھیریم پروٹوکول اپ ڈیٹ 1 پڑھیں](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1) --- -### فرنٹیئر {#frontier} +### Frontier {#frontier} #### خلاصہ {#frontier-summary} -فرنٹیئر ایتھیریم پروجیکٹ کا ایک لائیو، لیکن بنیادی نفاذ تھا۔ یہ کامیاب اولمپک ٹیسٹنگ مرحلے کے بعد آیا۔ یہ تکنیکی صارفین، خاص طور پر ڈیولپرز کے لیے بنایا گیا تھا۔ [بلاکس](/glossary/#block) کی [گیس](/glossary/#gas) کی حد 5,000 تھی۔ اس 'تھاونگ' کی مدت نے مائنرز کو اپنے آپریشن شروع کرنے اور ابتدائی اپنانے والوں کو 'جلدی' کیے بغیر اپنے کلائنٹس کو انسٹال کرنے کے قابل بنایا۔ +Frontier ایتھیریم پروجیکٹ کا ایک لائیو، لیکن بنیادی نفاذ تھا۔ یہ کامیاب اولمپک ٹیسٹنگ مرحلے کے بعد آیا۔ اس کا مقصد تکنیکی صارفین، خاص طور پر ڈویلپرز کے لیے تھا۔ [بلاکس](/glossary/#block) میں 5,000 کی [گیس](/glossary/#gas) کی حد تھی۔ اس 'thawing' (پگھلنے) کے دورانیے نے مائنرز کو اپنے آپریشنز شروع کرنے اور ابتدائی اپنانے والوں کو 'جلدی' کیے بغیر اپنے کلائنٹس انسٹال کرنے کے قابل بنایا۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare) @@ -634,17 +660,17 @@ DAO فورک [2016 DAO حملے](https://www.coindesk.com/learn/understanding-th -ایتھر باضابطہ طور پر 42 دنوں کے لیے فروخت کے لیے پیش کیا گیا۔ آپ اسے BTC سے خرید سکتے تھے۔ +ایتھر باضابطہ طور پر 42 دنوں کے لیے فروخت پر پیش کیا گیا۔ آپ اسے BTC کے ساتھ خرید سکتے تھے۔ [ایتھیریم فاؤنڈیشن کا اعلان پڑھیں](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale) --- -### ییلو پیپر جاری ہوا {#yellowpaper} +### ییلو پیپر جاری کیا گیا {#yellowpaper} -ییلو پیپر، جسے ڈاکٹر گیون ووڈ نے لکھا ہے، ایتھیریم پروٹوکول کی ایک تکنیکی تعریف ہے۔ +ڈاکٹر گیون ووڈ (Dr. Gavin Wood) کی طرف سے لکھا گیا ییلو پیپر (Yellow Paper)، ایتھیریم پروٹوکول کی ایک تکنیکی تعریف ہے۔ [ییلو پیپر دیکھیں](https://github.com/ethereum/yellowpaper) @@ -652,12 +678,12 @@ DAO فورک [2016 DAO حملے](https://www.coindesk.com/learn/understanding-th ## 2013 {#2013} -### وائٹ پیپر جاری ہوا {#whitepaper} +### وائٹ پیپر جاری کیا گیا {#whitepaper} -تعارفی مقالہ، جسے 2013 میں ایتھیریم کے بانی وٹالک بٹیرن نے شائع کیا تھا، پروجیکٹ کے 2015 میں لانچ ہونے سے پہلے۔ +تعارفی مقالہ، جو 2013 میں ایتھیریم کے بانی وٹالک بوٹرین (Vitalik Buterin) نے 2015 میں پروجیکٹ کے آغاز سے پہلے شائع کیا تھا۔ وائٹ پیپر - + \ No newline at end of file diff --git a/public/content/translations/ur/roadmap/fusaka/peerdas/index.md b/public/content/translations/ur/roadmap/fusaka/peerdas/index.md new file mode 100644 index 00000000000..f8963c5b357 --- /dev/null +++ b/public/content/translations/ur/roadmap/fusaka/peerdas/index.md @@ -0,0 +1,88 @@ +--- +title: PeerDAS +description: "فوساکا (Fusaka) ایتھریم پروٹوکول اپ گریڈ کے حصے کے طور پر PeerDAS کے بارے میں جانیں" +lang: ur +--- + +# PeerDAS {#peer-das} + +[Ethereum](/) پروٹوکول [EIP-4844 کے ساتھ بلاب (blob) ٹرانزیکشنز کے تعارف](/roadmap/danksharding/) کے بعد سے اپنی سب سے اہم اسکیلنگ اپ گریڈ سے گزر رہا ہے۔ [Fusaka اپ گریڈ](/roadmap/fusaka/) کے حصے کے طور پر، PeerDAS بلاب ڈیٹا کو سنبھالنے کا ایک نیا طریقہ متعارف کراتا ہے، جو L2s کے لیے **[ڈیٹا کی دستیابی (DA)](/developers/docs/data-availability/)** کی گنجائش میں تقریباً دس گنا (order-of-magnitude) اضافہ فراہم کرتا ہے۔ + +[بلاب اسکیلنگ روڈ میپ پر مزید](https://blog.ethereum.org/2025/08/22/protocol-update-002) + +## اسکیل ایبلٹی (Scalability) {#scalability} + +ایتھریم کا وژن دنیا میں ہر ایک کے لیے دستیاب ایک غیر جانبدار، محفوظ اور ڈی سینٹرلائزڈ پلیٹ فارم بننا ہے۔ جیسے جیسے نیٹ ورک کا استعمال بڑھتا ہے، اس کے لیے نیٹ ورک کے اسکیل، سیکیورٹی، اور ڈی سینٹرلائزیشن کے ٹرائیلیما (trilemma) میں توازن پیدا کرنے کی ضرورت ہوتی ہے۔ اگر ایتھریم اپنے موجودہ ڈیزائن کے اندر نیٹ ورک کے ذریعے ہینڈل کیے جانے والے ڈیٹا میں محض اضافہ کر دے، تو اس سے ان [نوڈز پر بوجھ پڑنے کا خطرہ پیدا ہو جائے گا جن پر ایتھریم اپنی ڈی سینٹرلائزیشن کے لیے انحصار کرتا ہے](/developers/docs/nodes-and-clients/)۔ اسکیل ایبلٹی کے لیے ایک سخت میکانزم ڈیزائن کی ضرورت ہوتی ہے جو سمجھوتوں (trade-offs) کو کم سے کم کرے۔ + +اس ہدف کو حاصل کرنے کی حکمت عملیوں میں سے ایک یہ ہے کہ تمام ٹرانزیکشنز کو [لیئر 1 (L1)](/glossary/#layer-1) مین نیٹ پر پروسیس کرنے کے بجائے لیئر 2 اسکیلنگ سلوشنز کے متنوع ایکو سسٹم کی اجازت دی جائے۔ [لیئر 2s (L2s)](/glossary/#layer-2) یا [رول اپس (rollups)](/glossary#rollups) اپنی الگ چینز پر ٹرانزیکشنز کو پروسیس کرتے ہیں اور تصدیق اور سیکیورٹی کے لیے ایتھریم کا استعمال کرتے ہیں۔ صرف سیکیورٹی کے لحاظ سے اہم کمٹمنٹس کو شائع کرنا اور پے لوڈز کو کمپریس کرنا L2s کو ایتھریم کی DA کی گنجائش کو زیادہ مؤثر طریقے سے استعمال کرنے کی سہولت دیتا ہے۔ اس کے نتیجے میں، L1 سیکیورٹی کی ضمانتوں پر سمجھوتہ کیے بغیر کم ڈیٹا لے کر چلتا ہے، جبکہ L2s کم گیس کی لاگت پر زیادہ صارفین کو شامل کرتے ہیں۔ ابتدائی طور پر، L2s عام ٹرانزیکشنز میں ڈیٹا کو `calldata` کے طور پر شائع کرتے تھے، جو گیس کے لیے L1 ٹرانزیکشنز کا مقابلہ کرتا تھا اور بلک ڈیٹا کی دستیابی کے لیے غیر عملی تھا۔ + +## پروٹو-ڈینکشیرڈنگ (Proto-Danksharding) {#proto-danksharding} + +L2 کو اسکیل کرنے کی جانب پہلا بڑا قدم Dencun اپ گریڈ تھا، جس نے [پروٹو-ڈینکشیرڈنگ](/roadmap/danksharding/) (EIP-4844) متعارف کرایا۔ اس اپ گریڈ نے رول اپس کے لیے ایک نئی، مخصوص ڈیٹا ٹائپ بنائی جسے بلابز (blobs) کہا جاتا ہے۔ [بلابز](/developers/docs/data-availability/blockchain-data-storage-strategies/#eip-4844-blobs)، یا بائنری لارج آبجیکٹس (binary large objects)، صوابدیدی ڈیٹا کے عارضی ٹکڑے ہیں جنہیں EVM کے نفاذ کی ضرورت نہیں ہوتی اور نوڈز انہیں صرف محدود وقت کے لیے اسٹور کرتے ہیں۔ اس زیادہ مؤثر پروسیسنگ نے L2s کو ایتھریم پر مزید ڈیٹا شائع کرنے اور مزید اسکیل کرنے کی اجازت دی۔ + +اسکیلنگ کے لیے پہلے سے ہی مضبوط فوائد رکھنے کے باوجود، بلابز کا استعمال حتمی ہدف کا صرف ایک حصہ ہے۔ موجودہ پروٹوکول میں، نیٹ ورک کے ہر نوڈ کو اب بھی ہر بلاب ڈاؤن لوڈ کرنے کی ضرورت ہوتی ہے۔ رکاوٹ انفرادی نوڈز کے لیے درکار بینڈوتھ بن جاتی ہے، کیونکہ ڈاؤن لوڈ کیے جانے والے ڈیٹا کی مقدار براہ راست بلابز کی زیادہ تعداد کے ساتھ بڑھتی ہے۔ + +ایتھریم ڈی سینٹرلائزیشن پر سمجھوتہ نہیں کرتا، اور بینڈوتھ سب سے حساس پہلوؤں میں سے ایک ہے۔ یہاں تک کہ طاقتور کمپیوٹنگ وسیع پیمانے پر ہر اس شخص کے لیے دستیاب ہونے کے باوجود جو اسے برداشت کر سکتا ہے، ترقی یافتہ ممالک کے انتہائی شہری علاقوں (جیسے [جرمنی](https://www.speedtest.net/global-index/germany)، [بیلجیم](https://www.speedtest.net/global-index/belgium)، [آسٹریلیا](https://www.speedtest.net/global-index/australia) یا [ریاستہائے متحدہ](https://www.speedtest.net/global-index/united-states)) میں بھی [اپ لوڈ بینڈوتھ کی حدود](https://www.speedtest.net/global-index) نوڈز کو صرف ڈیٹا سینٹرز سے چلانے تک محدود کر سکتی ہیں اگر بینڈوتھ کی ضروریات کو احتیاط سے ترتیب نہ دیا جائے۔ + +جیسے جیسے بلابز بڑھتے ہیں، نوڈ آپریٹرز کے لیے بینڈوتھ اور ڈسک اسپیس کی ضروریات میں تیزی سے اضافہ ہوتا ہے۔ بلابز کا سائز اور مقدار ان پابندیوں کی وجہ سے محدود ہیں۔ ہر بلاب 128kb تک کا ڈیٹا لے جا سکتا ہے جس میں فی بلاک اوسطاً 6 بلابز ہوتے ہیں۔ یہ مستقبل کے ایک ایسے ڈیزائن کی جانب صرف پہلا قدم تھا جو بلابز کو اور بھی زیادہ مؤثر طریقے سے استعمال کرتا ہے۔ + +## ڈیٹا کی دستیابی کی سیمپلنگ (Data availability sampling) {#das} + +[ڈیٹا کی دستیابی](/developers/docs/data-availability/) اس بات کی ضمانت ہے کہ چین کی آزادانہ طور پر توثیق کرنے کے لیے درکار تمام ڈیٹا نیٹ ورک کے تمام شرکاء کی رسائی میں ہے۔ یہ یقینی بناتا ہے کہ ڈیٹا مکمل طور پر شائع ہو چکا ہے اور اسے چین کی نئی اسٹیٹ (state) یا آنے والی ٹرانزیکشنز کی بغیر کسی بھروسے (trustlessly) کے تصدیق کرنے کے لیے استعمال کیا جا سکتا ہے۔ + +ایتھریم بلابز ڈیٹا کی دستیابی کی ایک مضبوط ضمانت فراہم کرتے ہیں جو L2s کی سیکیورٹی کو یقینی بناتی ہے۔ ایسا کرنے کے لیے، ایتھریم نوڈز کو بلابز کو مکمل طور پر ڈاؤن لوڈ اور اسٹور کرنے کی ضرورت ہوتی ہے۔ لیکن کیا ہو اگر ہم نیٹ ورک میں بلابز کو زیادہ مؤثر طریقے سے تقسیم کر سکیں اور اس پابندی سے بچ سکیں؟ + +ڈیٹا کو اسٹور کرنے اور اس کی دستیابی کو یقینی بنانے کا ایک مختلف طریقہ **ڈیٹا کی دستیابی کی سیمپلنگ (DAS)** ہے۔ ایتھریم چلانے والے ہر کمپیوٹر کے ہر ایک بلاب کو مکمل طور پر اسٹور کرنے کے بجائے، DAS کام کی ایک ڈی سینٹرلائزڈ تقسیم متعارف کراتا ہے۔ یہ نوڈز کے پورے نیٹ ورک میں چھوٹے، قابل انتظام کاموں کو تقسیم کر کے ڈیٹا پروسیسنگ کے بوجھ کو کم کرتا ہے۔ بلابز کو ٹکڑوں میں تقسیم کیا جاتا ہے اور ہر نوڈ تمام نوڈز میں یکساں بے ترتیب تقسیم (uniform random distribution) کے میکانزم کا استعمال کرتے ہوئے صرف چند ٹکڑے ڈاؤن لوڈ کرتا ہے۔ + +یہ ایک نیا مسئلہ متعارف کراتا ہے—ڈیٹا کی دستیابی اور سالمیت (integrity) کو ثابت کرنا۔ نیٹ ورک یہ کیسے ضمانت دے سکتا ہے کہ ڈیٹا دستیاب ہے اور یہ سب درست ہے جب انفرادی نوڈز کے پاس صرف چھوٹے ٹکڑے ہوں؟ ایک بدنیتی پر مبنی نوڈ جعلی ڈیٹا فراہم کر سکتا ہے اور ڈیٹا کی دستیابی کی مضبوط ضمانتوں کو آسانی سے توڑ سکتا ہے! یہاں کرپٹوگرافی مدد کے لیے آتی ہے۔ + +ڈیٹا کی سالمیت کو یقینی بنانے کے لیے، EIP-4844 کو پہلے ہی KZG کمٹمنٹس کے ساتھ نافذ کیا گیا تھا۔ یہ کرپٹوگرافک ثبوت ہیں جو اس وقت بنائے جاتے ہیں جب نیٹ ورک میں کوئی نیا بلاب شامل کیا جاتا ہے۔ ہر بلاک میں ایک چھوٹا سا ثبوت شامل ہوتا ہے، اور نوڈز اس بات کی تصدیق کر سکتے ہیں کہ موصول ہونے والے بلابز بلاک کی KZG کمٹمنٹ سے مطابقت رکھتے ہیں۔ + +DAS ایک ایسا میکانزم ہے جو اس کی بنیاد پر کام کرتا ہے اور اس بات کو یقینی بناتا ہے کہ ڈیٹا درست اور دستیاب دونوں ہے۔ سیمپلنگ ایک ایسا عمل ہے جہاں ایک نوڈ ڈیٹا کے صرف ایک چھوٹے سے حصے کی درخواست کرتا ہے اور کمٹمنٹ کے خلاف اس کی تصدیق کرتا ہے۔ KZG ایک پولی نومیئل (polynomial) کمٹمنٹ اسکیم ہے جس کا مطلب ہے کہ پولی نومیئل کریو (curve) پر کسی بھی ایک پوائنٹ کی تصدیق کی جا سکتی ہے۔ پولی نومیئل پر صرف چند پوائنٹس کو چیک کر کے، سیمپلنگ کرنے والے کلائنٹ کو ایک مضبوط امکانی (probabilistic) ضمانت مل سکتی ہے کہ ڈیٹا دستیاب ہے۔ + +## PeerDAS {#peer-das} + +[PeerDAS (EIP-7594)](https://eips.ethereum.org/EIPS/eip-7594) ایک مخصوص تجویز ہے جو ایتھریم میں DAS میکانزم کو نافذ کرتی ہے، جو ممکنہ طور پر دی مرج (The Merge) کے بعد سب سے بڑی اپ گریڈ ہے۔ PeerDAS کو بلاب ڈیٹا کو بڑھانے، اسے کالموں میں تقسیم کرنے اور نوڈز میں ایک سب سیٹ (subset) تقسیم کرنے کے لیے ڈیزائن کیا گیا ہے۔ + +ایتھریم اسے حاصل کرنے کے لیے کچھ ہوشیار ریاضی کا سہارا لیتا ہے: یہ بلاب ڈیٹا پر ریڈ-سولومن (Reed-Solomon) طرز کی ایریژر کوڈنگ (erasure coding) کا اطلاق کرتا ہے۔ بلاب ڈیٹا کو ایک پولی نومیئل کے طور پر پیش کیا جاتا ہے جس کے کوایفیشنٹس (coefficients) ڈیٹا کو انکوڈ کرتے ہیں، پھر ایک توسیعی بلاب بنانے کے لیے اضافی پوائنٹس پر اس پولی نومیئل کا جائزہ لیا جاتا ہے، جس سے ایویلیوایشنز (evaluations) کی تعداد دوگنی ہو جاتی ہے۔ یہ اضافی ریڈنڈنسی (redundancy) ایریژر ریکوری (erasure recovery) کو قابل بناتی ہے: یہاں تک کہ اگر کچھ ایویلیوایشنز غائب بھی ہوں، تو اصل بلاب کو دوبارہ بنایا جا سکتا ہے جب تک کہ توسیعی ٹکڑوں سمیت کل ڈیٹا کا کم از کم آدھا حصہ دستیاب ہو۔ + +![توسیعی پولی نومیئل](./polynomial.png) + +حقیقت میں، اس پولی نومیئل کے ہزاروں کوایفیشنٹس ہوتے ہیں۔ KZG کمٹمنٹس چند بائٹس کی ویلیوز ہوتی ہیں، جو ہیش کی طرح ہوتی ہیں، اور تمام نوڈز کو معلوم ہوتی ہیں۔ کافی ڈیٹا پوائنٹس رکھنے والا ہر نوڈ [بلاب ڈیٹا کا مکمل سیٹ مؤثر طریقے سے دوبارہ بنا سکتا ہے](https://arxiv.org/abs/2207.11079)۔ + +> دلچسپ حقیقت: یہی کوڈنگ تکنیک DVDs کے ذریعے استعمال کی جاتی تھی۔ اگر آپ کی DVD پر خراش آ جاتی، تو پلیئر پھر بھی اسے پڑھنے کے قابل ہوتا تھا جس کی وجہ ریڈ-سولومن کوڈنگ تھی جو پولی نومیئل کے غائب ٹکڑوں کو شامل کرتی ہے۔ + +تاریخی طور پر، بلاک چینز میں ڈیٹا، چاہے وہ بلاکس ہوں یا بلابز، تمام نوڈز کو براڈکاسٹ کیا جاتا تھا۔ PeerDAS کی اسپلٹ-اینڈ-سیمپل (split-and-sample) اپروچ کے ساتھ، ہر چیز کو ہر کسی تک براڈکاسٹ کرنا اب ضروری نہیں رہا۔ Fusaka کے بعد، کنسینسس لیئر نیٹ ورکنگ کو گپ شپ (gossip) کے موضوعات/سب نیٹس میں منظم کیا گیا ہے: بلاب کالمز کو مخصوص سب نیٹس کے لیے تفویض کیا جاتا ہے، اور ہر نوڈ پہلے سے طے شدہ سب سیٹس کو سبسکرائب کرتا ہے اور صرف ان ٹکڑوں کو اپنی تحویل میں رکھتا ہے۔ + +PeerDAS کے ساتھ، توسیعی بلاب ڈیٹا کو 128 ٹکڑوں میں تقسیم کیا جاتا ہے جنہیں کالم کہا جاتا ہے۔ ڈیٹا ان نوڈز میں ایک مخصوص گپ شپ پروٹوکول کے ذریعے ان مخصوص سب نیٹس پر تقسیم کیا جاتا ہے جنہیں وہ سبسکرائب کرتے ہیں۔ نیٹ ورک پر ہر باقاعدہ نوڈ کم از کم 8 تصادفی طور پر منتخب کردہ کالم سب نیٹس میں حصہ لیتا ہے۔ 128 میں سے صرف 8 سب نیٹس سے ڈیٹا وصول کرنے کا مطلب یہ ہے کہ یہ ڈیفالٹ نوڈ تمام ڈیٹا کا صرف 1/16 حصہ وصول کرتا ہے، لیکن چونکہ ڈیٹا کو بڑھایا گیا تھا اس لیے یہ اصل ڈیٹا کا 1/8 واں حصہ ہے۔ + +یہ موجودہ "ہر کوئی سب کچھ ڈاؤن لوڈ کرتا ہے" اسکیم کے مقابلے میں 8x کی ایک نئی نظریاتی اسکیلنگ حد کی اجازت دیتا ہے۔ بلاب کالمز پیش کرنے والے مختلف بے ترتیب سب نیٹس کو سبسکرائب کرنے والے نوڈز کے ساتھ، اس بات کا امکان بہت زیادہ ہے کہ وہ یکساں طور پر تقسیم کیے گئے ہیں اور اس لیے ڈیٹا کا ہر ٹکڑا نیٹ ورک میں کہیں نہ کہیں موجود ہے۔ ویلیڈیٹرز چلانے والے نوڈز کو اپنے چلائے جانے والے ہر ویلیڈیٹر کے ساتھ مزید سب نیٹس کو سبسکرائب کرنے کی ضرورت ہوتی ہے۔ + +> ہر نوڈ کی ایک منفرد تصادفی طور پر تیار کردہ ID ہوتی ہے، یہ عام طور پر کنکشنز کے لیے اس کی عوامی شناخت کے طور پر کام کرتی ہے۔ PeerDAS میں، اس نمبر کا استعمال ان بے ترتیب سیٹ سب نیٹس کا تعین کرنے کے لیے کیا جاتا ہے جنہیں اسے سبسکرائب کرنا ہوتا ہے جس کے نتیجے میں تمام بلاب ڈیٹا کی یکساں بے ترتیب تقسیم ہوتی ہے۔ + +ایک بار جب کوئی نوڈ کامیابی کے ساتھ اصل ڈیٹا کو دوبارہ بنا لیتا ہے، تو وہ بازیافت شدہ کالموں کو واپس نیٹ ورک میں تقسیم کرتا ہے، جو ڈیٹا کے کسی بھی خلا کو فعال طور پر پُر کرتا ہے اور مجموعی سسٹم کی لچک کو بڑھاتا ہے۔ ≥4096 ETH کے مشترکہ بیلنس والے ویلیڈیٹرز سے جڑے نوڈز کا سپر نوڈ ہونا لازمی ہے اور اس لیے انہیں تمام ڈیٹا کالم سب نیٹس کو سبسکرائب کرنا چاہیے اور تمام کالموں کو اپنی تحویل میں رکھنا چاہیے۔ یہ سپر نوڈز ڈیٹا کے خلا کو مسلسل پُر کریں گے۔ پروٹوکول کی امکانی طور پر خود کو ٹھیک کرنے والی (self-healing) نوعیت دستیابی کی مضبوط ضمانتوں کی اجازت دیتی ہے جبکہ ڈیٹا کے صرف کچھ حصوں کو رکھنے والے ہوم آپریٹرز کو محدود نہیں کرتی۔ + +![سب نیٹس کے ذریعے تقسیم کیے گئے کالموں کو سبسکرائب کرنے والے نوڈز](./subnets.png) + +اوپر بیان کردہ سیمپلنگ میکانزم کی بدولت بلاب ڈیٹا کا صرف ایک چھوٹا سا سب سیٹ رکھنے والے کسی بھی نوڈ کے ذریعے ڈیٹا کی دستیابی کی تصدیق کی جا سکتی ہے۔ یہ دستیابی نافذ کی گئی ہے: ویلیڈیٹرز کو فورک-چوائس (fork-choice) کے نئے اصولوں پر عمل کرنا چاہیے، جس کا مطلب ہے کہ وہ ڈیٹا کی دستیابی کی تصدیق کرنے کے بعد ہی بلاکس کو قبول کریں گے اور ان کے لیے ووٹ دیں گے۔ + +صارفین (خاص طور پر L2 صارفین) پر اس کا براہ راست اثر کم فیس ہے۔ رول اپ ڈیٹا کے لیے 8x زیادہ جگہ کے ساتھ، ان کی چین پر صارف کے آپریشنز وقت کے ساتھ اور بھی سستے ہو جاتے ہیں۔ لیکن Fusaka کے بعد کم فیسوں میں وقت لگے گا اور اس کا انحصار BPOs پر ہوگا۔ + +## بلاب-پیرامیٹر-اونلی (BPOs) {#bpo} + +نیٹ ورک نظریاتی طور پر 8x زیادہ بلابز کو پروسیس کرنے کے قابل ہو جائے گا، لیکن بلابز میں اضافہ ایک ایسی تبدیلی ہے جسے مناسب طریقے سے ٹیسٹ کرنے اور مرحلہ وار طریقے سے محفوظ طریقے سے انجام دینے کی ضرورت ہے۔ ٹیسٹ نیٹس مین نیٹ پر فیچرز کو تعینات کرنے کے لیے کافی اعتماد فراہم کرتے ہیں لیکن ہمیں نمایاں طور پر زیادہ تعداد میں بلابز کو فعال کرنے سے پہلے p2p نیٹ ورک کے استحکام کو یقینی بنانے کی ضرورت ہے۔ + +نیٹ ورک پر بوجھ ڈالے بغیر فی بلاک بلابز کی ہدف تعداد کو بتدریج بڑھانے کے لیے، Fusaka **[بلاب-پیرامیٹر-اونلی (BPO)](https://ethereum-magicians.org/t/blob-parameter-only-bpo-forks/22623)** فورکس متعارف کراتا ہے۔ باقاعدہ فورکس کے برعکس جنہیں وسیع ایکو سسٹم کوآرڈینیشن، معاہدے، اور سافٹ ویئر اپ ڈیٹس کی ضرورت ہوتی ہے، [BPOs (EIP-7892)](https://eips.ethereum.org/EIPS/eip-7892) پہلے سے پروگرام شدہ اپ گریڈز ہیں جو مداخلت کے بغیر وقت کے ساتھ بلابز کی زیادہ سے زیادہ تعداد میں اضافہ کرتے ہیں۔ + +اس کا مطلب یہ ہے کہ Fusaka کے فعال ہونے اور PeerDAS کے لائیو ہونے کے فوراً بعد، بلابز کی تعداد میں کوئی تبدیلی نہیں ہوگی۔ بلابز کی تعداد ہر چند ہفتوں میں دوگنی ہونا شروع ہو جائے گی یہاں تک کہ یہ زیادہ سے زیادہ 48 تک پہنچ جائے، جبکہ ڈیولپرز اس بات کو یقینی بنانے کے لیے نگرانی کرتے ہیں کہ میکانزم توقع کے مطابق کام کر رہا ہے اور نیٹ ورک چلانے والے نوڈز پر اس کے منفی اثرات مرتب نہیں ہو رہے ہیں۔ + +## مستقبل کی سمتیں (Future directions) {#future-directions} + +PeerDAS صرف [FullDAS کے ایک بڑے اسکیلنگ وژن کی جانب](https://ethresear.ch/t/fulldas-towards-massive-scalability-with-32mb-blocks-and-beyond/19529)، یا ڈینکشیرڈنگ (Danksharding) کی طرف ایک قدم ہے۔ جبکہ PeerDAS ہر بلاب پر انفرادی طور پر 1D ایریژر کوڈنگ کا استعمال کرتا ہے، مکمل ڈینکشیرڈنگ بلاب ڈیٹا کے پورے میٹرکس میں ایک زیادہ مکمل 2D ایریژر کوڈنگ اسکیم کا استعمال کرے گی۔ ڈیٹا کو دو جہتوں (dimensions) میں بڑھانے سے اور بھی مضبوط ریڈنڈنسی خصوصیات اور زیادہ مؤثر تعمیر نو اور تصدیق پیدا ہوتی ہے۔ FullDAS کو حقیقت کا روپ دینے کے لیے اضافی تحقیق کے ساتھ ساتھ خاطر خواہ نیٹ ورک اور پروٹوکول آپٹیمائزیشنز کی ضرورت ہوگی۔ + +## مزید مطالعہ {#further-reading} + +- [PeerDAS: فرانسسکو ڈی اماتو (Francesco D'Amato) کی جانب سے پیئر ڈیٹا کی دستیابی کی سیمپلنگ](https://www.youtube.com/watch?v=WOdpO1tH_Us) +- [ایتھریم کے PeerDAS کی ایک دستاویز](https://eprint.iacr.org/2024/1362.pdf) +- [AGM کے بغیر PeerDAS کی سیکیورٹی کو ثابت کرنا](https://eprint.iacr.org/2025/1683) +- [PeerDAS، اس کے اثرات، اور Fusaka کی ٹیسٹنگ پر وٹالک (Vitalik)](https://x.com/VitalikButerin/status/1970983281090085200) \ No newline at end of file diff --git a/public/content/translations/ur/roadmap/pectra/maxeb/index.md b/public/content/translations/ur/roadmap/pectra/maxeb/index.md new file mode 100644 index 00000000000..00e1e3ee3e6 --- /dev/null +++ b/public/content/translations/ur/roadmap/pectra/maxeb/index.md @@ -0,0 +1,204 @@ +--- +title: پیکٹرا MaxEB +description: پیکٹرا ریلیز میں MaxEB کے بارے میں مزید جانیں +lang: ur +--- + +# MaxEB {#maxeb} + +*مختصر یہ کہ:* پیکٹرا ہارڈ فورک ایتھریم ویلیڈیٹرز کو **Type 1** سے **Type 2** ودڈراول کریڈنشلز (withdrawal credentials) میں تبدیل کر کے زیادہ سے زیادہ موثر بیلنس (max effective balance) اور کمپاؤنڈنگ کا انتخاب کرنے کی اجازت دیتا ہے۔ ایسا کرنے کا آفیشل ٹول لانچ پیڈ (Launchpad) ہے۔ اس عمل کو واپس نہیں لیا جا سکتا۔ + +## جائزہ {#overview} + +### کون متاثر ہوتا ہے؟ {#who-is-affected} + +کوئی بھی جو ویلیڈیٹر چلاتا ہے - یہ ممکنہ طور پر کوئی ایسا شخص ہے جو اپنے کنٹرول کردہ ویلیڈیٹر کا انڈیکس (مثلاً، [Validator #12345](https://beaconcha.in/validator/12345)) جانتا ہے۔ اگر آپ ویلیڈیٹر چلانے کے لیے کوئی پروٹوکول استعمال کرتے ہیں (مثلاً، Lido CSM یا Rocket Pool)، تو آپ کو ان سے چیک کرنا ہوگا کہ آیا وہ maxEB کو سپورٹ کرتے ہیں اور کب کریں گے۔ + +اگر آپ لیکویڈ اسٹیکنگ ٹوکن (مثلاً، rETH یا stETH) کا استعمال کرتے ہوئے اسٹیک کرتے ہیں، تو کسی کارروائی کی ضرورت یا سفارش نہیں کی جاتی ہے۔ + +### "maxEB" کیا ہے؟ {#what-is-maxeb} + +maxEB = ایک ویلیڈیٹر کا زیادہ سے زیادہ موثر بیلنس (MAXimum Effective Balance)۔ پیکٹرا ہارڈ فورک تک، ہر ویلیڈیٹر زیادہ سے زیادہ 32 ETH پر کماتا ہے۔ پیکٹرا کے بعد، ویلیڈیٹرز کے پاس اس تبدیلی کا انتخاب کر کے 1 ETH کے اضافے کے ساتھ 32 اور 2048 ETH کے درمیان کسی بھی بیلنس پر کمانے کا اختیار ہے۔ + +### ویلیڈیٹر کیسے آپٹ ان (opt in) کرتا ہے؟ {#how-does-a-validator-opt-in} + +ایک ویلیڈیٹر **Type 1** سے **Type 2** ودڈراول کریڈنشلز میں تبدیل کر کے maxEB تبدیلی کا انتخاب کرتا ہے۔ یہ پیکٹرا ہارڈ فورک کے لائیو ہونے کے بعد [Launchpad (Validator Actions)](https://launchpad.ethereum.org/validator-actions) پر کیا جا سکتا ہے۔ **Type 0** → **Type 1** کی طرح، **Type 1** → **Type 2** میں تبدیل کرنا ایک ناقابل واپسی عمل ہے۔ + +### ودڈراول کریڈنشل کیا ہے؟ {#whats-a-withdrawal-credential} + +جب آپ ویلیڈیٹر چلاتے ہیں، تو آپ کے پاس ودڈراول کریڈنشلز کا ایک سیٹ ہوتا ہے۔ یہ آپ کے ڈپازٹ ڈیٹا json میں مل سکتے ہیں یا آپ انہیں اپنے ویلیڈیٹر کے beaconcha.in [deposit tab](https://beaconcha.in/validator/12345#deposits) پر دیکھ سکتے ہیں۔ + +1. **Type 0** ودڈراول کریڈنشلز: اگر آپ کے ویلیڈیٹر کے ودڈراول کریڈنشلز `0x00...` سے شروع ہوتے ہیں، تو آپ نے شپیلا (Shapella) ہارڈ فورک سے پہلے ڈپازٹ کیا تھا اور ابھی تک آپ کا ودڈراول ایڈریس سیٹ نہیں ہوا ہے۔ + +![Type 0 withdrawal credential](./0x00-wd.png) + +2. **Type 1** ودڈراول کریڈنشلز: اگر آپ کے ویلیڈیٹر کے ودڈراول کریڈنشلز `0x01...` سے شروع ہوتے ہیں، تو آپ نے شپیلا ہارڈ فورک کے بعد ڈپازٹ کیا ہے یا پہلے ہی اپنے **Type 0** کریڈنشلز کو **Type 1** کریڈنشلز میں تبدیل کر لیا ہے۔ + + ![Type 1 withdrawal credential](./0x01-wd.png) + +3. **Type 2** ودڈراول کریڈنشلز: یہ نئی ودڈراول کریڈنشل قسم `0x02...` سے شروع ہوگی اور پیکٹرا کے بعد فعال ہو جائے گی۔ **Type 2** ودڈراول کریڈنشلز والے ویلیڈیٹرز کو بعض اوقات "**compounding validators**" بھی کہا جاتا ہے۔ + +| **اجازت ہے** | **اجازت نہیں ہے** | +| --- | --- | +| ✅ Type 0 → Type 1 | ❌ Type 0 → Type 2 | +| ✅ Type 1 → Type 2 | ❌ Type 1 → Type 0 | +| | ❌ Type 2 → Type 1 | +| | ❌ Type 2 → Type 0 | + +### خطرات {#risks} + +MaxEB ایک ویلیڈیٹر کو اپنا پورا بیلنس دوسرے ویلیڈیٹر کو بھیجنے کے قابل بناتا ہے۔ کنسولیڈیشن (consolidation) کی درخواست جمع کرانے والے صارفین کو اس ٹرانزیکشن کے ماخذ اور مندرجات کی تصدیق کرنی چاہیے جس پر وہ دستخط کر رہے ہیں۔ maxEB کی خصوصیات سے فائدہ اٹھانے کا آفیشل ٹول لانچ پیڈ ہے۔ اگر آپ کسی تھرڈ پارٹی ٹول کو استعمال کرنے کا فیصلہ کرتے ہیں، تو آپ کو تصدیق کرنی چاہیے کہ: + +- سورس ویلیڈیٹر کی pubkey اور ودڈراول ایڈریس اس ویلیڈیٹر سے مماثل ہیں جسے وہ کنٹرول کرتے ہیں +- ٹارگٹ ویلیڈیٹر کی pubkey درست ہے اور ان کی اپنی ہے +- درخواست ایک کنورژن (conversion) ہے، کنسولیڈیشن نہیں، اگر وہ کسی دوسرے ویلیڈیٹر کو فنڈز بھیجنے کا ارادہ نہیں رکھتے ہیں +- ٹرانزیکشن پر درست ودڈراول ایڈریس کے ذریعے دستخط کیے جا رہے ہیں + +ہم **سختی سے تجویز کرتے ہیں** کہ آپ جس بھی تھرڈ پارٹی ٹول کو استعمال کرنے کا ارادہ رکھتے ہیں اس پر [EthStaker community](https://ethstaker.org/about) کے ساتھ تبادلہ خیال کریں۔ یہ آپ کے طریقہ کار کو جانچنے اور غلطیوں سے بچنے کے لیے ایک مددگار جگہ ہے۔ اگر آپ کوئی بدنیتی پر مبنی یا غلط کنفیگر شدہ ٹول استعمال کرتے ہیں، تو **آپ کا پورا ویلیڈیٹر بیلنس کسی ایسے ویلیڈیٹر کو بھیجا جا سکتا ہے جسے آپ کنٹرول نہیں کرتے** — اور اسے واپس حاصل کرنے کا کوئی طریقہ نہیں ہوگا۔ + +## تکنیکی تفصیلات {#technical-details} + +### فلو (The flow) {#the-flow} + +`ConsolidationRequest` آپریشن کے دو استعمال ہوں گے: + +1. موجودہ ویلیڈیٹر کو **Type 1** سے **Type 2** ویلیڈیٹر میں تبدیل کرنا +2. دیگر ویلیڈیٹرز کو موجودہ **Type 2** ویلیڈیٹر میں کنسولیڈیٹ کرنا + +**Type 1** سے **Type 2** ویلیڈیٹر میں تبدیلی کے دوران، *سورس* اور *ٹارگٹ* دونوں وہی ویلیڈیٹر ہوں گے جسے آپ تبدیل کر رہے ہیں۔ اس آپریشن پر گیس خرچ ہوگی اور اسے دیگر کنسولیڈیشن درخواستوں کے پیچھے قطار میں لگایا جائے گا۔ یہ قطار ڈپازٹ قطار سے **الگ** ہے اور نئے ویلیڈیٹر ڈپازٹس سے متاثر نہیں ہوتی اور اسے [pectrified.com](https://pectrified.com/) پر دیکھا جا سکتا ہے۔ + +ویلیڈیٹرز کو کنسولیڈیٹ کرنے کے لیے، آپ کے پاس ایک *ٹارگٹ ویلیڈیٹر* ہونا چاہیے جس کا ودڈراول کریڈنشل **Type 2** ہو۔ یہ کنسولیڈیٹ ہونے والے کسی بھی ویلیڈیٹر بیلنس کی منزل ہے، اور اس کا انڈیکس محفوظ رہتا ہے۔ + +### Type 2 میں تبدیل کرنے کے تقاضے {#requirements-for-converting-to-type-2} + +یہ اس پہلے ویلیڈیٹر کے لیے درکار ہوگا جسے آپ **Type 2** میں تبدیل کرتے ہیں۔ اس ویلیڈیٹر کا انڈیکس محفوظ اور فعال رہتا ہے۔ کنورژن کے لیے، *سورس ویلیڈیٹر* == *ٹارگٹ ویلیڈیٹر*۔ + +ویلیڈیٹر کا... + +- فعال ہونا ضروری ہے +- **Type 1** ودڈراول کریڈنشلز کا ہونا ضروری ہے +- ایگزٹنگ اسٹیٹ (exiting state) میں (یا سلیشڈ) نہیں ہونا چاہیے +- زیر التواء مینوئل طور پر ٹرگر کیے گئے ودڈراولز نہیں ہونے چاہئیں (یہ سویپس پر لاگو نہیں ہوتا) + +![conversion illustration](./conversion.png) + +### کنسولیڈیٹ کرنے کے تقاضے {#requirements-for-consolidating} + +یہ کنورٹ کرنے جیسا *ہی آپریشن* ہے لیکن یہ تب ہوتا ہے جب *سورس ویلیڈیٹر* *ٹارگٹ ویلیڈیٹر* سے مختلف ہو۔ ٹارگٹ ویلیڈیٹر کا انڈیکس محفوظ رہتا ہے اور سورس ویلیڈیٹر سے بیلنس قبول کرتا ہے۔ سورس ویلیڈیٹر کا انڈیکس `EXITED` اسٹیٹ میں ڈال دیا جاتا ہے۔ + +اس صورت میں، سورس ویلیڈیٹر کے لیے اوپر دی گئی تمام شرائط کے ساتھ ساتھ یہ بھی ضروری ہے: + +- کم از کم ~27.3 گھنٹے (ایک `SHARD_COMMITTEE_PERIOD`) تک فعال رہا ہو + +ٹارگٹ ویلیڈیٹر کا... + +- **Type 2** ودڈراول کریڈنشلز کا ہونا ضروری ہے +- ایگزٹنگ اسٹیٹ میں نہیں ہونا چاہیے۔ + +![consolidation illustration](./consolidation.png) + +### کنسولیڈیشن کی درخواست {#the-consolidation-request} + +کنسولیڈیشن کی درخواست پر سورس ویلیڈیٹر سے وابستہ ودڈراول ایڈریس کے ذریعے دستخط کیے جائیں گے اور اس میں درج ذیل شامل ہوں گے: + +1. سورس ویلیڈیٹر کا ایڈریس (مثلاً، `0x15F4B914A0cCd14333D850ff311d6DafbFbAa32b`) +2. سورس ویلیڈیٹر کی پبلک کی (Public key) (مثلاً، `0xa1d1ad0714035353258038e964ae9675dc0252ee22cea896825c01458e1807bfad2f9969338798548d9858a571f7425c`) +3. اس ٹارگٹ ویلیڈیٹر کی پبلک کی + +کنورژن میں، 2 اور 3 ایک جیسے ہوں گے۔ یہ آپریشن [the Launchpad](https://launchpad.ethereum.org/) پر کیا جا سکتا ہے۔ + +### دستخط کے تقاضے {#signing-requirements} + +`ConsolidationRequest` جمع کرانے کے لیے، **سورس ویلیڈیٹر کے ودڈراول ایڈریس** کا درخواست پر دستخط کرنا ضروری ہے۔ یہ ویلیڈیٹر فنڈز پر کنٹرول کو ثابت کرتا ہے۔ + +### کس چیز پر دستخط کیے جاتے ہیں؟ {#what-is-signed} + +`ConsolidationRequest` آبجیکٹ کا ایک ڈومین سے الگ کردہ [signing root](https://github.com/ethereum/consensus-specs/blob/master/specs/phase0/beacon-chain.md#compute_signing_root) استعمال کیا جاتا ہے۔ + +- **ڈومین:** `DOMAIN_CONSOLIDATION_REQUEST` +- **سائننگ روٹ فیلڈز:** + - `source_pubkey`: `BLSPubkey` + - `target_pubkey`: `BLSPubkey` + - `source_address`: `ExecutionAddress` + +نتیجے میں آنے والا **BLS signature** درخواست کے ساتھ جمع کرایا جاتا ہے۔ + +نوٹ: دستخط ودڈراول ایڈریس کے ذریعے کیے جاتے ہیں، ویلیڈیٹر کی (key) کے ذریعے نہیں۔ + +### جزوی ودڈراولز {#partial-withdrawals} + +**Type 1** کریڈنشلز والے ویلیڈیٹرز کو ان کے اضافی بیلنس (32 ETH سے زیادہ کچھ بھی) کے خودکار، گیس کے بغیر سویپس ان کے ودڈراول ایڈریس پر ملتے ہیں۔ چونکہ **Type 2** ایک ویلیڈیٹر کو 1 ETH کے اضافے میں بیلنس کمپاؤنڈ کرنے کی اجازت دیتا ہے، اس لیے یہ 2048 ETH تک پہنچنے تک خود بخود بیلنس کو سویپ نہیں کرے گا۔ **Type 2** ویلیڈیٹرز پر جزوی ودڈراولز کو مینوئل طور پر ٹرگر کیا جانا چاہیے اور اس پر گیس خرچ ہوگی۔ + +## کنسولیڈیشن ٹولنگ {#consolidation-tooling} + +کنسولیڈیشنز کو منظم کرنے کے لیے کئی ٹولز دستیاب ہیں۔ ایتھریم فاؤنڈیشن کا بنایا ہوا آفیشل ٹول [Launchpad](https://launchpad.ethereum.org/en/validator-actions) ہے۔ اسٹیکنگ کمیونٹی کے اداروں کے بنائے ہوئے تھرڈ پارٹی ٹولز بھی موجود ہیں جو ایسی خصوصیات پیش کر سکتے ہیں جو لانچ پیڈ فراہم نہیں کرتا۔ اگرچہ یہاں موجود ٹولز کا ایتھریم فاؤنڈیشن کے ذریعے آڈٹ یا توثیق نہیں کی گئی ہے، لیکن درج ذیل کمیونٹی کے معروف اراکین کے اوپن سورس ٹولز ہیں۔ + +| ٹول | ویب سائٹ | اوپن سورس | خالق | آڈٹ شدہ | انٹرفیس | قابل ذکر خصوصیات | +| --- | --- | --- | --- | --- | --- | --- | +| Pectra Staking Manager | pectrastaking.com | ہاں، Apache 2.0 | [Pier Two](https://piertwo.com/) | نہیں | Web UI | Wallet Connect، SAFE کے ساتھ کام کرتا ہے | +| Pectra Validator Ops CLI Tool | [GitHub](https://github.com/Luganodes/Pectra-Batch-Contract) | ہاں، MIT | [Luganodes](https://www.luganodes.com/) | ہاں، Quantstamp [May 2025](https://certificate.quantstamp.com/full/luganodes-pectra-batch-contract/23f0765f-969a-4798-9edd-188d276c4a2b/index.html) | Command line | بیچنگ (Batching)، ایک ساتھ کئی ویلیڈیٹرز کے لیے | +| Ethereal | [GitHub](https://github.com/wealdtech/ethereal) | ہاں، Apache 2.0 | [Jim McDonald](https://www.attestant.io/team/) | نہیں | Command line | ویلیڈیٹر اور نوڈ مینجمنٹ کے لیے مکمل فیچر سیٹ | +| Siren | [GitHub](https://github.com/sigp/siren) | ہاں، Apache 2.0 | [Sigma Prime](https://sigmaprime.io/) | نہیں | کچھ کمانڈ لائن، لیکن بنیادی طور پر ویب UI | صرف تب کام کرتا ہے اگر آپ Lighthouse کنسینسس کلائنٹ استعمال کر رہے ہوں | +| Consolideth.app | https://consolideth.app/ [GitHub](https://github.com/Stakely/consolideth) | ہاں، MIT لائسنس | [Stakely](https://stakely.io/) | نہیں | Web UI، stakely کے زیر اہتمام اور آزادانہ طور پر سیلف ہوسٹ ہونے کے لیے تیار | walletconnect کے ساتھ safe سمیت بڑے والیٹ کنکشنز کو سپورٹ کرتا ہے | + +## اکثر پوچھے گئے سوالات (FAQ) {#faq} + +### کیا آپٹ ان کرنے سے میری پروپوزل لک (proposal luck) یا انعامات بدل جاتے ہیں؟ {#change-luck-or-rewards} + +نہیں۔ آپٹ ان کرنے سے آپ کے پروپوزل کے امکانات کم نہیں ہوتے - آپ کے فرائض اور پروپوزل کا انتخاب یکساں رہتا ہے۔ مثال کے طور پر، اگر آپ کے پاس دو 32 ETH ویلیڈیٹرز بمقابلہ ایک 64 ETH ویلیڈیٹر ہے، تو آپ کے پاس بلاک پروپوز کرنے اور انعامات حاصل کرنے کے لیے منتخب ہونے کے کل امکانات یکساں ہوں گے۔ + +### کیا آپٹ ان کرنے سے میرا سلیشنگ (slashing) کا خطرہ بدل جاتا ہے؟ {#change-slashing-risk} + +چھوٹے یا غیر پیشہ ور آپریٹرز کے لیے، مختصر جواب نہیں ہے۔ تفصیلی جواب یہ ہے کہ، تیز الرٹنگ کے ساتھ فی نوڈ کئی ویلیڈیٹرز چلانے والے پیشہ ور آپریٹرز کے لیے، کم ویلیڈیٹرز میں کنسولیڈیٹ کرنے سے سلیشنگ پر ردعمل ظاہر کرنے اور کیسکیڈ (cascade) ایونٹس کو روکنے کی ان کی صلاحیت کم ہو سکتی ہے۔ اس خطرے کو کم کرنے کے لیے تمام ویلیڈیٹرز کے لیے ابتدائی سلیشنگ *جرمانہ* 1 ETH (فی 32 ETH) سے ڈرامائی طور پر کم کر کے 0.0078125 ETH (فی 32 ETH) کر دیا گیا ہے۔ + +### کیا مجھے کنورٹ کرنے کے لیے اپنے ویلیڈیٹر سے ایگزٹ کرنا ہوگا؟ {#exit-validator} + +نہیں۔ آپ ایگزٹ کیے بغیر اپنی جگہ پر کنورٹ کر سکتے ہیں۔ + +### کنورٹ / کنسولیڈیٹ ہونے میں کتنا وقت لگے گا؟ {#how-long} + +کم از کم 27.3 گھنٹے لیکن کنسولیڈیشنز بھی ایک قطار کے تابع ہیں۔ یہ قطار ڈپازٹ اور ودڈراول کی قطاروں سے آزاد ہے اور ان سے متاثر نہیں ہوتی۔ + +### کیا میں اپنا ویلیڈیٹر انڈیکس رکھ سکتا ہوں؟ {#keep-validator-index} + +ہاں۔ ان-پلیس (In-place) کنورژن ایک ہی ویلیڈیٹر انڈیکس کو برقرار رکھتی ہے۔ اگر آپ متعدد ویلیڈیٹرز کو کنسولیڈیٹ کرتے ہیں، تو آپ صرف *ٹارگٹ ویلیڈیٹر* کا انڈیکس رکھ سکیں گے۔ + +### کیا میں اٹیسٹیشنز (attestations) مس کر دوں گا؟ {#miss-attestations} + +کسی دوسرے ویلیڈیٹر میں کنسولیڈیشن کے دوران، سورس ویلیڈیٹر ایگزٹ ہو جاتا ہے اور ٹارگٹ ویلیڈیٹر پر بیلنس فعال ہونے سے پہلے تقریباً 27 گھنٹے کا انتظار کا وقت ہوتا ہے۔ یہ مدت **کارکردگی کے میٹرکس کو متاثر نہیں کرتی ہے**۔ + +### کیا مجھ پر جرمانے عائد ہوں گے؟ {#incur-penalties} + +نہیں۔ جب تک آپ کا ویلیڈیٹر آن لائن ہے، آپ پر جرمانے عائد نہیں ہوں گے۔ + +### کیا کنسولیڈیٹ ہونے والے ویلیڈیٹرز کے ودڈراول ایڈریسز کا مماثل ہونا ضروری ہے؟ {#withdrawal-addresses-match} + +نہیں۔ لیکن *سورس* کو اپنے ہی ایڈریس سے درخواست کی اجازت دینی چاہیے۔ + +### کیا کنورٹ کرنے کے بعد میرے انعامات کمپاؤنڈ ہوں گے؟ {#rewards-compound} + +ہاں۔ **Type 2** کریڈنشلز کے ساتھ، 32 ETH سے زیادہ کے انعامات خود بخود ری اسٹیک (restake) ہو جاتے ہیں — لیکن فوری طور پر نہیں۔ ایک چھوٹے بفر (جسے [*hysteresis*](https://eth2book.info/capella/part2/incentives/balances/#hysteresis) کہا جاتا ہے) کی وجہ سے، اضافی رقم کے ری اسٹیک ہونے سے پہلے آپ کے بیلنس کو **مزید تقریباً 1.25 ETH** تک پہنچنے کی ضرورت ہوتی ہے۔ لہذا 33.0 ETH پر کمپاؤنڈ ہونے کے بجائے، یہ 33.25 (موثر بیلنس = 33 ETH)، پھر 34.25 (موثر بیلنس = 34 ETH)، اور اسی طرح آگے ہوتا ہے۔ + +### کیا میں کنورٹ کرنے کے بعد بھی خودکار سویپس حاصل کر سکتا ہوں؟ {#automatic-sweep} + +خودکار سویپس صرف 2048 سے زیادہ کے اضافی بیلنس کے ساتھ ہوں گے۔ دیگر تمام جزوی ودڈراولز کے لیے، آپ کو انہیں مینوئل طور پر ٹرگر کرنے کی ضرورت ہوگی۔ + +### کیا میں اپنا ارادہ بدل کر Type 2 سے واپس Type 1 پر جا سکتا ہوں؟ {#go-back-to-type1} + +نہیں۔ **Type 2** میں تبدیل کرنا ناقابل واپسی ہے۔ + +### اگر میں متعدد ویلیڈیٹرز کو کنسولیڈیٹ کرنا چاہتا ہوں، تو کیا مجھے پہلے ہر ایک کو Type 2 میں تبدیل کرنا ہوگا؟ {#consolidate-multiple-validators} + +نہیں! ایک ویلیڈیٹر کو Type 2 میں تبدیل کریں پھر اسے ٹارگٹ کے طور پر استعمال کریں۔ اس Type 2 ٹارگٹ میں کنسولیڈیٹ ہونے والے دیگر تمام ویلیڈیٹرز Type 1 یا Type 2 ہو سکتے ہیں۔ + +### میرا ویلیڈیٹر آف لائن ہے یا 32 ETH سے کم ہے - کیا میں پھر بھی اسے کنورٹ کر سکتا ہوں؟ {#offline-or-below-32eth} + +ہاں۔ جب تک یہ فعال ہے (ایگزٹ نہیں ہوا) اور آپ اس کے ودڈراول ایڈریس کے ساتھ دستخط کر سکتے ہیں، آپ اسے کنورٹ کر سکتے ہیں۔ + +## وسائل {#resources} + +- [Electra consensus specs](https://github.com/ethereum/consensus-specs/blob/master/specs/electra/beacon-chain.md): یہ 'سب سے درست' ورژن ہے جس پر آپ کو انحصار کرنا چاہیے۔ جب شک ہو، تو اسپیکس (specs) پڑھیں +- ہر کوئی کوڈ کو پڑھنے میں آرام دہ محسوس نہیں کرتا، اس لیے [یہ maxEB-GPT](https://chatgpt.com/g/g-67f1650fb48081918f555e0c8d1c2ae9-maxeb-gpt) اسپیکس کی تشریح کرنے میں مدد کر سکتا ہے۔ *ڈس کلیمر: سچائی کے طور پر AI کے بجائے اسپیکس پر انحصار کیا جانا چاہیے، کیونکہ AI معلومات کی غلط تشریح کر سکتا ہے یا غلط جوابات دے سکتا ہے* +- [pectrified.com](https://pectrified.com/): کنسولیڈیشنز، ڈپازٹس، اور قطار کے انتظار کے اوقات کی اسٹیٹ (state) دیکھیں +- [Ethereal](https://github.com/wealdtech/ethereal): عام ویلیڈیٹر ٹاسکس کو منظم کرنے کے لیے کمیونٹی کا بنایا ہوا CLI ٹول +- [batch-validator-depositor](https://github.com/attestantio/batch-validator-depositor): کمیونٹی کا بنایا ہوا کنٹریکٹ جو متعدد ایتھریم ویلیڈیٹرز کو ایک ہی ٹرانزیکشن میں ڈپازٹ کرنے کی اجازت دیتا ہے \ No newline at end of file diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md index c7da1e062ac..0edb7f7cce0 100644 --- a/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: vi Một nút Ethereum bao gồm hai máy khách: một [máy khách thực thi](/developers/docs/nodes-and-clients/#execution-clients) và một [máy khách đồng thuận ](/developers/docs/nodes-and-clients/#consensus-clients). Để một nút đề xuất một khối mới, nó cũng phải chạy một [máy khách xác thực](#validators). -Khi Ethereum sử dụng [bằng chứng công việc](/developers/docs/consensus-mechanisms/pow/), một máy khách thực thi là đủ để chạy một nút Ethereum đầy đủ. Tuy nhiên, kể từ khi triển khai [bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pow/), máy khách thực thi phải được sử dụng cùng với một phần mềm khác được gọi là [máy khách đồng thuận ](/developers/docs/nodes-and-clients/#consensus-clients). +Khi Ethereum sử dụng [bằng chứng công việc](/developers/docs/consensus-mechanisms/pow/), một máy khách thực thi là đủ để chạy một nút Ethereum đầy đủ. Tuy nhiên, kể từ khi triển khai [bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pos/), máy khách thực thi phải được sử dụng cùng với một phần mềm khác được gọi là [máy khách đồng thuận ](/developers/docs/nodes-and-clients/#consensus-clients). Sơ đồ dưới đây cho thấy mối quan hệ giữa hai máy khách Ethereum. Hai máy khách kết nối với các mạng ngang hàng (P2P) tương ứng của riêng chúng. Cần có các mạng P2P riêng biệt vì các máy khách thực thi lan truyền các giao dịch qua mạng P2P của chúng, cho phép chúng quản lý vùng giao dịch cục bộ của mình, trong khi các máy khách đồng thuận lan truyền các khối qua mạng P2P của chúng, cho phép sự đồng thuận và phát triển chuỗi. diff --git a/public/content/translations/vi/restaking/index.md b/public/content/translations/vi/restaking/index.md index 8f4e991ba7b..89ea03298c1 100644 --- a/public/content/translations/vi/restaking/index.md +++ b/public/content/translations/vi/restaking/index.md @@ -144,7 +144,7 @@ Mặc dù AVS cung cấp các tỷ lệ khác nhau, các Token Tái cổ phần

Đồng sáng lập Ethereum đang gõ…

- Vitalik, đồng sáng lập Ethereum, đã cảnh báo về những rủi ro tiềm tàng của việc tái cổ phần trong một bài đăng blog năm 2021 có tên Don't Overload Consensus. + Vitalik, đồng sáng lập Ethereum, đã cảnh báo về những rủi ro tiềm tàng của việc tái cổ phần trong một bài đăng blog năm 2021 có tên Don't Overload Consensus.

diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md index 4f006f6f621..be97938389a 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: zh-tw 一個以太坊節點由兩個用戶端組成:一個[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)和一個[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)。 節點若要提案新區塊,還必須執行[驗證器用戶端](#validators)。 -當以太坊使用[工作量證明](/developers/docs/consensus-mechanisms/pow/)時,一個執行用戶端已足夠執行一個以太坊全節點。 然而,自從實施[權益證明](/developers/docs/consensus-mechanisms/pow/)後,執行用戶端必須與另一個稱為[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)的軟體一起使用。 +當以太坊使用[工作量證明](/developers/docs/consensus-mechanisms/pow/)時,一個執行用戶端已足夠執行一個以太坊全節點。 然而,自從實施[權益證明](/developers/docs/consensus-mechanisms/pos/)後,執行用戶端必須與另一個稱為[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)的軟體一起使用。 下圖顯示兩種以太坊用戶端的關係。 兩種用戶端與他們各自的點對點 (P2P) 網路相連。 執行用戶端透過其點對點網路廣播交易,來確保能夠管理自己的本機交易池,而共識用戶端透過其點對點網路廣播區塊,來確保共識和鏈增長,因此需要獨立的點對點網路。 diff --git a/public/content/translations/zh/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/zh/developers/docs/nodes-and-clients/node-architecture/index.md index 6e4a505744a..9cdd9c9f52f 100644 --- a/public/content/translations/zh/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/zh/developers/docs/nodes-and-clients/node-architecture/index.md @@ -6,7 +6,7 @@ lang: zh 一个以太坊节点由两个客户端组成:一个[执行客户端](/developers/docs/nodes-and-clients/#execution-clients)和一个[共识客户端](/developers/docs/nodes-and-clients/#consensus-clients)。 节点若要提议新区块,还必须运行一个[验证者客户端](#validators)。 -当以太坊使用[工作量证明](/developers/docs/consensus-mechanisms/pow/)时,一个执行客户端就足以运行一个完整的以太坊节点。 然而,自实施[权益证明](/developers/docs/consensus-mechanisms/pow/)以来,执行客户端必须与另一个名为[共识客户端](/developers/docs/nodes-and-clients/#consensus-clients)的软件一起使用。 +当以太坊使用[工作量证明](/developers/docs/consensus-mechanisms/pow/)时,一个执行客户端就足以运行一个完整的以太坊节点。 然而,自实施[权益证明](/developers/docs/consensus-mechanisms/pos/)以来,执行客户端必须与另一个名为[共识客户端](/developers/docs/nodes-and-clients/#consensus-clients)的软件一起使用。 以下图表显示了两种以太坊客户端之间的关系。 这两种客户端与其各自的点对点(对等)网络连接。 分离对等网络是有必要的,因为执行客户端通过它们的对等网络广播交易,确保它们能够管理自己的本地交易池,同时共识客户端通过它们的对等网络广播区块,保证共识和链增长。 diff --git a/public/images/exchanges/peer.png b/public/images/exchanges/peer.png new file mode 100644 index 00000000000..8c3cb46326a Binary files /dev/null and b/public/images/exchanges/peer.png differ diff --git a/public/images/exchanges/zkp2p.png b/public/images/exchanges/zkp2p.png deleted file mode 100644 index 93288740eab..00000000000 Binary files a/public/images/exchanges/zkp2p.png and /dev/null differ diff --git a/public/images/meetups/ethres-2026-banner.jpg b/public/images/meetups/ethres-2026-banner.jpg new file mode 100644 index 00000000000..31847f832d4 Binary files /dev/null and b/public/images/meetups/ethres-2026-banner.jpg differ diff --git a/sentry.edge.config.ts b/sentry.edge.config.ts index 33f399c3b36..1a8425f698a 100644 --- a/sentry.edge.config.ts +++ b/sentry.edge.config.ts @@ -9,5 +9,5 @@ Sentry.init({ environment, enabled: environment === "production", initialScope: { tags: { module: "app" } }, - ignoreTransactions: ["middleware"], + ignoreTransactions: ["proxy"], }) diff --git a/sentry.server.config.ts b/sentry.server.config.ts index 33f399c3b36..1a8425f698a 100644 --- a/sentry.server.config.ts +++ b/sentry.server.config.ts @@ -9,5 +9,5 @@ Sentry.init({ environment, enabled: environment === "production", initialScope: { tags: { module: "app" } }, - ignoreTransactions: ["middleware"], + ignoreTransactions: ["proxy"], }) diff --git a/src/components/AppCard/AppCard.stories.tsx b/src/components/AppCard/AppCard.stories.tsx index abacca8c690..3af8ca30f53 100644 --- a/src/components/AppCard/AppCard.stories.tsx +++ b/src/components/AppCard/AppCard.stories.tsx @@ -1,6 +1,6 @@ import { AppWindowMac } from "lucide-react" import Image from "next/image" -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { CardBanner } from "@/components/ui/card" import { VStack } from "@/components/ui/flex" diff --git a/src/components/AssetDownload/AssetDownload.stories.tsx b/src/components/AssetDownload/AssetDownload.stories.tsx index 3ed6d86ed79..2504dd6ac8b 100644 --- a/src/components/AssetDownload/AssetDownload.stories.tsx +++ b/src/components/AssetDownload/AssetDownload.stories.tsx @@ -1,4 +1,4 @@ -import type { Meta, StoryObj } from "@storybook/react" +import type { Meta, StoryObj } from "@storybook/nextjs" import AssetDownload from "." diff --git a/src/components/Banners/DismissableBanner/DismissableBanner.stories.tsx b/src/components/Banners/DismissableBanner/DismissableBanner.stories.tsx index a28c93b9833..5bf9f9e92ad 100644 --- a/src/components/Banners/DismissableBanner/DismissableBanner.stories.tsx +++ b/src/components/Banners/DismissableBanner/DismissableBanner.stories.tsx @@ -1,6 +1,6 @@ import React from "react" import { Info } from "lucide-react" -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { Center } from "@/components/ui/flex" diff --git a/src/components/BigNumber/index.tsx b/src/components/BigNumber/index.tsx index 24d03bcd183..2068eea0710 100644 --- a/src/components/BigNumber/index.tsx +++ b/src/components/BigNumber/index.tsx @@ -4,7 +4,7 @@ import { Info } from "lucide-react" import { getLocale, getTranslations } from "next-intl/server" import { cn } from "@/lib/utils/cn" -import { isValidDate } from "@/lib/utils/date" +import { dateTimeFormat, isValidDate } from "@/lib/utils/date" import Tooltip from "../Tooltip" import Link from "../ui/Link" @@ -64,11 +64,11 @@ const BigNumber = async ({ variant, }: BigNumberProps) => { const locale = await getLocale() - const t = await getTranslations({ locale, namespace: "common" }) + const t = await getTranslations("common") const lastUpdatedDisplay = lastUpdated && isValidDate(lastUpdated) - ? new Intl.DateTimeFormat(locale, { + ? dateTimeFormat(locale, { dateStyle: "medium", }).format(new Date(lastUpdated)) : "" diff --git a/src/components/Breadcrumbs/Breadcrumbs.stories.tsx b/src/components/Breadcrumbs/Breadcrumbs.stories.tsx index f0174f0b747..fbba3858864 100644 --- a/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +++ b/src/components/Breadcrumbs/Breadcrumbs.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, type StoryObj } from "@storybook/react" +import { Meta, type StoryObj } from "@storybook/nextjs" import { Stack } from "../ui/flex" diff --git a/src/components/CallToContribute/CallToContribute.stories.tsx b/src/components/CallToContribute/CallToContribute.stories.tsx index 1f1e6c63188..87131619e93 100644 --- a/src/components/CallToContribute/CallToContribute.stories.tsx +++ b/src/components/CallToContribute/CallToContribute.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { ChildOnlyProp } from "@/lib/types" diff --git a/src/components/Card/Card.stories.tsx b/src/components/Card/Card.stories.tsx index a86c0703eb3..f41f4aa4ed5 100644 --- a/src/components/Card/Card.stories.tsx +++ b/src/components/Card/Card.stories.tsx @@ -1,5 +1,5 @@ import { useTranslations } from "next-intl" -import { Meta, type StoryObj } from "@storybook/react" +import { Meta, type StoryObj } from "@storybook/nextjs" import { Button } from "../ui/buttons/Button" diff --git a/src/components/Codeblock.tsx b/src/components/Codeblock.tsx index 461c99adf91..db86c80fc7c 100644 --- a/src/components/Codeblock.tsx +++ b/src/components/Codeblock.tsx @@ -1,196 +1,42 @@ "use client" + import React, { useState } from "react" import { Clipboard, ClipboardCheck } from "lucide-react" -import Highlight, { - defaultProps, - Language, - PrismTheme, -} from "prism-react-renderer" -import Prism from "prism-react-renderer/prism" +import { useTheme } from "next-themes" +import { Highlight, Prism, type PrismTheme, themes } from "prism-react-renderer" -// https://github.com/FormidableLabs/prism-react-renderer/tree/master#custom-language-support import CopyToClipboard from "@/components/CopyToClipboard" +import { Button } from "@/components/ui/buttons/Button" import { Flex } from "@/components/ui/flex" import { cn } from "@/lib/utils/cn" import { LINES_BEFORE_COLLAPSABLE } from "@/lib/constants" -import useColorModeValue from "@/hooks/useColorModeValue" import { useTranslation } from "@/hooks/useTranslation" + +// Register Solidity language support +// https://github.com/FormidableLabs/prism-react-renderer#custom-language-support ;(typeof global !== "undefined" ? global : window).Prism = Prism require("prismjs/components/prism-solidity") -const TopBarItem = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( -
- ) -} +const makeTransparent = (theme: PrismTheme): PrismTheme => ({ + ...theme, + plain: { ...theme.plain, backgroundColor: "transparent" }, +}) -const codeTheme = { - light: { - styles: [ - { - style: { color: "#6c6783" }, - types: ["comment", "prolog", "doctype", "cdata", "punctuation"], - }, - { - style: { opacity: 0.7 }, - types: ["namespace"], - }, - { - style: { color: "#e09142" }, - types: ["tag", "operator", "number"], - }, - { - style: { color: "#ff7324" }, - types: ["property", "function"], - }, - { - style: { color: "#888888" }, - types: ["tag-id", "selector", "atrule-id"], - }, - { - style: { color: "#474b5e" }, - types: ["attr-name"], - }, - { - style: { color: "#498bb5" }, - types: [ - "boolean", - "string", - "entity", - "url", - "attr-value", - "keyword", - "control", - "directive", - "unit", - "statement", - "regex", - "at-rule", - "placeholder", - "variable", - ], - }, - { - style: { textDecorationLine: "line-through" }, - types: ["deleted"], - }, - { - style: { textDecorationLine: "underline" }, - types: ["inserted"], - }, - { - style: { fontStyle: "italic" }, - types: ["italic"], - }, - { - style: { fontWeight: "bold" }, - types: ["important", "bold"], - }, - { - style: { color: "#c4b9fe" }, - types: ["important"], - }, - ], - }, - dark: { - // Pulled from `defaultProps.theme` for potential customization - styles: [ - { - style: { color: "#6c6783" }, - types: ["comment", "prolog", "doctype", "cdata", "punctuation"], - }, - { - style: { opacity: 0.7 }, - types: ["namespace"], - }, - { - style: { color: "#e09142" }, - types: ["tag", "operator", "number"], - }, - { - style: { color: "#9a86fd" }, - types: ["property", "function"], - }, - { - style: { color: "#eeebff" }, - types: ["tag-id", "selector", "atrule-id"], - }, - { - style: { color: "#c4b9fe" }, - types: ["attr-name"], - }, - { - style: { color: "#ffcc99" }, - types: [ - "boolean", - "string", - "entity", - "url", - "attr-value", - "keyword", - "control", - "directive", - "unit", - "statement", - "regex", - "at-rule", - "placeholder", - "variable", - ], - }, - { - style: { textDecorationLine: "line-through" }, - types: ["deleted"], - }, - { - style: { textDecorationLine: "underline" }, - types: ["inserted"], - }, - { - style: { fontStyle: "italic" }, - types: ["italic"], - }, - { - style: { fontWeight: "bold" }, - types: ["important", "bold"], - }, - { - style: { color: "#c4b9fe" }, - types: ["important"], - }, - ], - }, -} +const lightTheme = makeTransparent(themes.oneLight) +const darkTheme = makeTransparent(themes.duotoneDark) -const getValidChildrenForCodeblock = (child) => { +const getValidChildrenForCodeblock = (child: unknown): string | undefined => { try { if (typeof child !== "string") { - return getValidChildrenForCodeblock(child.props.children) + const element = child as React.ReactElement<{ children: unknown }> + return getValidChildrenForCodeblock(element.props.children) } else { return child } - } catch (e) { - /*For now available: code without wrappers like div - * example: - * - const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key"){"\n"} - web3.eth.getBlockNumber().then(console.log) - - * */ + } catch { console.error(`Codeblock children is not valid`) } } @@ -209,7 +55,8 @@ const Codeblock = ({ className, }: CodeblockProps) => { const { t } = useTranslation("common") - const selectedTheme = useColorModeValue(codeTheme.light, codeTheme.dark) + const { resolvedTheme } = useTheme() + const codeTheme = resolvedTheme === "dark" ? darkTheme : lightTheme const codeText = React.Children.toArray(children) .map((child) => { @@ -244,35 +91,28 @@ const Codeblock = ({ /* Context: https://github.com/ethereum/ethereum-org-website/issues/6202 */
- - {({ className, style, tokens, getLineProps, getTokenProps }) => ( + + {({ style, tokens, getLineProps, getTokenProps }) => (
               {tokens.map((line, i) => {
-                return i === tokens.length - 1 &&
-                  line[0].content === "" ? null : (
+                return i === tokens.length - 1 && line[0].empty ? null : (
                   
{shouldShowLineNumbers && ( @@ -281,40 +121,48 @@ const Codeblock = ({ )} {line.map((token, key) => ( - + ))}
) })} {!fromHomepage && ( - + {allowCollapse && totalLines - 1 > LINES_BEFORE_COLLAPSABLE && ( - setIsCollapsed(!isCollapsed)}> + )} {shouldShowCopyWidget && ( - - {(isCopied) => ( - - {!isCopied ? ( + )} )} diff --git a/src/components/Content/what-are-apps/WhatAreAppsStories.tsx b/src/components/Content/what-are-apps/WhatAreAppsStories.tsx index 76d50d9f224..94c8719c619 100644 --- a/src/components/Content/what-are-apps/WhatAreAppsStories.tsx +++ b/src/components/Content/what-are-apps/WhatAreAppsStories.tsx @@ -9,6 +9,7 @@ import { Image } from "@/components/Image" import { Button, ButtonLink } from "@/components/ui/buttons/Button" import { cn } from "@/lib/utils/cn" +import { dateTimeFormat } from "@/lib/utils/date" const stories: Story[] = [ { @@ -119,11 +120,11 @@ const WhatAreAppsStories = () => {

- {new Date(story.date).toLocaleDateString("en-US", { + {dateTimeFormat("en-US", { year: "numeric", month: "long", day: "numeric", - })} + }).format(new Date(story.date))}

))} diff --git a/src/components/Contributors/Contributors.stories.tsx b/src/components/Contributors/Contributors.stories.tsx index 288263c7055..94ac0d424e2 100644 --- a/src/components/Contributors/Contributors.stories.tsx +++ b/src/components/Contributors/Contributors.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import ContributorsComponent, { type Contributor } from "." diff --git a/src/components/DeveloperDocsLinks/DeveloperDocsLinks.stories.tsx b/src/components/DeveloperDocsLinks/DeveloperDocsLinks.stories.tsx index 236821ee33a..7f178816d5d 100644 --- a/src/components/DeveloperDocsLinks/DeveloperDocsLinks.stories.tsx +++ b/src/components/DeveloperDocsLinks/DeveloperDocsLinks.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "../../../.storybook/modes" diff --git a/src/components/DocLink/DocLink.stories.tsx b/src/components/DocLink/DocLink.stories.tsx index b4f5335eb83..93887da13f5 100644 --- a/src/components/DocLink/DocLink.stories.tsx +++ b/src/components/DocLink/DocLink.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { VStack } from "../ui/flex" diff --git a/src/components/DocsNav/DocsNav.stories.tsx b/src/components/DocsNav/DocsNav.stories.tsx index 55efb3fdd1c..6b62a847d5e 100644 --- a/src/components/DocsNav/DocsNav.stories.tsx +++ b/src/components/DocsNav/DocsNav.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import DocsNavComponent from "." diff --git a/src/components/EnergyConsumptionChart/EnergyConsumptionChart.stories.tsx b/src/components/EnergyConsumptionChart/EnergyConsumptionChart.stories.tsx index c6c0624b3f3..bb8b132ddb5 100644 --- a/src/components/EnergyConsumptionChart/EnergyConsumptionChart.stories.tsx +++ b/src/components/EnergyConsumptionChart/EnergyConsumptionChart.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import ChartComponent from "." diff --git a/src/components/EthPriceCard.tsx b/src/components/EthPriceCard.tsx index 1b715c6b218..eeffcbee742 100644 --- a/src/components/EthPriceCard.tsx +++ b/src/components/EthPriceCard.tsx @@ -10,6 +10,7 @@ import Tooltip from "@/components/Tooltip" import InlineLink from "@/components/ui/Link" import { cn } from "@/lib/utils/cn" +import { numberFormat } from "@/lib/utils/numbers" import { Flex } from "./ui/flex" @@ -70,7 +71,7 @@ const EthPriceCard = ({ const hasData = "data" in state const formatPrice = (price: string) => - new Intl.NumberFormat(locale, { + numberFormat(locale, { style: "currency", currency: "USD", minimumFractionDigits: 2, @@ -78,7 +79,7 @@ const EthPriceCard = ({ }).format(+price) const formatPercentage = (amount: number): string => - new Intl.NumberFormat(locale, { + numberFormat(locale, { style: "percent", minimumFractionDigits: 2, maximumFractionDigits: 2, diff --git a/src/components/Faq/Faq.stories.tsx b/src/components/Faq/Faq.stories.tsx index 63fdf874f8e..234e8a92201 100644 --- a/src/components/Faq/Faq.stories.tsx +++ b/src/components/Faq/Faq.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { Faq as FaqComponent, FaqContent, FaqItem, FaqTrigger } from "." diff --git a/src/components/FeedbackWidget/FeedbackWidget.stories.tsx b/src/components/FeedbackWidget/FeedbackWidget.stories.tsx index d326503f490..56e661a401a 100644 --- a/src/components/FeedbackWidget/FeedbackWidget.stories.tsx +++ b/src/components/FeedbackWidget/FeedbackWidget.stories.tsx @@ -1,6 +1,6 @@ import * as React from "react" -import { Meta, StoryObj } from "@storybook/react" -import { expect, fireEvent, waitFor, within } from "@storybook/test" +import { expect, fireEvent, waitFor, within } from "storybook/test" +import { Meta, StoryObj } from "@storybook/nextjs" import { Stack } from "../ui/flex" diff --git a/src/components/FilterBar/FilterBar.stories.tsx b/src/components/FilterBar/FilterBar.stories.tsx index 0b237cd6cb0..f9e4d16ee14 100644 --- a/src/components/FilterBar/FilterBar.stories.tsx +++ b/src/components/FilterBar/FilterBar.stories.tsx @@ -1,5 +1,5 @@ import { useState } from "react" -import type { Meta } from "@storybook/react" +import type { Meta } from "@storybook/nextjs" import FilterBar from "./" diff --git a/src/components/FindWalletProductTable/FindWalletProductTable.stories.tsx b/src/components/FindWalletProductTable/FindWalletProductTable.stories.tsx index 747d1dbe831..dbe2a606bd3 100644 --- a/src/components/FindWalletProductTable/FindWalletProductTable.stories.tsx +++ b/src/components/FindWalletProductTable/FindWalletProductTable.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { WalletLanguage } from "@/lib/types" diff --git a/src/components/FindWalletProductTable/WalletSubComponent.tsx b/src/components/FindWalletProductTable/WalletSubComponent.tsx index ceb5dfb1c1c..1606ddd1319 100644 --- a/src/components/FindWalletProductTable/WalletSubComponent.tsx +++ b/src/components/FindWalletProductTable/WalletSubComponent.tsx @@ -14,8 +14,8 @@ import Tooltip from "@/components/Tooltip" import InlineLink from "@/components/ui/Link" import { cn } from "@/lib/utils/cn" +import { getLocaleFormattedDate } from "@/lib/utils/date" import { trackCustomEvent } from "@/lib/utils/matomo" -import { getLocaleFormattedDate } from "@/lib/utils/time" import { useTranslation } from "@/hooks/useTranslation" diff --git a/src/components/GitStars.tsx b/src/components/GitStars.tsx index 4eb5d4e8727..bb0cd3a93cc 100644 --- a/src/components/GitStars.tsx +++ b/src/components/GitStars.tsx @@ -4,6 +4,8 @@ import Github from "@/components/icons/github.svg" import { Center, Flex } from "@/components/ui/flex" import { BaseLink, LinkProps } from "@/components/ui/Link" +import { numberFormat } from "@/lib/utils/numbers" + import Emoji from "./Emoji" type GitHubRepo = { @@ -18,8 +20,8 @@ type GitStarsProps = Omit & { const GitStars = ({ gitHubRepo, hideStars, ...props }: GitStarsProps) => { const locale = useLocale() - // Use Intl.NumberFormat to format the number for locale - const starsString = Intl.NumberFormat(locale, { + // Use numberFormat to format the number for locale + const starsString = numberFormat(locale, { compactDisplay: "short", }).format(gitHubRepo.stargazerCount) diff --git a/src/components/Glossary/GlossaryDefinition/GlossaryDefinition.stories.tsx b/src/components/Glossary/GlossaryDefinition/GlossaryDefinition.stories.tsx index 7253c0ea235..e46caf2f0d6 100644 --- a/src/components/Glossary/GlossaryDefinition/GlossaryDefinition.stories.tsx +++ b/src/components/Glossary/GlossaryDefinition/GlossaryDefinition.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import GlossaryDefinitionComponent from "." diff --git a/src/components/Glossary/GlossaryTooltip/GlossaryTooltip.stories.tsx b/src/components/Glossary/GlossaryTooltip/GlossaryTooltip.stories.tsx index 3529d1fad65..adebb7e2ca4 100644 --- a/src/components/Glossary/GlossaryTooltip/GlossaryTooltip.stories.tsx +++ b/src/components/Glossary/GlossaryTooltip/GlossaryTooltip.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { Center } from "@/components/ui/flex" diff --git a/src/components/Hero/ContentHero/ContentHero.stories.tsx b/src/components/Hero/ContentHero/ContentHero.stories.tsx index 785017be34c..ed7a3cab82a 100644 --- a/src/components/Hero/ContentHero/ContentHero.stories.tsx +++ b/src/components/Hero/ContentHero/ContentHero.stories.tsx @@ -1,5 +1,5 @@ import { useTranslations } from "next-intl" -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "@/storybook/modes" diff --git a/src/components/Hero/HomeHero/HomeHero.stories.tsx b/src/components/Hero/HomeHero/HomeHero.stories.tsx index 39dd516d12c..8a08a6527ef 100644 --- a/src/components/Hero/HomeHero/HomeHero.stories.tsx +++ b/src/components/Hero/HomeHero/HomeHero.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "@/storybook/modes" diff --git a/src/components/Hero/HomeHero/index.tsx b/src/components/Hero/HomeHero/index.tsx index 48a38a53dd0..e1e585b19ed 100644 --- a/src/components/Hero/HomeHero/index.tsx +++ b/src/components/Hero/HomeHero/index.tsx @@ -1,5 +1,5 @@ import { getImageProps, type StaticImageData } from "next/image" -import { getLocale, getTranslations } from "next-intl/server" +import { getTranslations } from "next-intl/server" import type { ClassNameProp } from "@/lib/types" @@ -23,8 +23,7 @@ const HomeHero = async ({ image2xl, alt: altProp, }: HomeHeroProps) => { - const locale = getLocale() - const t = await getTranslations({ locale, namespace: "page-index" }) + const t = await getTranslations("page-index") const baseImage = image ?? heroBase const xlImage = image2xl ?? image ?? hero2xl @@ -48,6 +47,11 @@ const HomeHero = async ({ props: { srcSet: srcSetBase, ...rest }, } = getImageProps({ ...common, ...baseImage, quality: 5 }) + // Remove blurWidth/blurHeight from rest to avoid React DOM warnings + // (Next.js getImageProps includes them but they're not valid HTML attributes) + delete (rest as Record).blurWidth + delete (rest as Record).blurHeight + return (
diff --git a/src/components/Hero/HomeHero2026/index.tsx b/src/components/Hero/HomeHero2026/index.tsx index 06ded61ee13..d5f8c5b12d9 100644 --- a/src/components/Hero/HomeHero2026/index.tsx +++ b/src/components/Hero/HomeHero2026/index.tsx @@ -94,6 +94,11 @@ const HomeHero2026 = ({ props: { srcSet: srcSetBase, ...rest }, } = getImageProps({ ...common, ...baseImage, quality: 5 }) + // Remove blurWidth/blurHeight from rest to avoid React DOM warnings + // (Next.js getImageProps includes them but they're not valid HTML attributes) + delete (rest as Record).blurWidth + delete (rest as Record).blurHeight + return (
diff --git a/src/components/Hero/HubHero/HubHero.stories.tsx b/src/components/Hero/HubHero/HubHero.stories.tsx index 3cdcac4ff0b..b0739ad75a4 100644 --- a/src/components/Hero/HubHero/HubHero.stories.tsx +++ b/src/components/Hero/HubHero/HubHero.stories.tsx @@ -1,5 +1,5 @@ import { useTranslations } from "next-intl" -import type { Meta, StoryObj } from "@storybook/react/*" +import type { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "@/storybook/modes" diff --git a/src/components/Hero/MdxHero/MdxHero.stories.tsx b/src/components/Hero/MdxHero/MdxHero.stories.tsx index 975d1b56d3d..0db1de0f700 100644 --- a/src/components/Hero/MdxHero/MdxHero.stories.tsx +++ b/src/components/Hero/MdxHero/MdxHero.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { HStack } from "@/components/ui/flex" diff --git a/src/components/History/NetworkUpgradeSummary.tsx b/src/components/History/NetworkUpgradeSummary.tsx index 230219f1e85..0d94363f377 100644 --- a/src/components/History/NetworkUpgradeSummary.tsx +++ b/src/components/History/NetworkUpgradeSummary.tsx @@ -3,11 +3,10 @@ import { useEffect, useState } from "react" import { useLocale } from "next-intl" -import type { Lang } from "@/lib/types" - import { Flex, Stack } from "@/components/ui/flex" -import { getLocaleForNumberFormat } from "@/lib/utils/translations" +import { dateTimeFormat } from "@/lib/utils/date" +import { numberFormat } from "@/lib/utils/numbers" import networkUpgradeSummaryData from "@/data/networkUpgradeSummaryData" @@ -23,7 +22,6 @@ type NetworkUpgradeSummaryProps = { const NetworkUpgradeSummary = ({ name }: NetworkUpgradeSummaryProps) => { const [formattedUTC, setFormattedUTC] = useState("") const locale = useLocale() - const localeForStatsBoxNumbers = getLocaleForNumberFormat(locale as Lang) const { t } = useTranslation("page-history") const { @@ -39,7 +37,7 @@ const NetworkUpgradeSummary = ({ name }: NetworkUpgradeSummaryProps) => { // calculate date format only on the client side to avoid hydration issues useEffect(() => { const date = new Date(dateTimeAsString as string) - const formattedDate = date.toLocaleString(locale, { + const formattedDate = dateTimeFormat(locale, { timeZone: "UTC", month: "short", day: "numeric", @@ -47,7 +45,7 @@ const NetworkUpgradeSummary = ({ name }: NetworkUpgradeSummaryProps) => { hour: "numeric", minute: "numeric", second: "numeric", - }) + }).format(date) setFormattedUTC(`${formattedDate} +UTC`) }, [dateTimeAsString, locale]) @@ -57,7 +55,7 @@ const NetworkUpgradeSummary = ({ name }: NetworkUpgradeSummaryProps) => { {t(translationKey)}:{" "} - {new Intl.NumberFormat(localeForStatsBoxNumbers).format(number)} + {numberFormat(locale).format(number)} ) @@ -93,7 +91,7 @@ const NetworkUpgradeSummary = ({ name }: NetworkUpgradeSummaryProps) => { {t("page-history:page-history-eth-price")}:{" "} - {new Intl.NumberFormat(localeForStatsBoxNumbers, { + {numberFormat(locale, { style: "currency", currency: "USD", }).format(ethPriceInUSD)} diff --git a/src/components/Homepage/HomepageSectionImage.tsx b/src/components/Homepage/HomepageSectionImage.tsx index e5a6a945139..ca4ebb5e948 100644 --- a/src/components/Homepage/HomepageSectionImage.tsx +++ b/src/components/Homepage/HomepageSectionImage.tsx @@ -89,6 +89,11 @@ export default function HomepageSectionImage({ quality: 40, }) + // Remove blurWidth/blurHeight from rest to avoid React DOM warnings + // (Next.js getImageProps includes them but they're not valid HTML attributes) + delete (rest as Record).blurWidth + delete (rest as Record).blurHeight + return ( = 1_000) { - return new Intl.NumberFormat("en-US").format(value) + return numberFormat("en-US").format(value) } return value.toString() } diff --git a/src/components/Homepage/utils.ts b/src/components/Homepage/utils.ts index 94b1c181c43..5452833d005 100644 --- a/src/components/Homepage/utils.ts +++ b/src/components/Homepage/utils.ts @@ -1,8 +1,6 @@ import type { StaticImageData } from "next/image" import { getTranslations } from "next-intl/server" -import type { Lang } from "@/lib/types" - import { cn } from "@/lib/utils/cn" import ImpactImage from "@/public/images/impact_transparent.png" @@ -101,8 +99,8 @@ const getPosition = (position: number): string => stylesByPosition.xl[position] ) -export const getBentoBoxItems = async (locale: Lang): Promise => { - const t = await getTranslations({ locale, namespace: "page-index" }) +export const getBentoBoxItems = async (): Promise => { + const t = await getTranslations("page-index") const getCopy = (category: Category, href: string): CopyDetails => ({ title: t(`page-index-bento-${category}-title`), diff --git a/src/components/Layer2NetworksTable/hooks/useNetworkColumns.tsx b/src/components/Layer2NetworksTable/hooks/useNetworkColumns.tsx index 5af5d6184bc..48d2e000e5f 100644 --- a/src/components/Layer2NetworksTable/hooks/useNetworkColumns.tsx +++ b/src/components/Layer2NetworksTable/hooks/useNetworkColumns.tsx @@ -16,6 +16,7 @@ import { TableCell, TableHead } from "@/components/ui/table" import { cn } from "@/lib/utils/cn" import { trackCustomEvent } from "@/lib/utils/matomo" +import { numberFormat } from "@/lib/utils/numbers" export const useNetworkColumns: ColumnDef[] = [ { @@ -81,13 +82,10 @@ export const useNetworkColumns: ColumnDef[] = [ {row.original.txCosts ? ( <> $ - {(row.original.txCosts || 0).toLocaleString( - meta.locale as Lang, - { - minimumFractionDigits: 2, - maximumFractionDigits: 3, - } - )} + {numberFormat(meta.locale as Lang, { + minimumFractionDigits: 2, + maximumFractionDigits: 3, + }).format(row.original.txCosts || 0)} ) : (

-

@@ -99,7 +97,7 @@ export const useNetworkColumns: ColumnDef[] = [

- {new Intl.NumberFormat(meta.locale as Lang, { + {numberFormat(meta.locale as Lang, { style: "currency", currency: "USD", notation: "compact", @@ -172,10 +170,10 @@ export const useNetworkColumns: ColumnDef[] = [ {row.original.txCosts ? (

$ - {row.original.txCosts.toLocaleString(meta.locale as Lang, { + {numberFormat(meta.locale as Lang, { minimumFractionDigits: 2, maximumFractionDigits: 3, - })} + }).format(row.original.txCosts)}

) : (

-

@@ -224,7 +222,7 @@ export const useNetworkColumns: ColumnDef[] = [ )} >

- {new Intl.NumberFormat(meta.locale as Lang, { + {numberFormat(meta.locale as Lang, { style: "currency", currency: "USD", notation: "compact", diff --git a/src/components/ListenToPlayer/ListenToPlayer.stories.tsx b/src/components/ListenToPlayer/ListenToPlayer.stories.tsx index d5f26d30a0f..2b8f4f2c25e 100644 --- a/src/components/ListenToPlayer/ListenToPlayer.stories.tsx +++ b/src/components/ListenToPlayer/ListenToPlayer.stories.tsx @@ -1,8 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react" -import { expect } from "@storybook/test" -import { waitFor } from "@storybook/test" -import { fireEvent } from "@storybook/test" -import { within } from "@storybook/test" +import { expect, fireEvent, waitFor, within } from "storybook/test" +import type { Meta, StoryObj } from "@storybook/nextjs" import Component from "." diff --git a/src/components/LocaleDateTime.tsx b/src/components/LocaleDateTime.tsx index 2ab4c7e50b7..acd34bd89e5 100644 --- a/src/components/LocaleDateTime.tsx +++ b/src/components/LocaleDateTime.tsx @@ -1,5 +1,7 @@ import { useLocale } from "next-intl" +import { dateTimeFormat } from "@/lib/utils/date" + type LocaleDateTimeProps = { utcDateTime: string hideDate?: boolean @@ -45,7 +47,7 @@ const LocaleDateTime = ({ } return ( ) } diff --git a/src/components/Logo/Logo.stories.tsx b/src/components/Logo/Logo.stories.tsx index 66a8be0858a..35199cc7eb1 100644 --- a/src/components/Logo/Logo.stories.tsx +++ b/src/components/Logo/Logo.stories.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import LogoComponent from "." diff --git a/src/components/MdComponents/MdComponents.stories.tsx b/src/components/MdComponents/MdComponents.stories.tsx index bc502acdaf5..48d112bc343 100644 --- a/src/components/MdComponents/MdComponents.stories.tsx +++ b/src/components/MdComponents/MdComponents.stories.tsx @@ -1,5 +1,5 @@ import { pickBy } from "lodash" -import type { Meta, StoryObj } from "@storybook/react/*" +import type { Meta, StoryObj } from "@storybook/nextjs" import { viewportModes } from "@/storybook/modes" diff --git a/src/components/MergeInfographic/MergeInfographic.stories.tsx b/src/components/MergeInfographic/MergeInfographic.stories.tsx index e2b29fb7828..b7c11166f46 100644 --- a/src/components/MergeInfographic/MergeInfographic.stories.tsx +++ b/src/components/MergeInfographic/MergeInfographic.stories.tsx @@ -1,4 +1,4 @@ -import { Meta, StoryObj } from "@storybook/react" +import { Meta, StoryObj } from "@storybook/nextjs" import { langViewportModes } from "@/storybook/modes" diff --git a/src/components/Nav/DesktopNav.tsx b/src/components/Nav/DesktopNav.tsx index 0fa7b3c20aa..992b78dda87 100644 --- a/src/components/Nav/DesktopNav.tsx +++ b/src/components/Nav/DesktopNav.tsx @@ -11,7 +11,7 @@ import { ThemeToggleButton } from "./ThemeToggleButton" import { getLanguagesDisplayInfo } from "@/lib/nav/links" const DesktopNav = async ({ className }: { className?: string }) => { - const t = await getTranslations({ namespace: "common" }) + const t = await getTranslations("common") const languages = await getLanguagesDisplayInfo() const locale = await getLocale() diff --git a/src/components/Nav/index.tsx b/src/components/Nav/index.tsx index 011110fc494..2ce91501c10 100644 --- a/src/components/Nav/index.tsx +++ b/src/components/Nav/index.tsx @@ -13,7 +13,7 @@ import { DesktopNavLoading, MobileNavLoading } from "./loading" import MobileNav from "./MobileNav" const Nav = async () => { - const t = await getTranslations({ namespace: "common" }) + const t = await getTranslations("common") return (