diff --git a/.env.example b/.env.example
index 5c4e41e2eb1..8965068dce2 100644
--- a/.env.example
+++ b/.env.example
@@ -1,22 +1,33 @@
# rename this file to .env and supply the values listed below
# also make sure they are available to the build tool (e.g. Netlify)
-# warning: variables prefixed with GATSBY_ will be made available to client-side code
+# warning: variables prefixed with NEXT_PUBLIC_ will be made available to client-side code
# be careful not to expose sensitive data (e.g. your Algolia admin key)
-ALGOLIA_ADMIN_KEY=insertValue
-ETHERSCAN_API_KEY=insertValue
-GATSBY_ALGOLIA_APP_ID=insertValue
-GATSBY_ALGOLIA_SEARCH_KEY=insertValue
-GATSBY_ALGOLIA_BASE_SEARCH_INDEX_NAME=insertValue
-GATSBY_GITHUB_TOKEN_READ_ONLY=insertValue
-GATSBY_FUNCTIONS_PATH=insertValue
-# Build pages only for the specified langs. Leave it empty to build all the langs
-# e.g. `en,fr` will only build english and french pages
-# Note: always include `en` as it is the default lang of the site
-GATSBY_BUILD_LANGS=
+# Algolia environment (app ID, search key and base search index name required for search)
+# NEXT_PUBLIC_ALGOLIA_APP_ID=insertValue
+# NEXT_PUBLIC_ALGOLIA_SEARCH_KEY=insertValue
+# NEXT_PUBLIC_ALGOLIA_BASE_SEARCH_INDEX_NAME=insertValue
+# NEXT_PUBLIC_GITHUB_TOKEN_READ_ONLY=insertValue
+
+# Etherscan API key (required for Etherscan API fetches)
+# ETHERSCAN_API_KEY=insertValue
+
+# Google API key and Calendar ID (required to fetch Calendar events)
+# GOOGLE_API_KEY=
+# GOOGLE_CALENDAR_ID=
-# Folders or files to ignore from the `src/content` folder
-IGNORE_CONTENT=**/docs,**/tutorials
+# Matomo environment (URL and site ID required for analytics)
+NEXT_PUBLIC_MATOMO_URL=
+NEXT_PUBLIC_MATOMO_SITE_ID=
# Used to avoid loading Matomo in our preview deploys
-IS_PREVIEW_DEPLOY=false
\ No newline at end of file
+IS_PREVIEW_DEPLOY=false
+
+# Build pages only for the specified langs. Leave it empty to build all the langs
+# e.g. `en,fr` will only build English and French pages
+# Note: always include `en` as it is the default lang of the site
+BUILD_LOCALES=
+
+# If resource constraints are being hit during builds, change LIMIT_CPUS to a
+# fixed number of CPUs (e.g. 2) to limit the demand during build time
+LIMIT_CPUS=
\ No newline at end of file
diff --git a/.eslintignore b/.eslintignore
index 1d630a7b202..422c3919cbb 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,2 +1,3 @@
-# The content is used as a code example in /src/pages/index.js
-src/data/CreateWallet.js
\ No newline at end of file
+.next
+dist
+node_modules/
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 00000000000..c50139c55cd
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,42 @@
+{
+ "extends": ["next/core-web-vitals", "prettier", "plugin:storybook/recommended"],
+ "env": { "es6": true },
+ "plugins": ["simple-import-sort"],
+ "rules": {
+ "simple-import-sort/imports": [
+ "error",
+ {
+ "groups": [
+ // Node.js builtins.
+ [
+ "^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)"
+ ],
+ // Packages. `react` related packages come first.
+ // Also, put `react-icons` in sorting order not with `react`
+ ["^react(?!-.)$", "^\\w", "^@\\w"],
+ // The Chakra theme directory if imported to story file or other places
+ ["^@/@chakra-ui"],
+ // From the `types` directory.
+ ["^@/lib/types", "^@/lib/interfaces"],
+ // From the `components` directory.
+ ["^@/components"],
+ // From the `utils` directory.
+ ["^@/lib/utils"],
+ // From the `data` directory.
+ ["^@/data"],
+ // From the `constants` directory.
+ ["^@/lib/constants"],
+ // Parent imports. Put `..` last.
+ ["^\\.\\.(?!/?$)", "^\\.\\./?$"],
+ // Other relative imports. Put same-folder imports and `.` last.
+ ["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
+ // Style imports.
+ ["^.+\\.s?css$"],
+ // Side effect imports.
+ ["^\\u0000"]
+ ]
+ }
+ ],
+ "simple-import-sort/exports": "error"
+ }
+}
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index db9004a7f85..7e2178aaab4 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -8,4 +8,4 @@
* @wackerow @corwintines @pettinarip @minimalsm @nhsz
# Owners of specific files
-/src/data/consensus-bounty-hunters.csv @djrtwo @asanso @fredriksvantes
+/src/data/consensus-bounty-hunters.json @djrtwo @asanso @fredriksvantes
diff --git a/.github/labeler.yml b/.github/labeler.yml
index f5b8c69e702..b9dfc30db1a 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -1,5 +1,6 @@
"review needed :eyes:":
- src/**/*
+ - public/*
"documentation :book:":
- README.md
@@ -7,28 +8,35 @@
"tooling :wrench:":
- .github/**/*
- src/scripts/*
- - netlify.toml
+ - src/lib/*
+ - src/hooks/*
"dependencies :package:":
- package.json
- yarn.lock
"internal :house:":
- - gatsby-browser.js
- - gatsby-config.js
- - gatsby-node.js
- - gatsby-ssr.js
- .all-contributorsrc
+ - i18n.config.json
+ - next.config.js
+ - next-i18next.config,js
+ - next-sitemap.config.js
+ - tsconfig.json
+ - .nvmrc
+ - .eslintignore
+ - .eslintrc.json
+ - .prettierignore
+ - .prettierrc
+ - netlify.toml
"translation :earth_africa:":
- src/content/translations/**/*
- - src/intl/*
- - src/utils/translations.js
+ - src/intl/**/*
+ - src/lib/utils/translations.ts
"content :fountain_pen:":
- src/pages/*
- - src/pages-conditional/*
- - src/content/**/*
+ - public/content/**/*
"event :date:":
- src/data/community-events.json
diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml
index df583ee1e7b..ceac26fc65f 100644
--- a/.github/workflows/chromatic.yml
+++ b/.github/workflows/chromatic.yml
@@ -14,9 +14,8 @@ on:
# Only run on file changes in any of these paths
- "src/components/**/*"
- "src/pages/**/*"
- - "src/pages-conditional/**/*"
- - "src/templates/**/*"
- - "src/@chakra-ui/gatsby-plugin/**/*"
+ - "src/layouts/**/*"
+ - "src/@chakra-ui/**/*"
# List of jobs
jobs:
diff --git a/.gitignore b/.gitignore
index 4cd730d60a1..091c2e7d306 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,91 +1,48 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
+# testing
+/coverage
-# Dependency directories
-node_modules/
-jspm_packages/
+# next.js
+/.next/
+/out/
-# Typescript v1 declaration files
-typings/
+# production
+/build
-# Optional npm cache directory
-.npm
+# misc
+.DS_Store
+*.pem
-# Optional eslint cache
-.eslintcache
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
-# Optional REPL history
-.node_repl_history
+# local env files
+.env*.local
+.env
-# Output of 'npm pack'
-*.tgz
+# vercel
+.vercel
-# dotenv environment variable files
-.env
+# typescript
+*.tsbuildinfo
+next-env.d.ts
-# gatsby files
-.cache/
-public
+# rss feeds
+feed.xml
-# Mac files
-.DS_Store
+# Sitemaps
+sitemap*.xml
-# Yarn
-yarn-error.log
-.pnp/
-.pnp.js
-# Yarn Integrity file
-.yarn-integrity
+# Robots.txt
+robots.txt
# Local Netlify folder
.netlify
-
-# Custom build files
-# This file is generated by `yarn copy-contributors` command
-src/data/contributors.json
-# These files are generated by `yarn merge-translations` command
-src/intl/*.json
-i18n/locales
-i18n/merged
-# Auto generated code when gatsby build the site
-src/gatsby-types.d.ts
-
-# Exported Crowdin files
-.crowdin
-
-# vscode workplace configuration
-.vscode
-
-# storybook static files
-storybook-static/
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000000..209e3ef4b62
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+20
diff --git a/.prettierignore b/.prettierignore
index 557dcfdb3ab..ed8032e23cc 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,4 +1,6 @@
-.cache
-package.json
+.next
+node_modules
+yarn.lock
package-lock.json
-public
\ No newline at end of file
+public
+build
diff --git a/.storybook/babel-storybook-config.ts b/.storybook/babel-storybook-config.ts
deleted file mode 100644
index 4cde75eab03..00000000000
--- a/.storybook/babel-storybook-config.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { TransformOptions } from "@babel/core"
-
-export const babelConfig: TransformOptions = {
- sourceType: "unambiguous",
- presets: [
- [
- "@babel/preset-env",
- {
- targets: {
- chrome: 100,
- },
- },
- ],
- "@babel/preset-typescript",
- "@babel/preset-react",
- ],
- plugins: [],
-}
diff --git a/.storybook/i18next.ts b/.storybook/i18next.ts
index 5f8c98f4116..b4cc0629781 100644
--- a/.storybook/i18next.ts
+++ b/.storybook/i18next.ts
@@ -1,5 +1,5 @@
import i18n, { Resource } from "i18next"
-import { initReactI18next } from "gatsby-plugin-react-i18next"
+import { initReactI18next } from "react-i18next"
export const baseLocales = {
en: { title: "English", left: "En" },
@@ -21,30 +21,31 @@ const ns = [
const supportedLngs = Object.keys(baseLocales)
/**
- * Taking the ns array and combining all the ids
- * under a single ns per language, set to the default of "translation"
+ * Taking the ns array and generating those files for each language available.
*/
const resources: Resource = ns.reduce((acc, n) => {
supportedLngs.forEach((lng) => {
if (!acc[lng]) acc[lng] = {}
+
try {
acc[lng] = {
- translation: {
- ...acc[lng].translation,
-
+ ...acc[lng],
+ [n]: {
+ ...acc[lng][n],
...require(`../src/intl/${lng}/${n}.json`),
},
}
} catch {
acc[lng] = {
- translation: {
- ...acc[lng].translation,
-
+ ...acc[lng],
+ [n]: {
+ ...acc[lng][n],
...require(`../src/intl/en/${n}.json`),
},
}
}
})
+
return acc
}, {})
diff --git a/.storybook/main.ts b/.storybook/main.ts
index b8c350a0fce..43bcf585a63 100644
--- a/.storybook/main.ts
+++ b/.storybook/main.ts
@@ -1,68 +1,51 @@
-import { StorybookConfig } from "@storybook/react-webpack5"
+import path from "path"
+
+import type { StorybookConfig } from "@storybook/nextjs"
import { propNames } from "@chakra-ui/react"
-import { babelConfig } from "./babel-storybook-config"
+
+/**
+ * Note regarding package.json settings related to Storybook:
+ *
+ * There is a resolutions option set for the package `jackspeak`. This is related to a
+ * workaround provided to make sure storybook ( as of v7.5.2) works correctly with
+ * Yarn v1
+ *
+ * Reference: https://github.com/storybookjs/storybook/issues/22431#issuecomment-1630086092
+ *
+ * The primary recommendation is to upgrade to Yarn 3 if possible
+ */
const config: StorybookConfig = {
- stories: ["../src/components/**/*.stories.tsx"],
+ stories: ["../src/components/**/*.stories.{ts,tsx}"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
- // https://storybook.js.org/addons/@storybook/addon-a11y/
- "@storybook/addon-a11y",
"@chakra-ui/storybook-addon",
"storybook-react-i18next",
],
- staticDirs: ["../static", "../src/assets"],
- babel: async () => ({
- ...babelConfig,
- }),
+ staticDirs: ["../public"],
framework: {
- name: "@storybook/react-webpack5",
+ name: "@storybook/nextjs",
options: {},
},
+ docs: {
+ autodocs: "tag",
+ },
refs: {
"@chakra-ui/react": {
disable: true,
},
},
- features: {},
- webpackFinal: async (config) => {
- if (
- config.module != undefined &&
- config.module.rules != undefined &&
- config.module.rules[0] !== "..."
- ) {
- config.module.rules[0].exclude = [/node_modules\/(?!(gatsby)\/)/]
- config.module.rules[0].use = [
- {
- loader: require.resolve("babel-loader"),
- options: {
- presets: [
- // use @babel/preset-react for JSX and env (instead of staged presets)
- require.resolve("@babel/preset-react"),
- require.resolve("@babel/preset-env"),
- ],
- plugins: [
- // use babel-plugin-remove-graphql-queries to remove static queries from components when rendering in storybook
- require.resolve("babel-plugin-remove-graphql-queries"),
- ],
- },
- },
- ]
- }
+ webpackFinal: async (config: any) => {
+ // Add path aliases
+ config.resolve.alias["@"] = path.resolve(__dirname, "../src")
+ config.resolve.alias["@/public"] = path.resolve(__dirname, "../public")
return config
},
typescript: {
- check: false,
- checkOptions: {},
- reactDocgen: "react-docgen-typescript",
reactDocgenTypescriptOptions: {
- compilerOptions: {
- allowSyntheticDefaultImports: false,
- esModuleInterop: false,
- },
shouldExtractLiteralValuesFromEnum: true,
/**
* For handling bloated controls table of Chakra Props
@@ -84,5 +67,4 @@ const config: StorybookConfig = {
},
},
}
-
export default config
diff --git a/.storybook/manager.js b/.storybook/manager.js
deleted file mode 100644
index 2b557ddd929..00000000000
--- a/.storybook/manager.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { addons } from "@storybook/addons"
-import theme from "./theme"
-import favicon from "../src/assets/favicon.png"
-
-addons.setConfig({
- theme,
-})
-
-const link = document.createElement("link")
-link.setAttribute("rel", "shortcut icon")
-link.setAttribute("href", favicon)
-document.head.appendChild(link)
diff --git a/.storybook/manager.ts b/.storybook/manager.ts
new file mode 100644
index 00000000000..ca570b21dc6
--- /dev/null
+++ b/.storybook/manager.ts
@@ -0,0 +1,14 @@
+import { addons } from "@storybook/manager-api"
+import theme from "./theme"
+// @ts-ignore
+import favicon from "../public/favicon.png"
+
+addons.setConfig({
+ theme,
+})
+
+// In order to override the default favicon, and inject a data hash link to the png
+const link = document.createElement("link")
+link.setAttribute("rel", "shortcut icon")
+link.setAttribute("href", favicon)
+document.head.appendChild(link)
diff --git a/.storybook/preview.ts b/.storybook/preview.ts
index 47e84ccc1a4..3789ca58c91 100644
--- a/.storybook/preview.ts
+++ b/.storybook/preview.ts
@@ -1,34 +1,17 @@
-import { Preview } from "@storybook/react"
-import { action } from "@storybook/addon-actions"
+import { extendBaseTheme } from "@chakra-ui/react"
+import type { Preview } from "@storybook/react"
-import i18n, { baseLocales } from "./i18next"
-import theme from "../src/@chakra-ui/gatsby-plugin/theme"
-import "../static/fonts/inter-font-face.css"
-
-const chakraBreakpointArray = Object.entries(theme.breakpoints)
+import theme from "../src/@chakra-ui/theme"
-// Gatsby's Link overrides:
-// Gatsby Link calls the `enqueue` & `hovering` methods on the global variable ___loader.
-// This global object isn't set in storybook context, requiring you to override it to empty functions (no-op),
-// so Gatsby Link doesn't throw errors.
-global.___loader = {
- enqueue: () => {},
- hovering: () => {},
-}
-// This global variable prevents the "__BASE_PATH__ is not defined" error inside Storybook.
-global.__BASE_PATH__ = "/"
+import i18n, { baseLocales } from "./i18next"
-// Navigating through a gatsby app using gatsby-link or any other gatsby component will use the `___navigate` method.
-// In Storybook, it makes more sense to log an action than doing an actual navigate. Check out the actions addon docs for more info: https://storybook.js.org/docs/react/essentials/actions
+const extendedTheme = extendBaseTheme(theme)
-// @ts-ignore
-window.___navigate = (pathname) => {
- action("NavigateTo:")(pathname)
-}
+const chakraBreakpointArray = Object.entries(extendedTheme.breakpoints)
const preview: Preview = {
globals: {
- locale: "en",
+ locale: 'en',
locales: baseLocales,
},
parameters: {
@@ -37,14 +20,14 @@ const preview: Preview = {
controls: {
matchers: {
color: /(background|color)$/i,
- date: /Date$/,
+ date: /Date$/i,
},
},
backgrounds: {
disable: true,
},
chakra: {
- theme,
+ theme: extendedTheme,
},
layout: "centered",
// Modify viewport selection to match Chakra breakpoints (or custom breakpoints)
@@ -52,8 +35,18 @@ const preview: Preview = {
viewports: chakraBreakpointArray.reduce((prevVal, currVal) => {
const [token, key] = currVal
- // Unnecessary breakpoint
- if (token === "base") return { ...prevVal }
+ // Replace base value
+ if (token === "base")
+ return {
+ ...prevVal,
+ base: {
+ name: "base",
+ styles: {
+ width: "375px", // A popular minimum mobile width
+ height: "600px",
+ },
+ },
+ }
return {
...prevVal,
diff --git a/.storybook/theme.js b/.storybook/theme.js
deleted file mode 100644
index f67075e44a7..00000000000
--- a/.storybook/theme.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { create } from "@storybook/theming"
-// @ts-ignore
-import brandImage from "./preview-logo.svg"
-
-export default create({
- base: "dark",
-
- appBg: "#222222",
- appBorderColor: "white",
- appBorderRadius: 4,
-
- brandTitle: "Ethereum.org",
- brandImage,
- brandUrl: "https://www.ethereum.org",
-
- barSelectedColor: "#ff7324",
-
- colorSecondary: "#ff7324",
-
- fontBase: "Inter, sans-serif",
-
- textColor: "#f2f2f2",
- textMutedColor: "#b2b2b2",
-
- inputBorder: "#F7F7F7",
- inputBorderRadius: 4,
-})
diff --git a/.storybook/theme.ts b/.storybook/theme.ts
new file mode 100644
index 00000000000..a55d128fecf
--- /dev/null
+++ b/.storybook/theme.ts
@@ -0,0 +1,28 @@
+import { create } from "@storybook/theming"
+
+// @ts-ignore
+import brandImage from "./preview-logo.svg"
+
+export default create({
+ base: "dark",
+
+ appBg: "#222222",
+ appBorderColor: "white",
+ appBorderRadius: 4,
+
+ brandTitle: "Ethereum.org",
+ brandImage,
+ brandUrl: "https://www.ethereum.org",
+
+ barSelectedColor: "#ff7324",
+
+ colorSecondary: "#ff7324",
+
+ fontBase: "Inter, sans-serif",
+
+ textColor: "#f2f2f2",
+ textMutedColor: "#b2b2b2",
+
+ inputBorder: "#F7F7F7",
+ inputBorderRadius: 4,
+})
diff --git a/GC-preview-deploy.png b/GC-preview-deploy.png
deleted file mode 100644
index 626464974ad..00000000000
Binary files a/GC-preview-deploy.png and /dev/null differ
diff --git a/README.md b/README.md
index 0a66513ff04..9dd02195aa6 100644
--- a/README.md
+++ b/README.md
@@ -97,9 +97,9 @@ yarn start
- Open this directory in your favorite text editor / IDE, and see your changes live by visiting `localhost:8000` from your browser
- Pro Tip:
- Explore scripts within `package.json` for more build options
- - Get **faster** local builds by building only one language. E.g. in your `.env` file, set `GATSBY_BUILD_LANGS=en` to build the content only in English
+ - Get **faster** local builds by building only one language. E.g. in your `.env` file, set `BUILD_LOCALES=en` to build the content only in English
-By default the script will build all the languages (complete list in `data/translations.json`) and will ignore the `/docs` and `/tutorials` folders. To control this behavior you can play with the `GATSBY_BUILD_LANGS` and `IGNORE_CONTENT` env variables. Check out `.env.example` to read more about them.
+By default the script will build all the languages (complete list in `data/translations.json`) and will ignore the `/docs` and `/tutorials` folders. To control this behavior you can play with the `BUILD_LOCALES` and `IGNORE_CONTENT` env variables. Check out `.env.example` to read more about them.
3. Commit and prepare for pull request (PR). In your PR commit message, reference the issue it resolves (see [how to link a commit message to an issue using a keyword](https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword)).
diff --git a/docs/best-practices.md b/docs/best-practices.md
index e3d662d65bc..f53ab02f481 100644
--- a/docs/best-practices.md
+++ b/docs/best-practices.md
@@ -6,9 +6,9 @@ _Please read carefully if adding or altering any written language content_
How to prepare your content for translation depends on whether you're working on a simple Markdown/MDX page or a React component page.
-**- MDX pages (`/src/content/page/`)**
+**- MDX pages (`public/content/page/`)**
-Markdown will be translated as whole pages of content, so no specific action is required. Simply create a new folder within `/src/content/` with the name of the page, then place index markdown file (ie. `index.md`) within the new folder.
+Markdown will be translated as whole pages of content, so no specific action is required. Simply create a new folder within `public/content/` with the name of the page, then place index markdown file (ie. `index.md`) within the new folder.
**- React component page**
diff --git a/docs/next-docs/code-conventions.md b/docs/next-docs/code-conventions.md
new file mode 100644
index 00000000000..f849daef6a0
--- /dev/null
+++ b/docs/next-docs/code-conventions.md
@@ -0,0 +1,70 @@
+# Code conventions
+
+Some conventions we are using related to the project structure, TypeScript, etc, to improve consistency and facilitate maintenance.
+
+## Utils
+
+Utility functions (utils) should be defined in standalone files inside `src/lib/utils` dir.
+
+## 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.
+
+## Constants
+
+Global constants should be defined inside `src/lib/constants.ts` file.
+
+## TypeScript
+
+### Types
+
+TypeScript types should be defined inside `src/lib/types.ts` file. Note that some pre-existent types could be defined in other files and will be temporarily kept there during the migration, to facilitate synchronization. These types should be moved to `src/lib/types.ts` later.
+
+### Interfaces
+
+TypeScript types should be defined inside `src/lib/interfaces.ts` file. Note that some pre-existent interfaces could be defined in other files and will be temporarily kept there during the migration, to facilitate synchronization. These interfaces should be moved to `src/lib/interfaces.ts` later.
+
+### Component Props
+
+For all components, use the following pattern:
+
+```tsx
+type ComponentProps = {
+ // Prop types
+}
+
+// Destructure props at the declaration and use the name `props` when using the spread operator for the remaining props not specifically needed
+const Component = ({ title, label, ...props }: ComponentProps) => {
+ // Component code
+}
+
+/**
+ * Components using `forwardRef` from the Chakra UI package
+ *
+ * The first argument of the generic types is the props type signature.
+ *
+ * For the second argument of the generic types, you are declaring the primary element type that the component will render.
+ * This could be a `div`, `span`, `button`, etc. or a custom component (typeof Button) if said component is being used in the return.
+ */
+const Component = forwardRef The term 'Eth2' was commonly used to describe the future of Ethereum before the switch to proof-of-stake but it was phased out in favor of more precise terminology. It was originally used to differentiate the Ethereum network before the switch to proof-of-stake and the network after, or sometimes to refer to the different Ethereum clients (execution clients were sometimes referred to as ETH1 clients and consensus clients were sometimes referred to as ETH2 clients). Der Begriff "Eth2" wurde häufig verwendet, um die Zukunft von Ethereum vor der Umstellung auf Proof-of-Stake zu beschreiben, aber er wurde zu Gunsten einer präziseren Terminologie abgeschafft. Ursprünglich wurde er verwendet, um das Ethereum-Netzwerk vor der Umstellung auf Proof-of-Stake und das Netzwerk danach zu unterscheiden, oder manchmal, um sich auf die verschiedenen Ethereum-Clients zu beziehen (Ausführungs-Clients wurden manchmal als ETH1-Clients und Consensus-Clients wurden manchmal als ETH2-Clients bezeichnet). El término Eth2 se usaba comúnmente para describir el futuro de Ethereum antes del cambio a la prueba de participación, pero se eliminó gradualmente a favor de una terminología más precisa.Originalmente se usó para diferenciar la red Ethereum antes del cambio a la prueba de participación y la red después, o a veces para referirse a los diferentes clientes de Ethereum (los clientes de ejecución a veces se denominaban clientes ETH1 y los clientes de consenso a veces se denominaban clientes ETH2). Istilah 'Eth2' sebelumnya digunakan untuk menggambarkan masa depan Ethereum sebelum beralih ke konsep bukti kepemilikan, tetapi istilah ini kemudian perlahan ditinggalkan karena ada terminologi lain yang lebih tepat. Istilah ini pada awalnya digunakan untuk membedakan jaringan Ethereum sebelum beralih ke konsep bukti kepemilikan dan jaringan setelahnya, atau terkadang digunakan untuk menyebut klien Ethereum yang lain (klien eksekusi terkadang disebut sebagai klien ETH1 dan klien konsensus terkadang disebut sebagai klien ETH2). Il termine 'Eth2' è stato comunemente usato per descrivere il futuro di Ethereum prima del passaggio alla proof-of-stake ma è stato gradualmente eliminato a favore di una terminologia più precisa. Originariamente è stato utilizzato per differenziare la rete Ethereum prima del passaggio alla proof-of-stake e la rete successiva, o a volte per fare riferimento ai diversi clienti di Ethereum (i clienti di esecuzione sono stati talvolta denominati clienti ETH1 e i clienti di consenso sono stati talvolta denominati clienti ETH2). 「Eth2」という用語は、プルーフ・オブ・ステークへ移行する前、イーサリアムの今後を説明するために広く使用されていましたが、より正確な用語の方が好ましいということで段階的に廃止されました。元々は、プルーフ・オブ・ステークへの移行前のネットワークと移行後のネットワークを区別するために使われていました。また、異なるイーサリアムクライアントを指す場合もありました。具体的には、実行クライアントをETH1クライアント、コンセンサスクライアントをETH2クライアントと呼んでいました。 Meer informatie over het belang van het uitvoeren van een minderheid-client. O termo "Eth2" era normalmente usado para descrever o futuro do Ethereum antes da mudança para a prova de participação, mas foi eliminado em favor de uma terminologia mais exata. Originalmente, era utilizado para diferenciar a rede Ethereum antes da mudança para a prova de participação e a rede depois, ou às vezes para se referir aos diferentes clientes Ethereum (os clientes de execução eram às vezes chamados de clientes ETH1 e os clientes de consenso eram às vezes chamados de clientes ETH2). Термин «ETH2» широко употреблялся для описания будущего Ethereum до перехода на proof-of-stake (доказательство доли владения), но был отменен в пользу более точной терминологии. Изначально он использовался для различения сети Ethereum до перехода на proof-of-stake и после, а еще иногда для обозначения различных клиентов Ethereum (клиенты-исполнители иногда назывались ETH1, а консенсус-клиенты — ETH2). "Eth2" terimi hisse ispatına geçişten önce sıklıkla Ethereum'un geleceği olarak tanımlandı ancak bu, daha kesin bir terminoloji için aşamalı olarak kaldırıldı. Aslen, hisse ispatına geçişten önceki Ethereum ağını geçişten sonraki ağdan ayırmak ya da kimi zaman farklı Ethereum müşterilerine atfedilmek (yürütüm istemcisi bazen ETH1 olarak atfedildi ve fikir birliği istemcileri bazen ETH2 istemcisi olarak atfedildi) için kullanıldı. 在轉向權益證明之前,「Eth2」一詞通常用於描述以太坊的未來,但現在已被逐步淘汰,取而代之的是更精確的術語。它最初用來區分轉換到權益證明之前和之後的以太坊網路,有時指不同的以太坊用戶端(執行用戶端有時稱為 ETH1 用戶端,共識用戶端有時稱為 ETH2 用戶端)。 在以太坊转用权益证明之前,“Eth2” 一词通常用于描述以太坊的未来,但它已被淘汰,被更加准确的术语取代。它最初被用来区分转用权益证明之前和之后的以太坊网络,有时被用来指不同的以太坊客户端(执行客户端有时被称为 ETH1 客户端,共识客户端有时被称为 ETH2 客户端)。
For example: `ethereum.org/en/about/` is built from `public/content/about/index.md`
The markdown files are parsed by `[...slug].tsx` and rendered using the proper layout in `ContentPage.getLayout` method. |
+| `/public/content/developers/docs` | \*Markdown files in here use the Docs layout: `src/layouts/Docs.tsx` |
+| `/public/content/developers/tutorials` | \*Markdown files in here use the Tutorial layout: `src/layouts/Tutorial.tsx` |
+| `/src/data` | General data files importable by components. |
+| `/src/hooks` | Custom React hooks. |
+| `/src/intl` | Language translation JSON files. |
+| `/src/pages/api` | NextJS API Routes (https://nextjs.org/docs/pages/building-your-application/routing/api-routes) |
+| `/src/pages` | React components that function as standalone pages. |
+| `/src/scripts`
`/src/lib/utils` | Custom utility scripts. |
+| `src/@chakra-ui` | Stores `theme.ts` which contains our custom Chakra theme, along with src/@chakra-ui/`semanticTokens.ts` (dark/light mode tokens) and custom Chakra components styles. |
+| `src/layouts` | NextJS layouts (https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts#with-typescript) that define layouts of different regions of the site. |
diff --git a/docs/stack.md b/docs/stack.md
index f74921223e9..be3bc9ee58a 100644
--- a/docs/stack.md
+++ b/docs/stack.md
@@ -22,20 +22,20 @@
## Code structure
-| Folder | Primary use |
-| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `/src` | Main source folder for development |
-| `/src/assets` | Image assets |
-| `/src/components` | React components that do not function as standalone pages |
-| `/src/content` | Markdown/MDX files for site content stored here.
For example: `ethereum.org/en/about/` is built from `src/content/about/index.md`
The markdown files are parsed and rendered by `src/templates/static.ts`\* |
-| `/src/content/developers/docs` | \*Markdown files in here use the Docs template: `src/templates/docs.ts` |
-| `/src/content/developers/tutorials` | \*Markdown files in here use the Tutorial template: `src/templates/tutorial.ts` |
-| `/src/data` | General data files importable by components |
-| `/src/hooks` | Custom React hooks |
-| `/src/intl` | Language translation JSON files |
-| `/src/lambda` | Lambda function scripts for API calls |
-| `/src/pages`
`/src/pages-conditional` | React components that function as standalone pages.
For example: `ethereum.org/en/wallets/find-wallet` is built from `src/pages/wallets/find-wallet.ts` |
-| `/src/scripts`
`/src/utils` | Custom utility scripts |
-| `/src/styles` | Stores `layout.css` which contains root level css styling |
-| `/src/templates` | TSX templates that define layouts of different regions of the site |
-| `/src/theme.ts` | Declares site color themes, breakpoints and other constants (try to utilize these colors first) |
+| Folder | Primary use |
+| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `/src` | Main source folder for development |
+| `/src/assets` | Image assets |
+| `/src/components` | React components that do not function as standalone pages |
+| `/public/content` | Markdown/MDX files for site content stored here.
For example: `ethereum.org/en/about/` is built from `public/content/about/index.md`
The markdown files are parsed and rendered by `src/templates/static.ts`\* |
+| `/public/content/developers/docs` | \*Markdown files in here use the Docs template: `src/templates/docs.ts` |
+| `/public/content/developers/tutorials` | \*Markdown files in here use the Tutorial template: `src/templates/tutorial.ts` |
+| `/src/data` | General data files importable by components |
+| `/src/hooks` | Custom React hooks |
+| `/src/intl` | Language translation JSON files |
+| `/src/lambda` | Lambda function scripts for API calls |
+| `/src/pages`
`/src/pages-conditional` | React components that function as standalone pages.
For example: `ethereum.org/en/wallets/find-wallet` is built from `src/pages/wallets/find-wallet.ts` |
+| `/src/scripts`
`/src/utils` | Custom utility scripts |
+| `/src/styles` | Stores `layout.css` which contains root level css styling |
+| `/src/templates` | TSX templates that define layouts of different regions of the site |
+| `/src/theme.ts` | Declares site color themes, breakpoints and other constants (try to utilize these colors first) |
diff --git a/gatsby-browser.tsx b/gatsby-browser.tsx
deleted file mode 100644
index 87ef1ba9de5..00000000000
--- a/gatsby-browser.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Implement Gatsby's Browser APIs in this file.
- *
- * See: https://www.gatsbyjs.org/docs/browser-apis/
- */
-
-import Prism from "prism-react-renderer/prism"
-;(typeof global !== "undefined" ? global : window).Prism = Prism
-
-// Default languages included:
-// https://github.com/FormidableLabs/prism-react-renderer/blob/master/src/vendor/prism/includeLangs.js
-require("prismjs/components/prism-solidity")
diff --git a/gatsby-config.ts b/gatsby-config.ts
deleted file mode 100644
index f38438bdd9e..00000000000
--- a/gatsby-config.ts
+++ /dev/null
@@ -1,325 +0,0 @@
-import "dotenv/config"
-import path from "path"
-
-import type { GatsbyConfig } from "gatsby"
-
-import {
- supportedLanguages,
- defaultLanguage,
- ignoreLanguages,
-} from "./src/utils/languages"
-
-import { IS_PREVIEW } from "./src/utils/env"
-
-const siteUrl = `https://ethereum.org`
-
-const ignoreContent = (process.env.IGNORE_CONTENT || "")
- .split(",")
- .filter(Boolean)
-
-const ignoreTranslations = ignoreLanguages.map(
- (lang) => `**/translations\/${lang}`
-)
-
-const config: GatsbyConfig = {
- graphqlTypegen: true,
- siteMetadata: {
- // `title` & `description` pulls from respective ${lang}.json files in PageMetadata.js
- title: `ethereum.org`,
- description: `Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.`,
- url: siteUrl,
- siteUrl,
- author: `@ethereum`,
- defaultLanguage,
- supportedLanguages,
- editContentUrl: `https://github.com/ethereum/ethereum-org-website/tree/dev/`,
- },
- plugins: [
- // Web app manifest
- {
- resolve: `gatsby-plugin-manifest`,
- options: {
- name: `ethereum.org`,
- short_name: `ethereum.org`,
- start_url: `/en/`,
- background_color: `#ffffff`,
- theme_color: `#222222`,
- display: `standalone`,
- icon: `src/assets/favicon.png`,
- },
- },
- // Sitemap generator (ethereum.org/sitemap/sitemap-index.xml)
- {
- resolve: `gatsby-plugin-sitemap`,
- options: {
- output: "/sitemap",
- query: `{
- site {
- siteMetadata {
- siteUrl
- }
- }
- allSitePage {
- nodes {
- path
- }
- }
- }`,
- resolvePages: ({ site, allSitePage: { nodes: allPages } }) => {
- return allPages
- .filter((page) => {
- // Filter out 404 pages
- return !page.path.includes("404")
- })
- .map((page) => ({ ...page, siteUrl: site.siteMetadata.siteUrl }))
- },
- serialize: ({ path, siteUrl }: { path: string; siteUrl: string }) => {
- const url = `${siteUrl}${path}`
- const changefreq = path.includes(`/${defaultLanguage}/`)
- ? `weekly`
- : `monthly`
- const priority = path.includes(`/${defaultLanguage}/`) ? 0.7 : 0.5
- return {
- url,
- changefreq,
- priority,
- }
- },
- },
- },
- // robots.txt creation
- {
- resolve: "gatsby-plugin-robots-txt",
- options: {
- host: siteUrl,
- sitemap: `${siteUrl}/sitemap/sitemap-index.xml`,
- policy: [{ userAgent: "*", allow: "/" }],
- },
- },
- // Ability to set custom IDs for headings (for translations)
- // i.e. https://www.markdownguide.org/extended-syntax/#heading-ids
- `gatsby-remark-autolink-headers`,
- // Image support in markdown
- `gatsby-remark-images`,
- `gatsby-remark-copy-linked-files`,
- // READING time
- "gatsby-remark-reading-time",
- // MDX support
- {
- resolve: `gatsby-plugin-mdx`,
- options: {
- // process all `.md` files as MDX
- extensions: [`.mdx`, `.md`],
- // Workaround to fix `backgroundColor` bug:
- // https://github.com/gatsbyjs/gatsby/issues/25272
- plugins: [
- {
- resolve: `gatsby-remark-images`,
- options: {
- backgroundColor: `transparent`,
- maxWidth: 1200,
- },
- },
- ],
- // Note: in order for MDX to work with gatsby-remark-plugins
- // The plugin must be listed top-level & in gatsbyRemarkPlugins
- // See: https://www.gatsbyjs.org/docs/mdx/plugins/
- gatsbyRemarkPlugins: [
- {
- // Local plugin to adjust the images & links urls of the translated md files
- resolve: path.resolve(`./plugins/gatsby-remark-fix-static-urls`),
- },
- {
- resolve: `gatsby-remark-autolink-headers`,
- options: {
- enableCustomId: true,
- elements: [`h1`, `h2`, `h3`, `h4`],
- className: `header-anchor`,
- },
- },
- {
- resolve: `gatsby-remark-images`,
- options: {
- backgroundColor: `transparent`,
- maxWidth: 1200,
- },
- },
- {
- resolve: `gatsby-remark-copy-linked-files`,
- options: {
- maxWidth: 1200,
- },
- },
- ],
- remarkPlugins: [],
- },
- },
- // SEO tags
- `gatsby-plugin-react-helmet`,
- {
- resolve: `gatsby-plugin-react-helmet-canonical-urls`,
- options: {
- siteUrl,
- noQueryString: true,
- },
- },
- // Needed for `gatsby-plugin-image`
- `gatsby-plugin-image`,
- `gatsby-plugin-sharp`,
- `gatsby-transformer-sharp`,
- // SVG support
- {
- resolve: "gatsby-plugin-react-svg",
- options: {
- rule: {
- include: /assets/,
- },
- },
- },
- // CSS in JS
- {
- resolve: "@chakra-ui/gatsby-plugin",
- options: {
- resetCSS: true,
- isUsingColorMode: true,
- portalZIndex: 1001,
- },
- },
- // Source assets
- {
- resolve: `gatsby-source-filesystem`,
- options: {
- name: `assets`,
- path: path.resolve(`src/assets`),
- },
- },
- // Process files from /src/content/ (used in gatsby-node.js)
- {
- resolve: `gatsby-source-filesystem`,
- options: {
- name: `content`,
- path: path.resolve(`src/content`),
- ignore: [...ignoreContent, ...ignoreTranslations],
- },
- },
- // Source data
- {
- resolve: `gatsby-source-filesystem`,
- options: {
- name: `data`,
- path: path.resolve(`src/data`),
- },
- },
- {
- resolve: `gatsby-source-filesystem`,
- options: {
- path: path.resolve(`src/data/translation-reports`),
- },
- },
- // Process files within /src/data/
- `gatsby-transformer-csv`,
- // Process JSON files
- `gatsby-transformer-json`,
- // Add git information on File fields from latest commit: date, author and email
- // Used for `Last updated` fields
- {
- resolve: `gatsby-transformer-gitinfo`,
- options: {
- include: /\.md$|\.csv/i, // Only .md & .csv files
- },
- },
- // Needed for Gatsby Cloud redirect support
- {
- resolve: `gatsby-plugin-gatsby-cloud`,
- options: {
- generateMatchPathRewrites: false,
- },
- },
- // Creates `_redirects` & `_headers` build files for Netlify
- {
- resolve: `gatsby-plugin-netlify`,
- options: {
- generateMatchPathRewrites: false,
- },
- },
- // i18n support
- {
- resolve: `gatsby-source-filesystem`,
- options: {
- path: path.resolve(`./i18n/locales`),
- name: `locale`,
- },
- },
- // Wraps the entire page with a custom layout component
- // Note: keep this before the i18n plugin declaration in order to have the
- // i18n provider wrapping the layout component
- {
- resolve: `gatsby-plugin-layout`,
- options: {
- component: path.resolve(`./src/components/Layout`),
- },
- },
- {
- resolve: `gatsby-plugin-react-i18next`,
- options: {
- localeJsonSourceName: `locale`, // name given to `gatsby-source-filesystem` plugin.
- languages: supportedLanguages,
- defaultLanguage,
- generateDefaultLanguagePage: true,
- redirect: false,
- siteUrl,
- trailingSlash: "always",
- // i18next options
- i18nextOptions: {
- fallbackLng: defaultLanguage,
- interpolation: {
- escapeValue: false,
- },
- load: "currentOnly",
- lowerCaseLng: true,
- cleanCode: true,
- react: {
- transSupportBasicHtmlNodes: true,
- transKeepBasicHtmlNodesFor: [
- "br",
- "strong",
- "i",
- "bold",
- "b",
- "em",
- "sup",
- ],
- },
- keySeparator: false,
- nsSeparator: false,
- },
- },
- },
- ],
- // https://www.gatsbyjs.com/docs/reference/release-notes/v2.28/#feature-flags-in-gatsby-configjs
- flags: {
- FAST_DEV: true, // DEV_SSR, QUERY_ON_DEMAND & LAZY_IMAGES
- },
-}
-
-// Avoid loading Matomo in preview deploys since NODE_ENV is `production` in
-// there and it will send testing data as production otherwise
-if (!IS_PREVIEW) {
- config.plugins = [
- ...(config.plugins || []),
- // Matomo analytics
- {
- resolve: "gatsby-plugin-matomo",
- options: {
- siteId: "4",
- matomoUrl: "https://ethereumfoundation.matomo.cloud",
- siteUrl,
- matomoPhpScript: "matomo.php",
- matomoJsScript: "matomo.js",
- trackLoad: false,
- },
- },
- ]
-}
-
-export default config
diff --git a/gatsby-node.ts b/gatsby-node.ts
deleted file mode 100644
index 2bf78171cd7..00000000000
--- a/gatsby-node.ts
+++ /dev/null
@@ -1,498 +0,0 @@
-// https://www.gatsbyjs.org/docs/node-apis/
-import fs from "fs"
-import path from "path"
-import util from "util"
-import child_process from "child_process"
-import { createFilePath } from "gatsby-source-filesystem"
-import type { GatsbyNode } from "gatsby"
-
-import type { Context } from "./src/types"
-
-import * as Schema from "./src/schema"
-
-import createLocales from "./src/scripts/createLocales"
-import copyContributors from "./src/scripts/copyContributors"
-
-import {
- supportedLanguages,
- defaultLanguage,
- Lang,
-} from "./src/utils/languages"
-import { IS_DEV } from "./src/utils/env"
-import redirects from "./redirects.json"
-
-const exec = util.promisify(child_process.exec)
-
-const commonRedirectProps = {
- isPermanent: true,
- ignoreCase: true,
- force: true,
-}
-
-/**
- * Markdown isOutdated check
- * Parse header ids in markdown file (both translated and english) and compare their info structure.
- * If this structure is not the same, then the file isOutdated.
- * If there is not english file, return true
- * @param {string} filePath filepath for translated mdx file
- * @returns boolean for if file is outdated or not
- */
-const checkIsMdxOutdated = (filePath: string): boolean => {
- // .replace(/\\/g, "/") to replace \ in windows paths ex: C:\\folder\\myfile.txt becomes C:/folder/myfile.txt
- const dirname = path.resolve("./").replace(/\\/g, "/")
- const splitPath = filePath.split(dirname)
- const tempSplitPath = splitPath[1]
- const tempSplit = tempSplitPath.split("/")
- tempSplit.splice(3, 2)
- const englishPath = path.resolve(`${tempSplit.join("/")}`)
-
- const re = /([#]+) [^\{]+\{#([^\}]+)\}/gim
- let translatedData, englishData
-
- try {
- translatedData = fs.readFileSync(filePath, "utf-8")
- englishData = fs.readFileSync(englishPath, "utf-8")
- } catch {
- return true
- }
-
- let englishMatch = ""
- let intlMatch = ""
- try {
- englishData.match(re).forEach((match) => {
- englishMatch += match.replace(re, (_, p1, p2) => p1 + p2)
- })
- translatedData.match(re).forEach((match) => {
- intlMatch += match.replace(re, (_, p1, p2) => p1 + p2)
- })
- } catch {
- console.warn(`regex error in ${englishPath}`)
- return true
- }
-
- return englishMatch !== intlMatch
-}
-
-/**
- * JSON isOutdated check
- * Checks if translation JSON file exists.
- * If translation file exists, checks that all translations are present (checks keys), and that all the keys are the same.
- * If translation file exists, isContentEnglish will be false
- * @param {*} urlPath url path used to derive file path from
- * @param {*} lang language abbreviation for language path
- * @returns {{isOutdated: boolean, isContentEnglish: boolean}}
- */
-const checkIsPageOutdated = async (
- urlPath: string,
- lang: Lang
-): Promise<{ isOutdated: boolean; isContentEnglish: boolean }> => {
- // Files that need index appended on the end. Ex page-index.json, page-developers-index.json, page-upgrades-index.json
- const indexFilePaths = ["", "developers", "upgrades"]
- const filePath = urlPath.split("/").filter((text) => text !== "")
-
- if (
- indexFilePaths.includes(filePath[filePath.length - 1]) ||
- filePath.length === 0
- ) {
- filePath.push("index")
- }
-
- const joinedFilepath = filePath.join("-")
- const srcPath = path.resolve(`src/intl/${lang}/page-${joinedFilepath}.json`)
- const englishPath = path.resolve(
- `src/intl/${defaultLanguage}/page-${joinedFilepath}.json`
- )
-
- // If no file exists, default to english
- if (!fs.existsSync(srcPath)) {
- return {
- // Consider always defaultLanguage paths as updated
- isOutdated: lang !== defaultLanguage,
- isContentEnglish: true,
- }
- } else {
- let translatedData, englishData, translatedKeys, englishKeys
- try {
- translatedData = JSON.parse(fs.readFileSync(srcPath).toString())
- englishData = JSON.parse(fs.readFileSync(englishPath).toString())
- translatedKeys = Object.keys(translatedData)
- englishKeys = Object.keys(englishData)
- } catch (err) {
- return {
- isOutdated: true,
- isContentEnglish: true,
- }
- }
- // Check if same amount of keys
- if (translatedKeys.length !== englishKeys.length) {
- return {
- isOutdated: true,
- isContentEnglish: false,
- }
- }
-
- // Check if all the keys are the same
- if (
- JSON.stringify(translatedKeys.sort()) !==
- JSON.stringify(englishKeys.sort())
- ) {
- return {
- isOutdated: true,
- isContentEnglish: false,
- }
- }
-
- return {
- isOutdated: false,
- isContentEnglish: false,
- }
- }
-}
-
-// Loops through all the files dictated by Gatsby (building pages folder), as well as
-// folders flagged through the gatsby-source-filesystem plugin in gatsby-config
-export const onCreateNode: GatsbyNode<{
- fileAbsolutePath: string
-}>["onCreateNode"] = async ({ node, getNode, actions }) => {
- const { createNodeField } = actions
-
- // Edit markdown nodes
- if (node.internal.type === `Mdx`) {
- let slug = createFilePath({ node, getNode, basePath: `content` })
- let isOutdated = false
-
- if (slug.includes("/translations/")) {
- slug = slug.replace("/translations", "")
- isOutdated = await checkIsMdxOutdated(node.fileAbsolutePath)
- } else {
- slug = `/${defaultLanguage}${slug}`
- }
-
- const absolutePath = node.fileAbsolutePath as string
- const relativePathStart = absolutePath.lastIndexOf("src/")
- const relativePath = absolutePath.substring(relativePathStart)
-
- // Boolean if page is outdated (most translated files are)
- createNodeField({
- node,
- name: `isOutdated`,
- value: isOutdated,
- })
- // Page URI
- createNodeField({
- node,
- name: `slug`,
- value: slug,
- })
- // Relative path of file (for GitHub API commit history)
- createNodeField({
- node,
- name: `relativePath`,
- value: relativePath,
- })
- }
-}
-
-export const createPages: GatsbyNode`nonce`
`
+
+`` - _Opening tag, which contains a code snippet_
+
+nonce - _Non-translatable text_
+
+`
` - _Closing tag_
+
+
+
+The source text also contains shortened tags, which only contain numbers, meaning that their function is not immediately obvious. You can hover over these tags to see exactly which function they serve.
+
+In the example below, you can see that hovering over the <0> tag shows that it represents `` and contains a code snippet, therefore the content inside these tags should not be translated.
+
+
+
+## Short vs. full forms/abbreviations {#short-vs-full-forms}
+
+There are a lot of abbreviations used on the website, e.g. dapps, NFT, DAO, DeFi, etc. These abbreviations are commonly used in English and most visitors to the website are familiar with them.
+
+Since they usually don’t have established translations in other languages, the best way to approach these and similar terms is to provide a descriptive translation of the full form, and add the English abbreviation in brackets.
+
+Do not translate these abbreviations, since most people wouldn’t be familiar with them, and the localized versions would not make much sense to most visitors.
+
+Example of how to translate dapps:
+
+- Decentralized applications (dapps) → _Translated full form (English abbreviation in brackets)_
+
+## Terms without established translations {#terms-without-established-translations}
+
+Some terms might not have established translations in other languages, and are widely known by the original English term. Such terms mostly include newer concepts, like proof-of-work, proof-of-stake, Beacon Chain, staking, etc.
+
+While translating these terms can sound unnatural, since the English version is commonly used in other languages as well, it is highly recommended that they are translated.
+
+When translating them, feel free to get creative, use descriptive translations, or simply translate them literally.
+
+**The reason why most terms should be translated, instead of leaving some in English, is the fact that this new terminology will become more widespread in the future, as more people start using Ethereum and related technologies. If we want to onboard more people from all over the world to this space, we need to provide understandable terminology in as many languages as possible, even if we need to create it ourselves.**
+
+## Buttons & CTAs {#buttons-and-ctas}
+
+The website contains numerous buttons, which should be translated differently than other content.
+
+Button text can be identified by viewing the context screenshots, connected with most strings, or by checking the context in the editor, which includes the phrase ‘’button’’.
+
+The translations for buttons should be as short as possible, to prevent formatting mismatches. Additionally, button translations should be imperative, i.e. present a command or request.
+
+
+
+## Translating for inclusivity {#translating-for-inclusivity}
+
+Ethereum.org visitors come from all over the world and from different backgrounds. The language on the website should therefore be neutral, welcoming to everyone and not exclusive.
+
+An important aspect of this is gender neutrality. This can be easily achieved by using the formal form of address, and avoiding any gender-specific words in the translations.
+
+Another form of inclusivity is trying to translate for a global audience, not specific to any country, race or region.
+
+Finally, the language should be suitable for all audiences and ages.
+
+## Language-specific translations {#language-specific-translations}
+
+When translating, it is important to follow the grammar rules, conventions and formatting, used in your language, as opposed to copying from the source. The source text follows English grammar rules and conventions, which is not applicable to many other languages.
+
+You should be aware of the rules for your language and translate accordingly. If you need help, reach out to us and we will help you find some resources on how these elements should be used in your language.
+
+Some examples of what to be particularly mindful of:
+
+### Punctuation, formatting {#punctuation-and-formatting}
+
+**Capitalization**
+
+- There are vast differences in capitalization in different languages.
+- In English, it is common to capitalize all words in titles and names, months and days, language names, holidays, etc. In many other languages, this is grammatically incorrect, as they have different capitalization rules.
+- Some languages also have rules about capitalizing personal pronouns, nouns, and certain adjectives, which are not capitalized in English.
+
+**Spacing**
+
+- Orthography rules define the use of spaces for each language. Because spaces are used everywhere, these rules are some of the most distinct, and spaces are some of the most mistranslated elements.
+- Some common differences in spacing between English and other languages:
+ - Space before units of measure and currencies (e.g. USD, EUR, kB, MB)
+ - Space before degree signs (e.g. °C, ℉)
+ - Space before some punctuation marks, especially the ellipsis (…)
+ - Space before and after slashes (/)
+
+**Lists**
+
+- Every language has a diverse and complex set of rules for writing lists. These can be significantly different to English.
+- In some languages, the first word of each new line needs to be capitalized, while in others, new lines should start with lower-case letters. Many languages also have different rules about capitalization in lists, depending on the length of each line.
+- The same applies to punctuation of line items. The end punctuation in lists can be a period (**.**), comma (**,**), or semicolon (**;**), depending on the language.
+
+**Quotation marks**
+
+- Languages use many different quotation marks. Simply copying the English quotation marks from the source is often incorrect.
+- Some of the most common types of quotation marks include:
+ - „example text“
+ - ‚example text’
+ - »example text«
+ - “example text”
+ - ‘example text’
+ - «example text»
+
+**Hyphens and dashes**
+
+- In English, a hyphen (-) is used to join words or different parts of a word, while a dash (–) is used to indicate a range or a pause.
+- Many languages have different rules for using hyphens and dashes that should be observed.
+
+### Formats {#formats}
+
+**Numbers**
+
+- The main difference in writing numbers in different languages is the separator used for decimals and thousands. For thousands, this can be a period, comma or space. Similarly, some languages use a decimal point, while others use a decimal comma.
+ - Some examples of large numbers:
+ - English – **1,000.50**
+ - Spanish – **1.000,50**
+ - French – **1 000,50**
+- Another important consideration when translating numbers is the percent sign. It can be written in different ways: **100%**, **100 %** or **%100**.
+- Finally, negative numbers can be displayed differently, depending on the language: -100, 100-, (100) or [100].
+
+**Dates**
+
+- When translating dates, there are a number of considerations and differences based on the language. These include the date format, separator, capitalization and leading zeros. There are also differences between full-length and numerical dates.
+ - Some examples of different date formats:
+ - English UK (dd/mm/yyyy) – 1st January, 2022
+ - English US (mm/dd/yyyy) – January 1st, 2022
+ - Chinese (yyyy-mm-dd) – 2022 年 1 月 1 日
+ - French (dd/mm/yyyy) – 1er janvier 2022
+ - Italian (dd/mm/yyyy) – 1º gennaio 2022
+ - German (dd/mm/yyyy) – 1. Januar 2022
+
+**Currencies**
+
+- Translating currencies can be challenging, due to the different formats, conventions and conversions. As a general rule, please keep currencies the same as the source. You can add your local currency and conversion in brackets, for the benefit of the reader.
+- The main differences in writing currencies in different languages include symbol placement, decimal commas vs. decimal points, spacing, and abbreviations vs. symbols.
+ - Symbol placement: $100 or 100$
+ - Decimal commas vs. decimal points: 100,50$ or 100.50$
+ - Spacing: 100$ or 100 $
+ - Abbreviations vs. symbols: 100 $ or 100 USD
+
+**Units of measure**
+
+- As a general rule, please keep the units of measure as per the source. If your country uses a different system, you can include the conversion in brackets.
+- Aside from the localization of units of measure, it is also important to note the differences in how languages approach these units. The main difference is the spacing between the number and unit, which can be different, based on the language. Examples of this include 100kB vs. 100 kB or 50ºF vs. 50 ºF.
+
+## Conclusion {#conclusion}
+
+Translating ethereum.org is a great opportunity to learn about the different aspects of Ethereum.
+
+When translating, try not to rush. Take it easy and have fun!
+
+Thank you for being involved with the Translation Program and helping us make the website accessible to a wider audience. The Ethereum community is global, and we are happy you are a part of it!
diff --git a/src/content/cookie-policy/index.md b/public/content/cookie-policy/index.md
similarity index 100%
rename from src/content/cookie-policy/index.md
rename to public/content/cookie-policy/index.md
diff --git a/public/content/dao/index.md b/public/content/dao/index.md
new file mode 100644
index 00000000000..ab073b90663
--- /dev/null
+++ b/public/content/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Decentralized autonomous organizations (DAOs)
+description: An overview of DAOs on Ethereum
+lang: en
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: A representation of a DAO voting on a proposal.
+summaryPoint1: Member-owned communities without centralized leadership.
+summaryPoint2: A safe way to collaborate with internet strangers.
+summaryPoint3: A safe place to commit funds to a specific cause.
+---
+
+## What are DAOs? {#what-are-daos}
+
+A DAO is a collectively-owned, blockchain-governed organization working towards a shared mission.
+
+DAOs allow us to work with like-minded folks around the globe without trusting a benevolent leader to manage the funds or operations. There is no CEO who can spend funds on a whim or CFO who can manipulate the books. Instead, blockchain-based rules baked into the code define how the organization works and how funds are spent.
+
+They have built-in treasuries that no one has the authority to access without the approval of the group. Decisions are governed by proposals and voting to ensure everyone in the organization has a voice, and everything happens transparently on-chain.
+
+## Why do we need DAOs? {#why-dao}
+
+Starting an organization with someone that involves funding and money requires a lot of trust in the people you're working with. But it’s hard to trust someone you’ve only ever interacted with on the internet. With DAOs you don’t need to trust anyone else in the group, just the DAO’s code, which is 100% transparent and verifiable by anyone.
+
+This opens up so many new opportunities for global collaboration and coordination.
+
+### A comparison {#dao-comparison}
+
+| DAO | A traditional organization |
+| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
+| Usually flat, and fully democratized. | Usually hierarchical. |
+| Voting required by members for any changes to be implemented. | Depending on structure, changes can be demanded from a sole party, or voting may be offered. |
+| Votes tallied, and outcome implemented automatically without trusted intermediary. | If voting allowed, votes are tallied internally, and outcome of voting must be handled manually. |
+| Services offered are handled automatically in a decentralized manner (for example distribution of philanthropic funds). | Requires human handling, or centrally controlled automation, prone to manipulation. |
+| All activity is transparent and fully public. | Activity is typically private, and limited to the public. |
+
+### DAO examples {#dao-examples}
+
+To help this make more sense, here's a few examples of how you could use a DAO:
+
+- A charity – you could accept donations from anyone in the world and vote on which causes to fund.
+- Collective ownership – you could purchase physical or digital assets and members can vote on how to use them.
+- Ventures and grants – you could create a venture fund that pools investment capital and votes on ventures to back. Repaid money could later be redistributed amongst DAO-members.
+
+## How do DAOs work? {#how-daos-work}
+
+The backbone of a DAO is its smart contract, which defines the rules of the organization and holds the group's treasury. Once the contract is live on Ethereum, no one can change the rules except by a vote. If anyone tries to do something that's not covered by the rules and logic in the code, it will fail. And because the treasury is defined by the smart contract too that means no one can spend the money without the group's approval either. This means that DAOs don't need a central authority. Instead, the group makes decisions collectively, and payments are automatically authorized when votes pass.
+
+This is possible because smart contracts are tamper-proof once they go live on Ethereum. You can't just edit the code (the DAOs rules) without people noticing because everything is public.
+
+
+
+
+
+
+
+
+
+
+
+
+
+CHAINID
opcode.
+
+
+
+
+
+REVERT
opcode.STATICCALL
opcode, allowing non-state-changing calls to other contracts.
+
+
+EXP
opcode – makes it more difficult to slow down the network via computationally expensive contract operations.What was ETH2?
+
+
+
+
+For more information, check out this blog post by Tim Beiko on How The Merge Impacts Ethereum’s Application Layer.
+
+
+
+
+Now instead of 1 through 12, imagine the clock has 0 through N (the total number of validator accounts that have ever been registered on the consensus layer, over 500,000 as of Jan 2023).
+The hand on the clock points to the next validator that needs to be checked for eligible withdrawals. It starts at 0, and progresses all the way around without skipping any accounts. When the last validator is reached, the cycle continues back at the beginning.
+
+الآن بدلاً من 1 إلى 12، تخيل أن الساعة تحتوي على 0 إلى N(إجمالي عدد حسابات المدقق التي تم تسجيلها على الإطلاق في طبقة إجماع الآراء، أكثر من 500000 ابتداءً من يناير 2023).
. يشير عقرب الساعة إلى المدقق التالي الذي يجب التحقق من أهليته لعمليات السحب. يبدأ عند 0، ويتقدم على طول الطريق دون تخطي أي حسابات. عندما يتم بلوغ آخر مدقق، تعود الدورة للبدء مرة أخرى.
+
+এখন 1 থেকে 12 এর পরিবর্তে, কল্পনা করুন যে ঘড়িতে 0 থেকে N পর্যন্ত কাঁটা আছে (এখন পর্যন্ত কন্সেন্সাস লেয়ারে নিবন্ধিত হওয়া বৈধকারী অ্যাকাউন্টের মোট সংখ্যা, 2023 সালের জানুয়ারী পর্যন্ত 500,000 এর বেশি)।
+ঘড়িতে থাকা হাতটি পরবর্তী যাচাইকারীর দিকে নির্দেশ করে যা যোগ্য উত্তোলনের জন্য পরীক্ষা করা দরকার। এটি 0 এ শুরু হয় এবং কোনো অ্যাকাউন্ট এড়িয়ে না গিয়েই চারদিকে ঘুরে এগিয়ে যায়। যখন শেষ ভ্যালিডেটরে এটি পৌঁছে যায়, চক্রটি আবার শুরু থেকে চলতে থাকে।
+`Nonce`
`
+
+`` – _Öffnender Tag, der einen Code-Ausschnitt enthält_
+
+Nonce – _Nicht übersetzbarer Text_
+
+`
` – _Schließender Tag_
+
+
+
+Der Quelltext enthält auch verkürzte Tags, die nur Zahlen enthalten. Ihre Funktion ist dadurch nicht direkt ersichtlich. Sie können mit dem Mauszeiger über diese Tags fahren, um genau zu sehen, welche Funktion sie haben.
+
+Im folgenden Beispiel können Sie sehen, dass der Mauszeiger über dem <0> Tag zeigt, dass er `` darstellt und einen Code-Ausschnitt enthält. Daher sollte der Inhalt innerhalb dieser Tags nicht übersetzt werden.
+
+
+
+## Kurze vs. vollständige Formulierungen/Abkürzungen {#short-vs-full-forms}
+
+Auf der Website werden viele Abkürzungen verwendet, z. B. dApps, NFT, DAO, DeFi etc. Diese Abkürzungen werden im Englischen häufig verwendet und sind den meisten Besuchern der Website bekannt.
+
+Da es für diese und ähnliche Begriffe in der Regel keine etablierten Übersetzungen in anderen Sprachen gibt, ist es am besten, eine beschreibende Übersetzung der vollständigen Form anzugeben und die englische Abkürzung in Klammern hinzuzufügen.
+
+Übersetzen Sie diese Abkürzungen nicht, da die meisten Menschen damit nicht vertraut sind und die lokalisierten Versionen für die meisten Besucher nicht viel Sinn ergeben würden.
+
+Beispiel für die Übersetzung von dApps:
+
+- Dezentrale Anwendungen (dApps) → _Übersetzte Vollform (englische Abkürzung in Klammern)_
+
+## Begriffe ohne etablierte Übersetzungen {#terms-without-established-translations}
+
+Für einige Begriffe gibt es möglicherweise keine etablierten Übersetzungen in anderen Sprachen und sie sind weithin unter dem englischen Originalbegriff bekannt. Diese Begriffe umfassen meist neuere Konzepte wie Proof-of-Work, Proof-of-Stake, Beacon Chain, Staking usw.
+
+Die Übersetzung dieser Begriffe kann zwar unnatürlich klingen, da aber die englische Version auch in anderen Sprachen häufig verwendet wird, ist es sehr empfehlenswert, sie zu übersetzen.
+
+Wenn Sie sie übersetzen, können Sie kreativ sein, beschreibende Übersetzungen verwenden oder einfach wörtlich übersetzen.
+
+**Es ist sinnvoll, die meisten Begriffe zu übersetzen, anstatt sie auf Englisch zu belassen, da diese neue Terminologie sich zukünftig stärker verbreitet, wenn mehr Menschen Ethereum und zugehörige Technologien nutzen. Wenn wir mehr Menschen aus der ganzen Welt für diesen Bereich gewinnen wollen, müssen wir eine verständliche Terminologie in so vielen Sprachen wie möglich anbieten, auch wenn wir sie selbst erstellen müssen.**
+
+## Schaltflächen und CTAs (Call to Action) {#buttons-and-ctas}
+
+Die Website enthält zahlreiche Schaltflächen, die anders übersetzt werden sollten als andere Inhalte.
+
+Schaltflächentext kann identifiziert werden, indem Sie sich die zugehörigen Kontext-Screenshots ansehen oder den Kontext im Editor überprüfen, der den Ausdruck „Button“ enthält.
+
+Die Übersetzungen für Schaltflächen sollten so kurz wie möglich sein, um Formatierungsfehler zu vermeiden. Außerdem sollten die Schaltflächenübersetzungen als Anweisung formuliert sein, d. h. einen Befehl oder eine Aufforderung darstellen.
+
+
+
+## Übersetzen für Inklusion {#translating-for-inclusivity}
+
+Die Besucher von ethereum.org kommen aus der ganzen Welt und haben ganz unterschiedliche Hintergründe. Die Sprache auf der Website sollte daher neutral, einladend für alle und nicht ausschließend sein.
+
+Ein wichtiger Aspekt dabei ist die Geschlechterneutralität. Das lässt sich leicht erreichen, indem die formale Anrede benutzt und geschlechtsspezifische Wörter in den Übersetzungen vermieden werden.
+
+Eine andere Möglichkeit der Inklusion ist der Versuch, für ein globales Publikum zu übersetzen, das nicht auf ein Land, eine Rasse oder eine Region festgelegt ist.
+
+Schließlich sollte die Sprache für jedes Publikum und Alter geeignet sein.
+
+## Sprachspezifische Übersetzungen {#language-specific-translations}
+
+Bei der Übersetzung ist es wichtig, die Grammatikregeln, Konventionen und die Formatierung in Ihrer Sprache zu befolgen und diese nicht von der Quelle zu übernehmen. Der Ausgangstext folgt den englischen Grammatikregeln und -konventionen, die in vielen anderen Sprachen nicht gelten.
+
+Sie sollten mit den Regeln für Ihre Sprache vertraut sein und entsprechend übersetzen. Wenn Sie Hilfe benötigen, wende Sie sich an uns. Wir unterstützen Sie dabei, Ressourcen zu finden, wie diese Elemente in Ihrer Sprache einzusetzen sind.
+
+Einige Beispiele dafür, worauf besonders zu achten ist:
+
+### Zeichensetzung, Formatierung {#punctuation-and-formatting}
+
+**Groß-/Kleinschreibung**
+
+- Es gibt große Unterschiede in der Groß- und Kleinschreibung in verschiedenen Sprachen.
+- Im Englischen ist es üblich, alle Wörter in Titeln und Namen, Monaten und Tagen, Sprachnamen, Feiertagen usw. groß zu schreiben. In vielen anderen Sprachen ist das grammatikalisch nicht korrekt, da es abweichende Regeln für die Groß- und Kleinschreibung gibt.
+- Einige Sprachen haben auch Regeln für die Großschreibung von Personalpronomen, Substantiven und bestimmten Adjektiven, die im Englischen nicht großgeschrieben werden.
+
+**Abstände**
+
+- Die Rechtschreibregeln legen die Verwendung von Leerzeichen für jede Sprache fest. Leerzeichen werden überall verwendet und folgen in jeder Sprache anderen Regeln. Leerzeichen gehören zu den am häufigsten falsch übersetzten Elementen.
+- Einige häufige Unterschiede in den Abständen zwischen dem Englischen und anderen Sprachen:
+ - Leerzeichen vor Maßeinheiten und Währungen (z. B. USD, EUR, kB, MB)
+ - Leerzeichen vor Gradzeichen (z. B. °C, ℉)
+ - Leerzeichen vor einigen Satzzeichen, insbesondere vor der Ellipse (...)
+ - Leerzeichen vor und nach Schrägstrichen (/)
+
+**Listen**
+
+- Jede Sprache hat vielfältige und komplexe Regeln für die Erstellung von Listen. Diese können sich erheblich vom Englischen unterscheiden.
+- In einigen Sprachen muss das erste Wort jeder neuen Zeile groß geschrieben werden, während in anderen Sprachen neue Zeilen mit Kleinbuchstaben beginnen sollten. Viele Sprachen haben auch unterschiedliche Regeln für die Groß- und Kleinschreibung in Listen, je nach Länge der einzelnen Zeilen.
+- Das Gleiche gilt für die Interpunktion von Zeilenelementen. Das Endzeichen in Listen kann, je nach Sprache, ein Punkt (**.**), ein Komma (**,**) oder ein Semikolon (**;**) sein.
+
+**Anführungszeichen**
+
+- In den Sprachen werden viele verschiedene Anführungszeichen verwendet. Das einfache Kopieren der englischen Anführungszeichen aus der Quelle ist oft nicht korrekt.
+- Zu den gängigsten Arten von Anführungszeichen gehören:
+ - „Beispieltext“
+ - ‚Beispieltext’
+ - »Beispieltext«
+ - “Beispieltext”
+ - ‘Beispieltext’
+ - «Beispieltext»
+
+**Bindestriche und Gedankenstriche**
+
+- Im Englischen wird ein Bindestrich (-) verwendet, um Wörter oder verschiedene Teile eines Wortes zu verbinden, während ein Gedankenstrich (–) verwendet wird, um einen Bereich abzugrenzen oder eine Pause zu signalisieren.
+- Viele Sprachen haben unterschiedliche Regeln für die Verwendung von Bindestrichen und Gedankenstrichen, die es zu beachten gilt.
+
+### Formate {#formats}
+
+**Zahlen**
+
+- Der Hauptunterschied bei der Schreibweise von Zahlen in verschiedenen Sprachen ist das Trennzeichen für Dezimalstellen und Tausender. Als Tausendertrennzeichen kann das ein Punkt, ein Komma oder ein Leerzeichen verwendet werden. Ebenso verwenden einige Sprachen einen Dezimalpunkt, andere ein Dezimalkomma.
+ - Einige Beispiele für große Zahlen:
+ - Englisch – **1,000.50**
+ - Spanisch – **1.000,50**
+ - Französisch – **1 000,50**
+- Ebenfalls wichtig bei der Übersetzung von Zahlen ist das Prozentzeichen. Es kann auf verschiedene Weise geschrieben werden: **100%**, **100 %** oder **%100**.
+- Und abschließend können auch negative Zahlen je nach Sprache unterschiedlich dargestellt werden: -100, 100-, (100) oder [100].
+
+**Datumsangaben**
+
+- Bei der Übersetzung von Datumsangaben gibt es eine Reihe von Unterschieden und Überlegungen, die von der jeweiligen Sprache abhängen. Dazu gehören das Datumsformat, das Trennzeichen, die Großschreibung und führende Nullen. Es gibt auch Unterschiede zwischen den Datumsangaben in voller Länge und den numerischen Daten.
+ - Einige Beispiele für verschiedene Datumsformate:
+ - Englisch UK (dd/mm/yyyy) – 1st January, 2022
+ - Englisch US (mm/dd/yyyy) – January 1st, 2022
+ - Chinesisch (yyyy-mm-dd) – 2022 年 1 月 1 日
+ - Französisch (dd/mm/yyyy) – 1er janvier 2022
+ - Italienisch (dd/mm/yyyy) – 1º gennaio 2022
+ - Deutsch (dd/mm/yyyy) – 1. Januar 2022
+
+**Währungen**
+
+- Die Übersetzung von Währungen kann aufgrund der unterschiedlichen Formate, Konventionen und Umrechnungen eine Herausforderung darstellen. In der Regel sollten die Währungen mit der Quelle übereinstimmen. Sie können Ihre Landeswährung und die Umrechnung in Klammern hinzufügen, um dem Leser mehr Informationen zu bieten.
+- Zu den wichtigsten Unterschieden bei der Schreibweise von Währungen in verschiedenen Sprachen gehören die Platzierung von Symbolen, Kommas und Dezimalpunkten, Abstände und Abkürzungen oder die Verwendung von Symbolen.
+ - Symbolplatzierung: $100 oder 100$
+ - Dezimal-Kommas vs. Dezimal-Punkte: 100,50$ oder 100.50$
+ - Abstände: 100$ oder 100 $
+ - Abkürzungen oder Symbole: 100 $ oder 100 USD
+
+**Maßeinheiten**
+
+- Als allgemeine Regel gilt, dass die Maßeinheiten aus der Quelle beibehalten werden sollten. Wenn in Ihrem Land ein anderes System verwendet wird, können Sie die Umrechnung in Klammern angeben.
+- Abgesehen von der Lokalisierung von Maßeinheiten sollte ebenfalls beachtet werden, wie unterschiedlich die Herangehensweise bei diesen Einheiten in den verschiedenen Sprachen ist. Der Hauptunterschied ist der Abstand zwischen der Zahl und der Einheit, der je nach Sprache unterschiedlich sein kann. Beispiele hierfür sind 100kB vs. 100 kB oder 50ºF vs. 50 ºF.
+
+## Zusammenfassung {#conclusion}
+
+Das Übersetzen von ethereum.org ist eine gute Gelegenheit, die verschiedenen Aspekte von Ethereum kennenzulernen.
+
+Versuchen Sie, beim Übersetzen langsam vorzugehen. Bleiben Sie locker und haben Sie Spaß dabei.
+
+Vielen Dank, dass Sie sich am Übersetzungsprogramm beteiligen und uns helfen, die Website einem breiteren Publikum zugänglich zu machen. Die Ethereum-Community ist global, und wir freuen uns, dass Sie ein Teil davon sind.
diff --git a/public/content/translations/de/dao/index.md b/public/content/translations/de/dao/index.md
new file mode 100644
index 00000000000..de8d801e5aa
--- /dev/null
+++ b/public/content/translations/de/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Dezentrale autonome Organisationen (DAO)
+description: Eine Übersicht über DAOs auf Ethereum
+lang: de
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: Eine Repräsentation eines Abstimmungsvorschlags in einer DAO.
+summaryPoint1: Communitys im Besitz ihrer Mitglieder ohne zentrale Führung.
+summaryPoint2: Ein sicherer Weg, um mit Fremden im Internet zusammenzuarbeiten.
+summaryPoint3: Ein sicherer Ort, um Mittel für einen bestimmten Zweck bereitzustellen.
+---
+
+## Was sind DAOs? {#what-are-daos}
+
+Eine DAO ist eine kollektiv geführte und durch die Blockchain verwaltete Organisation, die auf eine gemeinsame Mission hinarbeitet.
+
+DAOs ermöglichen es uns, mit Gleichgesinnten rund um den Globus zusammenzuarbeiten, ohne unser Vertrauen in das Wohlwollen einer Führungskraft setzen zu müssen, die die Fonds oder Operationen verwaltet. Es gibt keinen Geschäftsführer, der Geld nach Lust und Laune ausgeben kann, und keinen Finanzchef, der die Buchhaltung manipulieren kann. Stattdessen bestimmen in den Code eingebaute Blockchain-basierte Regeln, wie die Organisation arbeitet und wie die Mittel ausgegeben werden.
+
+Die Finanzverwaltung ist integriert und niemand kann ohne die Zustimmung der Gruppe darauf zugreifen. Entscheidungen werden durch Vorschläge und Abstimmungen geregelt, um sicherzustellen, dass jeder in der Organisation ein Mitspracherecht hat, und alles geschieht transparent On-Chain.
+
+## Warum brauchen wir DAOs? {#why-dao}
+
+Ein gemeinsam mit anderen Personen ein Unternehmen zu gründen und dafür Gelder und Finanzierungsmöglichkeiten bereitzustellen, benötigt viel Vertrauen in die Menschen, mit denen Sie arbeiten. Doch es ist alles andere als leicht, jemandem zu vertrauen, den Sie nur über das Internet kennen. Mit DAOs müssen Sie anderen in der Gruppe nicht vertrauen, sondern nur dem DAO-Code, der vollständig transparent und für jeden einsehbar ist.
+
+Das eröffnet viele neue Möglichkeiten für globale Zusammenarbeit und Koordination.
+
+### Ein Vergleich {#dao-comparison}
+
+| DAO | Ein herkömmliches Unternehmen |
+| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
+| In der Regel flache Strukturen und vollständig demokratisiert | In der Regel hierarchisch |
+| Abstimmung durch die Gruppe erforderlich, um Veränderungen zu implementieren | Veränderungen können je nach Struktur durch einzelne Parteien verlangt oder durch offene Abstimmungen beschlossen werden |
+| Nach der Stimmenauszählung wird das Ergebnis wird automatisch ohne vertrauenswürdige Dritte implementiert | Sofern Abstimmungen erlaubt sind, werden Stimmen intern gezählt und das Ergebnis muss manuell umgesetzt werden |
+| Angebotene Dienste werden automatisch auf dezentrale Weise abgewickelt (etwa die Verteilung gemeinnütziger Mittel) | Erfordert die Abwicklung durch Personen oder zentral kontrollierte automatische Abläufe, die anfällig für Manipulation sind |
+| Alle Aktivitäten sind transparent und vollständig öffentlich | Aktivitäten sind normalerweise unternehmensintern, begrenzte Einsicht für die Öffentlichkeit |
+
+### Beispiele für DAOs {#dao-examples}
+
+Für ein besseres Verständnis finden Sie im Folgenden Beispiele für den Einsatz einer DAO:
+
+- Eine Wohltätigkeitsorganisation – Sie können von jedem auf der Welt Spenden annehmen und darüber abstimmen, welche Zwecke finanziert werden sollen.
+- Kollektives Eigentum – Sie können physische oder digitale Vermögenswerte erwerben und die Mitglieder können über deren Verwendung abstimmen.
+- Unternehmen und Zuschüsse: Sie könnten einen Risikofonds gründen, der Investitionskapital bündelt und über zu unterstützende Unternehmen abstimmt. Das zurückgezahlte Geld könnte später unter den DAO-Mitgliedern neu verteilt werden.
+
+## Wie funktionieren DAOs? {#how-daos-work}
+
+Das Fundament einer DAO ist ihr Smart Contract, der das Regelwerk der Organisation festhält und die Schatzkammer verwaltet. Sobald ein Smart Contract auf Ethereum aktiv ist, können die Regeln ausschließlich per Abstimmung geändert werden. Vorgänge, die nicht durch die Regeln und Logik des Codes abgedeckt sind, schlagen fehl. Da auch die Finanzverwaltung durch den Smart Contract definiert ist, kann niemand das Geld ohne die Zustimmung der Gruppe ausgeben. Daher benötigen DAOs keine zentrale Instanz. Stattdessen trifft die Gruppe gemeinsam Entscheidungen, wobei Zahlungen bei positiver Abstimmung automatisch genehmigt werden.
+
+Möglich wird dies durch die Manipulationssicherheit veröffentlichter Smart Contracts. Da alle Vorgänge öffentlich sind, sind unbemerkte Änderungen am Code (also den Regeln der DAO) unmöglich.
+
+
.env
aus. Stellen Sie sicher, dass Sie Ihre .env
-Datei niemals an andere weitergeben, denn damit würden Sie Ihre geheimen Daten weitergeben. Wenn Sie die Versionskontrolle verwenden, fügen Sie Ihre Env-Datei
zu einer Datei gitignore hinzu.
+
+
+
+
+
+
+
+
+
+BASEFEE
-Blockcodes0xEF
beginnen
+
+
+
+
+
+CHAINID
-Opcodes.
+
+
+
+
+
+REVERT
.STATICCALL
der nicht zustandsveränderte Aufrufe für andere Verträge erlaubt.
+
+
+EXP
-Verfahrenscodes an – und wirkt somit der Verlangsamung des Netzwerks durch rechenintensive Vertragsklauseln entgegen.
+
+
+Was war ETH2?
+
+
+
+
+Weitere Informationen findest Du in diesem Blogartikel von Tim Heiko zum Thema The Merge Update: Welche Auswirkungen hat das Ereignis auf die Ethereum-Execution Layer?.
+
+
+
+
+Stellen Sie sich nun vor, dass die Uhr statt 1 bis 12 die Zahlen 0 bis N hat (die Gesamtzahl der jemals auf der Konsensus-Ebene registrierten Validatoren-Konten, über 500.000 im Januar 2023).
+Der Zeiger auf der Uhr zeigt auf den nächstenValidator, der auf zulässige Abhebungen geprüft werden muss. Es beginnt bei 0 und schreitet rundherum fort, ohne irgendwelche Konten zu überspringen. Wenn der letzte Validator erreicht ist, beginnt der Zyklus von vorne.
+`nonce`
`
+
+``: _Etiqueta de apertura, que contiene un fragmento de código_
+
+nonce - _Texto no traducible_
+
+`
`: _etiqueta de cierre_
+
+
+
+El texto original también contiene etiquetas acortadas, que solo contienen números, lo que significa que su función no es inmediatamente obvia. Puede pasar el cursor sobre estas etiquetas para ver qué función tienen exactamente.
+
+En el ejemplo de abajo, al pasar el cursor por la <0> etiqueta se muestra lo que representa `` y contiene un fragmento de código, por lo tanto el contenido dentro de estas etiquetas no debe traducirse.
+
+
+
+## Siglas y descripciones completas {#short-vs-full-forms}
+
+En el sitio web, se utilizan muchas siglas, como por ejemplo, dapps, NFT, DAO, DeFi, etc. Estas siglas se utilizan comúnmente en inglés y la mayoría de los visitantes del sitio web están familiarizados con ellas.
+
+Dado que no suelen tener una traducción oficial a otros idiomas, la mejor manera de traducir estos y otros términos similares es proporcionar una descripción completa y añadir la sigla en inglés entre paréntesis.
+
+No traduzca estas siglas o abreviaturas a su idioma nativo, ya que la mayoría de la gente no estaría familiarizada con ellas, y las versiones localizadas no tendrían mucho sentido para la mayoría de los visitantes.
+
+Ejemplo de cómo traducir dApps:
+
+- Aplicaciones descentralizadas (dApps) → _Traducida completa (abreviatura en inglés entre paréntesis)_
+
+## Términos sin traducción oficial {#terms-without-established-translations}
+
+Puede que algunos términos aún no tengan una traducción oficial en otros idiomas, y sin embargo, se conozcan ampliamente por su denominación en inglés. Tales términos incluyen principalmente conceptos más nuevos, como proof-of-work (prueba de trabajo), proof-of-stake (prueba de participación), beacon chain (cadena de baliza), staking (participación), etc.
+
+Si bien la traducción de estos términos puede sonar antinatural, ya que la versión en inglés también se utiliza en otros idiomas, es altamente recomendable que se traduzcan.
+
+Al traducirlos, sea creativo con toda libertad, use traducciones descriptivas o simplemente tradúzcalos literalmente.
+
+**La razón por la que la mayoría de estos términos se deberían traducir, en lugar de dejar algunos en inglés, es el hecho de que esta nueva terminología se extenderá en el futuro, a medida que más personas empiecen a utilizar Ethereum y tecnologías relacionadas. Si queremos llegar a más personas de todo el mundo con este espacio, tenemos que proporcionar una terminología comprensible en tantos idiomas como sea posible, aunque necesitemos acuñar los términos nosotros mismos.**
+
+## Botones y comandos interactivos (CTA) {#buttons-and-ctas}
+
+El sitio web contiene numerosos botones, que deben traducirse de forma diferente a otros contenidos.
+
+El texto del botón se puede identificar viendo las capturas de pantalla de contexto, conectadas con la mayoría de las cadenas, o buscando el contexto en el editor, que incluye la frase «botón».
+
+Las traducciones para los botones deben ser lo más cortas posible, para evitar errores de formato. Asimismo, la traducción de los botones debe tener un sentido imperioso, es decir, dar una order o solicitar algo.
+
+
+
+## Traducir de forma inclusiva {#translating-for-inclusivity}
+
+Los visitantes de ethereum.org vienen de todo el mundo y tienen diferentes orígenes. Por lo tanto, el lenguaje en el sitio web debería ser neutral, dar la bienvenida a todos y no excluir a nadie.
+
+Un aspecto importante a colación es la neutralidad entre hombres y mujeres. Esto puede lograrse fácilmente utilizando un estilo formal y evitando en las traducciones palabras específicas de género.
+
+Otra forma de inclusividad es intentar traducir para un público global, que no sea específico a ningún país, raza o región.
+
+Por último, las expresiones deben ser adecuadas a todos los públicos y edades.
+
+## Traducciones específicas del idioma {#language-specific-translations}
+
+Al traducir, es importante seguir las reglas gramaticales, usos y formatos utilizados en su idioma, en lugar de copiarlos de la versión original. El texto original sigue las normas y usos gramaticales del inglés, que no es aplicable a muchos otros idiomas.
+
+Debe conocer las reglas de su idioma y traducir aplicándolas. Si necesita ayuda, comuníquese con nosotros y le ayudaremos a encontrar algunos recursos de ayuda para utilizar estos elementos en su idioma.
+
+He aquí algunos ejemplos de aspectos especialmente importantes:
+
+### Puntuación y formato {#punctuation-and-formatting}
+
+**Uso de mayúsculas**
+
+- Hay grandes diferencias en el uso de mayúsculas en diferentes idiomas.
+- En inglés, se escriben con mayúscula inicial todas las palabras en títulos y nombres, meses y días, nombres de idiomas, vacaciones, etc. En muchos otros idiomas, esto es gramaticalmente incorrecto, ya que tienen diferentes reglas de uso de mayúsculas.
+- Algunos idiomas también tienen reglas sobre el uso de mayúsculas de pronombres personales, sustantivos y ciertos adjetivos, que no están se escriben con inicial en mayúscula en inglés.
+
+**Espaciado**
+
+- Las reglas de ortografía definen el uso de espacios en cada idioma. Dado que todos los idiomas se escriben con espacios, estas reglas son algunas de las más características y los espacios son algunos de los elementos que se suelen traducir mal.
+- He aquí algunas diferencias comunes en el espaciado entre inglés y otros idiomas:
+ - Espacio antes de unidades de medición y divisas (por ejemplo, USD, EUR, kB, MB)
+ - Espacio antes de los signos de grado (por ejemplo, °C, °F)
+ - Espacio antes de algunos signos de puntuación, especialmente el paréntesis (…)
+ - Espacio antes y después de las barras (/)
+
+**Listas**
+
+- Cada idioma tiene un conjunto diverso y complejo de reglas para escribir listas. Pueden ser significativamente diferentes al inglés.
+- En algunos idiomas, la primera palabra de cada nueva línea se escribe en mayúscula, mientras que en otros, las nuevas líneas deben comenzar en minúscula. Muchos idiomas también tienen reglas diferentes sobre el uso de mayúsculas en las listas, en función de la longitud de cada línea.
+- Lo mismo se aplica a la puntuación de los elementos de línea. La puntuación final en las listas puede ser un punto (**.**), una coma (**,**) o un punto y coma (**;**), dependiendo del idioma.
+
+**Comillas**
+
+- Los idiomas utilizan muchas comillas diferentes. Utilizar las comillas inglesas no es correcto en muchos idiomas.
+- He aquí algunos de los tipos de comillas más comunes:
+ - „texto de ejemplo“
+ - ‚texto de ejemplo’
+ - »texto de ejemplo«
+ - “texto de ejemplo”
+ - ‘texto de ejemplo’
+ - «texto de ejemplo»
+
+**Guiones**
+
+- En inglés, un guión corto (-) se utiliza para unir palabras o diferentes partes de una palabra, mientras un guión medio (–) se utiliza para indicar una explicación o hacer una pausa.
+- Muchos idiomas siguen unas reglas de uso de los guines diferentes, por lo tanto, deben cumplirse.
+
+### Formatos {#formats}
+
+**Números**
+
+- La principal diferencia en la escritura de números en diferentes idiomas es el separador utilizado para decimales y millares. Los millares se pueden expresar por punto, coma o espacio. Del mismo modo, algunos idiomas utilizan un punto decimal, mientras que otros usan una coma decimal.
+ - Algunos ejemplos de cifras de más de tres dígitos:
+ - En inglés: **1,000.50**
+ - En español: **1.000,50**
+ - En francés: **1000,50**
+- Otra consideración importante a la hora de traducir números es el signo de porcentaje. Puede escribirse de diferentes maneras: **100%**, **100 %** o **%100**.
+- Finalmente, los números negativos pueden mostrarse diferentemente, dependiendo del idioma: -100, 100-, (100) o [100].
+
+**Fechas**
+
+- A la hora de traducir las fechas, hay una serie de consideraciones y diferencias basadas en el idioma. Estos incluyen el formato de fecha, separador, el uso de mayúsculas y los ceros al inicio. También hay diferencias entre las fechas completas y las numéricas.
+ - He aquí agunos ejemplos de diferentes formatos de fecha:
+ - Inglés británico (dd/mm/aaaa): 1st January, 2022
+ - Inglés estadounidense (mm/dd/aaaa): January 1st, 2022
+ - Chino (aaa-mm-dd): 2022 年 1 月 1 日
+ - Francés (dd/mm/aaaa): 1er janvier 2022
+ - Italian (dd/mm/yyyy): 1o gennaio 2022
+ - Alemán (dd/mm/aaaa): 1. Januar 2022
+
+**Divisas**
+
+- Traducir divisas puede ser un desafío, debido a los diferentes formatos, convenciones y conversiones. Como regla general, mantenga las mismas divisas que se mencionan en el texto original. Puede añadir su divisa local y poner su conversión entre paréntesis, para ayudar a su comprensión.
+- Las principales diferencias en la escritura de divisas en diferentes idiomas incluyen la colocación de símbolos, comas decimales frente a puntos decimales, espacio, y siglas frente a descripciones completas.
+ - Colocación de símbolos: $100 o 100 $
+ - Comas decimales o puntos decimales: 100,50 $ o 100.50$
+ - Espacio: 100$ o 100 $
+ - Abreviaturas, siglas o símbolos: 100 $ o 100 USD
+
+**Unidades de medición**
+
+- Como regla general, mantenga las mismas unidades de medición que se mencionan en el texto original. Si su país utiliza un sistema diferente, puede incluir la conversión entre corchetes.
+- Aparte de la conversión de unidades de medición, también es importante señalar las diferencias en la forma en que los idiomas abordan estas unidades. La diferencia principal es el espacio entre el número y la unidad, que puede ser diferente, en función del idioma. Como por ejemplo, 100kB o 100 kB, 50 ºF o
+
+## Conclusión {#conclusion}
+
+Traducir ethereum.org representa una gran oportunidad para aprender sobre los diferentes aspectos de Ethereum.
+
+No traduzca con prisas y a lo loco. ¡No se complique la vida y diviértase!
+
+Gracias por participar en el Programa de Traducción y ayudarnos a hacer que el sitio web sea accesible a un público más amplio. La comunidad Ethereum es global, y estamos contentos de que forme parte de ella.
diff --git a/public/content/translations/es/dao/index.md b/public/content/translations/es/dao/index.md
new file mode 100644
index 00000000000..c2c4f1da846
--- /dev/null
+++ b/public/content/translations/es/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Organizaciones Autónomas Descentralizadas (DAO)
+description: Una visión general de las DAO en Ethereum
+lang: es
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: Imagen de una DAO votando una propuesta.
+summaryPoint1: Comunidades con propiedad compartida por los miembros sin liderazgo centralizado.
+summaryPoint2: Una forma segura de colaborar con desconocidos en Internet.
+summaryPoint3: Un lugar seguro para dar fondos a una causa específica.
+---
+
+## ¿Qué son las DAO? {#what-are-daos}
+
+Una DAO es una organización de propiedad colectiva y gobernada mediante cadena de bloques que vela por una misión compartida.
+
+Las DAO nos permiten trabajar con personas de ideas afines a nosotros en todo el mundo sin tener que confiar en un líder benévolo para que administre los fondos u operaciones. No existe ningún director ejecutivo que pueda gastar los fondos a su antojo, ni ningún director financiero que pueda manipular la contabilidad. En lugar de eso, las reglas basadas en la cadena de bloques e integradas en el código son las que definen cómo funciona la organización y cómo se gastan los fondos.
+
+Han incorporado tesoros a los que nadie tiene autoridad para acceder sin la aprobación del grupo. Las decisiones se toman a través de propuestas y votaciones para asegurar que todos en la organización tengan voz, y que todo suceda de forma transparente en cadena.
+
+## ¿Por qué necesitamos DAO? {#why-dao}
+
+Emprender una organización conjunta, que involucre financiación y dinero requiere mucha confianza en las personas con las que se esté trabajando. No obstante, es difícil confiar en alguien con quien solo se ha interactuado en Internet. Con una DAO, no necesita confiar en nadie de su grupo, tan solo en el código de DAO, que es 100 % transparente y cualquier persona puede verificar.
+
+Así se abren nuevas oportunidades para la colaboración y coordinación globales.
+
+### Una comparación {#dao-comparison}
+
+| DAO | Una organización tradicional |
+| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| Suele ser plana y totalmente democratizada. | Suele ser jerárquica. |
+| Los miembros votan previamente cualquier cambio que quieran emprender. | Dependiendo de la estructura, se pueden exigir cambios a un único grupo o se puede ofrecer la posibilidad de votarlos. |
+| Los votos cuentan y los resultados se implementan automáticamente sin intermediarios de confianza. | Si se permite la votación, los votos se contabilizan internamente y el resultado de la votación debe ser tramitado manualmente. |
+| Los servicios ofrecidos se gestionan automáticamente de forma descentralizada (por ejemplo, la distribución de fondos filantrópicos). | Requiere tramitación humana o centralización, propensa a la manipulación. |
+| Toda la actividad es transparente y totalmente pública. | La actividad es normalmente privada y limitada al público. |
+
+### Ejemplos de DAO {#dao-examples}
+
+Para ayudar a que esto tenga más sentido, aquí hay algunos ejemplos de cómo se podría usar una DAO:
+
+- Una organización benéfica puede aceptar donaciones de cualquier persona en el mundo y votar por aquellas causas que quiera financiar.
+- Como miembros de la propiedad colectiva, pueden comprar activos físicos o digitales y votar sobre cómo usarlos.
+- Empresas y subvenciones: podría crear un fondo de riesgo que agrupe el capital de inversión y vote sobre las empresas a respaldar. El dinero reembolsado podría redistribuirse posteriormente entre los miembros de la DAO.
+
+## ¿Cómo funcionan las DAO? {#how-daos-work}
+
+La columna vertebral de una DAO son los contratos inteligentes, estos definen las reglas de la organización y la forma de administrar los activos atesorados. Una vez que el contrato está activo en Ethereum, nadie puede cambiar las reglas excepto con una votación. Si alguien intenta hacer algo que no está cubierto por las reglas y la lógica del código, no podrá hacerlo. Y dado que el tesoro está definido también por el contrato inteligente, nadie puede gastar el dinero sin la aprobación del grupo. Esto significa que las DAO no necesitan una autoridad central. En vez de ello, el grupo toma las decisiones colectivamente y los pagos se autorizan automáticamente cuando se aprueben los votos suficientes.
+
+Esto se consigue gracias a que los contratos inteligentes son a prueba de manipulación una vez que conectan con Ethereum. No puede editar el código (las reglas de la DAO) sin que la gente se dé cuenta, ya que todo es público.
+
+
.env
! Asegúrese de que nunca comparte ni expone su archivo .env
con nadie, ya que ello conlleva revelar sus secretos. Si está haciendo un control de la versión, añada .env
a un archivo gitignore.
+
+
+
+
+
+
+
+
+
+
+
+
+CHAINID
opcode.
+
+
+REVERT
.STATICALL
, permitiendo llamadas no cambiantes de estado a otros contratos.
+
+
+EXP
: hace más difícil ralentizar la red a través de operaciones de contrato de elevado coste computacional.¿Qué era ETH2?
+
+
+
+
+Para obtener más información, eche un vistazo a esta publicación en el blog de Tim Beiko sobre Cómo afecta La Fusión a la capa de aplicación de Ethereum.
+
+
+
+
+Ahora en lugar del 1 al 12, imagine que el reloj tiene de 0 hasta N (el número total de cuentas validadoras que alguna vez se registraron en la capa de consenso, más de 500.000 en enero de 2023).
+La manecilla en el reloj apunta hacia el siguiente validador que necesita ser verificado antes de permitirle retiradas. Empieza a partir de 0, y avanza todo el camino alrededor sin saltarse ninguna cuenta. Cuando se alcance el último validador, el ciclo continúa volviendo al principio.
+
+اکنون به جای اعداد 1 تا 12، تصور کنید ساعت دارای اعداد 0 تا N داشته باشد ( تا ژانویه 2023 تعداد کل حساب های اعتبارسنج که تا کنون در لایه اجماع ثبت شده اند، بیش از 500،000 بوده است).
+عقربه روی ساعت به اعتبارسنج بعدی اشاره میکند که باید برای برداشتهای واجد شرایط بررسی شود. این روند از عدد 0 شروع میشود، و بدون پریدن و رد شدن از هر حساب تا آخر پیش میرود. وقتی که به آخرین اعتبارسنج دست یافت، چرخه پیوسته به آغاز مسیر باز میگردد.
+
+Ngayon, sa halip na 1 hanggang 12, isipin na may 0 hanggang N (ang kabuuang bilang ng mga validator account na nairehistro sa consensus layer, na mahigit 500,000 mula noong Enero 2023).
+Ituturo ng kamay sa orasan ang susunod na validator na kailangang tingnan kung may mga eligible withdrawal. Nagsisimula ito sa, at umuusad paikot nang hindi nilalaktawan ang anumang account. Kapag naabot na ang huling validator, babalik ang sa simula ang cycle.
+`nonce`
`
+
+`` - _Balise ouvrante, qui contient un extrait de code_
+
+nonce - _Texte non traduisible_
+
+`
` - _Balise fermante_
+
+
+
+Le texte source contient aussi des balises raccourcies. Elles contiennent uniquement des chiffres et leur fonction n'est donc pas directement identifiable. Vous pouvez survoler ces balises pour voir exactement ce à quoi elles servent.
+
+Dans l'exemple ci-dessous, vous pouvez voir que survoler la balise <0> nous permet de savoir qu'elle désigne en fait une balise `` et qu'elle contient un extrait de code. Le contenu de ces balises ne doit donc pas être traduit.
+
+
+
+## Formes courtes, formes complètes et abréviations {#short-vs-full-forms}
+
+De nombreuses abréviations sont utilisées sur le site, comme dApps, NFT, DAO, DeFi, etc. Ces abréviations sont couramment utilisées en anglais et les visiteurs du site web les connaissent généralement.
+
+Étant donné qu'elles n'ont souvent pas de traduction établie dans les autres langues, la meilleure façon d'adapter ces termes (ainsi que les termes qui gravitent autour) est de fournir une traduction descriptive de leur forme complète, puis d'ajouter l'abréviation entre parenthèses.
+
+Ne traduisez pas ces abréviations, car la plupart des gens ne les connaissent pas et les versions traduites n'auraient pas vraiment de sens pour la plupart des visiteurs.
+
+Exemple de la manière de traduire « dApps » :
+
+- Applications décentralisées (dApps) → _Forme complète traduite (abréviation anglaise entre parenthèses)_
+
+## Termes sans traduction établie {#terms-without-established-translations}
+
+Certains termes peuvent ne pas avoir de traduction bien définie dans les autres langues et être largement connus sous leur forme anglaise. Ces termes incluent principalement des concepts récents, comme proof-of-work, proof-of-stake, Beacon Chain, staking, etc.
+
+La traduction de ces termes peut sembler peu naturelle, mais puisque la version anglaise est également couramment utilisée dans d'autres langues, il est fortement recommandé de les traduire.
+
+Lorsque vous traduisez ces termes, soyez créatifs, utilisez des traductions descriptives ou alors traduisez-les littéralement.
+
+**Le fait de traduire ces termes, plutôt que de les laisser en anglais, permettra à cette nouvelle terminologie de se généraliser à l'avenir, à mesure que de plus en plus de personnes utiliseront Ethereum et les technologies associées. Si nous voulons faire connaître ce domaine à plus de personnes à travers le monde, nous devons fournir une terminologie compréhensible dans un maximum de langues, quitte à la créer nous-mêmes.**
+
+## Boutons et appels à l'action (CTA) {#buttons-and-ctas}
+
+Le site contient de nombreux boutons, qui doivent être traduits différemment des autres contenus.
+
+Vous pouvez repérer un bouton et son contenu en visualisant les captures d'écran contextuelles, fournies avec la plupart des textes sources, ou bien en regardant le contexte de l'éditeur, qui inclura le terme « button » (bouton).
+
+Les traductions des boutons doivent être aussi courtes que possible pour éviter les problèmes de mise en forme. En outre, la traduction des boutons doit être impérative, c'est-à-dire exprimer un ordre ou une demande.
+
+
+
+## Traduire de manière inclusive {#translating-for-inclusivity}
+
+Les visiteurs d'ethereum.org viennent de partout dans le monde et d'horizons différents. Le langage du site web devrait donc être neutre, accueillant pour tout le monde et inclusif.
+
+La neutralité de genre est un aspect important de cette démarche. Dans cette optique, préférez un langage formel lorsque vous vous adressez au visiteur, en évitant d'utiliser des termes genrés dans les traductions.
+
+Une autre forme d'inclusivité consiste à faire en sorte que la traduction s'adresse à un public mondial, et pas spécifiquement à un pays, une ethnie ou une région du monde.
+
+Enfin, le langage doit être adapté à tous les publics et tous les âges.
+
+## Traductions spécifiques à une langue {#language-specific-translations}
+
+Lors de la traduction, plutôt que de calquer simplement la source, il est important de suivre les règles de grammaire, les conventions et le formatage en vigueur dans votre langue. Le texte source suit les règles et conventions de la grammaire anglaise, qui ne sont pas applicables dans beaucoup d'autres langues.
+
+Vous devez donc avoir les règles de votre langue en tête afin de traduire correctement. Si vous avez besoin d'aide pour traduire certains éléments, contactez-nous et nous vous aiderons à trouver des ressources sur la façon dont ils doivent être adaptés à votre langue.
+
+Voici quelques exemples de ce à quoi vous devrez faire attention :
+
+### Ponctuation et mise en forme {#punctuation-and-formatting}
+
+**Majuscules**
+
+- Il existe de grandes différences entre les langues sur la façon d'utiliser les lettres majuscules.
+- En anglais, il est courant de mettre en majuscule sur la première lettre de tous les mots contenus dans les titres, les noms, les mois, les jours, le nom des langues, les jours fériés, etc. Dans de nombreuses autres langues, c'est grammaticalement incorrect, car les règles sont différentes.
+- Certaines langues ont aussi des règles sur la mise en majuscule des pronoms personnels, des noms communs et de certains adjectifs, qui ne portent pas de majuscule en anglais.
+
+**Espaces**
+
+- Les règles orthographiques définissent l'utilisation des espaces pour chaque langue. Ces règles sont souvent très spécifiques, et parce que les espaces sont utilisés partout, ils sont parmi les éléments les plus mal traduits.
+- Voici quelques différences d'espacement fréquentes entre l'anglais et d'autres langues :
+ - Espace avant les unités de mesure et les devises (ex. USD, EUR, kB, MB)
+ - Espace avant le signe de degré (ex. °C, ℉)
+ - Espace avant certains signes de ponctuation, notamment l'ellipse (…)
+ - Espace avant et après les barres obliques (/)
+
+**Listes**
+
+- Chaque langue possède un ensemble de règles diverses et variées pour la rédaction des listes. Elles peuvent différer considérablement de l'anglais.
+- Dans certaines langues, le premier mot de chaque nouvelle ligne doit avoir sa première lettre en majuscule, tandis que dans d'autres langues, les nouvelles lignes doivent commencer par une lettre minuscule. Plusieurs langues ont aussi différentes règles sur la présence de majuscule en début de ligne, en fonction de la longueur de celle-ci.
+- Il en va de même pour la ponctuation en fin de ligne. Cela peut être un point (**.**), une virgule (**,**) ou un point-virgule (**;**), en fonction de la langue.
+
+**Guillemets**
+
+- Certaines langues utilisent différents signes pour les guillemets. Il est souvent incorrect de se contenter de recopier les guillemets anglais.
+- Parmi les types de guillemets les plus courants, figurent :
+ - „texte d'exemple“
+ - ‚texte d'exemple’
+ - »texte d'exemple«
+ - “texte d'exemple”
+ - ‘texte d'exemple’
+ - «texte d'exemple»
+
+**Tirets et traits d'union**
+
+- En anglais, le trait d'union (-) est utilisé pour joindre des mots ou différentes parties d'un mot, tandis que le tiret (–) est utilisé pour indiquer un intervalle ou une pause.
+- Beaucoup de langues ont des règles différentes concernant les tirets et les traits d'union qui doivent être respectées.
+
+### Formats {#formats}
+
+**Nombres**
+
+- La principale différence entre les langues concernant les nombres écrits est le séparateur utilisé pour les nombres décimaux et celui des milliers. Pour les milliers, cela peut être un point, une virgule ou une espace. De la même manière, certaines langues utilisent un point pour les nombres décimaux, tandis que d'autres utilisent une virgule.
+ - Voici quelques exemples de grands nombres :
+ - Anglais – **1,000.50**
+ - Espagnol – **1.000,50**
+ - Français – **1 000,50**
+- Une autre chose à prendre en considération lors de la traduction de nombres est le signe pourcentage. Il peut être écrit de différentes manières : **100%**, **100 %** ou encore **%100**.
+- Enfin, les nombres négatifs peuvent aussi s'afficher différemment en fonction de la langue : -100, 100-, (100) ou [100].
+
+**Dates**
+
+- Lors de la traduction des dates, il y a un certain nombre de différences à prendre en compte, en fonction de la langue. Il s'agit par exemple du format de date, du séparateur, de la présence de majuscules ou encore des zéros initiaux. Il y a aussi des différences entre les dates complètes et les dates numériques.
+ - Voici quelques exemples de différents formats de date :
+ - Anglais UK (jj/mm/aaaa) – 1er janvier 2022
+ - Anglais US (mm/jj/aaaa) – janvier 1, 2022
+ - Chinois (aaaa-mm-jj) – 2022 年 1 月 1 日
+ - Français (jj/mm/aaaa) – 1er janvier 2022
+ - Italien (jj/mm/aaaa) – 1º gennaio 2022
+ - Allemand (jj/mm/aaaa) – 1. Januar 2022
+
+**Devises**
+
+- Traduire des devises peut s'avérer difficile, en raison des différences de formats, de conventions et de conversions. En règle générale, veuillez garder la même devise que la source. Dans l'intérêt du lecteur, vous pouvez éventuellement ajouter votre devise locale ainsi que la conversion entre parenthèses.
+- Les principales différences qui existent lors de l'écriture des devises dans différentes langues sont le placement des symboles, les virgules décimales par rapport aux points décimaux, l'espacement et les abréviations par rapport aux symboles.
+ - Emplacement du symbole : $100 ou 100$
+ - Virgule décimale ou point décimal : 100,50$ ou 100.50$
+ - Espacement : 100$ ou 100 $
+ - Abréviation ou symbole : 100 $ ou 100 USD
+
+**Unités de mesure**
+
+- En règle générale, veuillez garder la même unité de mesure que dans le texte source. Si votre pays utilise un autre système, vous pouvez inclure la conversion entre parenthèses.
+- Outre la localisation des unités de mesure, il est également important de tenir compte des différences dans la façon dont les langues abordent ces unités. La différence principale est l'espacement entre le nombre et l'unité, qui peut différer selon la langue. Par exemple, on observe cette différence entre 100kB, 100 kB, 50ºF et 50 ºF.
+
+## Conclusion {#conclusion}
+
+Traduire ethereum.org constitue une excellente occasion de découvrir les différents aspects d'Ethereum.
+
+Lors de la traduction, essayez de ne pas vous précipiter. Prenez votre temps et faites-vous plaisir !
+
+Merci pour votre participation au programme de traduction et de nous aider à rendre le site accessible à un public plus large. La communauté Ethereum est internationale, et nous sommes heureux que vous en fassiez partie !
diff --git a/public/content/translations/fr/dao/index.md b/public/content/translations/fr/dao/index.md
new file mode 100644
index 00000000000..b9c0dc50b6c
--- /dev/null
+++ b/public/content/translations/fr/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Organisation autonome décentralisée (DAO)
+description: Un aperçu des DAO sur Ethereum
+lang: fr
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: Une représentation d'une DAO qui vote une proposition.
+summaryPoint1: Des communautés appartenant à leurs membres sans pouvoir centralisé.
+summaryPoint2: Un moyen sûr de collaborer avec des étrangers sur Internet.
+summaryPoint3: Un endroit sûr pour engager des fonds pour une cause précise.
+---
+
+## Que sont les DAO ? {#what-are-daos}
+
+Une DAO est une organisation collectivement gérée par la blockchain et qui travaille à une mission partagée.
+
+Les DAO nous permettent de travailler avec des personnes partageant le même état d'esprit et dans le monde entier, sans pour autant faire confiance à un dirigeant bienveillant pour gérer les fonds ou les opérations. Il n'y a pas de Directeur Général qui puisse dépenser des fonds sur un caprice ou un Chef de la direction financière capable de manipuler les registres. Au lieu de cela, les règles basées sur la blockchain ont été intégrées dans le code et définissent comment fonctionne l'organisation et comment les fonds sont dépensés.
+
+Elles possèdent une trésorerie intégrée à laquelle personne ne peut accéder sans l'accord du groupe. Les décisions sont régies par des propositions et des votes pour s'assurer que tout le monde au sein de l'organisation a une voix et que tout se passe de manière transparente sur la chaîne.
+
+## Pourquoi avons-nous besoin des DAO ? {#why-dao}
+
+Créer une organisation avec quelqu'un qui injecte des fonds et de l'argent exige une grande confiance dans les personnes avec lesquelles vous travaillez. Mais il est difficile de faire confiance à une personne avec laquelle vous n’avez interagi que sur Internet. Avec les DAO, vous n'avez pas besoin de faire confiance à quelqu'un dans le groupe, juste au code de la DAO, qui est 100 % transparent et vérifiable par n'importe qui.
+
+Cela ouvre énormément de nouvelles possibilités de collaboration et de coordination au niveau mondial.
+
+### Une comparaison {#dao-comparison}
+
+| DAO | Organisation traditionnelle |
+| --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| Habituellement fixe, et pleinement démocratisée. | Généralement hiérarchique. |
+| Vote requis par les membres pour que tout changement soit mis en œuvre. | Selon la structure, des changements peuvent être demandés par une seule personne et le vote peut être biaisé. |
+| Votes comptabilisés et résultats mis en œuvre automatiquement sans intermédiaire de confiance. | Si les votes sont proposés, ils sont calculés en interne et les résultats des votes doivent être traités manuellement. |
+| Les services offerts sont gérés automatiquement de manière décentralisée (par exemple la distribution de fonds philanthropiques). | Nécessite une manipulation humaine ou une automatisation centralisée sujette à la manipulation. |
+| Toutes les activités sont transparentes et entièrement publiques. | L'activité est généralement privée et limitée au public. |
+
+### Exemples de DAO {#dao-examples}
+
+Pour aider votre compréhension, voici quelques exemples de la façon dont vous pourriez utiliser une DAO :
+
+- Un organisme caritatif – vous pouvez accepter les dons de n'importe qui dans le monde entier et voter pour les causes à financer.
+- Propriété collective – vous pouvez acheter des actifs physiques ou numériques et les membres peuvent voter sur la façon de les utiliser.
+- Ventures et subventions – vous pourriez créer un fonds de risque qui regroupe le capital d’investissement et qui votera pour savoir quelles les entreprises garder. L'argent perçu pourra plus tard être redistribué entre les membres de la DAO.
+
+## Comment fonctionnent les DAO ? {#how-daos-work}
+
+La colonne vertébrale d'une DAO est son contrat intelligent, qui définit les règles de l'organisation et détient la trésorerie du groupe. Une fois que le contrat est en vigueur sur Ethereum, personne ne peut modifier les règles autrement que par un vote. Si quelqu'un essaie de faire quelque chose qui n'est pas couvert par les règles et la logique dans le code, il échouera. Et, comme la trésorerie est également définie par le contrat intelligent, personne ne peut dépenser l'argent sans l'approbation du groupe. Cela signifie que les DAO n'ont pas besoin d'une autorité centrale. Au lieu de cela, le groupe prend des décisions collectives et les paiements sont autorisés automatiquement lorsque les votes sont passés.
+
+Ceci est possible parce que les contrats intelligents sont étanches à toute intrusion dès qu'ils sont mis en service sur Ethereum. Vous ne pouvez pas simplement modifier le code (les règles DAO) sans que les gens le remarquent puisque tout est public.
+
+
+
+
+COINBASE
PUSH0
SELFDESTRUCT
+
+
+
+
+
+
+
+
+
+
+
+BASEFEE
depuis un bloc0xEF
+
+
+
+
+
+
+
+
+CHAINID
.
+
+
+REVERT
.STATICCALL
, ce qui permettra aux autres contrats de ne pas changer l'état des Calls.
+
+
+EXP
– rend plus difficile le ralentissement du réseau via des opérations de contrat coûteuses sur le plan du calcul.
+
+
+
+Maintenant au lieu de 1 à 12, imaginez que l'horloge a 0 à N (le nombre total de comptes de validateur qui ont déjà été enregistrés sur la couche de consensus, plus de 500 000 en janvier 2023).
+L'aiguille de l’horloge pointe vers le prochain validateur qui doit être vérifié pour les retraits éligibles. Il commence à 0 et progresse tout autour sans sauter de compte. Lorsque le dernier validateur est atteint, le cycle reprend au début.
+
+अब 1 से 12 के बजाय, कल्पना करें कि घड़ी में 0 से N है (सत्यापनकर्ता खातों की कुल संख्या जो कभी भी आम सहमति परत पर पंजीकृत की गई है, जनवरी 2023 तक 500,000 से अधिक)।
+घड़ी की सुई अगले सत्यापनकर्ता को इंगित करती है जिसे पात्र निकासी के लिए जांचने की आवश्यकता है। यह 0 से शुरू होती है, और किसी भी खाते को छोड़े बिना चारों ओर आगे बढ़ती है। जब अंतिम सत्यापनकर्ता तक पहुंच जाता है, तो चक्र शुरुआत से फिर से जारी रहता है।
+
+Tegyük fel 1–12 helyett 0-n található (ahol n a validátor számlák teljes száma, amelyek a konszenzus rétegen regisztrálva lettek; több mint 500 000 2023. januárjában).
+Az óramutató a következő validátorra mutat, hogy leellenőrizze azt visszavonás szempontjából. A 0-nál kezdi és végigmegy az összes számlán. Amikor eléri az utolsó validátort, akkor a ciklus újra elindul.
+.env
! Please make sure never to share or expose your .env
file with anyone, as you are compromising your secrets in doing so. If you are using version control, add your .env
to a gitignore file.
+
+
+
+
+
+
+
+
+
+
+
+
+CHAINID
opcode.
+
+
+REVERT
.STATICCALL
opcode, mengizinkan panggilan yang tidak mengubah status ke kontrak lain.
+
+
+EXP
opcode – mempersulit memperlambat jaringan melalui operasi kontrak yang mahal secara komputasi.
+
+
+Apa itu ETH2?
+
+
+
+
+Untuk informasi lebih lanjut, lihat tulisan blog ini oleh Tim Beiko tentang Bagaimana Penggabungan Memengaruhi Lapisan Aplikasi Ethereum.
+
+
+
+
+Sekarang, alih-alih 1 hingga 12, bayangkan jam memiliki 0 hingga N (jumlah total akun validator yang pernah terdaftar di lapisan konsensus, lebih dari 500.000 per Januari 2023).
+Jarum penunjuk pada jam menunjuk ke validator berikutnya yang perlu diperiksa untuk penarikan yang memenuhi syarat. Dimulai dari 0, dan berkembang terus tanpa melewatkan satu akun pun. Ketika validator terakhir tercapai, siklus berlanjut kembali ke awal.
+`nonce`
`
+
+`` - _Tag d'apertura, contenente un frammento di codice_
+
+nonce - _Testo non traducibile_
+
+`
` - _Tag di chiusura_
+
+
+
+Il testo di partenza contiene anche tag abbreviati, contenenti solo numeri, il che significa che la loro funzione non è immediatamente ovvia. Puoi passare su questi tag per vedere esattamente quale scopo assolvono.
+
+Nell'esempio seguente, passando con il mouse sul <0> tag puoi vedere che rappresenta `` e contiene un frammento di codice, quindi il contenuto non va tradotto.
+
+
+
+## Formule/abbreviazioni brevi vs. complete {#short-vs-full-forms}
+
+Nel sito web sono usate molte abbreviazioni, es. dapp, NFT, DAO, DeFi, ecc. Queste abbreviazioni sono comunemente usate in inglese e gran parte dei visitatori del sito web ne è a conoscenza.
+
+Dal momento che di solito non esistono traduzioni attestate in altre lingue, il modo migliore per trattare questi termini e altri simili è quello di fornire una traduzione descrittiva della forma estesa e aggiungere l'abbreviazione inglese tra parentesi.
+
+Non tradurre queste abbreviazioni, poiché la maggior parte delle persone non le conoscerebbe e le versioni localizzate non avrebbero molto senso per la maggior parte dei visitatori.
+
+Esempio di come tradurre le dapp:
+
+- Applicazioni decentralizzate (dApp) → _Tradotto integralmente (abbreviazione tra parentesi)_
+
+## Termini senza traduzioni attestate {#terms-without-established-translations}
+
+Alcuni termini potrebbero non avere traduzioni attestate in altre lingue e sono ampiamente noti con il termine originale in inglese. Tali termini includono principalmente concetti recenti, come Proof of Work, Proof of Stake, Beacon Chain, staking, ecc.
+
+Sebbene la traduzione di questi termini possa sembrare innaturale, poiché la versione inglese è comunemente usata anche in altre lingue, si consiglia vivamente di tradurli.
+
+Traducendoli, sentiti libero di essere creativo, usa traduzioni descrittive o semplicemente traducili in maniera letterale.
+
+**Il motivo per cui la maggior parte dei termini dovrebbe essere tradotta, invece di lasciarne alcuni in inglese, è il fatto che questa nuova terminologia diventerà più diffusa in futuro, man mano che più persone inizieranno a utilizzare Ethereum e le relative tecnologie. Se vogliamo coinvolgere più persone da tutto il mondo in questo spazio, dobbiamo fornire una terminologia comprensibile in quante più lingue possibili, anche se dobbiamo crearla noi stessi.**
+
+## Pulsanti e CTA {#buttons-and-ctas}
+
+Il sito web contiene numerosi pulsanti, che dovrebbero essere tradotti in modo diverso dagli altri contenuti.
+
+Il testo del pulsante può essere identificato visualizzando gli screenshot contestuali, associati a gran parte delle stringhe, o controllando il contesto nell'editor, che include l'espressione "button".
+
+Le traduzioni dei pulsanti dovrebbero essere il più possibile brevi, onde evitare mancate corrispondenze di formattazione. Inoltre, le traduzioni dei pulsanti dovrebbero essere in forma imperativa, ovvero indicare un comando o una richiesta.
+
+
+
+## Tradurre per l'inclusività {#translating-for-inclusivity}
+
+I visitatori di ethereum.org provengono da tutto il mondo e da contesti sociali diversi. La lingua sul sito web deve quindi essere neutrale, accogliente per tutti e non esclusiva.
+
+A tale riguardo, un aspetto importante è la neutralità di genere. Questa è facilmente ottenibile usando uno stile formale ed evitando parole specifiche per il genere nelle traduzioni.
+
+Un'altra forma di inclusività consiste nel tentare di tradurre per un pubblico globale, non specifico a paesi, razze o regioni.
+
+Infine, la lingua dovrebbe essere adatta a qualsiasi pubblico e fascia di età.
+
+## Traduzioni specifiche in base alla lingua {#language-specific-translations}
+
+Quando si traduce è importante seguire le regole grammaticali, le convenzioni e la formattazione utilizzate nella propria lingua, anziché copiare quelle del testo originale. Il testo d'origine segue le regole e convenzioni della grammatica inglese, non applicabili a molte altre lingue.
+
+Dovresti essere a conoscenza delle regole per la tua lingua e tradurre di conseguenza. Se ti occorre aiuto, contattaci e ti aiuteremo a trovare risorse utili su come questi elementi dovrebbero essere usati nella tua lingua.
+
+Alcuni esempi di aspetti a cui prestare particolare attenzione:
+
+### Punteggiatura, formattazione {#punctuation-and-formatting}
+
+**Maiuscole/minuscole**
+
+- Esistono notevoli differenze nell'uso delle maiuscole/minuscole nelle varie lingue.
+- In inglese, è comune usare la maiuscola per tutte le parole di titoli e nomi, mesi e giorni, nomi di lingue, festività, ecc. In molte altre lingue, questo è sbagliato dal punto di vista grammaticale, in quanto vigono regole diverse sull'uso delle maiuscole/minuscole.
+- Alcune lingue hanno anche regole sull'uso della maiuscola per pronomi personali, sostantivi e alcuni aggettivi, che in inglese vengono scritti con l'iniziale minuscola.
+
+**Spaziatura**
+
+- Le regole ortografiche definiscono l'uso degli spazi per ogni lingua. Poiché gli spazi sono usati ovunque, queste regole sono alcune delle più distinte e gli spazi sono alcuni degli elementi maggiormente tradotti in modo improprio.
+- Alcune differenze comuni nella spaziatura tra l'inglese e altre lingue:
+ - Spazio prima dell'unità di misura e delle valute (es. USD, EUR, kB, MB)
+ - Spazio prima dei segni di grado (es. °C, ℉)
+ - Spazio prima di certi segni di punteggiatura, specialmente i puntini di sospensione (…)
+ - Spazio prima e dopo le barre (/)
+
+**Elenchi**
+
+- Ogni lingua ha una diversa e complessa serie di regole per la redazione di elenchi. Questi possono differire significativamente rispetto all'inglese.
+- In alcune lingue, la prima parola di ogni nuova riga deve essere maiuscola, mentre in altre le nuove righe devono iniziare con lettere minuscole. Molte lingue hanno anche regole differenti sull'uso delle maiuscole/minuscole negli elenchi, a seconda della lunghezza di ogni riga.
+- Lo stesso si applica alla punteggiatura dei vari punti dell'elenco. La punteggiatura finale negli elenchi può essere un punto (**.**), una virgola (**,**) o un punto e virgola (**;**), a seconda della lingua.
+
+**Virgolette**
+
+- Le varie lingue usano tipi diversi di virgolette. Copiare semplicemente le virgolette inglesi dal segmento originale spesso è sbagliato.
+- Tra i tipi più comuni di virgolette troviamo:
+ - „testo di esempio“
+ - ‚testo di esempio’
+ - »testo di esempio«
+ - “testo di esempio”
+ - ‘testo di esempio’
+ - «testo di esempio»
+
+**Trattini lunghi e corti**
+
+- In inglese si utilizza un trattino corto (-) per unire parole o parti diverse di una parola e un trattino lungo (–) per indicare un intervallo o una pausa.
+- Molte lingue hanno regole diverse per l'uso di trattini corti e lunghi, che dovrebbero essere osservate.
+
+### Formati {#formats}
+
+**Numeri**
+
+- La differenza principale nella scrittura dei numeri nelle varie lingue riguarda il separatore usato per decimali e migliaia. Per le migliaia, può essere un punto, una virgola o uno spazio. Analogamente, alcune lingue usano un punto decimale, mentre altre usano una virgola.
+ - Alcuni esempi di grandi numeri:
+ - Inglese – **1,000.50**
+ - Spagnolo – **1.000,50**
+ - Francese – **1 000,50**
+- Un'altra considerazione importante sulla traduzione dei numeri riguarda il segno percentuale. Può essere scritto in diversi modi: **100%**, **100 %** o **%100**.
+- Infine, i numeri negativi possono esser scritti diversamente, a secnda della lingua: -100, 100-, (100) o [100].
+
+**Date**
+
+- Traducendo le date, esistono numerose considerazioni e differenze basate sulla lingua. Ciò include il formato della data, il separatore, l'uso di maiuscole e minuscole e gli zeri iniziali. Esistono anche differenze tra le date scritte per esteso e le date numeriche.
+ - Alcuni esempi di formati di data diversi:
+ - Inglese UK (gg/mm/aaaa) – 1st January, 2022
+ - Inglese US (mm/gg/aaaa) – January 1st, 2022
+ - Cinese (aaaa-mm-gg) – 2022 年 1 月 1 日
+ - Francese (gg/mm/aaaa) – 1er janvier 2022
+ - Italiano (gg/mm/aaaa) – 1º gennaio 2022
+ - Tedesco (gg/mm/aaaa) – 1. Januar 2022
+
+**Valute**
+
+- Tradurre le valute può essere complicato, a causa dei diversi formati, convenzioni e conversioni. Come regola generale, consigliamo di lasciare la valuta riportata nel testo originale. Puoi aggiungere la tua valuta locale e la conversione tra parentesi, per comodità del lettore.
+- Le principali differenze nella scrittura delle valute nelle varie lingue riguardano il posizionamento dei simboli, l'uso di virgole o punti decimali, la spaziatura e l'uso di abbreviazioni o simboli.
+ - Posizionamento del simbolo: $100 o 100$
+ - Virgole vs. punti decimali: 100,50$ o 100.50$
+ - Spaziatura: 100$ o 100 $
+ - Abbreviazioni vs. simboli: 100 $ o 100 USD
+
+**Unità di misura**
+
+- Come regola generale, consigliamo di lasciare le unità di misura come appaiono nel testo originale. Se il tuo paese usa un sistema differente, puoi includere la conversione tra parentesi.
+- Oltre alla localizzazione delle unità di misura, è importante notare anche il diverso trattamento di tali unità nelle varie lingue. La differenza principale riguarda la spaziatura tra numero e unità, che può variare in base alla lingua. Esempi di ciò includono: 100kB o 100 kB, 50°F o 50 °F.
+
+## Conclusioni {#conclusion}
+
+Tradurre ethereum.org è una grande opportunità per conoscere i diversi aspetti di Ethereum.
+
+Quando traduci, cerca di non andare troppo in fretta. Prendila con calma e goditi l'esperienza!
+
+Grazie per aver partecipato al Programma di Traduzione e per averci aiutato a rendere il sito web accessibile a un pubblico più ampio. La comunità di Ethereum è globale e siamo felici che tu ne faccia parte!
diff --git a/public/content/translations/it/dao/index.md b/public/content/translations/it/dao/index.md
new file mode 100644
index 00000000000..47f38166d76
--- /dev/null
+++ b/public/content/translations/it/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Organizzazioni autonome decentralizzate (DAO)
+description: Una panoramica delle DAO su Ethereum
+lang: it
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 3
+image: /use-cases/dao-2.png
+alt: Rappresentazione di una votazione DAO su una proposta.
+summaryPoint1: Community posseduta dai membri, prive di leadership centralizzata.
+summaryPoint2: Un modo sicuro per collaborare con sconosciuti su Internet.
+summaryPoint3: Un luogo sicuro per impegnare fondi in una causa specifica.
+---
+
+## Cosa sono le DAO? {#what-are-daos}
+
+Una DAO è un'organizzazione posseduta collettivamente e governata dalla blockchain, che opera per realizzare una missione condivisa.
+
+Le DAO ci consentono di lavorare con persone con la stessa mentalità provenienti da tutto il mondo, senza doversi fidare di un capo benevolo, per la gestione di fondi od operazioni. Non esiste alcun CEO che possa spendere i fondi secondo i propri capricci, o CFO che possa manipolare i libri contabili. Invece, le regole basate sulla blockchain, integrate nel codice, definiscono il funzionamento dell'organizzazione e come vengono spesi i fondi.
+
+Contengono delle tesoriere integrate, a cui nessuno ha l'autorità di accedere senza l'approvazione del gruppo. Le decisioni sono governate da proposte e votazioni, per assicurarsi che tutti nell'organizzazione abbiano voce in capitolo, e che tutto si verifichi in modo trasparente sulla catena.
+
+## Perché abbiamo bisogno delle DAO? {#why-dao}
+
+Per avviare un'organizzazione con altre persone quando sono in ballo finanziamenti e denaro occorre riporre molta fiducia nei propri compagni di avventura. Ma è difficile fidarsi di qualcuno con cui hai interagito solo tramite Internet. Con le DAO non occorre fidarsi di nessun altro nel gruppo, bensì solamente del codice DAO, che è al 100% trasparente e verificabile da chiunque.
+
+Ciò apre molte opportunità di cooperazione e coordinamento a livello globale.
+
+### Un confronto {#dao-comparison}
+
+| DAO | Organizzazione tradizionale |
+| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| Di solito orizzontale e completamente democratizzata. | Di solito gerarchica. |
+| Votazione richiesta dai membri per l'implementazione di eventuali modifiche. | A seconda della struttura, le modifiche possono essere richieste da una sola parte oppure sottoposte a votazione. |
+| Conteggio dei voti e implementazione automatica del risultato senza intermediari. | Se la votazione è consentita, i voti sono conteggiati internamente e l'esito della votazione deve essere gestito manualmente. |
+| I servizi offerti vengono gestiti automaticamente in modo decentralizzato (ad esempio distribuzione di fondi filantropici). | Richiede manipolazione umana o automazione controllata centralmente, suscettibile di manipolazione. |
+| Tutte le attività sono trasparenti e completamente pubbliche. | L'attività è tipicamente privata e limitata al pubblico. |
+
+### Esempi di DAO {#dao-examples}
+
+Per aiutarti a comprendere meglio, ecco alcuni esempi di come potresti utilizzare una DAO:
+
+- Beneficenza – potresti accettare donazioni da chiunque nel mondo e votare su quali cause finanziare.
+- Proprietà collettiva – potresti acquistare beni fisici o digitali e i membri possono votare su come usarli.
+- Iniziative e sovvenzioni – potresti creare un fondo di rischio che riunisce capitale di investimento e vota sulle iniziative da finanziare. Il denaro rimborsato potrebbe essere successivamente ridistribuito tra i membri del DAO.
+
+## Come funziona la DAO? {#how-daos-work}
+
+La spina dorsale di una DAO è il suo contratto intelligente, che definisce le regole dell'organizzazione e detiene il patrimonio del gruppo. Una volta che il contratto è attivo su Ethereum, nessuno può modificare le regole se non tramite voto. Nessuno può fare qualcosa che non sia previsto dalle regole e dalla logica del codice. E poiché anche il patrimonio è definito dal contratto intelligente, ciò significa che nessuno può spendere il denaro senza l'approvazione del gruppo. Questo significa che le DAO non hanno bisogno di un'autorità centrale. Al contrario, il gruppo prende le decisioni collettivamente e i pagamenti sono autorizzati automaticamente quando le proposte sono approvate dal voto.
+
+Ciò è possibile perché i contratti intelligenti sono a prova di manomissione, una volta che sono attivi su Ethereum. Non è possibile modificare il codice (le regole della DAO) senza che gli altri lo notino, perché tutto è pubblico.
+
+
+
+
+
+
+
+
+
+
+BASEFEE
da un blocco0xEF
+
+
+
+
+
+CHAINID
.
+
+
+REVERT
.STATICCALL
, consentendo chiamate che non modificano lo stato ad altri contratti.
+
+
+EXP
: complica il rallentamento della rete tramite operazioni del contratto computazionalmente costose.Cos'è stato l'ETH?
+
+
+
+
+Per ulteriori informazioni, consulta questo post del blog di Tim Beiko su Come La Fusione Influenza il Livello d'Applicazione di Ethereum.
+
+
+
+
+Ora, invece che da 1 a 12, immagina che l'orologio vada da 0 a N (il numero totale di account validatore registrati sul livello del consenso, oltre 500.000 a gennaio 2023).
+La lancetta dell'orologio punta al validatore successivo, che dev'essere controllato per verificare la presenza di prelievi idonei. Inizia a 0 e procede controllando tutti i conti, senza saltarne nessuno. Quando viene raggiunto l'ultimo validatore, il ciclo continua ricominciando dall'inizio.
+`nonce`
`
+
+`` - _コードスニペットの開始タグく_
+
+nonce - _翻訳しないテキスト_
+
+`
` - _終了タグ_
+
+
+
+ソーステキストに数値のみの短縮タグも含まれている場合があり、そのタグの意味がすぐには分からない場合があります。 これらのタグにカーソルを合わせると、タグの意味や機能を確認できます。
+
+以下の例では、 <0> タグにカーソルを合わせると、 ``が表示され、コードスニペットであることが分かります。そのため、これらのタグ内のテキストは翻訳しないでください。
+
+
+
+## 短縮語/略語 {#short-vs-full-forms}
+
+本ウェブサイトでは dapp、NFT、DAO、DeFi など多くの略語が使用されています。 これらの略語は英語で一般的に使用されており、ウェブサイトの多くの訪問者はそれらが何を意味するのか知っています。
+
+これらの用語は、他の言語で確立された翻訳がないことが多いため、省略していない原語をフルで翻訳し、英語の略語を括弧で追加します。
+
+括弧で記載する略語は翻訳しないでください。ほとんどの人は見慣れ無いでしょうし、翻訳されると多くの訪問者にとって、逆に意味をなさなくなってしまいます。
+
+「dapp」の翻訳例:
+
+- Decentralized application (dapp) → _非省略形の用語の翻訳(英語の略語)_
+
+## 確立された翻訳のない用語 {#terms-without-established-translations}
+
+いくつかの用語は、他の言語では確立された用語がない場合があり、元の英語の用語の方が広く知られていることがあります。 このような用語には、主に、proof-of-work、proof-of-stake、Beacon Chain、staking などを含む比較的新しい概念のものが含まれます。
+
+英語版は他の言語でも使われているため、これらの用語を翻訳すると不自然さを感じることがありますが、 翻訳することを強く推奨します。
+
+それらを翻訳するときは、クリエイティブな翻訳、説明的な翻訳、もしくは単に文字通りに翻訳します。
+
+**大半の用語を英語ではなく、各言語に翻訳するのは、 イーサリアムと関連技術がより多くの人々に使われるにつれて、これらの新しい用語が将来、より広く普及するであろうという考えによるものです。 世界中のより多くの人々にイーサリアムを使用してもらうため、たとえ造語であっても可能な限り多くの言語で理解できる用語を提供する必要があります。**
+
+## ボタンと CTA {#buttons-and-ctas}
+
+本ウェブサイトには多数のボタンが含まれており、他のコンテンツとは異なる翻訳が必要です。
+
+ボタンのテキストは、ほとんどの文字列同様、コンテキストのスクリーンショット、またはエディタのコンテキストで確認することができます。(エディタのコンテキストに「button」と記載)。
+
+ボタンの翻訳は、書式の不一致を防ぐためにできるだけ短くする必要があります。 さらに、ボタンの翻訳は、コマンドやリクエストを示すものでなければなりません。
+
+
+
+## 包括性を踏まえた翻訳 {#translating-for-inclusivity}
+
+ethereum.org には、世界中から、さまざまな背景を持った訪問者が来ます。 そのため、ウェブサイトは中立的、かつ非排他的、すべての人を歓迎するものである必要があります。
+
+これの重要な側面は、ジェンダーの中立性です。 フォーマルな呼称を用いること、訳語に性別を特定するような言葉の使用は、避けてください。
+
+もうひとつの包括性は、国や人種、地域に特有したものではなく、グローバルな読者に向けて翻訳しようとすることです。
+
+最後に、すべての訪問者と年齢層に適している必要があります。
+
+## 言語別の翻訳 {#language-specific-translations}
+
+翻訳するときは、ソースからコピーするのではなく、翻訳言語の文法ルール、規定、書式に従うことが重要です。 ソースは英語の文法ルールと規則に従っており、他の多くの言語には当てはまりません。
+
+自分の言語のルールを意識し、それに応じて翻訳する必要があります。 サポートが必要な際は、ご連絡ください。あなたの翻訳言語で、これらがどのように使われるべきかについて調べる上でサポートをします。
+
+特に注意すべき事例:
+
+### 句読点、書式設定 {#punctuation-and-formatting}
+
+**大文字表記**
+
+- 大文字表記は、言語により大きな違いがあります。
+- 英語では、タイトルや名前、月日、言語名、休日などですべての単語を大文字にするのが一般的です。 他の多くの言語では大文字・小文字の規則が異なるため、これは必ずしも文法的に正しくありません。
+- 人称代名詞や名詞、特定の形容詞を大文字にするルールがある言語もありますが、これらは英語では必ずしも大文字になりません。
+
+**スペース**
+
+- 各言語のスペースの使用については、正書法に従ってください。 スペースはあらゆるところで使われているため、最も目立つものであり、またスペースは最も誤りが多い点の一つです。
+- 英語と他の言語のスペースの使用の一般的な違い:
+ - 単位と通貨(例: USD、EUR、kB、MB)の前のスペース
+ - 特殊記号の前のスペース(例:°C、°F)
+ - 句読点の前のスペース、特にエリプシス(…)の前のスペース
+ - スラッシュ(/)の前後のスペース
+
+**箇条書き**
+
+- 箇条書きに関して、言語により多様で複雑な規則があります。 これらは英語とは大幅に異なる場合があります。
+- ある言語では新しい行の最初の単語を大文字、またその他の言語では新しい行は小文字で始める必要があります。 各行の長さに応じて、箇条書きの大文字に関するルールも多くあります。
+- 同様のことが行項目の句読点にも当てはまります。 箇条書きの終止符は言語により、句点(**。**)、読点(**、**)、セミコロン(**;**)である場合があります。
+
+**引用符**
+
+- 言語により、引用符が異なります。 ソースから英語の引用符をコピーするだけでは誤りとなる場合があります。
+- 最も一般的な種類の引用符には以下のものがあります。
+ - „サンプルテキスト“
+ - ‚サンプルテキスト’
+ - »サンプルテキスト«
+ - “サンプルテキスト”
+ - ‘サンプルテキスト’
+ - «サンプルテキスト»
+
+**ハイフンとダッシュ**
+
+- 英語では、単語間や単語の異なる部分を結合するためにハイフン(-)が使用されます。対して、範囲を示したり、中断を入れるためにダッシュ(-)が使用されます。
+- 言語により、ハイフンとダッシュの使用ルールが異なります。
+
+### フォーマット {#formats}
+
+**数字**
+
+- 数字の表記に関する言語による主な違いは、小数と 3 桁の区切りに使用される区切り文字です。 千の単位の場合、ピリオド、カンマ、スペースが使われることがあります。 同様に、小数点を使用する言語もあれば、小数点にコンマを使用する言語もあります。
+ - 数字の表記の例:
+ - 英語 ー **1,000.50**
+ - スペイン語 ー **1.000,50**
+ - フランス語 ー **1,000,50**
+- 数字を翻訳する際、気を付けるべきもう一つ重要な事項は、パーセント記号です。 **100%**、**100 %**または**%100**と異なる表記方法があります。
+- 最後に、マイナスの数字は言語により、 -100、100-、(100)、または[100]と表記方法が異なります。
+
+**日付**
+
+- 日付の翻訳は、言語により、いくつかの検討事項や違いがあります。 日付のフォーマット、区切り文字、大文字、先頭のゼロなどです。 全角と半角の違いもあります。
+ - 日付のフォーマット例:
+ - イギリス英語(dd/mm/yyyy) - 1st January, 2022
+ - アメリカ英語(mm/dd/yyyy) - January 1st, 2022
+ - 中国語(yyyy-mm-dd) - 2022 年 1 月 1 日
+ - フランス語(dd/mm/yyyy) - 1er janvier 2022
+ - イタリア語(dd/mm/yyyy) - 1o gennaio 2022
+ - ドイツ語(dd/mm/yyyy) - 1. Januar 2022
+
+**通貨**
+
+- 通貨の翻訳は、フォーマット、規則、換算により困難な場合があります。 原則として、通貨はソースと同じにしてください。 読者が分かりやすいよう、括弧でローカルの通貨と換算した金額を追加しても構いません。
+- 通貨の表記に関する言語間の主な違いは、記号の位置、小数点または小数点にコンマを使用、スペース、および記号または略語での表記があります。
+ - 記号の位置: $100または100$
+ - 小数点にコンマを使用、または小数点: 100,50$または100.50$
+ - スペース: 100$または 100 $
+ - 記号または略語: 100 $または 100 USD
+
+**測定単位**
+
+- 原則として、単位はソースと同じにします。 あなたの国が別の単位を使用している場合は、括弧内に変換した数値と単位を記載することができます。
+- 測定単位以外にも、言語によるこれらの単位の表記方法の違いについても注意することも重要です。 主には、数字と単位のスペースが言語により異なります。 例: 100kB と 100 kB、 50ºF と 50 ºF など
+
+## まとめ {#conclusion}
+
+ethereum.org を翻訳することでイーサリアムのさまざまな側面について学ぶことができます。
+
+翻訳するときは、慌てないようにしてください。 また気負わず、気楽に楽しむようにしてください。
+
+ウェブサイトをより多くの方にご利用いただけるよう、翻訳プログラムにご貢献いただき、ありがとうございます。 イーサリアムコミュニティはグローバルです。あなたをコミュニティの一員として迎え入れることを嬉しく思います。
diff --git a/public/content/translations/ja/dao/index.md b/public/content/translations/ja/dao/index.md
new file mode 100644
index 00000000000..a3f4955b5c2
--- /dev/null
+++ b/public/content/translations/ja/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: 分散型自律組織(DAO)
+description: イーサリアムにおける分散型自律組織(DAO)の概要
+lang: ja
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: 提案に対する分散型自律組織(DAO)投票
+summaryPoint1: 中央集権的な制御がない、メンバー所有のコミュニティ
+summaryPoint2: インターネットの見知らぬ人と協力する安全な方法
+summaryPoint3: 特定の目的に資金を委ねるのに安全な場所
+---
+
+## 自律分散組織(DAO)とは {#what-are-daos}
+
+分散型自律組織(DAO)とは、共通の目的のために集団が共同で所有し、ブロックチェーンで管理された組織です。
+
+分散型自律組織(DAO)は資金や運営の管理において、誰かを信用することなく、世界中の同じ志を持つ人々と共に働くことを可能します。 気まぐれに資金を使い込む CEO はいませんし、帳簿を操作できる CFO もいません。 誰かを依存・信用するのではなく、ブロックチェーンベースのルールがコード化され、組織の運営や資金の使われ方を定義しています。
+
+グループの承認なしには誰もアクセスできない資金が組み込まれています。 意思決定は、提案と投票によって行われ、組織内の誰もが発言権を持つことが保障されています。また、何事においてもオンチェーン上で行われるため透明性が確保されています。
+
+## 分散型自律組織(DAO)が必要な理由 {#why-dao}
+
+組織を誰かと一緒に組織を立ち上げるには、資金やお金が関わるため、相手との信頼関係が必要になります。 しかし、インターネット上でしか交流のない人を信用するのは難しいと思います。 分散型自律組織(DAO)では、グループ内の他の誰かを信用する必要はなく、100%透明で誰でも検証可能なコードだけを信用すれば大丈夫です。
+
+これにより、グローバルなコラボレーションやコーディネーションに新たな可能性が広がりました。
+
+### 比較 {#dao-comparison}
+
+| 分散型自律組織(DAO) | 従来の組織 |
+| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| 通常はフラットな組織で、完全に民主化 | 通常は階層的 |
+| 変更を実行するには、メンバーによる投票が必要 | 組織構造によっては、単独の当事者から変更が要求されることがあり、または投票が行われる場合がある |
+| 投票は集計され、結果は信頼できる仲介者なしに自動的に実行される | 投票が可能な場合、投票は内部で集計され、投票結果は手動での処理が必要 |
+| 提供されるサービスは、自動的に分散化された方法で処理される(例えば慈善資金の分配) | 人間による処理、または集中管理された自動化を必要とし、改ざんされるおそれがある |
+| すべてのアクティビティは透明で完全に公開 | 通常、アクティビティは非公開で、一般には非公開 |
+
+### 分散型自律組織(DAO)の事例 {#dao-examples}
+
+もう少し理解を深められるように、分散型自律組織(DAO)の使用方法についていくつか例をご紹介します。
+
+- 慈善事業 – 世界中の誰からでも寄付を受け付け、資金の使い道を投票にて決定可能。
+- 共同所有 – 物理的またはデジタル資産を購入し、メンバーは資産の活用方法について投票できる。
+- ベンチャーキャピタルと助成 - 投資資金をプールし、投票により支援先ベンチャーを選択、ベンチャーファンドを作成可能。 返済金は後に分散型自律組織(DAO)のメンバー間で再配分できる。
+
+## 分散型自律組織(DAO)の仕組み {#how-daos-work}
+
+組織のルールが定義され、グループの資産を保有するスマートコントラクトが、分散型自律組織(DAO)のバックボーンです。 このスマートコントラクトがイーサリアム上で稼働し始めると、投票以外では誰もルールを変更できません。 もし誰かがコードのルールやロジックでカバーされていないことを試みても失敗に終わります。 また、資産はスマートコントラクトによって定義されているため、グループの承認なしには誰も組織の資金を使うことができません。 つまり、分散型自律組織(DAO)は中央集権を必要とせず、 グループが集合的に決定を下し、投票が可決されると支払いが自動的に承認されます。
+
+これが可能なのは、スマートコントラクトがイーサリアム上で稼働すると、改ざんができないためです。 すべてが公開されているので、コード(分散型自律組織のルール)を誰にも気づかれずに、変更することはできません。
+
+
ETH2とは何ですか?
+
+
+
+
+詳細については、Tim Beiko によるブログ投稿マージがイーサリアムのアプリケーションレイヤーに与える影響をご覧ください。
+
+
+
+
+
+Te dwa obrazy w dużym stopniu oddają istotę GraphQL. Za pomocą zapytania po prawej stronie możemy zdefiniować dokładnie, jakich danych chcemy, dzięki czemu otrzymujemy wszystko w jednym żądaniu i nic więcej niż dokładnie to, czego potrzebujemy. Serwer GraphQL obsługuje pobieranie wszystkich wymaganych danych, dzięki czemu jest niezwykle łatwy w użyciu dla użytkownika frontendu. [To dobre wyjaśnienie](https://www.apollographql.com/blog/graphql-explained-5844742f195e/), jak dokładnie serwer obsługuje zapytanie, jeśli jesteś zainteresowany.
+
+Teraz, mając tę wiedzę, w końcu wskoczmy w przestrzeń blockchain i The Graph.
+
+## Co to jest The Graph? {#what-is-the-graph}
+
+Blockchain to zdecentralizowana baza danych, ale w przeciwieństwie do tego, co zwykle ma miejsce, nie mamy języka zapytań dla tej bazy danych. Rozwiązania do odzyskiwania danych są bolesne lub całkowicie niemożliwe. The Graph to zdecentralizowany protokół do indeksowania i odpytywania danych blockchain. I mogłeś się domyślić, że używa GraphQL jako języka zapytań.
+
+
+
+Przykłady są zawsze najlepsze, aby coś zrozumieć, więc użyjmy The Graph dla naszego przykładu GameContract.
+
+## Jak stworzyć Subgraph {#how-to-create-a-subgraph}
+
+Definicja sposobu indeksowania danych nazywana jest subgraph. Wymaga trzech komponentów:
+
+1. Manifest (subgraf.yaml)
+2. Schemat (schema.graphql)
+3. Mapping (mapping.ts)
+
+### Manifest (subgraf.yaml) {#manifest}
+
+Manifest jest naszym plikiem konfiguracyjnym i definiuje:
+
+- które inteligentne kontrakty indeksować (adres, sieć, ABI...)
+- jakich zdarzeń nasłuchiwać
+- inne rzeczy do słuchania, takie jak wywołania funkcji lub bloki
+- wywoływane funkcje mapujące (zobacz mapping.ts poniżej)
+
+Tutaj możesz zdefiniować wiele kontraktów i programów obsługi. Typowa konfiguracja miałaby folder podrzędny wewnątrz projektu Truffle/Hardhat z własnym repozytorium. Wtedy możesz łatwo odwołać się do ABI.
+
+Dla wygody możesz również użyć narzędzia szablonu, takiego jak wąsy. Następnie tworzysz subgraph.template.yaml i wstawiasz adresy oparte na najnowszych wdrożeniach. Aby zapoznać się z bardziej zaawansowaną przykładową konfiguracją, zobacz na przykład [Repozytorium subgrafów Aave](https://github.com/aave/aave-protocol/tree/master/thegraph).
+
+A pełną dokumentację można zobaczyć tutaj: https://thegraph.com/docs/define-a-subgraph#the-subgraph-manifest.
+
+```yaml
+specVersion: 0.0.1
+description: Placing Bets on Ethereum
+repository: - GitHub link -
+schema:
+ file: ./schema.graphql
+dataSources:
+ - kind: ethereum/contract
+ name: GameContract
+ network: mainnet
+ source:
+ address: '0x2E6454...cf77eC'
+ abi: GameContract
+ startBlock: 6175244
+ mapping:
+ kind: ethereum/events
+ apiVersion: 0.0.1
+ language: wasm/assemblyscript
+ entities:
+ - GameContract
+ abis:
+ - name: GameContract
+ file: ../build/contracts/GameContract.json
+ eventHandlers:
+ - event: PlacedBet(address,uint256,bool)
+ handler: handleNewBet
+ file: ./src/mapping.ts
+```
+
+### Schemat (schema.graphql) {#schema}
+
+Schematem jest definicja danych GraphQL. Pozwoli to na zdefiniowanie istniejących obiektów i ich typów. Obsługiwane typy z wykresu to
+
+- Bajty
+- ID
+- Tekst
+- Boolean
+- Wewnątrz
+- BigInt
+- BigDecimal
+
+Możesz również używać obiektów jako typu do definiowania relacji. W naszym przykładzie definiujemy relacje od gracza do zakładów. ! oznacza, że wartość nie może być pusta. Pełną dokumentację można zobaczyć tutaj: https://thegraph.com/docs/define-a-subgraph#the-graphql-schema.
+
+```graphql
+type Bet @entity {
+ id: ID!
+ player: Player!
+ playerHasWon: Boolean!
+ time: Int!
+}
+
+type Player @entity {
+ id: ID!
+ totalPlayedCount: Int
+ hasWonCount: Int
+ hasLostCount: Int
+ bets: [Bet]!
+}
+```
+
+### Mapping (mapping.ts) {#mapping}
+
+Plik mapowania na wykresie definiuje nasze funkcje, które przekształcają przychodzące zdarzenia w podmioty. Jest napisany w AssemblyScript, podzbiorze Typescript. Oznacza to, że może być skompilowany w WASM (WebAssembly) dla bardziej wydajnego i przenośnego wykonywania mapowania.
+
+Musisz zdefiniować każdą funkcję nazwaną w pliku subgraph.yaml, więc w naszym przypadku potrzebujemy tylko jednego: handleNewBet. Najpierw próbujemy załadować obiekt Gracza z adresu nadawcy w postaci identyfikatora. Jeśli nie istnieje, tworzymy nową jednostkę i wypełniamy ją wartościami początkowymi.
+
+Następnie tworzymy nową jednostkę zakładu. Identyfikatorem dla tego będzie event.transaction.hash.toHex() + "-" + event.logIndex.toString() zapewniający zawsze unikalną wartość. Używanie samego skrótu nie wystarczy, ponieważ ktoś może kilkakrotnie wywoływać funkcję placeBet w jednej transakcji za pośrednictwem inteligentnej umowy.
+
+Na koniec możemy zaktualizować podmiot Player, który będzie zawierał wszystkie dane. Tablice nie mogą być wypychane bezpośrednio, ale muszą zostać zaktualizowane, jak pokazano tutaj. Używamy identyfikatora, aby odnieść się do zakładu. A .save() jest wymagane na końcu do przechowywania obiektu.
+
+Pełną dokumentację można zobaczyć tutaj: https://thegraph.com/docs/define-a-subgraph#writing-mappings. Możesz także dodać dane wyjściowe rejestrowania do pliku mapowania, zobacz [tutaj](https://thegraph.com/docs/assemblyscript-api#api-reference).
+
+```typescript
+import { Bet, Player } from "../generated/schema"
+import { PlacedBet } from "../generated/GameContract/GameContract"
+
+export function handleNewBet(event: PlacedBet): void {
+ let player = Player.load(event.transaction.from.toHex())
+
+ if (player == null) {
+ // create if doesn't exist yet
+ player = new Player(event.transaction.from.toHex())
+ player.bets = new Array
+Teraz zamiast od 1 do 12, wyobraź sobie, że zegar ma od 0 do N (całkowita liczba kont walidatorów, które kiedykolwiek zostały zarejestrowane w warstwie konsensusu, ponad 500 000 — stan na styczeń 2023 r.).
+Wskazówka na zegarze wskazuje następny walidator, który należy sprawdzić pod kątem kwalifikujących się wypłat. Zaczyna od 0 i postępuje dookoła, nie pomijając żadnego konta. Po osiągnięciu ostatniego walidatora cykl jest kontynuowany od początku.
+`nonce`
`
+
+`` — _Tag de abertura, que contém um trecho de código_
+
+nonce — _Texto não traduzível_
+
+`
` — _Tag de fechamento_
+
+
+
+O texto original também contém tags abreviadas, que contêm apenas números, o que significa que sua função não é imediatamente óbvia. Você pode passar o mouse sobre essas tags para ver exatamente para qual função elas servem.
+
+No exemplo abaixo, ao passar o mouse sobre a <0> tag mostra que ela representa `` e contém um trecho de código. Portanto, o conteúdo dentro dessas tags não deve ser traduzido.
+
+
+
+## Formas/abreviaturas curtas vs. completas {#short-vs-full-forms}
+
+Existem muitas abreviações usadas no site, por exemplo, dapps, NFT, DAO, DeFi, etc. Essas abreviações são comumente usadas em inglês e a maioria dos visitantes do site estão familiarizados com elas.
+
+Como elas geralmente não têm traduções estabelecidas em outros idiomas, a melhor maneira de abordar esses e outros termos semelhantes é fornecer uma tradução descritiva do formulário completo e adicionar a abreviação inglesa em parênteses.
+
+Não traduza essas abreviaturas, já que a maioria das pessoas não estaria familiarizada com elas e as versões localizadas não fariam muito sentido para a maioria dos visitantes.
+
+Exemplo de como traduzir dapps:
+
+- Aplicativos descentralizados (dapps) → _Formulário completo traduzido (abreviação em inglês entre parênteses)_
+
+## Termos sem traduções estabelecidas {#terms-without-established-translations}
+
+Alguns termos podem não ter traduções estabelecidas em outros idiomas e são mais conhecidos pelo termo original em inglês. Esses termos incluem principalmente conceitos novos, como proof-of-work, proof-of-stake, Beacon Chain, staking, etc.
+
+Embora traduzir esses termos possa parecer não natural, já que a versão em inglês é comumente usada também em outros idiomas, é altamente recomendado que eles sejam traduzidos.
+
+Ao traduzi-los, sinta-se livre para ser criativo, use traduções descritivas ou simplesmente traduza-os literalmente.
+
+**A razão pela qual a maioria dos termos deveria ser traduzida, em vez ser deixada em inglês, é que essa nova terminologia se tornará mais difundida no futuro, à medida que mais pessoas começarem a usar o Ethereum e tecnologias relacionadas. Se queremos envolver mais pessoas de todo o mundo nesse espaço, precisamos fornecer uma terminologia compreensível no maior número possível de idiomas, mesmo que precisemos criá-la nós mesmos.**
+
+## Botões e chamadas para a ação (CTAs) {#buttons-and-ctas}
+
+O site contém vários botões, que devem ser traduzidos de forma diferente dos outros tipos de conteúdo.
+
+O texto do botão pode ser identificado visualizando o contexto das telas capturadas, conectadas com a maioria das frases, ou verificando o contexto no editor, que inclui a frase 'botão'.
+
+As traduções dos botões devem ser o mais curtas possível, para evitar incompatibilidade de formatação. Além disso, as traduções dos botões devem ter o verbo no imperativo, ou seja, apresentar um comando ou solicitação.
+
+
+
+## Traduzindo de forma inclusiva {#translating-for-inclusivity}
+
+Os visitantes do ethereum.org vêm de todo o mundo e de diferentes origens. Por conseguinte, a linguagem utilizada no site deve ser neutra, acolhedora para todos e inclusiva.
+
+Um aspecto importante dessa questão é a neutralidade de gênero. Isso é fácil de se obter com o uso de linguagem de tratamento formal e evitando quaisquer palavras específicas de gênero nas traduções.
+
+Outra forma de inclusão é tentar traduzir para um público global, sem especificidades de país, raça ou região.
+
+Por último, a língua deve ser adequada para todos os públicos e todas as idades.
+
+## Traduções específicas de um idioma {#language-specific-translations}
+
+Ao traduzir, é importante seguir as regras gramaticais, convenções e formatação usadas em seu idioma, em vez de copiá-las do idioma de origem. O texto de origem segue as regras e convenções gramaticais do inglês, o que não é aplicável a muitos outros idiomas.
+
+Você deve estar ciente das regras do seu idioma e traduzir de acordo com elas. Se precisar de ajuda, entre em contato conosco e ajudaremos você a encontrar alguns recursos sobre como esses elementos devem ser utilizados no seu idioma.
+
+Aqui estão alguns exemplos a que você deve ter atenção:
+
+### Pontuação, formatação {#punctuation-and-formatting}
+
+**Regras de uso de maiúsculas e minúsculas**
+
+- Há grandes diferenças de uso de maiúsculas e minúsculas em diferentes idiomas.
+- Em inglês, é comum colocar a primeira letra de todas as palavras em títulos e nomes, meses e dias, nomes de idiomas, feriados, etc. em maiúsculas. Em muitas outras línguas, isso é gramaticalmente incorreto, já que elas têm diferentes regras de uso de maiúsculas e minúsculas.
+- Alguns idiomas também têm regras de uso de maiúsculas de pronomes pessoais, substantivos e alguns adjetivos, diferentes do inglês.
+
+**Espaçamento**
+
+- As regras da ortografia definem o uso de espaços para cada língua. Como os espaços são usados em toda a parte, essas regras são frequentemente bem específicas e estão entre os elementos mais mal traduzidos.
+- Algumas diferenças comuns de espaçamento entre inglês e outras línguas:
+ - Espaço antes das unidades de medida e moedas (por exemplo: USD, EUR, kB, MB)
+ - Espaço antes dos sinais de graus (ex.: °C, °F)
+ - Espaço antes de algumas marcas de pontuação, especialmente as reticências (…)
+ - Espaço antes e após barras (/)
+
+**Listas**
+
+- Toda língua tem um conjunto diversificado e complexo de regras para escrever listas. Elas podem ser significativamente diferentes do inglês.
+- Em algumas línguas, a primeira palavra de cada nova linha precisa ser colocada em maiúscula, enquanto em outras, novas linhas devem começar com letras minúsculas. Muitas línguas também têm regras diferentes sobre o uso de maiúsculas em listas, dependendo do tamanho de cada linha.
+- O mesmo se aplica à pontuação de itens de linha. A pontuação final em listas pode ser um ponto (**.**), vírgula (**,**), ou ponto e vírgula (**;**), dependendo do idioma.
+
+**Aspas**
+
+- Os idiomas usam muitas aspas diferentes. Frequentemente, é incorreto simplesmente copiar as aspas do inglês.
+- Alguns dos tipos mais comuns de aspas são:
+ - „texto de exemplo“
+ - ‚texto de exemplo’
+ - »texto de exemplo«
+ - “texto de exemplo”
+ - ‘texto de exemplo’
+ - «texto de exemplo»
+
+**Hifens e traços**
+
+- Em inglês, um hífen (-) é usado para juntar palavras ou diferentes partes de uma palavra, enquanto um traço (–) é usado para indicar intervalo ou pausa.
+- Muitas línguas têm regras diferentes para o uso de hifens e traços que devem ser respeitadas.
+
+### Formatos {#formats}
+
+**Números**
+
+- A principal diferença entre is idiomas em relação à escrita de números é o separador usado para números decimais e milhares. Para milhares, isso pode ser um ponto, vírgula ou espaço. Da mesma forma, alguns idiomas usam um ponto decimal, enquanto outros usam uma vírgula decimal.
+ - Alguns exemplos de números grandes:
+ - Inglês — **1,000.50**
+ - Espanhol — **1.000,50**
+ - Francês — **1 000,50**
+- Outra consideração importante ao traduzir números é o sinal de percentagem. Ele pode ser escrito de diferentes formas: **100%**, **100 %** ou **%100**.
+- Por fim, números negativos podem ser exibidos de formas diferentes, dependendo do idioma: -100, 100-, (100) ou [100].
+
+**Datas**
+
+- Ao traduzir datas, há várias considerações e diferenças dependendo do idioma. Eles incluem o formato de data, separador, uso de maiúsculas e minúsculas e zeros à esquerda. Também existem diferenças entre datas completas e datas numéricas.
+ - Alguns exemplos de diferentes formatos de data:
+ - Inglês britânico (dd/mm/yyyy) — 1st January, 2022
+ - Inglês americano (dd/mm/yyyy) — January 1st, 2022
+ - Chinês (yyyy-mm-dd) — 2022 年 1 月 1 日
+ - Francês (dd/mm/yyyy) — 1er janvier 2022
+ - Italiano (dd/mm/yyyy) — 1º gennaio 2022
+ - Alemão (dd/mm/yyyy) — 1. Januar 2022
+
+**Moedas**
+
+- A tradução de moedas pode ser desafiadora, devido aos diferentes formatos, convenções e conversões. Como regra geral, mantenha as moedas iguais à fonte. Você pode adicionar sua moeda local e conversão entre colchetes, para ajudar a compreensão do leitor.
+- As principais diferenças na escrita das moedas em diferentes idiomas incluem posicionamento de símbolos, vírgulas decimais versus pontos decimais, espaçamento e abreviações versus símbolos.
+ - Posicionamento do símbolo: $100 ou 100$
+ - Vírgulas decimais versus pontos decimais: 100,50$ ou 100.50$
+ - Espaçamento: 100$ ou 100 $
+ - Abreviações versus símbolos: 100 $ ou 100 USD
+
+**Unidades de medida**
+
+- Como regra geral, mantenha as unidades de medida iguais ao texto original. Se o seu país usa um sistema diferente, você pode incluir a conversão entre parênteses.
+- Além da localização das unidades de medida, também é importante observar as diferenças na forma como as línguas abordam essas unidades. A principal diferença é o espaçamento entre o número e a unidade, que pode diferir dependendo da língua. Por exemplo: 100kB versus 100 kB ou 50ºF versus 50 ºF.
+
+## Conclusão {#conclusion}
+
+A tradução do ethereum.org é uma ótima oportunidade para aprender sobre os diferentes aspectos do Ethereum.
+
+Procure não ter pressa ao traduzir. Vá com calma e divirta-se!
+
+Agradecemos sua participação no Programa de Tradução e sua ajuda para tornar o site acessível a um público maior. A comunidade Ethereum é global e estamos felizes por você fazer parte dela!
diff --git a/public/content/translations/pt-br/dao/index.md b/public/content/translations/pt-br/dao/index.md
new file mode 100644
index 00000000000..8f693649395
--- /dev/null
+++ b/public/content/translations/pt-br/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Organizações autônomas descentralizadas (DAOs)
+description: Uma visão geral de DAOs no Ethereum
+lang: pt-br
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: Uma representação de uma votação DAO em uma proposta.
+summaryPoint1: Comunidades de membros sem liderança centralizada.
+summaryPoint2: Uma maneira segura de colaborar com desconhecidos na Internet.
+summaryPoint3: Um local seguro para destinar fundos para uma causa específica.
+---
+
+## O que são DAOs? {#what-are-daos}
+
+Uma DAO é uma organização de propriedade coletiva governada por blockchain que trabalha para uma missão compartilhada.
+
+As DAOs permitem-nos trabalhar com pessoas que pensam da mesma maneira em todo o mundo sem confiar em um líder benevolente para gerenciar os fundos ou as operações. Não há CEO que possa gastar fundos por impulso ou CFO que capaz de manipular as contas. Em vez disso, as regras baseadas em blockchain incorporadas ao código definem como a organização funciona e como os fundos são gastos.
+
+Elas possuem receitas integradas que não podem ser acessadas por ninguém sem a aprovação do grupo. As decisões são regidas por propostas e votações para garantir que todos na organização tenham voz e tudo aconteça de forma transparente na cadeia.
+
+## Por que precisamos de DAOs? {#why-dao}
+
+Começar uma organização com alguém que envolva financiamento e dinheiro requer muita confiança nas pessoas com as quais você está trabalhando. Mas é difícil confiar em alguém que você só interagiu pela Internet. Com DAOs você não precisa confiar em mais ninguém no grupo, apenas no código da DAO, que é 100% transparente e verificável por todos.
+
+Isto abre muitas novas oportunidades para a colaboração e coordenação globais.
+
+### Uma comparação {#dao-comparison}
+
+| DAO | Uma empresa tradicional |
+| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
+| Hierarquia horizontal e totalmente democratizada. | Hierarquia vertical. |
+| Votação exigida pelos membros para que quaisquer alterações sejam implementadas. | Dependendo da estrutura, as mudanças podem ser requeridas por uma única parte, ou ter opção de voto. |
+| Votos conhecidos e resultados implementados automaticamente sem intermediário confiável. | Se a votação é permitida, os votos são homologados internamente e o resultado da votação tem de ser tratado manualmente. |
+| Os serviços oferecidos são tratados automaticamente de forma descentralizada (por exemplo, distribuição de fundos filantrópicos). | Requer manipulação humana, ou automação controlada centralmente, propensa a manipulação. |
+| Toda a atividade é transparente e totalmente pública. | A atividade é tipicamente privada e limitada ao público. |
+
+### Exemplos de DAOs {#dao-examples}
+
+Para dar um pouco de contexto, veja alguns exemplos de como você poderia usar uma DAO:
+
+- Uma instituição de caridade – você pode aceitar doações de qualquer pessoa no mundo e votar em quais causas financiar.
+- Propriedade coletiva – você pode comprar ativos físicos ou digitais e os membros podem votar sobre como usá-los.
+- Venture de capital e recompensas: você pode criar um fundo de investimento capitalizado que reúne e vota em quais ventures apoiar. O rendimento do dinheiro aplicado poderia mais tarde ser redistribuído entre os membros da DAO.
+
+## Como funcionam as DAOs? {#how-daos-work}
+
+A espinha dorsal de uma DAO é seu contrato inteligente, que define as regras da organização e mantém a tesouraria do grupo. Quando o contrato for publicado no Ethereum, ninguém poderá alterar as regras, exceto por votação. Se alguém tentar fazer algo que não esteja coberto pelas regras e lógica do código, não terá sucesso. E como a tesouraria é definida pelo contrato inteligente, também significa que ninguém pode gastar o dinheiro sem a aprovação do grupo. Isso significa que as DAOs não precisam de uma autoridade central. Em vez disso, o grupo toma decisões coletivas e os pagamentos são autorizados automaticamente quando os votos são aprovados.
+
+Isso é possível porque os contratos inteligentes são imunes a adulterações quando são implementados no Ethereum. Você não pode simplesmente editar o código (as regras das DAOs) sem que as pessoas percebam porque tudo é público.
+
+
O que era ETH2?
+
+
+
+
+Para obter mais informações, leia esta publicação de Tim Beiko sobre How The Merge Impacts Ethereum’s Application Layer (Como a Fusão afeta a camada de aplicação do Ethereum).
+
+
+
+
+Agora, em vez de 1 a 12, imagine que o relógio é de 0 a N (o total de números de contas de validador que foram registradas na camada de consenso, mais de 500 mil em janeiro de 2023).
+O ponteiro do relógio aponta para o próximo validador que precisa ser verificado quanto a saques elegíveis. Começa em 0 e avança ao longo de todo o caminho sem pular nenhuma conta. Quando o último validador é alcançado, o ciclo continua de volta ao início.
+Что такое ETH2?
+
+
+
+
+Для получения дополнительной информации посмотрите эту запись в блоге, написанную Тимом Бейко: Как слияние влияет на уровень применения Ethereum.
+
+
+
+
+Теперь вместо 1 до 12 представьте, что часы имеют от 0 до N (общее число счетов валидаторов, которые когда-либо были зарегистрированы на консенсусном уровне, более 500 000 по состоянию на январь 2023 г.).
+Стрелка на часах указывает на следующего валидатора, который должен быть проверен на подходящий вывод средств. Это все начинается с 0 и продвигается до конца, не пропуская ни одной учетной записи. Когда достигается последний валидатор, цикл продолжается с начала.
+`nonce`
`
+
+`` - _Bir kod parçacığı içeren açma etiketi_
+
+nonce - _Çevrilmemesi gereken metin_
+
+`
` - _Kapatma etiketi_
+
+
+
+Kaynak metin, yalnızca sayıları içeren kısaltılmış etiketler de içerir; yani, bunların fonksiyonu hemen anlaşılabilir olmayabilir. Tam olarak hangi fonksiyonu yerine getirdiklerini görmek için imleci bu etiketlerin üzerine götürebilirsiniz.
+
+Aşağıdaki örnekte, imleç üzerine götürüldüğünde <0> etiketin `` öğesini temsil ettiğini ve bir kod parçacığı içerdiğini görebilirsiniz; bu nedenle, bu etiketlerin içindeki içerik çevrilmemelidir.
+
+
+
+## Kısa vs. eksiksiz hâller/kısatmalar {#short-vs-full-forms}
+
+Web sitesinde kullanılan birçok kısaltma vardır, örn. dapps, NFT, DAO, DeFi vb. Bu kısaltmalar genellikle İngilizce olarak kullanılır ve web sitesini ziyaret edenlerin çoğu bunlara aşinadır.
+
+Genellikle diğer dillerde yerleşik çevirileri olmadığı için bu ve benzeri terimleri ele almanın en iyi yolu, tam hâlinin açıklayıcı bir çevirisini sağlamak ve İngilizce kısaltmasını parantez içinde eklemektir.
+
+Çoğu insan bunlara aşina olmayacağından ve yerelleştirilmiş hâlleri çoğu ziyaretçi için pek anlamlı olmayacağından bu kısaltmaları çevirmeyin.
+
+Dapps kısaltmasının nasıl çevrilmesi gerektiğine dair örnek:
+
+- Merkeziyetsiz uygulamalar (dapps) → _Tercüme edilmiş tam metin (parantez içinde İngilizce kısaltması)_
+
+## Yerleşmiş çevirileri olmayan terimler {#terms-without-established-translations}
+
+Bazı terimlerin diğer dillerde yerleşmiş çevirileri bulunmayabilir ve bu terimler, orijinal İngilizce hâliyle yaygın olarak biliniyor olabilir. Proof-of-work, proof-of-stake, Beacon Chain, staking vb. nispeten yeni olan terimler buna örnek gösterilebilir.
+
+İngilizce versiyonu diğer dillerde de yaygın olarak kullanıldığından bu terimleri çevirmek kulağa doğal gelmese de çevrilmeleri şiddetle tavsiye edilir.
+
+Bunları çevirirken yaratıcı ve açıklayıcı çeviriler kullanmaktan çekinmeyin veya gerekirse düz bir şekilde tam anlamıyla çevirin.
+
+**Bazı terimleri İngilizce bırakmak yerine çoğu terimin çevrilmesinin nedeni, Ethereum ve ilgili teknolojileri daha fazla insan kullanmaya başladıkça, bu yeni terminolojinin gelecekte daha yaygın hâle geleceği gerçeğidir. Dünyanın her yerinden daha fazla insanı bu alana dahil etmek istiyorsak, kendimiz oluşturmamız gerekse bile mümkün olduğunca çok dilde anlaşılır terminoloji sağlamamız gerekir.**
+
+## Düğmeler ve CTA'lar {#buttons-and-ctas}
+
+Web sitesi, diğer içeriklerden farklı şekilde çevrilmesi gereken çok sayıda düğme içerir.
+
+Düğme metni, çoğu dizeyle bağlantılı bağlam ekran görüntülerini görüntüleyerek veya düzenleyicideki "düğme" ifadesini içeren bağlamı kontrol ederek anlaşılabilir.
+
+Biçimlendirme uyumsuzluklarını önlemek için düğmelerin çevirileri mümkün olduğunca kısa olmalıdır. Ek olarak, düğme çevirileri emir kipi hâlinde olmalıdır, yani bir komut veya istek içermelidir.
+
+
+
+## Kapsayıcılık için çevirme {#translating-for-inclusivity}
+
+Ethereum.org'un ziyaretçileri, dünyanın farklı bölgelerindendir ve farklı geçmişlere sahiptir. Bu nedenle web sitesindeki dil; tarafsız, herkese açık ve kapsayıcı olmalıdır.
+
+Cinsiyetsiz ifadeler bunun önemli bir parçasıdır. Bu, resmi hitap biçimini kullanarak ve çevirilerde cinsiyete özgü sözcüklerden kaçınarak kolayca başarılabilir.
+
+Kapsayıcılığın başka bir biçimi; herhangi bir ülkeye, ırka veya bölgeye özgü olmayan küresel bir kullanıcı kitlesine yönelik çeviri yapmaya çalışmaktır.
+
+Son olarak üslup, tüm kullanıcılara ve her yaşa uygun olmalıdır.
+
+## Dile özel çeviriler {#language-specific-translations}
+
+Çeviri yaparken kaynaktan kopyalamak yerine kendi dilinizde kullanılan dil bilgisi kurallarına, kabullere ve biçimlendirmeye uymak önemlidir. Kaynak metin, İngilizce dil bilgisi kural ve kabullerine uygundur; bu kural ve kabuller, diğer birçok dil için geçerli değildir.
+
+Dilinizin kurallarını bilmeli ve buna göre çeviri yapmalısınız. Yardıma ihtiyacınız olduğunda bize ulaşırsanız ve bu öğelerin kendi dilinizde nasıl kullanılması gerektiğine dair bazı kaynaklar bulmanıza yardımcı olabiliriz.
+
+Özellikle nelere dikkat edilmesi gerektiğine dair bazı örnekler:
+
+### Noktalama, düzenleme {#punctuation-and-formatting}
+
+**Büyük/Küçük Harf**
+
+- Farklı dillerde büyük/küçük harf kullanımında büyük farklılıklar bulunur.
+- İngilizce'de; başlıklarda ve adlarda, aylarda ve günlerde, dil adlarında, tatillerde vb. tüm sözcüklerin büyük harfle yazılması yaygındır. Diğer birçok dilde, farklı büyük harf kullanım kurallarına sahip oldukları için bu durum dil bilgisi açısından yanlıştır.
+- Bazı dillerde, İngilizce'de büyük harfle yazılmayan şahıs zamirlerinin, isimlerin ve belirli sıfatların büyük harfle yazılmasıyla ilgili kurallar da vardır.
+
+**Boşluklar**
+
+- İmla kuralları, her dil için boşluk kullanımını tanımlar. Boşluklar her yerde kullanıldığından, bu kurallar en belirgin olanlardan bazılarıdır ve boşluklar en yanlış çevrilen öğelerden bazılarıdır.
+- İngilizce ve diğer diller arasındaki boşluk bırakma ilgili bazı yaygın farklılıklar:
+ - Ölçü birimlerinden ve para birimlerinden önceki boşluk (ör. USD, EUR, kB, MB)
+ - Derece işaretlerinden önceki boşluk (örneğin, °C, ℉)
+ - Bazı noktalama işaretlerinden önce boşluk, özellikle üç nokta (…)
+ - Taksimlerden (/) önce ve sonra boşluk
+
+**Listeler**
+
+- Her dilin liste yazmak için çeşitli ve karmaşık kuralları vardır. Bunlar İngilizceden önemli ölçüde farklı olabilir.
+- Bazı dillerde, her yeni satırın ilk kelimesi büyük harfle yazılmalı, bazılarında ise yeni satırlar küçük harflerle başlamalıdır. Ayrıca birçok dilde, her satırın uzunluğuna bağlı olarak, listelerde büyük harf kullanımıyla ilgili farklı kurallar vardır.
+- Aynısı satır öğelerinin noktalama işaretleri için de geçerlidir. Listelerdeki son noktalama işaretleri, dile bağlı olarak nokta (**.**), virgül (**,**) veya noktalı virgül (**;**) olabilir.
+
+**Tırnak işaretleri**
+
+- Diller birçok farklı tırnak işareti kullanır. İngilizce tırnak işaretlerini kaynaktan basitçe kopyalamak çoğu zaman yanlıştır.
+- En yaygın tırnak işareti türlerinden bazıları şunlardır:
+ - „örnek metin“
+ - ‚örnek metin’
+ - »örnek metin«
+ - “örnek metin”
+ - ‘örnek metin’
+ - «örnek metin»
+
+**Kısa çizgiler ve tireler**
+
+- İngilizce'de kısa çizgi (-) sözcükleri veya bir sözcüğün farklı bölümlerini birleştirmek için kullanılırken tire (–) bir aralığı veya duraklamayı belirtmek için kullanılır.
+- Birçok dilde, dikkat edilmesi gereken kısa çizgi ve tire kullanımı için farklı kurallar vardır.
+
+### Formatlar {#formats}
+
+**Sayılar**
+
+- Farklı dillerde sayıların yazılmasındaki temel fark, ondalık ve binler için kullanılan ayırıcıdır. Binlerce kişi için bu nokta, virgül veya boşluk olabilir. Benzer şekilde, bazı diller ondalık nokta kullanırken, diğerleri ondalık virgül kullanır.
+ - Büyük sayılara bazı örnekler:
+ - İngilizce – **1,000.50**
+ - İspanyolca – **1.000,50**
+ - Fransızca – **1 000,50**
+- Sayıları çevirirken dikkat edilmesi gereken bir diğer önemli nokta da yüzde işaretidir. Farklı şekillerde yazılabilir: **100%**, **100 %** veya **%100**.
+- Son olarak, dile bağlı olarak negatif sayılar farklı şekilde görüntülenebilir: -100, 100-, (100) veya [100].
+
+**Tarihler**
+
+- Tarihleri çevirirken, dile bağlı olarak bir takım hususlar ve farklılıklar vardır. Bunlara tarih biçimi, ayırıcı, büyük harf kullanımı ve baştaki sıfırlar dahildir. Tam uzunluktaki ve sayısal tarihler arasında da farklılıklar vardır.
+ - Farklı tarih biçimlerine bazı örnekler:
+ - Birleşik Krallık İngilizcesi (gg/aa/yyyy) - 1 Ocak 2022
+ - Amerikan İngilizcesi (aa/gg/yyyy) - Ocak 1, 2022
+ - Çince (yyyy-aa-gg) – 2022 年 1 月 1 日
+ - French (gg/aa/yyyy) – 1er janvier 2022
+ - Italian (gg/aa/yyyy) – 1º gennaio 2022
+ - German (gg/aa/yyyy) – 1. Ocak 2022
+
+**Para birimleri**
+
+- Farklı biçimler, kurallar ve dönüşümler nedeniyle para birimlerini çevirmek zor olabilir. Genel bir kural olarak, lütfen para birimlerini kaynakla aynı tutun. Okuyucunun yararına parantez içinde yerel para biriminizi ve dönüşümünüzü ekleyebilirsiniz.
+- Farklı dillerde para birimleri yazmanın temel farklılıkları arasında sembol yerleşimi, ondalık virgül ve ondalık nokta, boşluk ve kısaltmalar ve semboller yer alır.
+ - Sembol yerleştirmesi: $100 veya 100$
+ - Ondalık virgül ve ondalık nokta: 100,50$ veya 100.50$
+ - Boşluklar: $100 veya 100 $
+ - Kısaltmalar vs. semboller: 100 $ veya 100 USD
+
+**Ölçü birimleri**
+
+- Genel bir kural olarak, lütfen ölçü birimlerini kaynağa uygun şekilde koruyun. Ülkeniz farklı bir sistem kullanıyorsa, dönüştürmeyi parantez içinde ekleyebilirsiniz.
+- Ölçü birimlerinin yerelleştirilmesinin yanı sıra, dillerin bu birimlere yaklaşımlarındaki farklılıkları da not etmek önemlidir. Temel fark, dile bağlı olarak farklı olabilen sayı ve birim arasındaki boşluktur. Bunun örnekleri arasında 100 kB'ye karşı 100 kB veya 50ºF'ye karşı 50 ºF yer alır.
+
+## Sonuç {#conclusion}
+
+Ethereum.org'u çevirmek, Ethereum'un farklı yönlerini öğrenmek için harika bir fırsattır.
+
+Çeviri yaparken acele etmemeye çalışın. Rahat olun ve eğlenin!
+
+Çeviri Programına dahil olduğunuz ve web sitesini daha geniş bir kitleye ulaştırmamıza yardımcı olduğunuz için teşekkür ederiz. Ethereum topluluğu küreseldir ve bunun bir parçası olduğunuz için mutluyuz!
diff --git a/public/content/translations/tr/dao/index.md b/public/content/translations/tr/dao/index.md
new file mode 100644
index 00000000000..04aeef5bf71
--- /dev/null
+++ b/public/content/translations/tr/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: Merkeziyetsiz otonom organizasyonlar (DAO'lar)
+description: Ethereum'daki DAO'lara genel bakış
+lang: tr
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: Bir teklif üzerinde oy kullanan bir DAO'nun temsili.
+summaryPoint1: Merkezi liderliği olmayan üyelere ait topluluklar.
+summaryPoint2: İnternette tanımadığnız kişilerle iş birliği yapmanın güvenli bir yolu.
+summaryPoint3: Belirli bir amaca para yatırmak için güvenli bir yer.
+---
+
+## DAO'lar Nedir? {#what-are-daos}
+
+DAO, müşterek bir görev için çalışan, müşterek olarak sahip olunan, blokzincir tarafından yönetilen bir organizasyondur.
+
+DAO'lar, fonları veya operasyonları yönetmesi için hayırsever bir lidere güvenmeden dünyanın dört bir yanındaki benzer fikirlere sahip kişilerle çalışmamıza olanak tanır. Burada, fonları canı istediği gibi harcayan bir CEO veya hesapları manipüle edecek bi CFO yok. Bunun yerine, kodda işlenen blok zinciri tabanlı kurallar, kuruluşun nasıl çalıştığını ve fonların nasıl harcandığını tanımlar.
+
+Grubun onayı olmadan kimsenin erişme otoritesine sahip olmadığı yerleşik hazinelere sahiplerdir. Kararlar, kuruluştaki herkesin söz sahibi olmasını sağlamak için teklifler ve oylamalarla yönetilir ve her şey zincir üzerinde şeffaf bir şekilde gerçekleşir.
+
+## Neden DAO'lara ihtiyacımız var? {#why-dao}
+
+Birisiyle finansman ve para içeren bir organizasyon başlatmak, çalıştığınız kişilerle ileri düzeyde güven gerektirir. Ancak yalnızca internette etkileşimde bulunduğunuz birine güvenmek zordur. DAO'larla gruptaki başka kimseye güvenmeniz gerekmez, yalnızca DAO'nun %100 şeffaf ve herkes tarafından doğrulanabilir koduna güvenmeniz gerekir.
+
+Bu küresel iş birliği ve koordinasyon için birçok yeni fırsat sunar.
+
+### Bir karşılaştırma {#dao-comparison}
+
+| DAO | Geleneksel bir organizasyon |
+| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
+| Genelde düz ve tamamen demokratikleştirilmiş. | Genelde hiyerarşik. |
+| Herhangi bir değişikliğin uygulanması için üyeler tarafından oylama yapılması gerekli. | Yapısına bağlı olarak, değişiklikler tekil bir partiden istenebilir veya oylama önerilebilir. |
+| Oylar toplanır ve sonuç güvenilir bir aracı olmadan otomatik şekilde uygulanır. | Eğer oylamaya izin verildiyse, oylar içeride toplanır ve oylamanın sonucu manuel şekilde idare edilir. |
+| Teklif edilen servisler merkezi olmadan ve otomatik bir şekilde idare edilir (örnek olarak hayırseverlik fonları). | İnsan idaresi veya merkezi şekilde kontrol edilen bir otomasyon gerektirir, bu da manipülasyona açıktır. |
+| Tüm etkinlikler şeffaftır ve tamamen halka açıktır. | Etkinlikler genelde gizlidir ve tamamı halka açılmaz. |
+
+### DAO örnekleri {#dao-examples}
+
+Bunun biraz daha mantıklı olması için, burada bir DAO'yu nasıl kullanabileceğiniz hakkında birkaç örnek mevcut:
+
+- Hayır kurumu - Dünyanın herhangi bir yerinden bağışları kabul edebilir ve bu bağışların neler için kullanılacağını oylamaya sunabilirsiniz.
+- Kolektif mülkiyet – fiziksel veya dijital varlıklar satın alabilir ve üyeler bunların nasıl kullanılacağına oy verebilir.
+- Girişimler ve hibeler: Yatırım sermayesini bir araya toplayan ve desteklenecek girişimlere oy veren bir girişim fonu oluşturabilirsiniz. Geri ödenen para daha sonrasında DAO üyeleri arasında yeniden dağıtılabilir.
+
+## DAO'lar nasıl çalışır? {#how-daos-work}
+
+Bir DAO'nun bel kemiği, organizasyonun kurallarını tanımlayan ve grubun hazinesini içeren akıllı sözleşmesidir. Sözleşmenin Ethereum'da yayınlandığı andan itibaren kimse oylama olmadan kuralları değiştiremez. Birisi koddaki kurallara veya mantığa uymayan bir şey yapmaya çalışırsa, başarılı olamaz. Ayrıca, hazinenin de akıllı sözleşme tarafından belirlenmesi, kimsenin grubun onayı olmadan parayı harcayamayacağı anlamına gelir. Bu, DAO'ların merkezi bir otoriteye ihtiyacı olmadığı anlamına gelir. Bunun yerine, grup kararları toplu olarak alır ve oylar geçtiğinde ödemeler otomatik olarak yetkilendirilir.
+
+Bu, akıllı sözleşmelerin Ethereum'da yayınlandıktan sonra kurcalanamaz olmaları sayesinde mümkündür. İnsanlar fark etmeden kodu (yani DAO'ların kurallarını) değiştiremezsiniz çünkü her şey halka açıktır.
+
+
ETH2 neydi?
+
+
+
+
+Daha fazla bilgi için, Tim Beiko tarafından yazılmış Birleşim Ethereum'un Uygulama Katmanını Nasıl Etkiler üzerine blog gönderisine bakın.
+
+
+
+
+Şimdi 1 ile 12 arası yerine, saatin 0 ile N (fikir birliği katmanına şimdiye kadar kayıt olmuş tüm doğrulayıcı hesaplarının sayısı, Ocak 2023 itibariyle 500.000) arasına sahip olduğunu düşünün.
+Saatin akrebi çekim uygunluğu için kontrol edilmesi gereken sıradaki doğrulayıcıya işaret edecektir. 0 ile başlar ve hiçbir sayıyı atlamadan tüm yol boyunca devam eder. Son doğrulayıcıya ulaşıldığında döngü baştan başlayarak devam eder.
+
.
+Тепер замість чисел від 1 до 12 уявіть, що на годиннику від 0 до N (загальна кількість облікових записів валідаторів, які коли-небудь були зареєстровані на рівні консенсусу, понад 500 000 станом на січень 2023 року).
Стрілка на годиннику вказує на наступний валідатор, який потрібно перевірити на наявність коштів, що підлягають виведенню. Стрілка починає з 0 і просувається повним колом, не пропускаючи жодного облікового запису. Коли буде досягнуто останній валідатор, цикл розпочнеться з початку.
+ETH2 是什麼?
+
+
+
+
+更多資訊請閱讀 Tim Beiko 的部落格文章:合併如何影響以太坊的應用層。
+
+
+
+
+
+
+現在,假設時鐘不是 1 到 12,而是 0 到 N (共識層上註冊的驗證者帳戶總數,截至 2023 年 1 月超過 500,000 個)。
+時鐘上的指針指向下一個驗證者,需要檢查其是否具備提款資格。 它從 0 開始,一路前進,不跳過任何帳戶。 到達最後一個驗證者後,從頭開始繼續循環。
+`nonce`
`
+
+`` - _开始标签,其中包含一段代码_
+
+nonce - _不可翻译的文本_
+
+`
` - _结束标签_
+
+
+
+源文本还包含缩短的标签,这些标签只包含数字,这意味着它们的功能不是很明显。 你可以将鼠标悬停在这些标签上,以准确查看它们提供的功能。
+
+在下面的示例中,你可以看到,将鼠标悬停在 <0> 标签显示,它代表 `` 并包含代码片段,因此不应翻译这些标签内的内容。
+
+
+
+## 简短与完整形式/缩写 {#short-vs-full-forms}
+
+网站上使用了很多缩写,例如 dApp、NFT、DAO、DeFi 等。 这些缩写通常用于英语,并且大多数网站访问者都熟悉它们。
+
+由于它们通常没有其他语言的既定翻译,处理这些和类似术语的最佳方法是提供完整形式的描述性翻译,并在括号中添加英文缩写。
+
+不要翻译这些缩写,因为大多数人不熟悉它们,而且本地化版本对大多数访问者来说没有多大意义。
+
+如何翻译 dApp 的示例:
+
+- Decentralized applications (dapps) → _完整的翻译形式 (括号中为英文缩写)_
+
+## 没有既定翻译的术语 {#terms-without-established-translations}
+
+某些术语在其他语言中可能没有既定翻译,并且以原始英语术语而广为人知。 这些术语主要包括较新的概念,如工作量证明、权益证明、信标链、质押等。
+
+虽然翻译这些术语听起来不自然,但由于英文版本也常用于其他语言,因此强烈建议将它们翻译。
+
+翻译它们时,请随意发挥创意,使用描述性翻译,或直接按字面翻译。
+
+**大多数术语应该翻译而不是将其中一些保留英文的原因是,随着越来越多的人开始使用以太坊和相关技术,这种新术语将在未来变得更加普遍。 如果我们想让来自世界各地的更多人加入这个领域,我们需要以尽可能多的语言提供易于理解的术语,即使我们需要自行创建它。**
+
+## 按钮与行动号召 {#buttons-and-ctas}
+
+网站包含许多按钮,其翻译方式应与其他内容不同。
+
+可以通过查看上下文屏幕截图、与大多数字符串连接或通过检查编辑器中的上下文(包括短语“button”)来识别按钮文本。
+
+按钮的翻译应尽可能简短,以防止格式不匹配。 此外,按钮翻译应该是必要的,即呈现命令或请求。
+
+
+
+## 翻译包容性 {#translating-for-inclusivity}
+
+Ethereum.org 的访问者来自世界各地和不同的背景。 因此,网站上的语言应该是中立的,欢迎所有人而不是排他性的。
+
+其中一个重要方面是性别中立。 这可以通过使用正式的地址形式并避免在翻译中使用任何特定性别的词来轻松实现。
+
+另一种形式的包容性是,尝试面向全球观众翻译,而不是面向任何国家、种族或地区。
+
+最后,语言应该适合所有大众和年龄段的读者。
+
+## 特定语言的翻译 {#language-specific-translations}
+
+翻译时,重要的是要遵循你的语言中使用的语法规则、约定和格式,而不是从源复制。 源文本遵循英语语法规则和约定,而这不适用于许多其他语言。
+
+你应该了解你的语言规则并进行相应的翻译。 如果你需要帮助,请与我们联系,我们将帮助你找到一些有关如何在你的语言中使用这些元素的资源。
+
+一些需要特别注意的例子:
+
+### 标点、格式 {#punctuation-and-formatting}
+
+**大写**
+
+- 不同语言的大小写存在巨大差异。
+- 在英语中,通常将标题和名称、月份和日期、语言名称、假期等中的所有单词大写。 在许多其他语言中,这在语法上是不正确的,因为它们具有不同的大小写规则。
+- 一些语言也有关于人称代词、名词和某些形容词大写的规则,这些在英语中是不大写的。
+
+**间距**
+
+- 正字法规则定义了每种语言的空格使用。 因为到处都使用空格,所以这些规则是最独特的,而空格是最容易误译的元素。
+- 英语和其他语言之间的一些常见间距差异:
+ - 计量单位和货币前的空格(例如 USD、EUR、kB、MB)
+ - 度数符号前的空格(例如 °C、℉)
+ - 一些标点符号前的空格,尤其是省略号 (...)
+ - 斜杠前后的空格 (/)
+
+**列表**
+
+- 每种语言都有一套多样化和复杂的规则来编写列表。 这些可能与英语有很大不同。
+- 在某些语言中,每个新行的第一个单词需要大写,而在其他语言中,新行应该以小写字母开头。 许多语言对列表中的大小写也有不同的规则,具体取决于每行的长度。
+- 这同样适用于行项目的标点符号。 列表中的结束标点可以是句点 (**.**)、逗号 (**,**) 或分号 (**;**)具体取决于语言
+
+**引号**
+
+- 语言使用许多不同的引号。 简单地从源中复制英文引号通常是不正确的。
+- 一些最常见的引号类型包括:
+ - “示例文本”
+ - ‘示例文本’
+ - »示例文本«
+ - “示例文本”
+ - ‘示例文本’
+ - «示例文本»
+
+**连字符和破折号**
+
+- 在英语中,连字符 (-) 用于连接单词或单词的不同部分,而破折号 (-) 用于表示范围或停顿。
+- 许多语言对使用连字符和破折号有不同的规则,应遵守这些规则。
+
+### 格式 {#formats}
+
+**数字**
+
+- 用不同语言书写数字的主要区别在于用于小数和千位的分隔符。 对于千数来说,这可以是句号、逗号或空格。 同样,一些语言使用小数点,而另一些语言使用小数点逗号。
+ - 一些大数的例子:
+ - 英语 - **1,000.50**
+ - 西班牙语 - **1.000,50**
+ - 法语 - **1 000,50**
+- 翻译数字时的另一个重要考虑因素是百分号。 它可以用不同的方式编写:**100%**、**100 %** 或 **%100**。
+- 最后,负数可以不同地显示,具体取决于语言:-100、100-、(100) 或 [100]。
+
+**日期**
+
+- 在翻译日期时,有许多基于语言的考虑因素和差异。 这些包括日期格式、分隔符、大写和前导零。 全长日期和数字日期之间也存在差异。
+ - 不同日期格式的一些示例:
+ - 英语(英国)(dd/mm/yyyy) – 1st January, 2022
+ - 英语(美国)(mm/dd/yyyy) – January 1st, 2022
+ - 中文 (yyyy-mm-dd) – 2022 年 1 月 1 日
+ - 法语 (dd/mm/yyyy) – 1er janvier 2022
+ - 意大利语 (dd/mm/yyyy) – 1º gennaio 2022
+ - 德语 (yyyy/mm/dd) – 1. Januar 2022
+
+**货币**
+
+- 由于格式、惯例和转换不同,货币转换可能具有挑战性。 作为一般规则,请保持货币与来源相同。 为了读者的利益,您可以在括号中添加您的当地货币和转换。
+- 用不同语言书写货币的主要区别包括符号位置、小数逗号与小数点、间距以及缩写与符号。
+ - 符号放置:美元 100 或 100 美元
+ - 小数逗号和。小数点:100,50$ 或 100.50$
+ - 间距:100 美元或 100 美元
+ - 缩写和符号:100$ 或 100 USD
+
+**计量单位**
+
+- 作为一般规则,请根据来源保留计量单位。 如果您所在的国家/地区使用不同的系统,您可以将转换包括在括号中。
+- 除了度量单位的本地化之外,注意语言处理这些单位的方式的差异也很重要。 主要区别在于数字和单位之间的间距,可以根据语言而有所不同。 这方面的示例包括 100kB 与 100 kB 或 50ºF 与 50ºF。
+
+## 总结 {#conclusion}
+
+翻译 ethereum.org 是了解以太坊不同方面的绝佳机会。
+
+翻译时尽量不要着急。 放轻松,玩得开心!
+
+感谢你参与翻译计划并帮助我们让更广泛的受众可以访问网站。 以太坊社区是全球性的,我们很高兴你也成为其中的一员!
diff --git a/public/content/translations/zh/dao/index.md b/public/content/translations/zh/dao/index.md
new file mode 100644
index 00000000000..865d42328a9
--- /dev/null
+++ b/public/content/translations/zh/dao/index.md
@@ -0,0 +1,165 @@
+---
+title: 去中心化自治组织 (DAO)
+description: 以太坊上的去中心化自治组织简介
+lang: zh
+template: use-cases
+emoji: ":handshake:"
+sidebarDepth: 2
+image: /use-cases/dao-2.png
+alt: 表示去中心化自治组织在对提案投票。
+summaryPoint1: 没有集中领导的、成员共同拥有的社区。
+summaryPoint2: 一种与互联网上的陌生人合作的安全方式。
+summaryPoint3: 一个为特定事业投入资金的安全场所。
+---
+
+## 什么是去中心化自治组织? {#what-are-daos}
+
+去中心化自治组织是指集体所有且由区块链监管的组织,为一个共同的使命而奋斗。
+
+去中心化自治组织让全世界志同道合之士开展合作,而无需信赖一位宅心仁厚的领导来管理资金和运营。 没有可以随意花钱的首席执行官,也没有能够做假账的首席财务官。 取而代之的是,融入代码的基于区块链的规则规定组织如何运作以及资金如何使用。
+
+去中心化自治组织拥有内部资产,未经该组织批准,任何人都无权动用。 决策通过提案和投票监管,确保组织中的每位成员都有发言权,一切都发生在链上,公开透明。
+
+## 我们为什么需要去中心化自治组织? {#why-dao}
+
+与他人创办涉及资金和金钱的组织,需要对与合作对象高度信任。 不过,显然很难相信互联网上素不相识的人。 通过去中心化自治组织,你不需要相信组织中的其他人,只需要相信去中心化自治组织的代码就够了,它是 100% 公开透明的,任何人都可以验证。
+
+这为全球合作和协调提供了许多新机会。
+
+### 对比 {#dao-comparison}
+
+| 去中心化自治组织 | 传统组织 |
+| -------------------------------------------------- | ------------------------------------------------------------ |
+| 通常是平等的,并且完全民主。 | 通常等级鲜明。 |
+| 需要成员投票才能实施任何更改。 | 可能部分人就能进行决策,也可能投票表决,具体取决于组织结构。 |
+| 不需要可信的中间人就可以自动计算投票、执行结果。 | 如果允许投票,则在内部计票,投票结果必须由人工处理。 |
+| 以去中心化方式自动提供服务(例如慈善基金的分配)。 | 需要人工处理或自动集中控制,易受操纵。 |
+| 所有活动公开透明。 | 活动通常是私密进行,不向公众开放。 |
+
+### 去中心化自治组织示例 {#dao-examples}
+
+为了帮助你更好地理解,这里有一些去中心化自治组织的应用示例:
+
+- 慈善机构 – 可以接受全世界任何人的捐赠,并投票决定要资助的项目。
+- 集体所有权 – 可以购买实体或数字资产,组织成员可以投票决定如何使用它们。
+- 风险投资和赠款 - 你可以成立一个风险基金,汇集投资资本并投票进行商业投资。 后续收益可以分配给相应 DAO 成员。
+
+## 去中心化自治组织如何运作? {#how-daos-work}
+
+智能合约是去中心化自治组织的基础,它定义了组织的规则并持有组织的资产。 合约在以太坊上生效后,除非表决通过,否则任何人都不能修改规则。 任何人都无法超越合约定义的规则和逻辑行事。 由于资产也由智能合约定义,这也意味着未经组织批准任何人都不能使用资金。 所以去中心化组织也不需要中央权威。 相反,组织集体作出决定,而付款会在表决通过后自动获批。
+
+之所以能够做到这一点,是因为智能合约在以太坊上生效后,就无法被篡改。 一切都是公开的,你不可能在其他人一无所知的情况下修改代码(去中心化组织定义的规则)。
+
+
+
+
+
+
+
+
+
+
+
+
+
+REVERT
操作码。STATICCALL
操作码,允许对其他合约进行非状态改变调用。ETH2 是什么?
+
+
+
+
+有关详细信息,请查看 Tim Beiko 的博客文章“合并对以太坊的应用程序层有何影响”。
+
+
+
+
+
+
+现在,想象这个时钟不再是 1 至 12,而是从 0 到 N(在共识层上注册的验证者帐户的总数,截至 2023 年 1 月已超过 500,000 个)。
+时钟的指针指向需要检查是否符合提款条件的下一个验证者。 它从 0 开始,不跳过任何帐户,一直前进。 当达到最后一个验证者时,循环从头开始继续。
+
+
+
+The first half of the first step prevents transaction senders from spending coins that do not exist, the second half of the first step prevents transaction senders from spending other people's coins, and the second step enforces conservation of value. In order to use this for payment, the protocol is as follows. Suppose Alice wants to send 11.7 BTC to Bob. First, Alice will look for a set of available UTXO that she owns that totals up to at least 11.7 BTC. Realistically, Alice will not be able to get exactly 11.7 BTC; say that the smallest she can get is 6+4+2=12. She then creates a transaction with those three inputs and two outputs. The first output will be 11.7 BTC with Bob's address as its owner, and the second output will be the remaining 0.3 BTC "change", with the owner being Alice herself.
+
+### Mining {#mining}
+
+
+
+If we had access to a trustworthy centralized service, this system would be trivial to implement; it could simply be coded exactly as described, using a centralized server's hard drive to keep track of the state. However, with Bitcoin we are trying to build a decentralized currency system, so we will need to combine the state transaction system with a consensus system in order to ensure that everyone agrees on the order of transactions. Bitcoin's decentralized consensus process requires nodes in the network to continuously attempt to produce packages of transactions called "blocks". The network is intended to produce roughly one block every ten minutes, with each block containing a timestamp, a nonce, a reference to (ie. hash of) the previous block and a list of all of the transactions that have taken place since the previous block. Over time, this creates a persistent, ever-growing, "blockchain" that constantly updates to represent the latest state of the Bitcoin ledger.
+
+The algorithm for checking if a block is valid, expressed in this paradigm, is as follows:
+
+1. Check if the previous block referenced by the block exists and is valid.
+2. Check that the timestamp of the block is greater than that of the previous block[fn2](#notes) and less than 2 hours into the future
+3. Check that the proof-of-work on the block is valid.
+4. Let `S[0]` be the state at the end of the previous block.
+5. Suppose `TX` is the block's transaction list with `n` transactions. For all `i` in `0...n-1`, set `S[i+1] = APPLY(S[i],TX[i])` If any application returns an error, exit and return false.
+6. Return true, and register `S[n]` as the state at the end of this block.
+
+Essentially, each transaction in the block must provide a valid state transition from what was the canonical state before the transaction was executed to some new state. Note that the state is not encoded in the block in any way; it is purely an abstraction to be remembered by the validating node and can only be (securely) computed for any block by starting from the genesis state and sequentially applying every transaction in every block. Additionally, note that the order in which the miner includes transactions into the block matters; if there are two transactions A and B in a block such that B spends a UTXO created by A, then the block will be valid if A comes before B but not otherwise.
+
+The one validity condition present in the above list that is not found in other systems is the requirement for "proof-of-work". The precise condition is that the double-SHA256 hash of every block, treated as a 256-bit number, must be less than a dynamically adjusted target, which as of the time of this writing is approximately 2187. The purpose of this is to make block creation computationally "hard", thereby preventing sybil attackers from remaking the entire blockchain in their favor. Because SHA256 is designed to be a completely unpredictable pseudorandom function, the only way to create a valid block is simply trial and error, repeatedly incrementing the nonce and seeing if the new hash matches.
+
+At the current target of ~2187, the network must make an average of ~269 tries before a valid block is found; in general, the target is recalibrated by the network every 2016 blocks so that on average a new block is produced by some node in the network every ten minutes. In order to compensate miners for this computational work, the miner of every block is entitled to include a transaction giving themselves 25 BTC out of nowhere. Additionally, if any transaction has a higher total denomination in its inputs than in its outputs, the difference also goes to the miner as a "transaction fee". Incidentally, this is also the only mechanism by which BTC are issued; the genesis state contained no coins at all.
+
+In order to better understand the purpose of mining, let us examine what happens in the event of a malicious attacker. Since Bitcoin's underlying cryptography is known to be secure, the attacker will target the one part of the Bitcoin system that is not protected by cryptography directly: the order of transactions. The attacker's strategy is simple:
+
+1. Send 100 BTC to a merchant in exchange for some product (preferably a rapid-delivery digital good)
+2. Wait for the delivery of the product
+3. Produce another transaction sending the same 100 BTC to himself
+4. Try to convince the network that his transaction to himself was the one that came first.
+
+Once step (1) has taken place, after a few minutes some miner will include the transaction in a block, say block number 270000. After about one hour, five more blocks will have been added to the chain after that block, with each of those blocks indirectly pointing to the transaction and thus "confirming" it. At this point, the merchant will accept the payment as finalized and deliver the product; since we are assuming this is a digital good, delivery is instant. Now, the attacker creates another transaction sending the 100 BTC to himself. If the attacker simply releases it into the wild, the transaction will not be processed; miners will attempt to run `APPLY(S,TX)` and notice that `TX` consumes a UTXO which is no longer in the state. So instead, the attacker creates a "fork" of the blockchain, starting by mining another version of block 270000 pointing to the same block 269999 as a parent but with the new transaction in place of the old one. Because the block data is different, this requires redoing the proof-of-work. Furthermore, the attacker's new version of block 270000 has a different hash, so the original blocks 270001 to 270005 do not "point" to it; thus, the original chain and the attacker's new chain are completely separate. The rule is that in a fork the longest blockchain is taken to be the truth, and so legitimate miners will work on the 270005 chain while the attacker alone is working on the 270000 chain. In order for the attacker to make his blockchain the longest, he would need to have more computational power than the rest of the network combined in order to catch up (hence, "51% attack").
+
+### Merkle Trees {#merkle-trees}
+
+
+
+_Left: it suffices to present only a small number of nodes in a Merkle tree to give a proof of the validity of a branch._
+
+_Right: any attempt to change any part of the Merkle tree will eventually lead to an inconsistency somewhere up the chain._
+
+An important scalability feature of Bitcoin is that the block is stored in a multi-level data structure. The "hash" of a block is actually only the hash of the block header, a roughly 200-byte piece of data that contains the timestamp, nonce, previous block hash and the root hash of a data structure called the Merkle tree storing all transactions in the block. A Merkle tree is a type of binary tree, composed of a set of nodes with a large number of leaf nodes at the bottom of the tree containing the underlying data, a set of intermediate nodes where each node is the hash of its two children, and finally a single root node, also formed from the hash of its two children, representing the "top" of the tree. The purpose of the Merkle tree is to allow the data in a block to be delivered piecemeal: a node can download only the header of a block from one source, the small part of the tree relevant to them from another source, and still be assured that all of the data is correct. The reason why this works is that hashes propagate upward: if a malicious user attempts to swap in a fake transaction into the bottom of a Merkle tree, this change will cause a change in the node above, and then a change in the node above that, finally changing the root of the tree and therefore the hash of the block, causing the protocol to register it as a completely different block (almost certainly with an invalid proof-of-work).
+
+The Merkle tree protocol is arguably essential to long-term sustainability. A "full node" in the Bitcoin network, one that stores and processes the entirety of every block, takes up about 15 GB of disk space in the Bitcoin network as of April 2014, and is growing by over a gigabyte per month. Currently, this is viable for some desktop computers and not phones, and later on in the future only businesses and hobbyists will be able to participate. A protocol known as "simplified payment verification" (SPV) allows for another class of nodes to exist, called "light nodes", which download the block headers, verify the proof-of-work on the block headers, and then download only the "branches" associated with transactions that are relevant to them. This allows light nodes to determine with a strong guarantee of security what the status of any Bitcoin transaction, and their current balance, is while downloading only a very small portion of the entire blockchain.
+
+### Alternative Blockchain Applications {#alternative-blockchain-applications}
+
+The idea of taking the underlying blockchain idea and applying it to other concepts also has a long history. In 2005, Nick Szabo came out with the concept of "[secure property titles with owner authority](https://nakamotoinstitute.org/secure-property-titles/)", a document describing how "new advances in replicated database technology" will allow for a blockchain-based system for storing a registry of who owns what land, creating an elaborate framework including concepts such as homesteading, adverse possession and Georgian land tax. However, there was unfortunately no effective replicated database system available at the time, and so the protocol was never implemented in practice. After 2009, however, once Bitcoin's decentralized consensus was developed a number of alternative applications rapidly began to emerge.
+
+- **Namecoin** - created in 2010, [Namecoin](https://namecoin.org/) is best described as a decentralized name registration database. In decentralized protocols like Tor, Bitcoin and BitMessage, there needs to be some way of identifying accounts so that other people can interact with them, but in all existing solutions the only kind of identifier available is a pseudorandom hash like `1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy`. Ideally, one would like to be able to have an account with a name like "george". However, the problem is that if one person can create an account named "george" then someone else can use the same process to register "george" for themselves as well and impersonate them. The only solution is a first-to-file paradigm, where the first registerer succeeds and the second fails - a problem perfectly suited for the Bitcoin consensus protocol. Namecoin is the oldest, and most successful, implementation of a name registration system using such an idea.
+- **Colored coins** - the purpose of [colored coins](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit) is to serve as a protocol to allow people to create their own digital currencies - or, in the important trivial case of a currency with one unit, digital tokens, on the Bitcoin blockchain. In the colored coins protocol, one "issues" a new currency by publicly assigning a color to a specific Bitcoin UTXO, and the protocol recursively defines the color of other UTXO to be the same as the color of the inputs that the transaction creating them spent (some special rules apply in the case of mixed-color inputs). This allows users to maintain wallets containing only UTXO of a specific color and send them around much like regular bitcoins, backtracking through the blockchain to determine the color of any UTXO that they receive.
+- **Metacoins** - the idea behind a metacoin is to have a protocol that lives on top of Bitcoin, using Bitcoin transactions to store metacoin transactions but having a different state transition function, `APPLY'`. Because the metacoin protocol cannot prevent invalid metacoin transactions from appearing in the Bitcoin blockchain, a rule is added that if `APPLY'(S,TX)` returns an error, the protocol defaults to `APPLY'(S,TX) = S`. This provides an easy mechanism for creating an arbitrary cryptocurrency protocol, potentially with advanced features that cannot be implemented inside of Bitcoin itself, but with a very low development cost since the complexities of mining and networking are already handled by the Bitcoin protocol. Metacoins have been used to implement some classes of financial contracts, name registration and decentralized exchange.
+
+Thus, in general, there are two approaches toward building a consensus protocol: building an independent network, and building a protocol on top of Bitcoin. The former approach, while reasonably successful in the case of applications like Namecoin, is difficult to implement; each individual implementation needs to bootstrap an independent blockchain, as well as building and testing all of the necessary state transition and networking code. Additionally, we predict that the set of applications for decentralized consensus technology will follow a power law distribution where the vast majority of applications would be too small to warrant their own blockchain, and we note that there exist large classes of decentralized applications, particularly decentralized autonomous organizations, that need to interact with each other.
+
+The Bitcoin-based approach, on the other hand, has the flaw that it does not inherit the simplified payment verification features of Bitcoin. SPV works for Bitcoin because it can use blockchain depth as a proxy for validity; at some point, once the ancestors of a transaction go far enough back, it is safe to say that they were legitimately part of the state. Blockchain-based meta-protocols, on the other hand, cannot force the blockchain not to include transactions that are not valid within the context of their own protocols. Hence, a fully secure SPV meta-protocol implementation would need to backward scan all the way to the beginning of the Bitcoin blockchain to determine whether or not certain transactions are valid. Currently, all "light" implementations of Bitcoin-based meta-protocols rely on a trusted server to provide the data, arguably a highly suboptimal result especially when one of the primary purposes of a cryptocurrency is to eliminate the need for trust.
+
+### Scripting {#scripting}
+
+Even without any extensions, the Bitcoin protocol actually does facilitate a weak version of a concept of "smart contracts". UTXO in Bitcoin can be owned not just by a public key, but also by a more complicated script expressed in a simple stack-based programming language. In this paradigm, a transaction spending that UTXO must provide data that satisfies the script. Indeed, even the basic public key ownership mechanism is implemented via a script: the script takes an elliptic curve signature as input, verifies it against the transaction and the address that owns the UTXO, and returns 1 if the verification is successful and 0 otherwise. Other, more complicated, scripts exist for various additional use cases. For example, one can construct a script that requires signatures from two out of a given three private keys to validate ("multisig"), a setup useful for corporate accounts, secure savings accounts and some merchant escrow situations. Scripts can also be used to pay bounties for solutions to computational problems, and one can even construct a script that says something like "this Bitcoin UTXO is yours if you can provide an SPV proof that you sent a Dogecoin transaction of this denomination to me", essentially allowing decentralized cross-cryptocurrency exchange.
+
+However, the scripting language as implemented in Bitcoin has several important limitations:
+
+- **Lack of Turing-completeness** - that is to say, while there is a large subset of computation that the Bitcoin scripting language supports, it does not nearly support everything. The main category that is missing is loops. This is done to avoid infinite loops during transaction verification; theoretically it is a surmountable obstacle for script programmers, since any loop can be simulated by simply repeating the underlying code many times with an if statement, but it does lead to scripts that are very space-inefficient. For example, implementing an alternative elliptic curve signature algorithm would likely require 256 repeated multiplication rounds all individually included in the code.
+- **Value-blindness** - there is no way for a UTXO script to provide fine-grained control over the amount that can be withdrawn. For example, one powerful use case of an oracle contract would be a hedging contract, where A and B put in $1000 worth of BTC and after 30 days the script sends $1000 worth of BTC to A and the rest to B. This would require an oracle to determine the value of 1 BTC in USD, but even then it is a massive improvement in terms of trust and infrastructure requirement over the fully centralized solutions that are available now. However, because UTXO are all-or-nothing, the only way to achieve this is through the very inefficient hack of having many UTXO of varying denominations (eg. one UTXO of 2k for every k up to 30) and having the oracle pick which UTXO to send to A and which to B.
+- **Lack of state** - UTXO can either be spent or unspent; there is no opportunity for multi-stage contracts or scripts which keep any other internal state beyond that. This makes it hard to make multi-stage options contracts, decentralized exchange offers or two-stage cryptographic commitment protocols (necessary for secure computational bounties). It also means that UTXO can only be used to build simple, one-off contracts and not more complex "stateful" contracts such as decentralized organizations, and makes meta-protocols difficult to implement. Binary state combined with value-blindness also mean that another important application, withdrawal limits, is impossible.
+- **Blockchain-blindness** - UTXO are blind to blockchain data such as the nonce, the timestamp and previous block hash. This severely limits applications in gambling, and several other categories, by depriving the scripting language of a potentially valuable source of randomness.
+
+Thus, we see three approaches to building advanced applications on top of cryptocurrency: building a new blockchain, using scripting on top of Bitcoin, and building a meta-protocol on top of Bitcoin. Building a new blockchain allows for unlimited freedom in building a feature set, but at the cost of development time, bootstrapping effort and security. Using scripting is easy to implement and standardize, but is very limited in its capabilities, and meta-protocols, while easy, suffer from faults in scalability. With Ethereum, we intend to build an alternative framework that provides even larger gains in ease of development as well as even stronger light client properties, while at the same time allowing applications to share an economic environment and blockchain security.
+
+## Ethereum {#ethereum}
+
+The intent of Ethereum is to create an alternative protocol for building decentralized applications, providing a different set of tradeoffs that we believe will be very useful for a large class of decentralized applications, with particular emphasis on situations where rapid development time, security for small and rarely used applications, and the ability of different applications to very efficiently interact, are important. Ethereum does this by building what is essentially the ultimate abstract foundational layer: a blockchain with a built-in Turing-complete programming language, allowing anyone to write smart contracts and decentralized applications where they can create their own arbitrary rules for ownership, transaction formats and state transition functions. A bare-bones version of Namecoin can be written in two lines of code, and other protocols like currencies and reputation systems can be built in under twenty. Smart contracts, cryptographic "boxes" that contain value and only unlock it if certain conditions are met, can also be built on top of the platform, with vastly more power than that offered by Bitcoin scripting because of the added powers of Turing-completeness, value-awareness, blockchain-awareness and state.
+
+### Ethereum Accounts {#ethereum-accounts}
+
+In Ethereum, the state is made up of objects called "accounts", with each account having a 20-byte address and state transitions being direct transfers of value and information between accounts. An Ethereum account contains four fields:
+
+- The **nonce**, a counter used to make sure each transaction can only be processed once
+- The account's current **ether balance**
+- The account's **contract code**, if present
+- The account's **storage** (empty by default)
+
+"Ether" is the main internal crypto-fuel of Ethereum, and is used to pay transaction fees. In general, there are two types of accounts: **externally owned accounts**, controlled by private keys, and **contract accounts**, controlled by their contract code. An externally owned account has no code, and one can send messages from an externally owned account by creating and signing a transaction; in a contract account, every time the contract account receives a message its code activates, allowing it to read and write to internal storage and send other messages or create contracts in turn.
+
+Note that "contracts" in Ethereum should not be seen as something that should be "fulfilled" or "complied with"; rather, they are more like "autonomous agents" that live inside of the Ethereum execution environment, always executing a specific piece of code when "poked" by a message or transaction, and having direct control over their own ether balance and their own key/value store to keep track of persistent variables.
+
+### Messages and Transactions {#messages-and-transactions}
+
+The term "transaction" is used in Ethereum to refer to the signed data package that stores a message to be sent from an externally owned account. Transactions contain:
+
+- The recipient of the message
+- A signature identifying the sender
+- The amount of ether to transfer from the sender to the recipient
+- An optional data field
+- A `STARTGAS` value, representing the maximum number of computational steps the transaction execution is allowed to take
+- A `GASPRICE` value, representing the fee the sender pays per computational step
+
+The first three are standard fields expected in any cryptocurrency. The data field has no function by default, but the virtual machine has an opcode using which a contract can access the data; as an example use case, if a contract is functioning as an on-blockchain domain registration service, then it may wish to interpret the data being passed to it as containing two "fields", the first field being a domain to register and the second field being the IP address to register it to. The contract would read these values from the message data and appropriately place them in storage.
+
+The `STARTGAS` and `GASPRICE` fields are crucial for Ethereum's anti-denial of service model. In order to prevent accidental or hostile infinite loops or other computational wastage in code, each transaction is required to set a limit to how many computational steps of code execution it can use. The fundamental unit of computation is "gas"; usually, a computational step costs 1 gas, but some operations cost higher amounts of gas because they are more computationally expensive, or increase the amount of data that must be stored as part of the state. There is also a fee of 5 gas for every byte in the transaction data. The intent of the fee system is to require an attacker to pay proportionately for every resource that they consume, including computation, bandwidth and storage; hence, any transaction that leads to the network consuming a greater amount of any of these resources must have a gas fee roughly proportional to the increment.
+
+### Messages {#messages}
+
+Contracts have the ability to send "messages" to other contracts. Messages are virtual objects that are never serialized and exist only in the Ethereum execution environment. A message contains:
+
+- The sender of the message (implicit)
+- The recipient of the message
+- The amount of ether to transfer alongside the message
+- An optional data field
+- A `STARTGAS` value
+
+Essentially, a message is like a transaction, except it is produced by a contract and not an external actor. A message is produced when a contract currently executing code executes the `CALL` opcode, which produces and executes a message. Like a transaction, a message leads to the recipient account running its code. Thus, contracts can have relationships with other contracts in exactly the same way that external actors can.
+
+Note that the gas allowance assigned by a transaction or contract applies to the total gas consumed by that transaction and all sub-executions. For example, if an external actor A sends a transaction to B with 1000 gas, and B consumes 600 gas before sending a message to C, and the internal execution of C consumes 300 gas before returning, then B can spend another 100 gas before running out of gas.
+
+### Ethereum State Transition Function {#ethereum-state-transition-function}
+
+
+
+The Ethereum state transition function, `APPLY(S,TX) -> S'` can be defined as follows:
+
+1. Check if the transaction is well-formed (ie. has the right number of values), the signature is valid, and the nonce matches the nonce in the sender's account. If not, return an error.
+2. Calculate the transaction fee as `STARTGAS * GASPRICE`, and determine the sending address from the signature. Subtract the fee from the sender's account balance and increment the sender's nonce. If there is not enough balance to spend, return an error.
+3. Initialize `GAS = STARTGAS`, and take off a certain quantity of gas per byte to pay for the bytes in the transaction.
+4. Transfer the transaction value from the sender's account to the receiving account. If the receiving account does not yet exist, create it. If the receiving account is a contract, run the contract's code either to completion or until the execution runs out of gas.
+5. If the value transfer failed because the sender did not have enough money, or the code execution ran out of gas, revert all state changes except the payment of the fees, and add the fees to the miner's account.
+6. Otherwise, refund the fees for all remaining gas to the sender, and send the fees paid for gas consumed to the miner.
+
+For example, suppose that the contract's code is:
+
+```py
+if !self.storage[calldataload(0)]:
+ self.storage[calldataload(0)] = calldataload(32)
+```
+
+Note that in reality the contract code is written in the low-level EVM code; this example is written in Serpent, one of our high-level languages, for clarity, and can be compiled down to EVM code. Suppose that the contract's storage starts off empty, and a transaction is sent with 10 ether value, 2000 gas, 0.001 ether gasprice, and 64 bytes of data, with bytes 0-31 representing the number `2` and bytes 32-63 representing the string `CHARLIE`. The process for the state transition function in this case is as follows:
+
+1. Check that the transaction is valid and well formed.
+2. Check that the transaction sender has at least 2000 \* 0.001 = 2 ether. If it is, then subtract 2 ether from the sender's account.
+3. Initialize gas = 2000; assuming the transaction is 170 bytes long and the byte-fee is 5, subtract 850 so that there is 1150 gas left.
+4. Subtract 10 more ether from the sender's account, and add it to the contract's account.
+5. Run the code. In this case, this is simple: it checks if the contract's storage at index `2` is used, notices that it is not, and so it sets the storage at index `2` to the value `CHARLIE`. Suppose this takes 187 gas, so the remaining amount of gas is 1150 - 187 = 963
+6. Add 963 \* 0.001 = 0.963 ether back to the sender's account, and return the resulting state.
+
+If there was no contract at the receiving end of the transaction, then the total transaction fee would simply be equal to the provided `GASPRICE` multiplied by the length of the transaction in bytes, and the data sent alongside the transaction would be irrelevant.
+
+Note that messages work equivalently to transactions in terms of reverts: if a message execution runs out of gas, then that message's execution, and all other executions triggered by that execution, revert, but parent executions do not need to revert. This means that it is "safe" for a contract to call another contract, as if A calls B with G gas then A's execution is guaranteed to lose at most G gas. Finally, note that there is an opcode, `CREATE`, that creates a contract; its execution mechanics are generally similar to `CALL`, with the exception that the output of the execution determines the code of a newly created contract.
+
+### Code Execution {#code-execution}
+
+The code in Ethereum contracts is written in a low-level, stack-based bytecode language, referred to as "Ethereum virtual machine code" or "EVM code". The code consists of a series of bytes, where each byte represents an operation. In general, code execution is an infinite loop that consists of repeatedly carrying out the operation at the current program counter (which begins at zero) and then incrementing the program counter by one, until the end of the code is reached or an error or `STOP` or `RETURN` instruction is detected. The operations have access to three types of space in which to store data:
+
+- The **stack**, a last-in-first-out container to which values can be pushed and popped
+- **Memory**, an infinitely expandable byte array
+- The contract's long-term **storage**, a key/value store. Unlike stack and memory, which reset after computation ends, storage persists for the long term.
+
+The code can also access the value, sender and data of the incoming message, as well as block header data, and the code can also return a byte array of data as an output.
+
+The formal execution model of EVM code is surprisingly simple. While the Ethereum virtual machine is running, its full computational state can be defined by the tuple `(block_state, transaction, message, code, memory, stack, pc, gas)`, where `block_state` is the global state containing all accounts and includes balances and storage. At the start of every round of execution, the current instruction is found by taking the `pc`th byte of `code` (or 0 if `pc >= len(code)`), and each instruction has its own definition in terms of how it affects the tuple. For example, `ADD` pops two items off the stack and pushes their sum, reduces `gas` by 1 and increments `pc` by 1, and `SSTORE` pops the top two items off the stack and inserts the second item into the contract's storage at the index specified by the first item. Although there are many ways to optimize Ethereum virtual machine execution via just-in-time compilation, a basic implementation of Ethereum can be done in a few hundred lines of code.
+
+### Blockchain and Mining {#blockchain-and-mining}
+
+
+
+The Ethereum blockchain is in many ways similar to the Bitcoin blockchain, although it does have some differences. The main difference between Ethereum and Bitcoin with regard to the blockchain architecture is that, unlike Bitcoin, Ethereum blocks contain a copy of both the transaction list and the most recent state. Aside from that, two other values, the block number and the difficulty, are also stored in the block. The basic block validation algorithm in Ethereum is as follows:
+
+1. Check if the previous block referenced exists and is valid.
+2. Check that the timestamp of the block is greater than that of the referenced previous block and less than 15 minutes into the future
+3. Check that the block number, difficulty, transaction root, uncle root and gas limit (various low-level Ethereum-specific concepts) are valid.
+4. Check that the proof-of-work on the block is valid.
+5. Let `S[0]` be the state at the end of the previous block.
+6. Let `TX` be the block's transaction list, with `n` transactions. For all `i` in `0...n-1`, set `S[i+1] = APPLY(S[i],TX[i])`. If any applications returns an error, or if the total gas consumed in the block up until this point exceeds the `GASLIMIT`, return an error.
+7. Let `S_FINAL` be `S[n]`, but adding the block reward paid to the miner.
+8. Check if the Merkle tree root of the state `S_FINAL` is equal to the final state root provided in the block header. If it is, the block is valid; otherwise, it is not valid.
+
+The approach may seem highly inefficient at first glance, because it needs to store the entire state with each block, but in reality efficiency should be comparable to that of Bitcoin. The reason is that the state is stored in the tree structure, and after every block only a small part of the tree needs to be changed. Thus, in general, between two adjacent blocks the vast majority of the tree should be the same, and therefore the data can be stored once and referenced twice using pointers (ie. hashes of subtrees). A special kind of tree known as a "Patricia tree" is used to accomplish this, including a modification to the Merkle tree concept that allows for nodes to be inserted and deleted, and not just changed, efficiently. Additionally, because all of the state information is part of the last block, there is no need to store the entire blockchain history - a strategy which, if it could be applied to Bitcoin, can be calculated to provide 5-20x savings in space.
+
+A commonly asked question is "where" contract code is executed, in terms of physical hardware. This has a simple answer: the process of executing contract code is part of the definition of the state transition function, which is part of the block validation algorithm, so if a transaction is added into block `B` the code execution spawned by that transaction will be executed by all nodes, now and in the future, that download and validate block `B`.
+
+## Applications {#applications}
+
+In general, there are three types of applications on top of Ethereum. The first category is financial applications, providing users with more powerful ways of managing and entering into contracts using their money. This includes sub-currencies, financial derivatives, hedging contracts, savings wallets, wills, and ultimately even some classes of full-scale employment contracts. The second category is semi-financial applications, where money is involved but there is also a heavy non-monetary side to what is being done; a perfect example is self-enforcing bounties for solutions to computational problems. Finally, there are applications such as online voting and decentralized governance that are not financial at all.
+
+### Token Systems {#token-systems}
+
+On-blockchain token systems have many applications ranging from sub-currencies representing assets such as USD or gold to company stocks, individual tokens representing smart property, secure unforgeable coupons, and even token systems with no ties to conventional value at all, used as point systems for incentivization. Token systems are surprisingly easy to implement in Ethereum. The key point to understand is that all a currency, or token system, fundamentally is, is a database with one operation: subtract X units from A and give X units to B, with the proviso that (i) A had at least X units before the transaction and (2) the transaction is approved by A. All that it takes to implement a token system is to implement this logic into a contract.
+
+The basic code for implementing a token system in Serpent looks as follows:
+
+```py
+def send(to, value):
+ if self.storage[msg.sender] >= value:
+ self.storage[msg.sender] = self.storage[msg.sender] - value
+ self.storage[to] = self.storage[to] + value
+```
+
+This is essentially a literal implementation of the "banking system" state transition function described further above in this document. A few extra lines of code need to be added to provide for the initial step of distributing the currency units in the first place and a few other edge cases, and ideally a function would be added to let other contracts query for the balance of an address. But that's all there is to it. Theoretically, Ethereum-based token systems acting as sub-currencies can potentially include another important feature that on-chain Bitcoin-based meta-currencies lack: the ability to pay transaction fees directly in that currency. The way this would be implemented is that the contract would maintain an ether balance with which it would refund ether used to pay fees to the sender, and it would refill this balance by collecting the internal currency units that it takes in fees and reselling them in a constant running auction. Users would thus need to "activate" their accounts with ether, but once the ether is there it would be reusable because the contract would refund it each time.
+
+### Financial derivatives and Stable-Value Currencies {#financial-derivatives-and-stable-value-currencies}
+
+Financial derivatives are the most common application of a "smart contract", and one of the simplest to implement in code. The main challenge in implementing financial contracts is that the majority of them require reference to an external price ticker; for example, a very desirable application is a smart contract that hedges against the volatility of ether (or another cryptocurrency) with respect to the US dollar, but doing this requires the contract to know what the value of ETH/USD is. The simplest way to do this is through a "data feed" contract maintained by a specific party (eg. NASDAQ) designed so that that party has the ability to update the contract as needed, and providing an interface that allows other contracts to send a message to that contract and get back a response that provides the price.
+
+Given that critical ingredient, the hedging contract would look as follows:
+
+1. Wait for party A to input 1000 ether.
+2. Wait for party B to input 1000 ether.
+3. Record the USD value of 1000 ether, calculated by querying the data feed contract, in storage, say this is $x.
+4. After 30 days, allow A or B to "reactivate" the contract in order to send $x worth of ether (calculated by querying the data feed contract again to get the new price) to A and the rest to B.
+
+Such a contract would have significant potential in crypto-commerce. One of the main problems cited about cryptocurrency is the fact that it's volatile; although many users and merchants may want the security and convenience of dealing with cryptographic assets, they many not wish to face that prospect of losing 23% of the value of their funds in a single day. Up until now, the most commonly proposed solution has been issuer-backed assets; the idea is that an issuer creates a sub-currency in which they have the right to issue and revoke units, and provide one unit of the currency to anyone who provides them (offline) with one unit of a specified underlying asset (eg. gold, USD). The issuer then promises to provide one unit of the underlying asset to anyone who sends back one unit of the crypto-asset. This mechanism allows any non-cryptographic asset to be "uplifted" into a cryptographic asset, provided that the issuer can be trusted.
+
+In practice, however, issuers are not always trustworthy, and in some cases the banking infrastructure is too weak, or too hostile, for such services to exist. Financial derivatives provide an alternative. Here, instead of a single issuer providing the funds to back up an asset, a decentralized market of speculators, betting that the price of a cryptographic reference asset (eg. ETH) will go up, plays that role. Unlike issuers, speculators have no option to default on their side of the bargain because the hedging contract holds their funds in escrow. Note that this approach is not fully decentralized, because a trusted source is still needed to provide the price ticker, although arguably even still this is a massive improvement in terms of reducing infrastructure requirements (unlike being an issuer, issuing a price feed requires no licenses and can likely be categorized as free speech) and reducing the potential for fraud.
+
+### Identity and Reputation Systems {#identity-and-reputation-systems}
+
+The earliest alternative cryptocurrency of all, [Namecoin](http://namecoin.org/), attempted to use a Bitcoin-like blockchain to provide a name registration system, where users can register their names in a public database alongside other data. The major cited use case is for a [DNS](https://wikipedia.org/wiki/Domain_Name_System) system, mapping domain names like "bitcoin.org" (or, in Namecoin's case, "bitcoin.bit") to an IP address. Other use cases include email authentication and potentially more advanced reputation systems. Here is the basic contract to provide a Namecoin-like name registration system on Ethereum:
+
+```py
+def register(name, value):
+ if !self.storage[name]:
+ self.storage[name] = value
+```
+
+The contract is very simple; all it is is a database inside the Ethereum network that can be added to, but not modified or removed from. Anyone can register a name with some value, and that registration then sticks forever. A more sophisticated name registration contract will also have a "function clause" allowing other contracts to query it, as well as a mechanism for the "owner" (ie. the first registerer) of a name to change the data or transfer ownership. One can even add reputation and web-of-trust functionality on top.
+
+### Decentralized File Storage {#decentralized-file-storage}
+
+Over the past few years, there have emerged a number of popular online file storage startups, the most prominent being Dropbox, seeking to allow users to upload a backup of their hard drive and have the service store the backup and allow the user to access it in exchange for a monthly fee. However, at this point the file storage market is at times relatively inefficient; a cursory look at various existing solutions shows that, particularly at the "uncanny valley" 20-200 GB level at which neither free quotas nor enterprise-level discounts kick in, monthly prices for mainstream file storage costs are such that you are paying for more than the cost of the entire hard drive in a single month. Ethereum contracts can allow for the development of a decentralized file storage ecosystem, where individual users can earn small quantities of money by renting out their own hard drives and unused space can be used to further drive down the costs of file storage.
+
+The key underpinning piece of such a device would be what we have termed the "decentralized Dropbox contract". This contract works as follows. First, one splits the desired data up into blocks, encrypting each block for privacy, and builds a Merkle tree out of it. One then makes a contract with the rule that, every N blocks, the contract would pick a random index in the Merkle tree (using the previous block hash, accessible from contract code, as a source of randomness), and give X ether to the first entity to supply a transaction with a simplified payment verification-like proof of ownership of the block at that particular index in the tree. When a user wants to re-download their file, they can use a micropayment channel protocol (eg. pay 1 szabo per 32 kilobytes) to recover the file; the most fee-efficient approach is for the payer not to publish the transaction until the end, instead replacing the transaction with a slightly more lucrative one with the same nonce after every 32 kilobytes.
+
+An important feature of the protocol is that, although it may seem like one is trusting many random nodes not to decide to forget the file, one can reduce that risk down to near-zero by splitting the file into many pieces via secret sharing, and watching the contracts to see each piece is still in some node's possession. If a contract is still paying out money, that provides a cryptographic proof that someone out there is still storing the file.
+
+### Decentralized Autonomous Organizations {#decentralized-autonomous-organizations}
+
+The general concept of a "decentralized autonomous organization" is that of a virtual entity that has a certain set of members or shareholders which, perhaps with a 67% majority, have the right to spend the entity's funds and modify its code. The members would collectively decide on how the organization should allocate its funds. Methods for allocating a DAO's funds could range from bounties, salaries to even more exotic mechanisms such as an internal currency to reward work. This essentially replicates the legal trappings of a traditional company or nonprofit but using only cryptographic blockchain technology for enforcement. So far much of the talk around DAOs has been around the "capitalist" model of a "decentralized autonomous corporation" (DAC) with dividend-receiving shareholders and tradable shares; an alternative, perhaps described as a "decentralized autonomous community", would have all members have an equal share in the decision making and require 67% of existing members to agree to add or remove a member. The requirement that one person can only have one membership would then need to be enforced collectively by the group.
+
+A general outline for how to code a DAO is as follows. The simplest design is simply a piece of self-modifying code that changes if two thirds of members agree on a change. Although code is theoretically immutable, one can easily get around this and have de-facto mutability by having chunks of the code in separate contracts, and having the address of which contracts to call stored in the modifiable storage. In a simple implementation of such a DAO contract, there would be three transaction types, distinguished by the data provided in the transaction:
+
+- `[0,i,K,V]` to register a proposal with index `i` to change the address at storage index `K` to value `V`
+- `[1,i]` to register a vote in favor of proposal `i`
+- `[2,i]` to finalize proposal `i` if enough votes have been made
+
+The contract would then have clauses for each of these. It would maintain a record of all open storage changes, along with a list of who voted for them. It would also have a list of all members. When any storage change gets to two thirds of members voting for it, a finalizing transaction could execute the change. A more sophisticated skeleton would also have built-in voting ability for features like sending a transaction, adding members and removing members, and may even provide for [Liquid Democracy](https://wikipedia.org/wiki/Liquid_democracy)-style vote delegation (ie. anyone can assign someone to vote for them, and assignment is transitive so if A assigns B and B assigns C then C determines A's vote). This design would allow the DAO to grow organically as a decentralized community, allowing people to eventually delegate the task of filtering out who is a member to specialists, although unlike in the "current system" specialists can easily pop in and out of existence over time as individual community members change their alignments.
+
+An alternative model is for a decentralized corporation, where any account can have zero or more shares, and two thirds of the shares are required to make a decision. A complete skeleton would involve asset management functionality, the ability to make an offer to buy or sell shares, and the ability to accept offers (preferably with an order-matching mechanism inside the contract). Delegation would also exist Liquid Democracy-style, generalizing the concept of a "board of directors".
+
+### Further Applications {#further-applications}
+
+**1. Savings wallets**. Suppose that Alice wants to keep her funds safe, but is worried that she will lose or someone will hack her private key. She puts ether into a contract with Bob, a bank, as follows:
+
+- Alice alone can withdraw a maximum of 1% of the funds per day.
+- Bob alone can withdraw a maximum of 1% of the funds per day, but Alice has the ability to make a transaction with her key shutting off this ability.
+- Alice and Bob together can withdraw anything.
+
+Normally, 1% per day is enough for Alice, and if Alice wants to withdraw more she can contact Bob for help. If Alice's key gets hacked, she runs to Bob to move the funds to a new contract. If she loses her key, Bob will get the funds out eventually. If Bob turns out to be malicious, then she can turn off his ability to withdraw.
+
+**2. Crop insurance**. One can easily make a financial derivatives contract but using a data feed of the weather instead of any price index. If a farmer in Iowa purchases a derivative that pays out inversely based on the precipitation in Iowa, then if there is a drought, the farmer will automatically receive money and if there is enough rain the farmer will be happy because their crops would do well. This can be expanded to natural disaster insurance generally.
+
+**3. A decentralized data feed**. For financial contracts for difference, it may actually be possible to decentralize the data feed via a protocol called "[SchellingCoin](http://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/)". SchellingCoin basically works as follows: N parties all put into the system the value of a given datum (eg. the ETH/USD price), the values are sorted, and everyone between the 25th and 75th percentile gets one token as a reward. Everyone has the incentive to provide the answer that everyone else will provide, and the only value that a large number of players can realistically agree on is the obvious default: the truth. This creates a decentralized protocol that can theoretically provide any number of values, including the ETH/USD price, the temperature in Berlin or even the result of a particular hard computation.
+
+**4. Smart multisignature escrow**. Bitcoin allows multisignature transaction contracts where, for example, three out of a given five keys can spend the funds. Ethereum allows for more granularity; for example, four out of five can spend everything, three out of five can spend up to 10% per day, and two out of five can spend up to 0.5% per day. Additionally, Ethereum multisig is asynchronous - two parties can register their signatures on the blockchain at different times and the last signature will automatically send the transaction.
+
+**5. Cloud computing**. The EVM technology can also be used to create a verifiable computing environment, allowing users to ask others to carry out computations and then optionally ask for proofs that computations at certain randomly selected checkpoints were done correctly. This allows for the creation of a cloud computing market where any user can participate with their desktop, laptop or specialized server, and spot-checking together with security deposits can be used to ensure that the system is trustworthy (ie. nodes cannot profitably cheat). Although such a system may not be suitable for all tasks; tasks that require a high level of inter-process communication, for example, cannot easily be done on a large cloud of nodes. Other tasks, however, are much easier to parallelize; projects like SETI@home, folding@home and genetic algorithms can easily be implemented on top of such a platform.
+
+**6. Peer-to-peer gambling**. Any number of peer-to-peer gambling protocols, such as Frank Stajano and Richard Clayton's [Cyberdice](http://www.cl.cam.ac.uk/~fms27/papers/2008-StajanoCla-cyberdice.pdf), can be implemented on the Ethereum blockchain. The simplest gambling protocol is actually simply a contract for difference on the next block hash, and more advanced protocols can be built up from there, creating gambling services with near-zero fees that have no ability to cheat.
+
+**7. Prediction markets**. Provided an oracle or SchellingCoin, prediction markets are also easy to implement, and prediction markets together with SchellingCoin may prove to be the first mainstream application of [futarchy](http://hanson.gmu.edu/futarchy.html) as a governance protocol for decentralized organizations.
+
+**8. On-chain decentralized marketplaces**, using the identity and reputation system as a base.
+
+## Miscellanea And Concerns {#miscellanea-and-concerns}
+
+### Modified GHOST Implementation {#modified-ghost-implementation}
+
+The "Greedy Heaviest Observed Subtree" (GHOST) protocol is an innovation first introduced by Yonatan Sompolinsky and Aviv Zohar in [December 2013](https://eprint.iacr.org/2013/881.pdf). The motivation behind GHOST is that blockchains with fast confirmation times currently suffer from reduced security due to a high stale rate - because blocks take a certain time to propagate through the network, if miner A mines a block and then miner B happens to mine another block before miner A's block propagates to B, miner B's block will end up wasted and will not contribute to network security. Furthermore, there is a centralization issue: if miner A is a mining pool with 30% hashpower and B has 10% hashpower, A will have a risk of producing a stale block 70% of the time (since the other 30% of the time A produced the last block and so will get mining data immediately) whereas B will have a risk of producing a stale block 90% of the time. Thus, if the block interval is short enough for the stale rate to be high, A will be substantially more efficient simply by virtue of its size. With these two effects combined, blockchains which produce blocks quickly are very likely to lead to one mining pool having a large enough percentage of the network hashpower to have de facto control over the mining process.
+
+As described by Sompolinsky and Zohar, GHOST solves the first issue of network security loss by including stale blocks in the calculation of which chain is the "longest"; that is to say, not just the parent and further ancestors of a block, but also the stale descendants of the block's ancestor (in Ethereum jargon, "uncles") are added to the calculation of which block has the largest total proof-of-work backing it. To solve the second issue of centralization bias, we go beyond the protocol described by Sompolinsky and Zohar, and also provide block rewards to stales: a stale block receives 87.5% of its base reward, and the nephew that includes the stale block receives the remaining 12.5%. Transaction fees, however, are not awarded to uncles.
+
+Ethereum implements a simplified version of GHOST which only goes down seven levels. Specifically, it is defined as follows:
+
+- A block must specify a parent, and it must specify 0 or more uncles
+- An uncle included in block B must have the following properties:
+ - It must be a direct child of the kth generation ancestor of B, where `2 <= k <= 7`.
+ - It cannot be an ancestor of B
+ - An uncle must be a valid block header, but does not need to be a previously verified or even valid block
+ - An uncle must be different from all uncles included in previous blocks and all other uncles included in the same block (non-double-inclusion)
+- For every uncle U in block B, the miner of B gets an additional 3.125% added to its coinbase reward and the miner of U gets 93.75% of a standard coinbase reward.
+
+This limited version of GHOST, with uncles includable only up to 7 generations, was used for two reasons. First, unlimited GHOST would include too many complications into the calculation of which uncles for a given block are valid. Second, unlimited GHOST with compensation as used in Ethereum removes the incentive for a miner to mine on the main chain and not the chain of a public attacker.
+
+### Fees {#fees}
+
+Because every transaction published into the blockchain imposes on the network the cost of needing to download and verify it, there is a need for some regulatory mechanism, typically involving transaction fees, to prevent abuse. The default approach, used in Bitcoin, is to have purely voluntary fees, relying on miners to act as the gatekeepers and set dynamic minimums. This approach has been received very favorably in the Bitcoin community particularly because it is "market-based", allowing supply and demand between miners and transaction senders determine the price. The problem with this line of reasoning is, however, that transaction processing is not a market; although it is intuitively attractive to construe transaction processing as a service that the miner is offering to the sender, in reality every transaction that a miner includes will need to be processed by every node in the network, so the vast majority of the cost of transaction processing is borne by third parties and not the miner that is making the decision of whether or not to include it. Hence, tragedy-of-the-commons problems are very likely to occur.
+
+However, as it turns out this flaw in the market-based mechanism, when given a particular inaccurate simplifying assumption, magically cancels itself out. The argument is as follows. Suppose that:
+
+1. A transaction leads to `k` operations, offering the reward `kR` to any miner that includes it where `R` is set by the sender and `k` and `R` are (roughly) visible to the miner beforehand.
+2. An operation has a processing cost of `C` to any node (ie. all nodes have equal efficiency)
+3. There are `N` mining nodes, each with exactly equal processing power (ie. `1/N` of total)
+4. No non-mining full nodes exist.
+
+A miner would be willing to process a transaction if the expected reward is greater than the cost. Thus, the expected reward is `kR/N` since the miner has a `1/N` chance of processing the next block, and the processing cost for the miner is simply `kC`. Hence, miners will include transactions where `kR/N > kC`, or `R > NC`. Note that `R` is the per-operation fee provided by the sender, and is thus a lower bound on the benefit that the sender derives from the transaction, and `NC` is the cost to the entire network together of processing an operation. Hence, miners have the incentive to include only those transactions for which the total utilitarian benefit exceeds the cost.
+
+However, there are several important deviations from those assumptions in reality:
+
+1. The miner does pay a higher cost to process the transaction than the other verifying nodes, since the extra verification time delays block propagation and thus increases the chance the block will become a stale.
+2. There do exist nonmining full nodes.
+3. The mining power distribution may end up radically inegalitarian in practice.
+4. Speculators, political enemies and crazies whose utility function includes causing harm to the network do exist, and they can cleverly set up contracts where their cost is much lower than the cost paid by other verifying nodes.
+
+(1) provides a tendency for the miner to include fewer transactions, and
+(2) increases `NC`; hence, these two effects at least partially
+cancel each other
+out.[How?](https://github.com/ethereum/wiki/issues/447#issuecomment-316972260)
+(3) and (4) are the major issue; to solve them we simply institute a
+floating cap: no block can have more operations than
+`BLK_LIMIT_FACTOR` times the long-term exponential moving average.
+Specifically:
+
+```js
+blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) +
+floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)
+```
+
+`BLK_LIMIT_FACTOR` and `EMA_FACTOR` are constants that will be set to 65536 and 1.5 for the time being, but will likely be changed after further analysis.
+
+There is another factor disincentivizing large block sizes in Bitcoin: blocks that are large will take longer to propagate, and thus have a higher probability of becoming stales. In Ethereum, highly gas-consuming blocks can also take longer to propagate both because they are physically larger and because they take longer to process the transaction state transitions to validate. This delay disincentive is a significant consideration in Bitcoin, but less so in Ethereum because of the GHOST protocol; hence, relying on regulated block limits provides a more stable baseline.
+
+### Computation And Turing-Completeness {#computation-and-turing-completeness}
+
+An important note is that the Ethereum virtual machine is Turing-complete; this means that EVM code can encode any computation that can be conceivably carried out, including infinite loops. EVM code allows looping in two ways. First, there is a `JUMP` instruction that allows the program to jump back to a previous spot in the code, and a `JUMPI` instruction to do conditional jumping, allowing for statements like `while x < 27: x = x * 2`. Second, contracts can call other contracts, potentially allowing for looping through recursion. This naturally leads to a problem: can malicious users essentially shut miners and full nodes down by forcing them to enter into an infinite loop? The issue arises because of a problem in computer science known as the halting problem: there is no way to tell, in the general case, whether or not a given program will ever halt.
+
+As described in the state transition section, our solution works by requiring a transaction to set a maximum number of computational steps that it is allowed to take, and if execution takes longer computation is reverted but fees are still paid. Messages work in the same way. To show the motivation behind our solution, consider the following examples:
+
+- An attacker creates a contract which runs an infinite loop, and then sends a transaction activating that loop to the miner. The miner will process the transaction, running the infinite loop, and wait for it to run out of gas. Even though the execution runs out of gas and stops halfway through, the transaction is still valid and the miner still claims the fee from the attacker for each computational step.
+- An attacker creates a very long infinite loop with the intent of forcing the miner to keep computing for such a long time that by the time computation finishes a few more blocks will have come out and it will not be possible for the miner to include the transaction to claim the fee. However, the attacker will be required to submit a value for `STARTGAS` limiting the number of computational steps that execution can take, so the miner will know ahead of time that the computation will take an excessively large number of steps.
+- An attacker sees a contract with code of some form like `send(A,contract.storage[A]); contract.storage[A] = 0`, and sends a transaction with just enough gas to run the first step but not the second (ie. making a withdrawal but not letting the balance go down). The contract author does not need to worry about protecting against such attacks, because if execution stops halfway through the changes get reverted.
+- A financial contract works by taking the median of nine proprietary data feeds in order to minimize risk. An attacker takes over one of the data feeds, which is designed to be modifiable via the variable-address-call mechanism described in the section on DAOs, and converts it to run an infinite loop, thereby attempting to force any attempts to claim funds from the financial contract to run out of gas. However, the financial contract can set a gas limit on the message to prevent this problem.
+
+The alternative to Turing-completeness is Turing-incompleteness, where `JUMP` and `JUMPI` do not exist and only one copy of each contract is allowed to exist in the call stack at any given time. With this system, the fee system described and the uncertainties around the effectiveness of our solution might not be necessary, as the cost of executing a contract would be bounded above by its size. Additionally, Turing-incompleteness is not even that big a limitation; out of all the contract examples we have conceived internally, so far only one required a loop, and even that loop could be removed by making 26 repetitions of a one-line piece of code. Given the serious implications of Turing-completeness, and the limited benefit, why not simply have a Turing-incomplete language? In reality, however, Turing-incompleteness is far from a neat solution to the problem. To see why, consider the following contracts:
+
+```sh
+C0: call(C1); call(C1);
+C1: call(C2); call(C2);
+C2: call(C3); call(C3);
+...
+C49: call(C50); call(C50);
+C50: (run one step of a program and record the change in storage)
+```
+
+Now, send a transaction to A. Thus, in 51 transactions, we have a contract that takes up 250 computational steps. Miners could try to detect such logic bombs ahead of time by maintaining a value alongside each contract specifying the maximum number of computational steps that it can take, and calculating this for contracts calling other contracts recursively, but that would require miners to forbid contracts that create other contracts (since the creation and execution of all 26 contracts above could easily be rolled into a single contract). Another problematic point is that the address field of a message is a variable, so in general it may not even be possible to tell which other contracts a given contract will call ahead of time. Hence, all in all, we have a surprising conclusion: Turing-completeness is surprisingly easy to manage, and the lack of Turing-completeness is equally surprisingly difficult to manage unless the exact same controls are in place - but in that case why not just let the protocol be Turing-complete?
+
+### Currency And Issuance {#currency-and-issuance}
+
+The Ethereum network includes its own built-in currency, ether, which serves the dual purpose of providing a primary liquidity layer to allow for efficient exchange between various types of digital assets and, more importantly, of providing a mechanism for paying transaction fees. For convenience and to avoid future argument (see the current mBTC/uBTC/satoshi debate in Bitcoin), the denominations will be pre-labelled:
+
+- 1: wei
+- 1012: szabo
+- 1015: finney
+- 1018: ether
+
+This should be taken as an expanded version of the concept of "dollars" and "cents" or "BTC" and "satoshi". In the near future, we expect "ether" to be used for ordinary transactions, "finney" for microtransactions and "szabo" and "wei" for technical discussions around fees and protocol implementation; the remaining denominations may become useful later and should not be included in clients at this point.
+
+The issuance model will be as follows:
+
+- Ether will be released in a currency sale at the price of 1000-2000 ether per BTC, a mechanism intended to fund the Ethereum organization and pay for development that has been used with success by other platforms such as Mastercoin and NXT. Earlier buyers will benefit from larger discounts. The BTC received from the sale will be used entirely to pay salaries and bounties to developers and invested into various for-profit and non-profit projects in the Ethereum and cryptocurrency ecosystem.
+- 0.099x the total amount sold (60102216 ETH) will be allocated to the organization to compensate early contributors and pay ETH-denominated expenses before the genesis block.
+- 0.099x the total amount sold will be maintained as a long-term reserve.
+- 0.26x the total amount sold will be allocated to miners per year forever after that point.
+
+| Group | At launch | After 1 year | After 5 years |
+| ---------------------- | --------- | ------------ | ------------- |
+| Currency units | 1.198X | 1.458X | 2.498X |
+| Purchasers | 83.5% | 68.6% | 40.0% |
+| Reserve spent pre-sale | 8.26% | 6.79% | 3.96% |
+| Reserve used post-sale | 8.26% | 6.79% | 3.96% |
+| Miners | 0% | 17.8% | 52.0% |
+
+#### Long-Term Supply Growth Rate (percent)
+
+
+
+_Despite the linear currency issuance, just like with Bitcoin over time the supply growth rate nevertheless tends to zero._
+
+The two main choices in the above model are (1) the existence and size of an endowment pool, and (2) the existence of a permanently growing linear supply, as opposed to a capped supply as in Bitcoin. The justification of the endowment pool is as follows. If the endowment pool did not exist, and the linear issuance reduced to 0.217x to provide the same inflation rate, then the total quantity of ether would be 16.5% less and so each unit would be 19.8% more valuable. Hence, in the equilibrium 19.8% more ether would be purchased in the sale, so each unit would once again be exactly as valuable as before. The organization would also then have 1.198x as much BTC, which can be considered to be split into two slices: the original BTC, and the additional 0.198x. Hence, this situation is _exactly equivalent_ to the endowment, but with one important difference: the organization holds purely BTC, and so is not incentivized to support the value of the ether unit.
+
+The permanent linear supply growth model reduces the risk of what some see as excessive wealth concentration in Bitcoin, and gives individuals living in present and future eras a fair chance to acquire currency units, while at the same time retaining a strong incentive to obtain and hold ether because the "supply growth rate" as a percentage still tends to zero over time. We also theorize that because coins are always lost over time due to carelessness, death, etc, and coin loss can be modeled as a percentage of the total supply per year, that the total currency supply in circulation will in fact eventually stabilize at a value equal to the annual issuance divided by the loss rate (eg. at a loss rate of 1%, once the supply reaches 26X then 0.26X will be mined and 0.26X lost every year, creating an equilibrium).
+
+Note that in the future, it is likely that Ethereum will switch to a proof-of-stake model for security, reducing the issuance requirement to somewhere between zero and 0.05X per year. In the event that the Ethereum organization loses funding or for any other reason disappears, we leave open a "social contract": anyone has the right to create a future candidate version of Ethereum, with the only condition being that the quantity of ether must be at most equal to `60102216 * (1.198 + 0.26 * n)` where `n` is the number of years after the genesis block. Creators are free to crowd-sell or otherwise assign some or all of the difference between the PoS-driven supply expansion and the maximum allowable supply expansion to pay for development. Candidate upgrades that do not comply with the social contract may justifiably be forked into compliant versions.
+
+### Mining Centralization {#mining-centralization}
+
+The Bitcoin mining algorithm works by having miners compute SHA256 on slightly modified versions of the block header millions of times over and over again, until eventually one node comes up with a version whose hash is less than the target (currently around 2192). However, this mining algorithm is vulnerable to two forms of centralization. First, the mining ecosystem has come to be dominated by ASICs (application-specific integrated circuits), computer chips designed for, and therefore thousands of times more efficient at, the specific task of Bitcoin mining. This means that Bitcoin mining is no longer a highly decentralized and egalitarian pursuit, requiring millions of dollars of capital to effectively participate in. Second, most Bitcoin miners do not actually perform block validation locally; instead, they rely on a centralized mining pool to provide the block headers. This problem is arguably worse: as of the time of this writing, the top three mining pools indirectly control roughly 50% of processing power in the Bitcoin network, although this is mitigated by the fact that miners can switch to other mining pools if a pool or coalition attempts a 51% attack.
+
+The current intent at Ethereum is to use a mining algorithm where miners are required to fetch random data from the state, compute some randomly selected transactions from the last N blocks in the blockchain, and return the hash of the result. This has two important benefits. First, Ethereum contracts can include any kind of computation, so an Ethereum ASIC would essentially be an ASIC for general computation - ie. a better CPU. Second, mining requires access to the entire blockchain, forcing miners to store the entire blockchain and at least be capable of verifying every transaction. This removes the need for centralized mining pools; although mining pools can still serve the legitimate role of evening out the randomness of reward distribution, this function can be served equally well by peer-to-peer pools with no central control.
+
+This model is untested, and there may be difficulties along the way in avoiding certain clever optimizations when using contract execution as a mining algorithm. However, one notably interesting feature of this algorithm is that it allows anyone to "poison the well", by introducing a large number of contracts into the blockchain specifically designed to stymie certain ASICs. The economic incentives exist for ASIC manufacturers to use such a trick to attack each other. Thus, the solution that we are developing is ultimately an adaptive economic human solution rather than purely a technical one.
+
+### Scalability {#scalability}
+
+One common concern about Ethereum is the issue of scalability. Like Bitcoin, Ethereum suffers from the flaw that every transaction needs to be processed by every node in the network. With Bitcoin, the size of the current blockchain rests at about 15 GB, growing by about 1 MB per hour. If the Bitcoin network were to process Visa's 2000 transactions per second, it would grow by 1 MB per three seconds (1 GB per hour, 8 TB per year). Ethereum is likely to suffer a similar growth pattern, worsened by the fact that there will be many applications on top of the Ethereum blockchain instead of just a currency as is the case with Bitcoin, but ameliorated by the fact that Ethereum full nodes need to store just the state instead of the entire blockchain history.
+
+The problem with such a large blockchain size is centralization risk. If the blockchain size increases to, say, 100 TB, then the likely scenario would be that only a very small number of large businesses would run full nodes, with all regular users using light SPV nodes. In such a situation, there arises the potential concern that the full nodes could band together and all agree to cheat in some profitable fashion (eg. change the block reward, give themselves BTC). Light nodes would have no way of detecting this immediately. Of course, at least one honest full node would likely exist, and after a few hours information about the fraud would trickle out through channels like Reddit, but at that point it would be too late: it would be up to the ordinary users to organize an effort to blacklist the given blocks, a massive and likely infeasible coordination problem on a similar scale as that of pulling off a successful 51% attack. In the case of Bitcoin, this is currently a problem, but there exists a blockchain modification [suggested by Peter Todd](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/) which will alleviate this issue.
+
+In the near term, Ethereum will use two additional strategies to cope with this problem. First, because of the blockchain-based mining algorithms, at least every miner will be forced to be a full node, creating a lower bound on the number of full nodes. Second and more importantly, however, we will include an intermediate state tree root in the blockchain after processing each transaction. Even if block validation is centralized, as long as one honest verifying node exists, the centralization problem can be circumvented via a verification protocol. If a miner publishes an invalid block, that block must either be badly formatted, or the state `S[n]` is incorrect. Since `S[0]` is known to be correct, there must be some first state `S[i]` that is incorrect where `S[i-1]` is correct. The verifying node would provide the index `i`, along with a "proof of invalidity" consisting of the subset of Patricia tree nodes needing to process `APPLY(S[i-1],TX[i]) -> S[i]`. Nodes would be able to use those nodes to run that part of the computation, and see that the `S[i]` generated does not match the `S[i]` provided.
+
+Another, more sophisticated, attack would involve the malicious miners publishing incomplete blocks, so the full information does not even exist to determine whether or not blocks are valid. The solution to this is a challenge-response protocol: verification nodes issue "challenges" in the form of target transaction indices, and upon receiving a node a light node treats the block as untrusted until another node, whether the miner or another verifier, provides a subset of Patricia nodes as a proof of validity.
+
+## Conclusion {#conclusion}
+
+The Ethereum protocol was originally conceived as an upgraded version of a cryptocurrency, providing advanced features such as on-blockchain escrow, withdrawal limits, financial contracts, gambling markets and the like via a highly generalized programming language. The Ethereum protocol would not "support" any of the applications directly, but the existence of a Turing-complete programming language means that arbitrary contracts can theoretically be created for any transaction type or application. What is more interesting about Ethereum, however, is that the Ethereum protocol moves far beyond just currency. Protocols around decentralized file storage, decentralized computation and decentralized prediction markets, among dozens of other such concepts, have the potential to substantially increase the efficiency of the computational industry, and provide a massive boost to other peer-to-peer protocols by adding for the first time an economic layer. Finally, there is also a substantial array of applications that have nothing to do with money at all.
+
+The concept of an arbitrary state transition function as implemented by the Ethereum protocol provides for a platform with unique potential; rather than being a closed-ended, single-purpose protocol intended for a specific array of applications in data storage, gambling or finance, Ethereum is open-ended by design, and we believe that it is extremely well-suited to serving as a foundational layer for a very large number of both financial and non-financial protocols in the years to come.
+
+## Notes and Further Reading {#notes-and-further-reading}
+
+### Notes {#notes}
+
+1. A sophisticated reader may notice that in fact a Bitcoin address is the hash of the elliptic curve public key, and not the public key itself. However, it is in fact perfectly legitimate cryptographic terminology to refer to the pubkey hash as a public key itself. This is because Bitcoin's cryptography can be considered to be a custom digital signature algorithm, where the public key consists of the hash of the ECC pubkey, the signature consists of the ECC pubkey concatenated with the ECC signature, and the verification algorithm involves checking the ECC pubkey in the signature against the ECC pubkey hash provided as a public key and then verifying the ECC signature against the ECC pubkey.
+2. Technically, the median of the 11 previous blocks.
+3. Internally, 2 and "CHARLIE" are both numbers[fn3](#notes), with the latter being in big-endian base 256 representation. Numbers can be at least 0 and at most 2256-1.
+
+### Further Reading {#further-reading}
+
+1. [Intrinsic value](http://bitcoinmagazine.com/8640/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. [Reusable proofs of work](https://nakamotoinstitute.org/finney/rpow/)
+6. [Secure property titles with owner authority](https://nakamotoinstitute.org/secure-property-titles/)
+7. [Bitcoin whitepaper](http://bitcoin.org/bitcoin.pdf)
+8. [Namecoin](https://namecoin.org/)
+9. [Zooko's triangle](https://wikipedia.org/wiki/Zooko's_triangle)
+10. [Colored coins whitepaper](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)
+11. [Mastercoin whitepaper](https://github.com/mastercoin-MSC/spec)
+12. [Decentralized autonomous corporations, Bitcoin Magazine](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)
+13. [Simplified payment verification](https://en.bitcoin.it/wiki/Scalability#Simplified_payment_verification)
+14. [Merkle trees](https://wikipedia.org/wiki/Merkle_tree)
+15. [Patricia trees](https://wikipedia.org/wiki/Patricia_tree)
+16. [GHOST](https://eprint.iacr.org/2013/881.pdf)
+17. [StorJ and Autonomous Agents, Jeff Garzik](http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoin-autonomous-agents.html)
+18. [Mike Hearn on Smart Property at Turing Festival](https://www.youtube.com/watch?v=MVyv4t0OKe4)
+19. [Ethereum RLP](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP)
+20. [Ethereum Merkle Patricia trees](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-Patricia-Tree)
+21. [Peter Todd on Merkle sum trees](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/)
+
+_For history of the whitepaper, see [this wiki](https://github.com/ethereum/wiki/blob/old-before-deleting-all-files-go-to-wiki-wiki-instead/old-whitepaper-for-historical-reference.md)._
+
+_Ethereum, like many community-driven, open-source software projects, has evolved since its initial inception. To learn about the latest developments of Ethereum, and how changes to the protocol are made, we recommend [this guide](/learn/)._
diff --git a/src/content/whitepaper/spv-bitcoin.png b/public/content/whitepaper/spv-bitcoin.png
similarity index 100%
rename from src/content/whitepaper/spv-bitcoin.png
rename to public/content/whitepaper/spv-bitcoin.png
diff --git a/src/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf b/public/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf
similarity index 100%
rename from src/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf
rename to public/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf
diff --git a/src/content/zero-knowledge-proofs/index.md b/public/content/zero-knowledge-proofs/index.md
similarity index 100%
rename from src/content/zero-knowledge-proofs/index.md
rename to public/content/zero-knowledge-proofs/index.md
diff --git a/src/assets/dapps/aave.png b/public/dapps/aave.png
similarity index 100%
rename from src/assets/dapps/aave.png
rename to public/dapps/aave.png
diff --git a/src/assets/dapps/ankr.png b/public/dapps/ankr.png
similarity index 100%
rename from src/assets/dapps/ankr.png
rename to public/dapps/ankr.png
diff --git a/src/assets/dapps/api3.png b/public/dapps/api3.png
similarity index 100%
rename from src/assets/dapps/api3.png
rename to public/dapps/api3.png
diff --git a/src/assets/dapps/artblocks.png b/public/dapps/artblocks.png
similarity index 100%
rename from src/assets/dapps/artblocks.png
rename to public/dapps/artblocks.png
diff --git a/src/assets/dapps/arweave.png b/public/dapps/arweave.png
similarity index 100%
rename from src/assets/dapps/arweave.png
rename to public/dapps/arweave.png
diff --git a/src/assets/dapps/asyncart.png b/public/dapps/asyncart.png
similarity index 100%
rename from src/assets/dapps/asyncart.png
rename to public/dapps/asyncart.png
diff --git a/src/assets/dapps/audius.png b/public/dapps/audius.png
similarity index 100%
rename from src/assets/dapps/audius.png
rename to public/dapps/audius.png
diff --git a/src/assets/dapps/augur.png b/public/dapps/augur.png
similarity index 100%
rename from src/assets/dapps/augur.png
rename to public/dapps/augur.png
diff --git a/src/assets/dapps/axie.png b/public/dapps/axie.png
similarity index 100%
rename from src/assets/dapps/axie.png
rename to public/dapps/axie.png
diff --git a/src/assets/dapps/balancer.png b/public/dapps/balancer.png
similarity index 100%
rename from src/assets/dapps/balancer.png
rename to public/dapps/balancer.png
diff --git a/src/assets/dapps/brave.png b/public/dapps/brave.png
similarity index 100%
rename from src/assets/dapps/brave.png
rename to public/dapps/brave.png
diff --git a/src/assets/dapps/compound.png b/public/dapps/compound.png
similarity index 100%
rename from src/assets/dapps/compound.png
rename to public/dapps/compound.png
diff --git a/src/assets/dapps/convex.png b/public/dapps/convex.png
similarity index 100%
rename from src/assets/dapps/convex.png
rename to public/dapps/convex.png
diff --git a/src/assets/dapps/cryptopunks.png b/public/dapps/cryptopunks.png
similarity index 100%
rename from src/assets/dapps/cryptopunks.png
rename to public/dapps/cryptopunks.png
diff --git a/src/assets/dapps/cryptovoxels.png b/public/dapps/cryptovoxels.png
similarity index 100%
rename from src/assets/dapps/cryptovoxels.png
rename to public/dapps/cryptovoxels.png
diff --git a/src/assets/dapps/curve.png b/public/dapps/curve.png
similarity index 100%
rename from src/assets/dapps/curve.png
rename to public/dapps/curve.png
diff --git a/src/assets/dapps/cyberconnect.png b/public/dapps/cyberconnect.png
similarity index 100%
rename from src/assets/dapps/cyberconnect.png
rename to public/dapps/cyberconnect.png
diff --git a/src/assets/dapps/darkforest.png b/public/dapps/darkforest.png
similarity index 100%
rename from src/assets/dapps/darkforest.png
rename to public/dapps/darkforest.png
diff --git a/src/assets/dapps/decentraland.png b/public/dapps/decentraland.png
similarity index 100%
rename from src/assets/dapps/decentraland.png
rename to public/dapps/decentraland.png
diff --git a/src/assets/dapps/dexguru.png b/public/dapps/dexguru.png
similarity index 100%
rename from src/assets/dapps/dexguru.png
rename to public/dapps/dexguru.png
diff --git a/src/assets/dapps/dodo.png b/public/dapps/dodo.png
similarity index 100%
rename from src/assets/dapps/dodo.png
rename to public/dapps/dodo.png
diff --git a/public/dapps/ens.png b/public/dapps/ens.png
new file mode 100644
index 00000000000..5f700a11724
Binary files /dev/null and b/public/dapps/ens.png differ
diff --git a/src/assets/dapps/etherisc.png b/public/dapps/etherisc.png
similarity index 100%
rename from src/assets/dapps/etherisc.png
rename to public/dapps/etherisc.png
diff --git a/src/assets/dapps/foundation.png b/public/dapps/foundation.png
similarity index 100%
rename from src/assets/dapps/foundation.png
rename to public/dapps/foundation.png
diff --git a/src/assets/dapps/gitcoin.png b/public/dapps/gitcoin.png
similarity index 100%
rename from src/assets/dapps/gitcoin.png
rename to public/dapps/gitcoin.png
diff --git a/src/assets/dapps/gm.png b/public/dapps/gm.png
similarity index 100%
rename from src/assets/dapps/gm.png
rename to public/dapps/gm.png
diff --git a/src/assets/dapps/gods.png b/public/dapps/gods.png
similarity index 100%
rename from src/assets/dapps/gods.png
rename to public/dapps/gods.png
diff --git a/src/assets/dapps/golem.png b/public/dapps/golem.png
similarity index 100%
rename from src/assets/dapps/golem.png
rename to public/dapps/golem.png
diff --git a/src/assets/dapps/graph.png b/public/dapps/graph.png
similarity index 100%
rename from src/assets/dapps/graph.png
rename to public/dapps/graph.png
diff --git a/src/assets/dapps/index-coop.png b/public/dapps/index-coop.png
similarity index 100%
rename from src/assets/dapps/index-coop.png
rename to public/dapps/index-coop.png
diff --git a/src/assets/dapps/ipfs.png b/public/dapps/ipfs.png
similarity index 100%
rename from src/assets/dapps/ipfs.png
rename to public/dapps/ipfs.png
diff --git a/src/assets/dapps/krystal.png b/public/dapps/krystal.png
similarity index 100%
rename from src/assets/dapps/krystal.png
rename to public/dapps/krystal.png
diff --git a/src/assets/dapps/kyberswap.png b/public/dapps/kyberswap.png
similarity index 100%
rename from src/assets/dapps/kyberswap.png
rename to public/dapps/kyberswap.png
diff --git a/src/assets/dapps/lido.png b/public/dapps/lido.png
similarity index 100%
rename from src/assets/dapps/lido.png
rename to public/dapps/lido.png
diff --git a/src/assets/dapps/loopring.png b/public/dapps/loopring.png
similarity index 100%
rename from src/assets/dapps/loopring.png
rename to public/dapps/loopring.png
diff --git a/src/assets/dapps/marble.png b/public/dapps/marble.png
similarity index 100%
rename from src/assets/dapps/marble.png
rename to public/dapps/marble.png
diff --git a/src/assets/dapps/matcha.png b/public/dapps/matcha.png
similarity index 100%
rename from src/assets/dapps/matcha.png
rename to public/dapps/matcha.png
diff --git a/src/assets/dapps/mirror.png b/public/dapps/mirror.png
similarity index 100%
rename from src/assets/dapps/mirror.png
rename to public/dapps/mirror.png
diff --git a/src/assets/dapps/multichain.png b/public/dapps/multichain.png
similarity index 100%
rename from src/assets/dapps/multichain.png
rename to public/dapps/multichain.png
diff --git a/src/assets/dapps/nexus.png b/public/dapps/nexus.png
similarity index 100%
rename from src/assets/dapps/nexus.png
rename to public/dapps/nexus.png
diff --git a/src/assets/dapps/nifty.png b/public/dapps/nifty.png
similarity index 100%
rename from src/assets/dapps/nifty.png
rename to public/dapps/nifty.png
diff --git a/src/assets/dapps/opensea.png b/public/dapps/opensea.png
similarity index 100%
rename from src/assets/dapps/opensea.png
rename to public/dapps/opensea.png
diff --git a/src/assets/dapps/opera.png b/public/dapps/opera.png
similarity index 100%
rename from src/assets/dapps/opera.png
rename to public/dapps/opera.png
diff --git a/src/assets/dapps/osuvox.png b/public/dapps/osuvox.png
similarity index 100%
rename from src/assets/dapps/osuvox.png
rename to public/dapps/osuvox.png
diff --git a/src/assets/dapps/poap.png b/public/dapps/poap.png
similarity index 100%
rename from src/assets/dapps/poap.png
rename to public/dapps/poap.png
diff --git a/src/assets/dapps/polymarket.png b/public/dapps/polymarket.png
similarity index 100%
rename from src/assets/dapps/polymarket.png
rename to public/dapps/polymarket.png
diff --git a/src/assets/dapps/pooltogether.png b/public/dapps/pooltogether.png
similarity index 100%
rename from src/assets/dapps/pooltogether.png
rename to public/dapps/pooltogether.png
diff --git a/src/assets/dapps/pwn.png b/public/dapps/pwn.png
similarity index 100%
rename from src/assets/dapps/pwn.png
rename to public/dapps/pwn.png
diff --git a/src/assets/dapps/radicle.png b/public/dapps/radicle.png
similarity index 100%
rename from src/assets/dapps/radicle.png
rename to public/dapps/radicle.png
diff --git a/src/assets/dapps/rarible.png b/public/dapps/rarible.png
similarity index 100%
rename from src/assets/dapps/rarible.png
rename to public/dapps/rarible.png
diff --git a/src/assets/dapps/rotki.png b/public/dapps/rotki.png
similarity index 100%
rename from src/assets/dapps/rotki.png
rename to public/dapps/rotki.png
diff --git a/src/assets/dapps/rubic.png b/public/dapps/rubic.png
similarity index 100%
rename from src/assets/dapps/rubic.png
rename to public/dapps/rubic.png
diff --git a/src/assets/dapps/sablier.png b/public/dapps/sablier.png
similarity index 100%
rename from src/assets/dapps/sablier.png
rename to public/dapps/sablier.png
diff --git a/src/assets/dapps/set.png b/public/dapps/set.png
similarity index 100%
rename from src/assets/dapps/set.png
rename to public/dapps/set.png
diff --git a/src/assets/dapps/skiff.png b/public/dapps/skiff.png
similarity index 100%
rename from src/assets/dapps/skiff.png
rename to public/dapps/skiff.png
diff --git a/src/assets/dapps/spatial.png b/public/dapps/spatial.png
similarity index 100%
rename from src/assets/dapps/spatial.png
rename to public/dapps/spatial.png
diff --git a/src/assets/dapps/spruce.png b/public/dapps/spruce.png
similarity index 100%
rename from src/assets/dapps/spruce.png
rename to public/dapps/spruce.png
diff --git a/src/assets/dapps/stabledai.png b/public/dapps/stabledai.png
similarity index 100%
rename from src/assets/dapps/stabledai.png
rename to public/dapps/stabledai.png
diff --git a/src/assets/dapps/status.png b/public/dapps/status.png
similarity index 100%
rename from src/assets/dapps/status.png
rename to public/dapps/status.png
diff --git a/src/assets/dapps/superrare.png b/public/dapps/superrare.png
similarity index 100%
rename from src/assets/dapps/superrare.png
rename to public/dapps/superrare.png
diff --git a/src/assets/dapps/synthetix.png b/public/dapps/synthetix.png
similarity index 100%
rename from src/assets/dapps/synthetix.png
rename to public/dapps/synthetix.png
diff --git a/src/assets/dapps/tornado.png b/public/dapps/tornado.png
similarity index 100%
rename from src/assets/dapps/tornado.png
rename to public/dapps/tornado.png
diff --git a/src/assets/dapps/uni.png b/public/dapps/uni.png
similarity index 100%
rename from src/assets/dapps/uni.png
rename to public/dapps/uni.png
diff --git a/src/assets/dapps/xmtp.png b/public/dapps/xmtp.png
similarity index 100%
rename from src/assets/dapps/xmtp.png
rename to public/dapps/xmtp.png
diff --git a/src/assets/dapps/yearn.png b/public/dapps/yearn.png
similarity index 100%
rename from src/assets/dapps/yearn.png
rename to public/dapps/yearn.png
diff --git a/src/assets/dapps/zapper.png b/public/dapps/zapper.png
similarity index 100%
rename from src/assets/dapps/zapper.png
rename to public/dapps/zapper.png
diff --git a/src/assets/dapps/zerion.png b/public/dapps/zerion.png
similarity index 100%
rename from src/assets/dapps/zerion.png
rename to public/dapps/zerion.png
diff --git a/src/assets/deep-panic.png b/public/deep-panic.png
similarity index 100%
rename from src/assets/deep-panic.png
rename to public/deep-panic.png
diff --git a/src/assets/deprecated-software/parity-logo-5chdn.svg b/public/deprecated-software/parity-logo-5chdn.svg
similarity index 100%
rename from src/assets/deprecated-software/parity-logo-5chdn.svg
rename to public/deprecated-software/parity-logo-5chdn.svg
diff --git a/src/assets/deprecated-software/sparkpool-logo-05f46574eac2ad_876.png b/public/deprecated-software/sparkpool-logo-05f46574eac2ad_876.png
similarity index 100%
rename from src/assets/deprecated-software/sparkpool-logo-05f46574eac2ad_876.png
rename to public/deprecated-software/sparkpool-logo-05f46574eac2ad_876.png
diff --git a/src/assets/dev-tools/Vscode.png b/public/dev-tools/Vscode.png
similarity index 100%
rename from src/assets/dev-tools/Vscode.png
rename to public/dev-tools/Vscode.png
diff --git a/src/assets/dev-tools/alchemyuniversity.png b/public/dev-tools/alchemyuniversity.png
similarity index 100%
rename from src/assets/dev-tools/alchemyuniversity.png
rename to public/dev-tools/alchemyuniversity.png
diff --git a/src/assets/dev-tools/atom.png b/public/dev-tools/atom.png
similarity index 100%
rename from src/assets/dev-tools/atom.png
rename to public/dev-tools/atom.png
diff --git a/src/assets/dev-tools/bloomtech.png b/public/dev-tools/bloomtech.png
similarity index 100%
rename from src/assets/dev-tools/bloomtech.png
rename to public/dev-tools/bloomtech.png
diff --git a/src/assets/dev-tools/buildspace.png b/public/dev-tools/buildspace.png
similarity index 100%
rename from src/assets/dev-tools/buildspace.png
rename to public/dev-tools/buildspace.png
diff --git a/src/assets/dev-tools/capturetheether.png b/public/dev-tools/capturetheether.png
similarity index 100%
rename from src/assets/dev-tools/capturetheether.png
rename to public/dev-tools/capturetheether.png
diff --git a/src/assets/dev-tools/chainIDE.png b/public/dev-tools/chainIDE.png
similarity index 100%
rename from src/assets/dev-tools/chainIDE.png
rename to public/dev-tools/chainIDE.png
diff --git a/src/assets/dev-tools/chainshot.png b/public/dev-tools/chainshot.png
similarity index 100%
rename from src/assets/dev-tools/chainshot.png
rename to public/dev-tools/chainshot.png
diff --git a/src/assets/dev-tools/consensys.png b/public/dev-tools/consensys.png
similarity index 100%
rename from src/assets/dev-tools/consensys.png
rename to public/dev-tools/consensys.png
diff --git a/src/assets/dev-tools/crypto-zombie.png b/public/dev-tools/crypto-zombie.png
similarity index 100%
rename from src/assets/dev-tools/crypto-zombie.png
rename to public/dev-tools/crypto-zombie.png
diff --git a/src/assets/dev-tools/epirus.png b/public/dev-tools/epirus.png
similarity index 100%
rename from src/assets/dev-tools/epirus.png
rename to public/dev-tools/epirus.png
diff --git a/src/assets/dev-tools/eth-dot-build.png b/public/dev-tools/eth-dot-build.png
similarity index 100%
rename from src/assets/dev-tools/eth-dot-build.png
rename to public/dev-tools/eth-dot-build.png
diff --git a/src/assets/dev-tools/ethers.png b/public/dev-tools/ethers.png
similarity index 100%
rename from src/assets/dev-tools/ethers.png
rename to public/dev-tools/ethers.png
diff --git a/src/assets/dev-tools/foundry.png b/public/dev-tools/foundry.png
similarity index 100%
rename from src/assets/dev-tools/foundry.png
rename to public/dev-tools/foundry.png
diff --git a/src/assets/dev-tools/ganache.png b/public/dev-tools/ganache.png
similarity index 100%
rename from src/assets/dev-tools/ganache.png
rename to public/dev-tools/ganache.png
diff --git a/src/assets/dev-tools/hardhat.png b/public/dev-tools/hardhat.png
similarity index 100%
rename from src/assets/dev-tools/hardhat.png
rename to public/dev-tools/hardhat.png
diff --git a/src/assets/dev-tools/kurtosis.png b/public/dev-tools/kurtosis.png
similarity index 100%
rename from src/assets/dev-tools/kurtosis.png
rename to public/dev-tools/kurtosis.png
diff --git a/src/assets/dev-tools/metaschool.png b/public/dev-tools/metaschool.png
similarity index 100%
rename from src/assets/dev-tools/metaschool.png
rename to public/dev-tools/metaschool.png
diff --git a/src/assets/dev-tools/nftschool.png b/public/dev-tools/nftschool.png
similarity index 100%
rename from src/assets/dev-tools/nftschool.png
rename to public/dev-tools/nftschool.png
diff --git a/src/assets/dev-tools/openzeppelin.png b/public/dev-tools/openzeppelin.png
similarity index 100%
rename from src/assets/dev-tools/openzeppelin.png
rename to public/dev-tools/openzeppelin.png
diff --git a/src/assets/dev-tools/oz.png b/public/dev-tools/oz.png
similarity index 100%
rename from src/assets/dev-tools/oz.png
rename to public/dev-tools/oz.png
diff --git a/src/assets/dev-tools/platzi.png b/public/dev-tools/platzi.png
similarity index 100%
rename from src/assets/dev-tools/platzi.png
rename to public/dev-tools/platzi.png
diff --git a/src/assets/dev-tools/pointer.png b/public/dev-tools/pointer.png
similarity index 100%
rename from src/assets/dev-tools/pointer.png
rename to public/dev-tools/pointer.png
diff --git a/src/assets/dev-tools/questbook.png b/public/dev-tools/questbook.png
similarity index 100%
rename from src/assets/dev-tools/questbook.png
rename to public/dev-tools/questbook.png
diff --git a/src/assets/dev-tools/remix.png b/public/dev-tools/remix.png
similarity index 100%
rename from src/assets/dev-tools/remix.png
rename to public/dev-tools/remix.png
diff --git a/src/assets/dev-tools/replit.png b/public/dev-tools/replit.png
similarity index 100%
rename from src/assets/dev-tools/replit.png
rename to public/dev-tools/replit.png
diff --git a/src/assets/dev-tools/scaffold-eth.png b/public/dev-tools/scaffold-eth.png
similarity index 100%
rename from src/assets/dev-tools/scaffold-eth.png
rename to public/dev-tools/scaffold-eth.png
diff --git a/src/assets/dev-tools/scaffoldeth.png b/public/dev-tools/scaffoldeth.png
similarity index 100%
rename from src/assets/dev-tools/scaffoldeth.png
rename to public/dev-tools/scaffoldeth.png
diff --git a/src/assets/dev-tools/solidity.png b/public/dev-tools/solidity.png
similarity index 100%
rename from src/assets/dev-tools/solidity.png
rename to public/dev-tools/solidity.png
diff --git a/src/assets/dev-tools/speed-run-ethereum.png b/public/dev-tools/speed-run-ethereum.png
similarity index 100%
rename from src/assets/dev-tools/speed-run-ethereum.png
rename to public/dev-tools/speed-run-ethereum.png
diff --git a/src/assets/dev-tools/studio.png b/public/dev-tools/studio.png
similarity index 100%
rename from src/assets/dev-tools/studio.png
rename to public/dev-tools/studio.png
diff --git a/src/assets/dev-tools/tenderly.png b/public/dev-tools/tenderly.png
similarity index 100%
rename from src/assets/dev-tools/tenderly.png
rename to public/dev-tools/tenderly.png
diff --git a/src/assets/dev-tools/truffle.png b/public/dev-tools/truffle.png
similarity index 100%
rename from src/assets/dev-tools/truffle.png
rename to public/dev-tools/truffle.png
diff --git a/src/assets/dev-tools/vyper.png b/public/dev-tools/vyper.png
similarity index 100%
rename from src/assets/dev-tools/vyper.png
rename to public/dev-tools/vyper.png
diff --git a/src/assets/dev-tools/waffle.png b/public/dev-tools/waffle.png
similarity index 100%
rename from src/assets/dev-tools/waffle.png
rename to public/dev-tools/waffle.png
diff --git a/src/assets/dev-tools/web3js.png b/public/dev-tools/web3js.png
similarity index 100%
rename from src/assets/dev-tools/web3js.png
rename to public/dev-tools/web3js.png
diff --git a/src/assets/dev-tools/web3university.png b/public/dev-tools/web3university.png
similarity index 100%
rename from src/assets/dev-tools/web3university.png
rename to public/dev-tools/web3university.png
diff --git a/src/assets/dev-tools/workbench.png b/public/dev-tools/workbench.png
similarity index 100%
rename from src/assets/dev-tools/workbench.png
rename to public/dev-tools/workbench.png
diff --git a/src/assets/developers-eth-blocks.png b/public/developers-eth-blocks.png
similarity index 100%
rename from src/assets/developers-eth-blocks.png
rename to public/developers-eth-blocks.png
diff --git a/src/assets/doge-computer.png b/public/doge-computer.png
similarity index 100%
rename from src/assets/doge-computer.png
rename to public/doge-computer.png
diff --git a/src/assets/ef-logo-white.png b/public/ef-logo-white.png
similarity index 100%
rename from src/assets/ef-logo-white.png
rename to public/ef-logo-white.png
diff --git a/src/assets/ef-logo.png b/public/ef-logo.png
similarity index 100%
rename from src/assets/ef-logo.png
rename to public/ef-logo.png
diff --git a/src/assets/enterprise-eth.png b/public/enterprise-eth.png
similarity index 100%
rename from src/assets/enterprise-eth.png
rename to public/enterprise-eth.png
diff --git a/src/assets/enterprise.png b/public/enterprise.png
similarity index 100%
rename from src/assets/enterprise.png
rename to public/enterprise.png
diff --git a/src/assets/eth-gif-cat.png b/public/eth-gif-cat.png
similarity index 100%
rename from src/assets/eth-gif-cat.png
rename to public/eth-gif-cat.png
diff --git a/src/assets/eth-gif-chalk.png b/public/eth-gif-chalk.png
similarity index 100%
rename from src/assets/eth-gif-chalk.png
rename to public/eth-gif-chalk.png
diff --git a/src/assets/eth-gif-rainbow.svg b/public/eth-gif-rainbow.svg
similarity index 100%
rename from src/assets/eth-gif-rainbow.svg
rename to public/eth-gif-rainbow.svg
diff --git a/src/assets/eth-gif-sun.png b/public/eth-gif-sun.png
similarity index 100%
rename from src/assets/eth-gif-sun.png
rename to public/eth-gif-sun.png
diff --git a/src/assets/eth-gif-waves.png b/public/eth-gif-waves.png
similarity index 100%
rename from src/assets/eth-gif-waves.png
rename to public/eth-gif-waves.png
diff --git a/src/assets/eth-home-icon.png b/public/eth-home-icon.png
similarity index 100%
rename from src/assets/eth-home-icon.png
rename to public/eth-home-icon.png
diff --git a/src/assets/eth-logo-grey.png b/public/eth-logo-grey.png
similarity index 100%
rename from src/assets/eth-logo-grey.png
rename to public/eth-logo-grey.png
diff --git a/src/assets/eth-logo.png b/public/eth-logo.png
similarity index 100%
rename from src/assets/eth-logo.png
rename to public/eth-logo.png
diff --git a/src/assets/eth-pattern.png b/public/eth-pattern.png
similarity index 100%
rename from src/assets/eth-pattern.png
rename to public/eth-pattern.png
diff --git a/src/assets/eth.png b/public/eth.png
similarity index 100%
rename from src/assets/eth.png
rename to public/eth.png
diff --git a/src/assets/ethereum-hero-dark.mp4 b/public/ethereum-hero-dark.mp4
similarity index 100%
rename from src/assets/ethereum-hero-dark.mp4
rename to public/ethereum-hero-dark.mp4
diff --git a/src/assets/ethereum-hero-light.mp4 b/public/ethereum-hero-light.mp4
similarity index 100%
rename from src/assets/ethereum-hero-light.mp4
rename to public/ethereum-hero-light.mp4
diff --git a/src/assets/ethereum-learn.png b/public/ethereum-learn.png
similarity index 100%
rename from src/assets/ethereum-learn.png
rename to public/ethereum-learn.png
diff --git a/src/assets/ethereum-logo-wireframe.png b/public/ethereum-logo-wireframe.png
similarity index 100%
rename from src/assets/ethereum-logo-wireframe.png
rename to public/ethereum-logo-wireframe.png
diff --git a/src/assets/ethereum-studio-image.png b/public/ethereum-studio-image.png
similarity index 100%
rename from src/assets/ethereum-studio-image.png
rename to public/ethereum-studio-image.png
diff --git a/src/assets/exchanges/1inch.png b/public/exchanges/1inch.png
similarity index 100%
rename from src/assets/exchanges/1inch.png
rename to public/exchanges/1inch.png
diff --git a/src/assets/exchanges/bancor.png b/public/exchanges/bancor.png
similarity index 100%
rename from src/assets/exchanges/bancor.png
rename to public/exchanges/bancor.png
diff --git a/src/assets/exchanges/binance.png b/public/exchanges/binance.png
similarity index 100%
rename from src/assets/exchanges/binance.png
rename to public/exchanges/binance.png
diff --git a/src/assets/exchanges/bitbuy.png b/public/exchanges/bitbuy.png
similarity index 100%
rename from src/assets/exchanges/bitbuy.png
rename to public/exchanges/bitbuy.png
diff --git a/src/assets/exchanges/bitfinex.png b/public/exchanges/bitfinex.png
similarity index 100%
rename from src/assets/exchanges/bitfinex.png
rename to public/exchanges/bitfinex.png
diff --git a/src/assets/exchanges/bitflyer.png b/public/exchanges/bitflyer.png
similarity index 100%
rename from src/assets/exchanges/bitflyer.png
rename to public/exchanges/bitflyer.png
diff --git a/src/assets/exchanges/bitkub.png b/public/exchanges/bitkub.png
similarity index 100%
rename from src/assets/exchanges/bitkub.png
rename to public/exchanges/bitkub.png
diff --git a/src/assets/exchanges/bitso.png b/public/exchanges/bitso.png
similarity index 100%
rename from src/assets/exchanges/bitso.png
rename to public/exchanges/bitso.png
diff --git a/src/assets/exchanges/bittrex.png b/public/exchanges/bittrex.png
similarity index 100%
rename from src/assets/exchanges/bittrex.png
rename to public/exchanges/bittrex.png
diff --git a/src/assets/exchanges/bitvavo.png b/public/exchanges/bitvavo.png
similarity index 100%
rename from src/assets/exchanges/bitvavo.png
rename to public/exchanges/bitvavo.png
diff --git a/src/assets/exchanges/bybit.png b/public/exchanges/bybit.png
similarity index 100%
rename from src/assets/exchanges/bybit.png
rename to public/exchanges/bybit.png
diff --git a/src/assets/exchanges/coinbase.png b/public/exchanges/coinbase.png
similarity index 100%
rename from src/assets/exchanges/coinbase.png
rename to public/exchanges/coinbase.png
diff --git a/src/assets/exchanges/coinmama.png b/public/exchanges/coinmama.png
similarity index 100%
rename from src/assets/exchanges/coinmama.png
rename to public/exchanges/coinmama.png
diff --git a/src/assets/exchanges/coinspot.png b/public/exchanges/coinspot.png
similarity index 100%
rename from src/assets/exchanges/coinspot.png
rename to public/exchanges/coinspot.png
diff --git a/src/assets/exchanges/crypto.com.png b/public/exchanges/crypto.com.png
similarity index 100%
rename from src/assets/exchanges/crypto.com.png
rename to public/exchanges/crypto.com.png
diff --git a/src/assets/exchanges/dydx.png b/public/exchanges/dydx.png
similarity index 100%
rename from src/assets/exchanges/dydx.png
rename to public/exchanges/dydx.png
diff --git a/src/assets/exchanges/easycrypto.png b/public/exchanges/easycrypto.png
similarity index 100%
rename from src/assets/exchanges/easycrypto.png
rename to public/exchanges/easycrypto.png
diff --git a/src/assets/exchanges/gateio.png b/public/exchanges/gateio.png
similarity index 100%
rename from src/assets/exchanges/gateio.png
rename to public/exchanges/gateio.png
diff --git a/src/assets/exchanges/gemini.png b/public/exchanges/gemini.png
similarity index 100%
rename from src/assets/exchanges/gemini.png
rename to public/exchanges/gemini.png
diff --git a/src/assets/exchanges/huobiglobal.png b/public/exchanges/huobiglobal.png
similarity index 100%
rename from src/assets/exchanges/huobiglobal.png
rename to public/exchanges/huobiglobal.png
diff --git a/src/assets/exchanges/itezcom.png b/public/exchanges/itezcom.png
similarity index 100%
rename from src/assets/exchanges/itezcom.png
rename to public/exchanges/itezcom.png
diff --git a/src/assets/exchanges/korbit.png b/public/exchanges/korbit.png
similarity index 100%
rename from src/assets/exchanges/korbit.png
rename to public/exchanges/korbit.png
diff --git a/src/assets/exchanges/kraken.png b/public/exchanges/kraken.png
similarity index 100%
rename from src/assets/exchanges/kraken.png
rename to public/exchanges/kraken.png
diff --git a/src/assets/exchanges/kucoin.png b/public/exchanges/kucoin.png
similarity index 100%
rename from src/assets/exchanges/kucoin.png
rename to public/exchanges/kucoin.png
diff --git a/src/assets/exchanges/kyber.png b/public/exchanges/kyber.png
similarity index 100%
rename from src/assets/exchanges/kyber.png
rename to public/exchanges/kyber.png
diff --git a/src/assets/exchanges/loopring.png b/public/exchanges/loopring.png
similarity index 100%
rename from src/assets/exchanges/loopring.png
rename to public/exchanges/loopring.png
diff --git a/src/assets/exchanges/matcha.png b/public/exchanges/matcha.png
similarity index 100%
rename from src/assets/exchanges/matcha.png
rename to public/exchanges/matcha.png
diff --git a/src/assets/exchanges/moonpay.png b/public/exchanges/moonpay.png
similarity index 100%
rename from src/assets/exchanges/moonpay.png
rename to public/exchanges/moonpay.png
diff --git a/src/assets/exchanges/mtpelerin.png b/public/exchanges/mtpelerin.png
similarity index 100%
rename from src/assets/exchanges/mtpelerin.png
rename to public/exchanges/mtpelerin.png
diff --git a/src/assets/exchanges/okx.png b/public/exchanges/okx.png
similarity index 100%
rename from src/assets/exchanges/okx.png
rename to public/exchanges/okx.png
diff --git a/src/assets/exchanges/rain.png b/public/exchanges/rain.png
similarity index 100%
rename from src/assets/exchanges/rain.png
rename to public/exchanges/rain.png
diff --git a/src/assets/exchanges/shakepay.png b/public/exchanges/shakepay.png
similarity index 100%
rename from src/assets/exchanges/shakepay.png
rename to public/exchanges/shakepay.png
diff --git a/src/assets/exchanges/uniswap.png b/public/exchanges/uniswap.png
similarity index 100%
rename from src/assets/exchanges/uniswap.png
rename to public/exchanges/uniswap.png
diff --git a/src/assets/exchanges/wazirx.png b/public/exchanges/wazirx.png
similarity index 100%
rename from src/assets/exchanges/wazirx.png
rename to public/exchanges/wazirx.png
diff --git a/src/assets/favicon.png b/public/favicon.png
similarity index 100%
rename from src/assets/favicon.png
rename to public/favicon.png
diff --git a/src/assets/finance_transparent.png b/public/finance_transparent.png
similarity index 100%
rename from src/assets/finance_transparent.png
rename to public/finance_transparent.png
diff --git a/src/assets/future_transparent.png b/public/future_transparent.png
similarity index 100%
rename from src/assets/future_transparent.png
rename to public/future_transparent.png
diff --git a/src/assets/get-eth.png b/public/get-eth.png
similarity index 100%
rename from src/assets/get-eth.png
rename to public/get-eth.png
diff --git a/src/assets/hackathon_transparent.png b/public/hackathon_transparent.png
similarity index 100%
rename from src/assets/hackathon_transparent.png
rename to public/hackathon_transparent.png
diff --git a/src/assets/heroes/community-hero.png b/public/heroes/community-hero.png
similarity index 100%
rename from src/assets/heroes/community-hero.png
rename to public/heroes/community-hero.png
diff --git a/src/assets/heroes/developers-hub-hero.jpg b/public/heroes/developers-hub-hero.jpg
similarity index 100%
rename from src/assets/heroes/developers-hub-hero.jpg
rename to public/heroes/developers-hub-hero.jpg
diff --git a/src/assets/heroes/garden.jpg b/public/heroes/garden.jpg
similarity index 100%
rename from src/assets/heroes/garden.jpg
rename to public/heroes/garden.jpg
diff --git a/src/assets/heroes/guides-hub-hero.jpg b/public/heroes/guides-hub-hero.jpg
similarity index 100%
rename from src/assets/heroes/guides-hub-hero.jpg
rename to public/heroes/guides-hub-hero.jpg
diff --git a/src/assets/heroes/layer-2-hub-hero.jpg b/public/heroes/layer-2-hub-hero.jpg
similarity index 100%
rename from src/assets/heroes/layer-2-hub-hero.jpg
rename to public/heroes/layer-2-hub-hero.jpg
diff --git a/src/assets/heroes/learn-hub-hero.png b/public/heroes/learn-hub-hero.png
similarity index 100%
rename from src/assets/heroes/learn-hub-hero.png
rename to public/heroes/learn-hub-hero.png
diff --git a/src/assets/heroes/quizzes-hub-hero.png b/public/heroes/quizzes-hub-hero.png
similarity index 100%
rename from src/assets/heroes/quizzes-hub-hero.png
rename to public/heroes/quizzes-hub-hero.png
diff --git a/src/assets/heroes/roadmap-hub-hero.jpg b/public/heroes/roadmap-hub-hero.jpg
similarity index 100%
rename from src/assets/heroes/roadmap-hub-hero.jpg
rename to public/heroes/roadmap-hub-hero.jpg
diff --git a/src/assets/home/cats.png b/public/home/cats.png
similarity index 100%
rename from src/assets/home/cats.png
rename to public/home/cats.png
diff --git a/src/assets/home/developers.png b/public/home/developers.png
similarity index 100%
rename from src/assets/home/developers.png
rename to public/home/developers.png
diff --git a/src/assets/home/eth-tokens.png b/public/home/eth-tokens.png
similarity index 100%
rename from src/assets/home/eth-tokens.png
rename to public/home/eth-tokens.png
diff --git a/src/assets/home/ethereum-hero-light.gif b/public/home/ethereum-hero-light.gif
similarity index 100%
rename from src/assets/home/ethereum-hero-light.gif
rename to public/home/ethereum-hero-light.gif
diff --git a/src/assets/home/hero-panda.png b/public/home/hero-panda.png
similarity index 100%
rename from src/assets/home/hero-panda.png
rename to public/home/hero-panda.png
diff --git a/src/assets/home/hero.png b/public/home/hero.png
similarity index 100%
rename from src/assets/home/hero.png
rename to public/home/hero.png
diff --git a/src/assets/home/merge-panda.png b/public/home/merge-panda.png
similarity index 100%
rename from src/assets/home/merge-panda.png
rename to public/home/merge-panda.png
diff --git a/static/static/merge-panda.svg b/public/home/merge-panda.svg
similarity index 100%
rename from static/static/merge-panda.svg
rename to public/home/merge-panda.svg
diff --git a/src/assets/impact_transparent.png b/public/impact_transparent.png
similarity index 100%
rename from src/assets/impact_transparent.png
rename to public/impact_transparent.png
diff --git a/src/assets/infrastructure_transparent.png b/public/infrastructure_transparent.png
similarity index 100%
rename from src/assets/infrastructure_transparent.png
rename to public/infrastructure_transparent.png
diff --git a/src/assets/layer-2/arbitrum.png b/public/layer-2/arbitrum.png
similarity index 100%
rename from src/assets/layer-2/arbitrum.png
rename to public/layer-2/arbitrum.png
diff --git a/src/assets/layer-2/aztec.png b/public/layer-2/aztec.png
similarity index 100%
rename from src/assets/layer-2/aztec.png
rename to public/layer-2/aztec.png
diff --git a/src/assets/layer-2/boba.png b/public/layer-2/boba.png
similarity index 100%
rename from src/assets/layer-2/boba.png
rename to public/layer-2/boba.png
diff --git a/src/assets/layer-2/chainlist.png b/public/layer-2/chainlist.png
similarity index 100%
rename from src/assets/layer-2/chainlist.png
rename to public/layer-2/chainlist.png
diff --git a/src/assets/layer-2/debank.png b/public/layer-2/debank.png
similarity index 100%
rename from src/assets/layer-2/debank.png
rename to public/layer-2/debank.png
diff --git a/src/assets/layer-2/dydx.png b/public/layer-2/dydx.png
similarity index 100%
rename from src/assets/layer-2/dydx.png
rename to public/layer-2/dydx.png
diff --git a/src/assets/layer-2/hero.png b/public/layer-2/hero.png
similarity index 100%
rename from src/assets/layer-2/hero.png
rename to public/layer-2/hero.png
diff --git a/src/assets/layer-2/l2beat.jpg b/public/layer-2/l2beat.jpg
similarity index 100%
rename from src/assets/layer-2/l2beat.jpg
rename to public/layer-2/l2beat.jpg
diff --git a/src/assets/layer-2/loopring.png b/public/layer-2/loopring.png
similarity index 100%
rename from src/assets/layer-2/loopring.png
rename to public/layer-2/loopring.png
diff --git a/src/assets/layer-2/metis-dark.png b/public/layer-2/metis-dark.png
similarity index 100%
rename from src/assets/layer-2/metis-dark.png
rename to public/layer-2/metis-dark.png
diff --git a/src/assets/layer-2/metis-light.png b/public/layer-2/metis-light.png
similarity index 100%
rename from src/assets/layer-2/metis-light.png
rename to public/layer-2/metis-light.png
diff --git a/src/assets/layer-2/optimism.png b/public/layer-2/optimism.png
similarity index 100%
rename from src/assets/layer-2/optimism.png
rename to public/layer-2/optimism.png
diff --git a/src/assets/layer-2/optimistic_rollup.png b/public/layer-2/optimistic_rollup.png
similarity index 100%
rename from src/assets/layer-2/optimistic_rollup.png
rename to public/layer-2/optimistic_rollup.png
diff --git a/src/assets/layer-2/rollup-2.png b/public/layer-2/rollup-2.png
similarity index 100%
rename from src/assets/layer-2/rollup-2.png
rename to public/layer-2/rollup-2.png
diff --git a/src/assets/layer-2/starknet.png b/public/layer-2/starknet.png
similarity index 100%
rename from src/assets/layer-2/starknet.png
rename to public/layer-2/starknet.png
diff --git a/src/assets/layer-2/zapper.png b/public/layer-2/zapper.png
similarity index 100%
rename from src/assets/layer-2/zapper.png
rename to public/layer-2/zapper.png
diff --git a/src/assets/layer-2/zerion.png b/public/layer-2/zerion.png
similarity index 100%
rename from src/assets/layer-2/zerion.png
rename to public/layer-2/zerion.png
diff --git a/src/assets/layer-2/zk_rollup.png b/public/layer-2/zk_rollup.png
similarity index 100%
rename from src/assets/layer-2/zk_rollup.png
rename to public/layer-2/zk_rollup.png
diff --git a/src/assets/layer-2/zkspace.png b/public/layer-2/zkspace.png
similarity index 100%
rename from src/assets/layer-2/zkspace.png
rename to public/layer-2/zkspace.png
diff --git a/src/assets/layer-2/zksync.png b/public/layer-2/zksync.png
similarity index 100%
rename from src/assets/layer-2/zksync.png
rename to public/layer-2/zksync.png
diff --git a/src/assets/magicians.png b/public/magicians.png
similarity index 100%
rename from src/assets/magicians.png
rename to public/magicians.png
diff --git a/src/assets/mainnet.png b/public/mainnet.png
similarity index 100%
rename from src/assets/mainnet.png
rename to public/mainnet.png
diff --git a/public/manifest.json b/public/manifest.json
new file mode 100644
index 00000000000..3c81fdc3d60
--- /dev/null
+++ b/public/manifest.json
@@ -0,0 +1,56 @@
+{
+ "short_name": "ethereum.org",
+ "name": "ethereum.org",
+ "icons": [
+ {
+ "src": "/assets/manifest-app-icon.svg",
+ "type": "image/svg+xml",
+ "sizes": "512x512"
+ },
+ {
+ "src": "/assets/manifest-app-icon-192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "/assets/manifest-app-icon-512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ],
+ "id": "/",
+ "start_url": "/en/",
+ "background_color": "#222",
+ "display": "standalone",
+ "scope": "/",
+ "theme_color": "#fff",
+ "shortcuts": [
+ {
+ "name": "ethereum.org Developer Hub",
+ "short_name": "Developer Hub",
+ "description": "Documentation, tutorials, and tools for developers building on Ethereum.",
+ "url": "/developers",
+ "icons": [
+ {
+ "src": "/assets/manifest-app-icon-192.png",
+ "sizes": "192x192"
+ }
+ ]
+ }
+ ],
+ "description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.",
+ "screenshots": [
+ {
+ "src": "/assets/manifest-homepage-screenshot.png",
+ "type": "image/png",
+ "sizes": "2048x1734",
+ "form_factor": "wide"
+ },
+ {
+ "src": "/assets/manifest-homepage-screenshot-mobile.png",
+ "type": "image/png",
+ "sizes": "1290x2195",
+ "form_factor": "narrow"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/assets/poap-logo.svg b/public/poap-logo.svg
similarity index 100%
rename from src/assets/poap-logo.svg
rename to public/poap-logo.svg
diff --git a/src/assets/projects/consensys.png b/public/projects/consensys.png
similarity index 100%
rename from src/assets/projects/consensys.png
rename to public/projects/consensys.png
diff --git a/src/assets/projects/etherscan-logo-circle.png b/public/projects/etherscan-logo-circle.png
similarity index 100%
rename from src/assets/projects/etherscan-logo-circle.png
rename to public/projects/etherscan-logo-circle.png
diff --git a/src/assets/projects/etherscan-logo-light-circle.png b/public/projects/etherscan-logo-light-circle.png
similarity index 100%
rename from src/assets/projects/etherscan-logo-light-circle.png
rename to public/projects/etherscan-logo-light-circle.png
diff --git a/src/assets/projects/ethhub.png b/public/projects/ethhub.png
similarity index 100%
rename from src/assets/projects/ethhub.png
rename to public/projects/ethhub.png
diff --git a/src/assets/qr-code-ethereum-org-dark.png b/public/qr-code-ethereum-org-dark.png
similarity index 100%
rename from src/assets/qr-code-ethereum-org-dark.png
rename to public/qr-code-ethereum-org-dark.png
diff --git a/src/assets/qr-code-ethereum-org-light.png b/public/qr-code-ethereum-org-light.png
similarity index 100%
rename from src/assets/qr-code-ethereum-org-light.png
rename to public/qr-code-ethereum-org-light.png
diff --git a/src/assets/roadmap/roadmap-future.png b/public/roadmap/roadmap-future.png
similarity index 100%
rename from src/assets/roadmap/roadmap-future.png
rename to public/roadmap/roadmap-future.png
diff --git a/src/assets/roadmap/roadmap-main.png b/public/roadmap/roadmap-main.png
similarity index 100%
rename from src/assets/roadmap/roadmap-main.png
rename to public/roadmap/roadmap-main.png
diff --git a/src/assets/roadmap/roadmap-security.png b/public/roadmap/roadmap-security.png
similarity index 100%
rename from src/assets/roadmap/roadmap-security.png
rename to public/roadmap/roadmap-security.png
diff --git a/src/assets/roadmap/roadmap-transactions.png b/public/roadmap/roadmap-transactions.png
similarity index 100%
rename from src/assets/roadmap/roadmap-transactions.png
rename to public/roadmap/roadmap-transactions.png
diff --git a/src/assets/roadmap/roadmap-ux.png b/public/roadmap/roadmap-ux.png
similarity index 100%
rename from src/assets/roadmap/roadmap-ux.png
rename to public/roadmap/roadmap-ux.png
diff --git a/src/assets/run-a-node/dappnode.svg b/public/run-a-node/dappnode.svg
similarity index 100%
rename from src/assets/run-a-node/dappnode.svg
rename to public/run-a-node/dappnode.svg
diff --git a/src/assets/run-a-node/dapptap.svg b/public/run-a-node/dapptap.svg
similarity index 100%
rename from src/assets/run-a-node/dapptap.svg
rename to public/run-a-node/dapptap.svg
diff --git a/src/assets/run-a-node/ethereum-inside.png b/public/run-a-node/ethereum-inside.png
similarity index 100%
rename from src/assets/run-a-node/ethereum-inside.png
rename to public/run-a-node/ethereum-inside.png
diff --git a/src/assets/run-a-node/terminal.svg b/public/run-a-node/terminal.svg
similarity index 100%
rename from src/assets/run-a-node/terminal.svg
rename to public/run-a-node/terminal.svg
diff --git a/src/assets/stablecoins/aave.png b/public/stablecoins/aave.png
similarity index 100%
rename from src/assets/stablecoins/aave.png
rename to public/stablecoins/aave.png
diff --git a/src/assets/stablecoins/compound.png b/public/stablecoins/compound.png
similarity index 100%
rename from src/assets/stablecoins/compound.png
rename to public/stablecoins/compound.png
diff --git a/src/assets/stablecoins/dai-large.png b/public/stablecoins/dai-large.png
similarity index 100%
rename from src/assets/stablecoins/dai-large.png
rename to public/stablecoins/dai-large.png
diff --git a/src/assets/stablecoins/dai.png b/public/stablecoins/dai.png
similarity index 100%
rename from src/assets/stablecoins/dai.png
rename to public/stablecoins/dai.png
diff --git a/src/assets/stablecoins/hero.png b/public/stablecoins/hero.png
similarity index 100%
rename from src/assets/stablecoins/hero.png
rename to public/stablecoins/hero.png
diff --git a/src/assets/stablecoins/maker.png b/public/stablecoins/maker.png
similarity index 100%
rename from src/assets/stablecoins/maker.png
rename to public/stablecoins/maker.png
diff --git a/src/assets/stablecoins/tether.png b/public/stablecoins/tether.png
similarity index 100%
rename from src/assets/stablecoins/tether.png
rename to public/stablecoins/tether.png
diff --git a/src/assets/stablecoins/tools/stablecoinswtf.png b/public/stablecoins/tools/stablecoinswtf.png
similarity index 100%
rename from src/assets/stablecoins/tools/stablecoinswtf.png
rename to public/stablecoins/tools/stablecoinswtf.png
diff --git a/src/assets/stablecoins/usdc-large.png b/public/stablecoins/usdc-large.png
similarity index 100%
rename from src/assets/stablecoins/usdc-large.png
rename to public/stablecoins/usdc-large.png
diff --git a/src/assets/stablecoins/usdc.png b/public/stablecoins/usdc.png
similarity index 100%
rename from src/assets/stablecoins/usdc.png
rename to public/stablecoins/usdc.png
diff --git a/src/assets/staking/dappnode-glyph.svg b/public/staking/dappnode-glyph.svg
similarity index 100%
rename from src/assets/staking/dappnode-glyph.svg
rename to public/staking/dappnode-glyph.svg
diff --git a/src/assets/staking/ef-blog-logo.png b/public/staking/ef-blog-logo.png
similarity index 100%
rename from src/assets/staking/ef-blog-logo.png
rename to public/staking/ef-blog-logo.png
diff --git a/src/assets/staking/leslie-pool.png b/public/staking/leslie-pool.png
similarity index 100%
rename from src/assets/staking/leslie-pool.png
rename to public/staking/leslie-pool.png
diff --git a/src/assets/staking/leslie-saas.png b/public/staking/leslie-saas.png
similarity index 100%
rename from src/assets/staking/leslie-saas.png
rename to public/staking/leslie-saas.png
diff --git a/src/assets/staking/leslie-solo.png b/public/staking/leslie-solo.png
similarity index 100%
rename from src/assets/staking/leslie-solo.png
rename to public/staking/leslie-solo.png
diff --git a/src/assets/staking/leslie-withdrawal.png b/public/staking/leslie-withdrawal.png
similarity index 100%
rename from src/assets/staking/leslie-withdrawal.png
rename to public/staking/leslie-withdrawal.png
diff --git a/src/assets/staking/stereum-logo.png b/public/staking/stereum-logo.png
similarity index 100%
rename from src/assets/staking/stereum-logo.png
rename to public/staking/stereum-logo.png
diff --git a/src/assets/translation-program/pageviews-dark.png b/public/translation-program/pageviews-dark.png
similarity index 100%
rename from src/assets/translation-program/pageviews-dark.png
rename to public/translation-program/pageviews-dark.png
diff --git a/src/assets/translation-program/pageviews-light.png b/public/translation-program/pageviews-light.png
similarity index 100%
rename from src/assets/translation-program/pageviews-light.png
rename to public/translation-program/pageviews-light.png
diff --git a/src/assets/upgrades/avatar_example.png b/public/upgrades/avatar_example.png
similarity index 100%
rename from src/assets/upgrades/avatar_example.png
rename to public/upgrades/avatar_example.png
diff --git a/src/assets/upgrades/beaconchainemoji.png b/public/upgrades/beaconchainemoji.png
similarity index 100%
rename from src/assets/upgrades/beaconchainemoji.png
rename to public/upgrades/beaconchainemoji.png
diff --git a/src/assets/upgrades/besu-card.png b/public/upgrades/besu-card.png
similarity index 100%
rename from src/assets/upgrades/besu-card.png
rename to public/upgrades/besu-card.png
diff --git a/src/assets/upgrades/besu.png b/public/upgrades/besu.png
similarity index 100%
rename from src/assets/upgrades/besu.png
rename to public/upgrades/besu.png
diff --git a/src/assets/upgrades/core.png b/public/upgrades/core.png
similarity index 100%
rename from src/assets/upgrades/core.png
rename to public/upgrades/core.png
diff --git a/src/assets/upgrades/cortex.png b/public/upgrades/cortex.png
similarity index 100%
rename from src/assets/upgrades/cortex.png
rename to public/upgrades/cortex.png
diff --git a/src/assets/upgrades/dai.png b/public/upgrades/dai.png
similarity index 100%
rename from src/assets/upgrades/dai.png
rename to public/upgrades/dai.png
diff --git a/src/assets/upgrades/erigon-card.png b/public/upgrades/erigon-card.png
similarity index 100%
rename from src/assets/upgrades/erigon-card.png
rename to public/upgrades/erigon-card.png
diff --git a/src/assets/upgrades/erigon.png b/public/upgrades/erigon.png
similarity index 100%
rename from src/assets/upgrades/erigon.png
rename to public/upgrades/erigon.png
diff --git a/src/assets/upgrades/eth-black.png b/public/upgrades/eth-black.png
similarity index 100%
rename from src/assets/upgrades/eth-black.png
rename to public/upgrades/eth-black.png
diff --git a/src/assets/upgrades/eth-orange.png b/public/upgrades/eth-orange.png
similarity index 100%
rename from src/assets/upgrades/eth-orange.png
rename to public/upgrades/eth-orange.png
diff --git a/src/assets/upgrades/etherscan.png b/public/upgrades/etherscan.png
similarity index 100%
rename from src/assets/upgrades/etherscan.png
rename to public/upgrades/etherscan.png
diff --git a/src/assets/upgrades/geth.png b/public/upgrades/geth.png
similarity index 100%
rename from src/assets/upgrades/geth.png
rename to public/upgrades/geth.png
diff --git a/src/assets/upgrades/lighthouse-dark.png b/public/upgrades/lighthouse-dark.png
similarity index 100%
rename from src/assets/upgrades/lighthouse-dark.png
rename to public/upgrades/lighthouse-dark.png
diff --git a/src/assets/upgrades/lighthouse-light.png b/public/upgrades/lighthouse-light.png
similarity index 100%
rename from src/assets/upgrades/lighthouse-light.png
rename to public/upgrades/lighthouse-light.png
diff --git a/src/assets/upgrades/lodestar.png b/public/upgrades/lodestar.png
similarity index 100%
rename from src/assets/upgrades/lodestar.png
rename to public/upgrades/lodestar.png
diff --git a/src/assets/upgrades/merge.png b/public/upgrades/merge.png
similarity index 100%
rename from src/assets/upgrades/merge.png
rename to public/upgrades/merge.png
diff --git a/src/assets/upgrades/nethermind-card.png b/public/upgrades/nethermind-card.png
similarity index 100%
rename from src/assets/upgrades/nethermind-card.png
rename to public/upgrades/nethermind-card.png
diff --git a/src/assets/upgrades/nethermind.png b/public/upgrades/nethermind.png
similarity index 100%
rename from src/assets/upgrades/nethermind.png
rename to public/upgrades/nethermind.png
diff --git a/src/assets/upgrades/newrings.png b/public/upgrades/newrings.png
similarity index 100%
rename from src/assets/upgrades/newrings.png
rename to public/upgrades/newrings.png
diff --git a/src/assets/upgrades/nimbus-cloud.png b/public/upgrades/nimbus-cloud.png
similarity index 100%
rename from src/assets/upgrades/nimbus-cloud.png
rename to public/upgrades/nimbus-cloud.png
diff --git a/src/assets/upgrades/nimbus.png b/public/upgrades/nimbus.png
similarity index 100%
rename from src/assets/upgrades/nimbus.png
rename to public/upgrades/nimbus.png
diff --git a/src/assets/upgrades/oldship.png b/public/upgrades/oldship.png
similarity index 100%
rename from src/assets/upgrades/oldship.png
rename to public/upgrades/oldship.png
diff --git a/src/assets/upgrades/prysm.png b/public/upgrades/prysm.png
similarity index 100%
rename from src/assets/upgrades/prysm.png
rename to public/upgrades/prysm.png
diff --git a/src/assets/upgrades/teku-dark.png b/public/upgrades/teku-dark.png
similarity index 100%
rename from src/assets/upgrades/teku-dark.png
rename to public/upgrades/teku-dark.png
diff --git a/src/assets/upgrades/teku-light.png b/public/upgrades/teku-light.png
similarity index 100%
rename from src/assets/upgrades/teku-light.png
rename to public/upgrades/teku-light.png
diff --git a/src/assets/upgrades/teku.png b/public/upgrades/teku.png
similarity index 100%
rename from src/assets/upgrades/teku.png
rename to public/upgrades/teku.png
diff --git a/src/assets/upgrades/upgrade_doge.png b/public/upgrades/upgrade_doge.png
similarity index 100%
rename from src/assets/upgrades/upgrade_doge.png
rename to public/upgrades/upgrade_doge.png
diff --git a/src/assets/upgrades/upgrade_eth.png b/public/upgrades/upgrade_eth.png
similarity index 100%
rename from src/assets/upgrades/upgrade_eth.png
rename to public/upgrades/upgrade_eth.png
diff --git a/src/assets/upgrades/upgrade_rhino.png b/public/upgrades/upgrade_rhino.png
similarity index 100%
rename from src/assets/upgrades/upgrade_rhino.png
rename to public/upgrades/upgrade_rhino.png
diff --git a/src/assets/upgrades/upgrade_robot.png b/public/upgrades/upgrade_robot.png
similarity index 100%
rename from src/assets/upgrades/upgrade_robot.png
rename to public/upgrades/upgrade_robot.png
diff --git a/src/assets/use-cases/dao-2.png b/public/use-cases/dao-2.png
similarity index 100%
rename from src/assets/use-cases/dao-2.png
rename to public/use-cases/dao-2.png
diff --git a/src/assets/use-cases/dao.jpg b/public/use-cases/dao.jpg
similarity index 100%
rename from src/assets/use-cases/dao.jpg
rename to public/use-cases/dao.jpg
diff --git a/src/assets/use-cases/defi-cropped.png b/public/use-cases/defi-cropped.png
similarity index 100%
rename from src/assets/use-cases/defi-cropped.png
rename to public/use-cases/defi-cropped.png
diff --git a/src/assets/use-cases/defi.png b/public/use-cases/defi.png
similarity index 100%
rename from src/assets/use-cases/defi.png
rename to public/use-cases/defi.png
diff --git a/src/assets/wallet-cropped.png b/public/wallet-cropped.png
similarity index 100%
rename from src/assets/wallet-cropped.png
rename to public/wallet-cropped.png
diff --git a/src/assets/wallet.png b/public/wallet.png
similarity index 100%
rename from src/assets/wallet.png
rename to public/wallet.png
diff --git a/src/assets/wallets/1inch.png b/public/wallets/1inch.png
similarity index 100%
rename from src/assets/wallets/1inch.png
rename to public/wallets/1inch.png
diff --git a/src/assets/wallets/airgap.png b/public/wallets/airgap.png
similarity index 100%
rename from src/assets/wallets/airgap.png
rename to public/wallets/airgap.png
diff --git a/src/assets/wallets/aktionariat.png b/public/wallets/aktionariat.png
similarity index 100%
rename from src/assets/wallets/aktionariat.png
rename to public/wallets/aktionariat.png
diff --git a/src/assets/wallets/alice.png b/public/wallets/alice.png
similarity index 100%
rename from src/assets/wallets/alice.png
rename to public/wallets/alice.png
diff --git a/src/assets/wallets/alpha.png b/public/wallets/alpha.png
similarity index 100%
rename from src/assets/wallets/alpha.png
rename to public/wallets/alpha.png
diff --git a/src/assets/wallets/ambire.png b/public/wallets/ambire.png
similarity index 100%
rename from src/assets/wallets/ambire.png
rename to public/wallets/ambire.png
diff --git a/src/assets/wallets/ambo.png b/public/wallets/ambo.png
similarity index 100%
rename from src/assets/wallets/ambo.png
rename to public/wallets/ambo.png
diff --git a/src/assets/wallets/apex.png b/public/wallets/apex.png
similarity index 100%
rename from src/assets/wallets/apex.png
rename to public/wallets/apex.png
diff --git a/src/assets/wallets/argent.png b/public/wallets/argent.png
similarity index 100%
rename from src/assets/wallets/argent.png
rename to public/wallets/argent.png
diff --git a/src/assets/wallets/bitcoindotcom.png b/public/wallets/bitcoindotcom.png
similarity index 100%
rename from src/assets/wallets/bitcoindotcom.png
rename to public/wallets/bitcoindotcom.png
diff --git a/src/assets/wallets/bitkeep.png b/public/wallets/bitkeep.png
similarity index 100%
rename from src/assets/wallets/bitkeep.png
rename to public/wallets/bitkeep.png
diff --git a/src/assets/wallets/blockwallet.png b/public/wallets/blockwallet.png
similarity index 100%
rename from src/assets/wallets/blockwallet.png
rename to public/wallets/blockwallet.png
diff --git a/src/assets/wallets/brave.png b/public/wallets/brave.png
similarity index 100%
rename from src/assets/wallets/brave.png
rename to public/wallets/brave.png
diff --git a/src/assets/wallets/bridge.png b/public/wallets/bridge.png
similarity index 100%
rename from src/assets/wallets/bridge.png
rename to public/wallets/bridge.png
diff --git a/src/assets/wallets/browser.svg b/public/wallets/browser.svg
similarity index 100%
rename from src/assets/wallets/browser.svg
rename to public/wallets/browser.svg
diff --git a/src/assets/wallets/coin98.png b/public/wallets/coin98.png
similarity index 100%
rename from src/assets/wallets/coin98.png
rename to public/wallets/coin98.png
diff --git a/src/assets/wallets/coinbase.png b/public/wallets/coinbase.png
similarity index 100%
rename from src/assets/wallets/coinbase.png
rename to public/wallets/coinbase.png
diff --git a/src/assets/wallets/coinomi.png b/public/wallets/coinomi.png
similarity index 100%
rename from src/assets/wallets/coinomi.png
rename to public/wallets/coinomi.png
diff --git a/src/assets/wallets/coinwallet.png b/public/wallets/coinwallet.png
similarity index 100%
rename from src/assets/wallets/coinwallet.png
rename to public/wallets/coinwallet.png
diff --git a/src/assets/wallets/dcent.png b/public/wallets/dcent.png
similarity index 100%
rename from src/assets/wallets/dcent.png
rename to public/wallets/dcent.png
diff --git a/src/assets/wallets/enjin.png b/public/wallets/enjin.png
similarity index 100%
rename from src/assets/wallets/enjin.png
rename to public/wallets/enjin.png
diff --git a/src/assets/wallets/enkrypt.png b/public/wallets/enkrypt.png
similarity index 100%
rename from src/assets/wallets/enkrypt.png
rename to public/wallets/enkrypt.png
diff --git a/src/assets/wallets/exodus.png b/public/wallets/exodus.png
similarity index 100%
rename from src/assets/wallets/exodus.png
rename to public/wallets/exodus.png
diff --git a/src/assets/wallets/find-wallet-hero.png b/public/wallets/find-wallet-hero.png
similarity index 100%
rename from src/assets/wallets/find-wallet-hero.png
rename to public/wallets/find-wallet-hero.png
diff --git a/src/assets/wallets/find-wallet.png b/public/wallets/find-wallet.png
similarity index 100%
rename from src/assets/wallets/find-wallet.png
rename to public/wallets/find-wallet.png
diff --git a/src/assets/wallets/fortmatic.png b/public/wallets/fortmatic.png
similarity index 100%
rename from src/assets/wallets/fortmatic.png
rename to public/wallets/fortmatic.png
diff --git a/src/assets/wallets/foxwallet.png b/public/wallets/foxwallet.png
similarity index 100%
rename from src/assets/wallets/foxwallet.png
rename to public/wallets/foxwallet.png
diff --git a/src/assets/wallets/frame.png b/public/wallets/frame.png
similarity index 100%
rename from src/assets/wallets/frame.png
rename to public/wallets/frame.png
diff --git a/src/assets/wallets/gnosis.png b/public/wallets/gnosis.png
similarity index 100%
rename from src/assets/wallets/gnosis.png
rename to public/wallets/gnosis.png
diff --git a/src/assets/wallets/gridplus.png b/public/wallets/gridplus.png
similarity index 100%
rename from src/assets/wallets/gridplus.png
rename to public/wallets/gridplus.png
diff --git a/src/assets/wallets/guarda.png b/public/wallets/guarda.png
similarity index 100%
rename from src/assets/wallets/guarda.png
rename to public/wallets/guarda.png
diff --git a/src/assets/wallets/hyperpay.png b/public/wallets/hyperpay.png
similarity index 100%
rename from src/assets/wallets/hyperpay.png
rename to public/wallets/hyperpay.png
diff --git a/src/assets/wallets/hyperwallet.png b/public/wallets/hyperwallet.png
similarity index 100%
rename from src/assets/wallets/hyperwallet.png
rename to public/wallets/hyperwallet.png
diff --git a/src/assets/wallets/imtoken.png b/public/wallets/imtoken.png
similarity index 100%
rename from src/assets/wallets/imtoken.png
rename to public/wallets/imtoken.png
diff --git a/src/assets/wallets/infinity_wallet.png b/public/wallets/infinity_wallet.png
similarity index 100%
rename from src/assets/wallets/infinity_wallet.png
rename to public/wallets/infinity_wallet.png
diff --git a/src/assets/wallets/keystone.png b/public/wallets/keystone.png
similarity index 100%
rename from src/assets/wallets/keystone.png
rename to public/wallets/keystone.png
diff --git a/src/assets/wallets/ledger.png b/public/wallets/ledger.png
similarity index 100%
rename from src/assets/wallets/ledger.png
rename to public/wallets/ledger.png
diff --git a/src/assets/wallets/loopring.png b/public/wallets/loopring.png
similarity index 100%
rename from src/assets/wallets/loopring.png
rename to public/wallets/loopring.png
diff --git a/src/assets/wallets/mathwallet.png b/public/wallets/mathwallet.png
similarity index 100%
rename from src/assets/wallets/mathwallet.png
rename to public/wallets/mathwallet.png
diff --git a/src/assets/wallets/metamask.png b/public/wallets/metamask.png
similarity index 100%
rename from src/assets/wallets/metamask.png
rename to public/wallets/metamask.png
diff --git a/src/assets/wallets/mew.png b/public/wallets/mew.png
similarity index 100%
rename from src/assets/wallets/mew.png
rename to public/wallets/mew.png
diff --git a/src/assets/wallets/monolith.png b/public/wallets/monolith.png
similarity index 100%
rename from src/assets/wallets/monolith.png
rename to public/wallets/monolith.png
diff --git a/src/assets/wallets/multis.png b/public/wallets/multis.png
similarity index 100%
rename from src/assets/wallets/multis.png
rename to public/wallets/multis.png
diff --git a/src/assets/wallets/mycrypto.png b/public/wallets/mycrypto.png
similarity index 100%
rename from src/assets/wallets/mycrypto.png
rename to public/wallets/mycrypto.png
diff --git a/src/assets/wallets/myetherwallet.png b/public/wallets/myetherwallet.png
similarity index 100%
rename from src/assets/wallets/myetherwallet.png
rename to public/wallets/myetherwallet.png
diff --git a/src/assets/wallets/numio.png b/public/wallets/numio.png
similarity index 100%
rename from src/assets/wallets/numio.png
rename to public/wallets/numio.png
diff --git a/src/assets/wallets/okx.jpeg b/public/wallets/okx.jpeg
similarity index 100%
rename from src/assets/wallets/okx.jpeg
rename to public/wallets/okx.jpeg
diff --git a/src/assets/wallets/onekey.png b/public/wallets/onekey.png
similarity index 100%
rename from src/assets/wallets/onekey.png
rename to public/wallets/onekey.png
diff --git a/src/assets/wallets/opera.png b/public/wallets/opera.png
similarity index 100%
rename from src/assets/wallets/opera.png
rename to public/wallets/opera.png
diff --git a/src/assets/wallets/phantom.png b/public/wallets/phantom.png
similarity index 100%
rename from src/assets/wallets/phantom.png
rename to public/wallets/phantom.png
diff --git a/src/assets/wallets/pillar.png b/public/wallets/pillar.png
similarity index 100%
rename from src/assets/wallets/pillar.png
rename to public/wallets/pillar.png
diff --git a/src/assets/wallets/portis.png b/public/wallets/portis.png
similarity index 100%
rename from src/assets/wallets/portis.png
rename to public/wallets/portis.png
diff --git a/src/assets/wallets/rabbywallet.png b/public/wallets/rabbywallet.png
similarity index 100%
rename from src/assets/wallets/rabbywallet.png
rename to public/wallets/rabbywallet.png
diff --git a/src/assets/wallets/rainbow.png b/public/wallets/rainbow.png
similarity index 100%
rename from src/assets/wallets/rainbow.png
rename to public/wallets/rainbow.png
diff --git a/src/assets/wallets/safe.png b/public/wallets/safe.png
similarity index 100%
rename from src/assets/wallets/safe.png
rename to public/wallets/safe.png
diff --git a/src/assets/wallets/safepal.png b/public/wallets/safepal.png
similarity index 100%
rename from src/assets/wallets/safepal.png
rename to public/wallets/safepal.png
diff --git a/src/assets/wallets/samsung.png b/public/wallets/samsung.png
similarity index 100%
rename from src/assets/wallets/samsung.png
rename to public/wallets/samsung.png
diff --git a/src/assets/wallets/sequence.png b/public/wallets/sequence.png
similarity index 100%
rename from src/assets/wallets/sequence.png
rename to public/wallets/sequence.png
diff --git a/src/assets/wallets/shapeshift.png b/public/wallets/shapeshift.png
similarity index 100%
rename from src/assets/wallets/shapeshift.png
rename to public/wallets/shapeshift.png
diff --git a/src/assets/wallets/squarelink.png b/public/wallets/squarelink.png
similarity index 100%
rename from src/assets/wallets/squarelink.png
rename to public/wallets/squarelink.png
diff --git a/src/assets/wallets/status.png b/public/wallets/status.png
similarity index 100%
rename from src/assets/wallets/status.png
rename to public/wallets/status.png
diff --git a/src/assets/wallets/taho.png b/public/wallets/taho.png
similarity index 100%
rename from src/assets/wallets/taho.png
rename to public/wallets/taho.png
diff --git a/src/assets/wallets/tokenpocket.png b/public/wallets/tokenpocket.png
similarity index 100%
rename from src/assets/wallets/tokenpocket.png
rename to public/wallets/tokenpocket.png
diff --git a/src/assets/wallets/torus.png b/public/wallets/torus.png
similarity index 100%
rename from src/assets/wallets/torus.png
rename to public/wallets/torus.png
diff --git a/src/assets/wallets/trezor.png b/public/wallets/trezor.png
similarity index 100%
rename from src/assets/wallets/trezor.png
rename to public/wallets/trezor.png
diff --git a/src/assets/wallets/trust.png b/public/wallets/trust.png
similarity index 100%
rename from src/assets/wallets/trust.png
rename to public/wallets/trust.png
diff --git a/src/assets/wallets/unstoppable.png b/public/wallets/unstoppable.png
similarity index 100%
rename from src/assets/wallets/unstoppable.png
rename to public/wallets/unstoppable.png
diff --git a/src/assets/wallets/wallet-hero.png b/public/wallets/wallet-hero.png
similarity index 100%
rename from src/assets/wallets/wallet-hero.png
rename to public/wallets/wallet-hero.png
diff --git a/src/assets/wallets/walleth.png b/public/wallets/walleth.png
similarity index 100%
rename from src/assets/wallets/walleth.png
rename to public/wallets/walleth.png
diff --git a/src/assets/wallets/web3auth.png b/public/wallets/web3auth.png
similarity index 100%
rename from src/assets/wallets/web3auth.png
rename to public/wallets/web3auth.png
diff --git a/src/assets/wallets/XDEFI.png b/public/wallets/xdefi.png
similarity index 100%
rename from src/assets/wallets/XDEFI.png
rename to public/wallets/xdefi.png
diff --git a/src/assets/wallets/zengo.png b/public/wallets/zengo.png
similarity index 100%
rename from src/assets/wallets/zengo.png
rename to public/wallets/zengo.png
diff --git a/src/assets/wallets/zerion.png b/public/wallets/zerion.png
similarity index 100%
rename from src/assets/wallets/zerion.png
rename to public/wallets/zerion.png
diff --git a/src/assets/what-is-eth/eth.png b/public/what-is-eth/eth.png
similarity index 100%
rename from src/assets/what-is-eth/eth.png
rename to public/what-is-eth/eth.png
diff --git a/src/assets/what-is-ethereum.png b/public/what-is-ethereum.png
similarity index 100%
rename from src/assets/what-is-ethereum.png
rename to public/what-is-ethereum.png
diff --git a/redirects.json b/redirects.json
deleted file mode 100644
index a8b415eb835..00000000000
--- a/redirects.json
+++ /dev/null
@@ -1,350 +0,0 @@
-[
- {
- "fromPath": "/discord",
- "toPath": "https://discord.gg/ethereum-org"
- },
- {
- "fromPath": "/*/discord",
- "toPath": "https://discord.gg/ethereum-org"
- },
- {
- "fromPath": "/pdfs/*",
- "toPath": "/en/"
- },
- {
- "fromPath": "/brand",
- "toPath": "/en/assets/"
- },
- {
- "fromPath": "/ether",
- "toPath": "/en/eth/"
- },
- {
- "fromPath": "/token",
- "toPath": "/en/developers/"
- },
- {
- "fromPath": "/crowdsale",
- "toPath": "/en/developers/"
- },
- {
- "fromPath": "/cli",
- "toPath": "/en/developers/"
- },
- {
- "fromPath": "/greeter",
- "toPath": "/en/developers/"
- },
- {
- "fromPath": "/search",
- "toPath": "/en/"
- },
- {
- "fromPath": "/use",
- "toPath": "/en/dapps/"
- },
- {
- "fromPath": "/beginners",
- "toPath": "/en/what-is-ethereum/"
- },
- {
- "fromPath": "/eth2/",
- "toPath": "/en/roadmap/"
- },
- {
- "fromPath": "/build/",
- "toPath": "/en/developers/learning-tools/"
- },
- {
- "fromPath": "/java/",
- "toPath": "/en/developers/docs/programming-languages/java/"
- },
- {
- "fromPath": "/python/",
- "toPath": "/en/developers/docs/programming-languages/python/"
- },
- {
- "fromPath": "/javascript/",
- "toPath": "/en/developers/docs/programming-languages/javascript/"
- },
- {
- "fromPath": "/golang/",
- "toPath": "/en/developers/docs/programming-languages/golang/"
- },
- {
- "fromPath": "/rust/",
- "toPath": "/en/developers/docs/programming-languages/rust/"
- },
- {
- "fromPath": "/dot-net/",
- "toPath": "/en/developers/docs/programming-languages/dot-net/"
- },
- {
- "fromPath": "/delphi/",
- "toPath": "/en/developers/docs/programming-languages/delphi/"
- },
- {
- "fromPath": "/dart/",
- "toPath": "/en/developers/docs/programming-languages/dart/"
- },
- {
- "fromPath": "/nfts/",
- "toPath": "/en/nft/"
- },
- {
- "fromPath": "/daos/",
- "toPath": "/en/dao/"
- },
- {
- "fromPath": "/layer2/",
- "toPath": "/en/layer-2/"
- },
- {
- "fromPath": "/*/layer2/",
- "toPath": "/:splat/layer-2/"
- },
- {
- "fromPath": "/grants/",
- "toPath": "/en/community/grants/"
- },
- {
- "fromPath": "/no/*",
- "toPath": "/nb/:splat"
- },
- {
- "fromPath": "/ph/*",
- "toPath": "/fil/:splat"
- },
- {
- "fromPath": "/en/java/",
- "toPath": "/en/developers/docs/programming-languages/java/"
- },
- {
- "fromPath": "/en/python/",
- "toPath": "/en/developers/docs/programming-languages/python/"
- },
- {
- "fromPath": "/en/javascript/",
- "toPath": "/en/developers/docs/programming-languages/javascript/"
- },
- {
- "fromPath": "/en/golang/",
- "toPath": "/en/developers/docs/programming-languages/golang/"
- },
- {
- "fromPath": "/en/rust/",
- "toPath": "/en/developers/docs/programming-languages/rust/"
- },
- {
- "fromPath": "/en/dot-net/",
- "toPath": "/en/developers/docs/programming-languages/dot-net/"
- },
- {
- "fromPath": "/en/delphi/",
- "toPath": "/en/developers/docs/programming-languages/delphi/"
- },
- {
- "fromPath": "/en/dart/",
- "toPath": "/en/developers/docs/programming-languages/dart/"
- },
- {
- "fromPath": "/en/developers/docs/mining/",
- "toPath": "/en/developers/docs/consensus-mechanisms/pow/mining/"
- },
- {
- "fromPath": "/*/beginners",
- "toPath": "/:splat/what-is-ethereum/"
- },
- {
- "fromPath": "/*/build",
- "toPath": "/:splat/developers/learning-tools/"
- },
- {
- "fromPath": "/*/eth2/beacon-chain/",
- "toPath": "/:splat/upgrades/beacon-chain/"
- },
- {
- "fromPath": "/*/eth2/the-beacon-chain/",
- "toPath": "/:splat/upgrades/beacon-chain/"
- },
- {
- "fromPath": "/*/upgrades/the-beacon-chain/",
- "toPath": "/:splat/upgrades/beacon-chain/"
- },
- {
- "fromPath": "/*/eth2/merge",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/eth2/the-merge",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/upgrades/the-merge",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/eth2/docking",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/upgrades/docking",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/eth2/the-docking",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/upgrades/the-docking",
- "toPath": "/:splat/upgrades/merge/"
- },
- {
- "fromPath": "/*/eth2/shard-chains/",
- "toPath": "/:splat/roadmap/danksharding/"
- },
- {
- "fromPath": "/*/upgrades/shard-chains/",
- "toPath": "/:splat/roadmap/danksharding/"
- },
- {
- "fromPath": "/upgrades/sharding/",
- "toPath": "/en/roadmap/danksharding/"
- },
- {
- "fromPath": "/*/upgrades/sharding/",
- "toPath": "/:splat/roadmap/danksharding/"
- },
- {
- "fromPath": "/upgrades/shard-chains/",
- "toPath": "/en/roadmap/danksharding/"
- },
- {
- "fromPath": "/upgrades/merge",
- "toPath": "/en/roadmap/merge/"
- },
- {
- "fromPath": "/*/upgrades/merge",
- "toPath": "/:splat/roadmap/merge/"
- },
- {
- "fromPath": "/upgrades/merge/issuance",
- "toPath": "/en/roadmap/merge/issuance"
- },
- {
- "fromPath": "/*/upgrades/merge/issuance",
- "toPath": "/:splat/roadmap/merge/issuance"
- },
- {
- "fromPath": "/upgrades/beacon-chain",
- "toPath": "/en/roadmap/beacon-chain"
- },
- {
- "fromPath": "/*/upgrades/beacon-chain",
- "toPath": "/:splat/roadmap/beacon-chain"
- },
- {
- "fromPath": "/upgrades/vision/",
- "toPath": "/en/roadmap/vision/"
- },
- {
- "fromPath": "/*/upgrades/vision/",
- "toPath": "/:splat/roadmap/vision/"
- },
- {
- "fromPath": "/upgrades",
- "toPath": "/en/roadmap"
- },
- {
- "fromPath": "/*/upgrades",
- "toPath": "/:splat/roadmap"
- },
- {
- "fromPath": "/upgrades/get-involved",
- "toPath": "/contributing"
- },
- {
- "fromPath": "/*/upgrades/get-involved",
- "toPath": "/:splat/contributing"
- },
- {
- "fromPath": "/*/eth2/staking/",
- "toPath": "/:splat/staking/"
- },
- {
- "fromPath": "/*/eth2/vision/",
- "toPath": "/:splat/roadmap/vision/"
- },
- {
- "fromPath": "/*/eth2/get-involved/",
- "toPath": "/:splat/upgrades/get-involved/"
- },
- {
- "fromPath": "/*/eth2/get-involved/bug-bounty/",
- "toPath": "/:splat/bug-bounty/"
- },
- {
- "fromPath": "/*/upgrades/get-involved/bug-bounty/",
- "toPath": "/:splat/bug-bounty/"
- },
- {
- "fromPath": "/*/eth2/deposit-contract/",
- "toPath": "/:splat/staking/deposit-contract/"
- },
- {
- "fromPath": "/*/eth2",
- "toPath": "/:splat/upgrades/"
- },
- {
- "fromPath": "/*/developers/docs/layer-2-scaling",
- "toPath": "/:splat/developers/docs/scaling"
- },
- {
- "fromPath": "/*/developers/docs/scaling/layer-2-rollups",
- "toPath": "/:splat/developers/docs/scaling"
- },
- {
- "fromPath": "/*/about/web-developer",
- "toPath": "/:splat/about/#open-jobs"
- },
- {
- "fromPath": "/*/about/product-designer",
- "toPath": "/:splat/about/#open-jobs"
- },
- {
- "fromPath": "/*/use",
- "toPath": "/:splat/dapps/"
- },
- {
- "fromPath": "/*/contributing/translation-program/translation-guide/",
- "toPath": "/:splat/contributing/translation-program/faq/"
- },
- {
- "fromPath": "/*/contributing/translation-program/content-versions/",
- "toPath": "/:splat/contributing/translation-program/content-buckets/"
- },
- {
- "fromPath": "/*/developers/docs/smart-contracts/source-code-verification/",
- "toPath": "/:splat/developers/docs/smart-contracts/verifying/"
- },
- {
- "fromPath": "/*/developers/docs/smart-contracts/upgrading-smart-contracts/",
- "toPath": "/:splat/developers/docs/smart-contracts/upgrading/"
- },
- {
- "fromPath": "/staking/withdraws",
- "toPath": "/en/staking/withdrawals/"
- },
- {
- "fromPath": "/*/writing-cohort",
- "toPath": "https://ethereumwriterscohort.carrd.co/"
- },
- {
- "fromPath": "/*/staking/withdraws",
- "toPath": "/:splat/staking/withdrawals/"
- },
- {
- "fromPath": "/*/guides/how-to-register-an-ethereum-account",
- "toPath": "/:splat/guides/how-to-create-an-ethereum-account/"
- }
-]
diff --git a/src/@chakra-ui/gatsby-plugin/components/Alert.ts b/src/@chakra-ui/components/Alert.ts
similarity index 96%
rename from src/@chakra-ui/gatsby-plugin/components/Alert.ts
rename to src/@chakra-ui/components/Alert.ts
index a1c27a51ad9..fca2370d1a5 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Alert.ts
+++ b/src/@chakra-ui/components/Alert.ts
@@ -1,10 +1,12 @@
+import { alertAnatomy } from "@chakra-ui/anatomy"
import {
createMultiStyleConfigHelpers,
SystemStyleObject,
} from "@chakra-ui/react"
-import { alertAnatomy } from "@chakra-ui/anatomy"
+
+import { AlertStatusType } from "@/components/Alert"
+
import { alertDefaultTheme, defineMergeStyles } from "./components.utils"
-import { AlertStatusType } from "../../../components/Alert"
const STATUS_COLORS: Record<
"solid" | "subtle",
diff --git a/src/@chakra-ui/gatsby-plugin/components/Avatar.ts b/src/@chakra-ui/components/Avatar.ts
similarity index 98%
rename from src/@chakra-ui/gatsby-plugin/components/Avatar.ts
rename to src/@chakra-ui/components/Avatar.ts
index 179c6ee0f6c..90062587eba 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Avatar.ts
+++ b/src/@chakra-ui/components/Avatar.ts
@@ -1,12 +1,13 @@
+import { pick } from "lodash"
+import { avatarAnatomy } from "@chakra-ui/anatomy"
import {
createMultiStyleConfigHelpers,
cssVar,
defineStyle,
getToken,
} from "@chakra-ui/react"
-import { avatarAnatomy } from "@chakra-ui/anatomy"
+
import { avatarDefaultTheme, defineMergeStyles } from "./components.utils"
-import { pick } from "lodash"
const { defineMultiStyleConfig, definePartsStyle } =
createMultiStyleConfigHelpers(avatarAnatomy.keys)
@@ -43,7 +44,7 @@ const baseStyleContainer = defineStyle((props) => {
"[role='group'] &": {
[$border.variable]: "colors.background.base",
_notLast: {
- marginLeft: $mlBySize.reference,
+ ms: $mlBySize.reference,
},
},
})
diff --git a/src/@chakra-ui/gatsby-plugin/components/Badge.ts b/src/@chakra-ui/components/Badge.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Badge.ts
rename to src/@chakra-ui/components/Badge.ts
index 1efabdd86ee..7d181350e19 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Badge.ts
+++ b/src/@chakra-ui/components/Badge.ts
@@ -1,4 +1,5 @@
import { defineStyle, defineStyleConfig } from "@chakra-ui/react"
+
import { badgeDefaultTheme, defineMergeStyles } from "./components.utils"
const { baseStyle: defaultBaseStyle } = badgeDefaultTheme
diff --git a/src/@chakra-ui/gatsby-plugin/components/Breadcrumb.ts b/src/@chakra-ui/components/Breadcrumb.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Breadcrumb.ts
rename to src/@chakra-ui/components/Breadcrumb.ts
index 55fb739f902..cf190a23312 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Breadcrumb.ts
+++ b/src/@chakra-ui/components/Breadcrumb.ts
@@ -1,5 +1,6 @@
-import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
import { breadcrumbAnatomy } from "@chakra-ui/anatomy"
+import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
+
import { breadcrumbDefaultTheme, defineMergeStyles } from "./components.utils"
const { defineMultiStyleConfig } = createMultiStyleConfigHelpers(
diff --git a/src/@chakra-ui/gatsby-plugin/components/Button.ts b/src/@chakra-ui/components/Button.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/components/Button.ts
rename to src/@chakra-ui/components/Button.ts
diff --git a/src/@chakra-ui/gatsby-plugin/components/Checkbox.ts b/src/@chakra-ui/components/Checkbox.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Checkbox.ts
rename to src/@chakra-ui/components/Checkbox.ts
index b4ffac6492e..5ea15c84ec2 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Checkbox.ts
+++ b/src/@chakra-ui/components/Checkbox.ts
@@ -1,5 +1,6 @@
-import { createMultiStyleConfigHelpers, defineStyle } from "@chakra-ui/react"
import { checkboxAnatomy } from "@chakra-ui/anatomy"
+import { createMultiStyleConfigHelpers, defineStyle } from "@chakra-ui/react"
+
import {
checkboxDefaultTheme,
commonInputTriggerStyles,
diff --git a/src/@chakra-ui/gatsby-plugin/components/Heading.ts b/src/@chakra-ui/components/Heading.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Heading.ts
rename to src/@chakra-ui/components/Heading.ts
index bd83ad67ad0..75af61913f9 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Heading.ts
+++ b/src/@chakra-ui/components/Heading.ts
@@ -1,4 +1,5 @@
import { defineStyle, defineStyleConfig } from "@chakra-ui/react"
+
import { headingDefaultTheme } from "./components.utils"
const { sizes: defaultSizes } = headingDefaultTheme
diff --git a/src/@chakra-ui/gatsby-plugin/components/Input.ts b/src/@chakra-ui/components/Input.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Input.ts
rename to src/@chakra-ui/components/Input.ts
index 61f19c3966f..af894eb6701 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Input.ts
+++ b/src/@chakra-ui/components/Input.ts
@@ -4,6 +4,7 @@ import {
createMultiStyleConfigHelpers,
defineStyle,
} from "@chakra-ui/styled-system"
+
import { defineMergeStyles, inputDefaultTheme } from "./components.utils"
const { defineMultiStyleConfig, definePartsStyle } =
diff --git a/src/@chakra-ui/gatsby-plugin/components/Link.ts b/src/@chakra-ui/components/Link.ts
similarity index 96%
rename from src/@chakra-ui/gatsby-plugin/components/Link.ts
rename to src/@chakra-ui/components/Link.ts
index c9fe52b1359..fd626ffa08f 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Link.ts
+++ b/src/@chakra-ui/components/Link.ts
@@ -1,5 +1,5 @@
import { defineStyleConfig } from "@chakra-ui/react"
-import components from "."
+
import { defineMergeStyles, linkDefaultTheme } from "./components.utils"
import { Text } from "./Text"
diff --git a/src/@chakra-ui/gatsby-plugin/components/Modal.ts b/src/@chakra-ui/components/Modal.ts
similarity index 98%
rename from src/@chakra-ui/gatsby-plugin/components/Modal.ts
rename to src/@chakra-ui/components/Modal.ts
index b4079657373..0d9ad38eaf9 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Modal.ts
+++ b/src/@chakra-ui/components/Modal.ts
@@ -1,5 +1,6 @@
-import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
import { modalAnatomy } from "@chakra-ui/anatomy"
+import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
+
import { defineMergeStyles, modalDefaultTheme } from "./components.utils"
const { defineMultiStyleConfig, definePartsStyle } =
@@ -42,7 +43,7 @@ const variantCode = definePartsStyle((props) => ({
fontSize: "sm",
margin: 0,
top: 4,
- right: 4,
+ insetInlineEnd: 4,
bottom: 4,
},
body: {
diff --git a/src/@chakra-ui/gatsby-plugin/components/Progress.ts b/src/@chakra-ui/components/Progress.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/components/Progress.ts
rename to src/@chakra-ui/components/Progress.ts
diff --git a/src/@chakra-ui/gatsby-plugin/components/Radio.ts b/src/@chakra-ui/components/Radio.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Radio.ts
rename to src/@chakra-ui/components/Radio.ts
index 85d6a872164..de6ac57cf09 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Radio.ts
+++ b/src/@chakra-ui/components/Radio.ts
@@ -1,9 +1,10 @@
+import { radioAnatomy } from "@chakra-ui/anatomy"
import {
createMultiStyleConfigHelpers,
cssVar,
defineStyle,
} from "@chakra-ui/react"
-import { radioAnatomy } from "@chakra-ui/anatomy"
+
import {
commonInputTriggerStyles,
defineMergeStyles,
diff --git a/src/@chakra-ui/gatsby-plugin/components/Select.ts b/src/@chakra-ui/components/Select.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Select.ts
rename to src/@chakra-ui/components/Select.ts
index 4a07cc0cd84..1ff0d3f138e 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Select.ts
+++ b/src/@chakra-ui/components/Select.ts
@@ -1,5 +1,6 @@
import { selectAnatomy } from "@chakra-ui/anatomy"
import { createMultiStyleConfigHelpers, cssVar } from "@chakra-ui/react"
+
import { defineMergeStyles, selectDefaultTheme } from "./components.utils"
import { Input as inputTheme } from "./Input"
diff --git a/src/@chakra-ui/gatsby-plugin/components/Switch.ts b/src/@chakra-ui/components/Switch.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Switch.ts
rename to src/@chakra-ui/components/Switch.ts
index e3b2d5a8bce..e25b03cdcc9 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Switch.ts
+++ b/src/@chakra-ui/components/Switch.ts
@@ -1,10 +1,11 @@
-import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
import { switchAnatomy } from "@chakra-ui/anatomy"
+import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
+
import {
+ _notDisabledReadOnly,
commonInputTriggerStyles,
defineMergeStyles,
switchDefaultTheme,
- _notDisabledReadOnly,
} from "./components.utils"
const { defineMultiStyleConfig, definePartsStyle } =
diff --git a/src/@chakra-ui/gatsby-plugin/components/Table.ts b/src/@chakra-ui/components/Table.ts
similarity index 95%
rename from src/@chakra-ui/gatsby-plugin/components/Table.ts
rename to src/@chakra-ui/components/Table.ts
index eabea95217b..fd32cedb16d 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Table.ts
+++ b/src/@chakra-ui/components/Table.ts
@@ -4,6 +4,7 @@ import {
cssVar,
defineStyle,
} from "@chakra-ui/react"
+
import { defineMergeStyles, tableDefaultTheme } from "./components.utils"
const { defineMultiStyleConfig, definePartsStyle } =
@@ -32,8 +33,8 @@ const baseStyle = defineMergeStyles(
tr: {
"th, td": {
_notLast: {
- borderRight: "2px",
- borderRightColor: "background.base",
+ borderInlineEnd: "2px",
+ borderInlineEndColor: "background.base",
},
},
},
diff --git a/src/@chakra-ui/gatsby-plugin/components/Tabs.ts b/src/@chakra-ui/components/Tabs.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/components/Tabs.ts
rename to src/@chakra-ui/components/Tabs.ts
index ddeefddeab7..d8fce5f22be 100644
--- a/src/@chakra-ui/gatsby-plugin/components/Tabs.ts
+++ b/src/@chakra-ui/components/Tabs.ts
@@ -1,5 +1,6 @@
-import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
import { tabsAnatomy } from "@chakra-ui/anatomy"
+import { createMultiStyleConfigHelpers } from "@chakra-ui/react"
+
import { tabsDefaultTheme } from "./components.utils"
const { baseStyle, sizes, defaultProps } = tabsDefaultTheme
diff --git a/src/@chakra-ui/components/Tag/index.ts b/src/@chakra-ui/components/Tag/index.ts
new file mode 100644
index 00000000000..5f8a080a9cd
--- /dev/null
+++ b/src/@chakra-ui/components/Tag/index.ts
@@ -0,0 +1,127 @@
+import { tagAnatomy } from "@chakra-ui/anatomy"
+import {
+ createMultiStyleConfigHelpers,
+ defineStyle,
+ theme,
+} from "@chakra-ui/react"
+
+import { defineMergeStyles } from "../components.utils"
+
+import { $badgeColor, STATUS_COLORS } from "./utils"
+
+const { definePartsStyle, defineMultiStyleConfig } =
+ createMultiStyleConfigHelpers(tagAnatomy.keys)
+
+const { Tag: tagTheme } = theme.components
+
+const baseStyleContainer = defineMergeStyles(tagTheme.baseStyle?.container, {
+ border: "1px",
+ borderColor: "transparent",
+ boxSizing: "border-box",
+ gap: 1,
+ borderRadius: "full",
+ px: 2,
+ py: 0.5,
+ minH: 8,
+ fontWeight: 300,
+ "&:any-link": {
+ textDecor: "none",
+ _focusWithin: {
+ outline: "4px solid",
+ outlineColor: "transparent",
+ outlineOffset: 0,
+ },
+ },
+})
+
+const baseStyleLabel = defineStyle({
+ ...tagTheme.baseStyle?.label,
+ fontSize: "xs",
+ textTransform: "uppercase",
+ textAlign: "center",
+ lineHeight: 1.6,
+})
+
+const baseStyleCloseButton = defineStyle({
+ ...tagTheme.baseStyle?.closeButton,
+ opacity: 1,
+ m: 0,
+ // Clear default
+ _focusVisible: null,
+ "&:focus-visible, &:hover": {
+ outline: "3px solid",
+ outlineOffset: "-2px",
+ },
+})
+
+const baseStyle = definePartsStyle({
+ container: baseStyleContainer,
+ label: baseStyleLabel,
+ closeButton: baseStyleCloseButton,
+})
+
+const getStatusStyles = (status: string, variant: string) => {
+ const statusStyles = STATUS_COLORS[status][variant]
+
+ return {
+ container: statusStyles,
+ }
+}
+
+const variantSubtle = definePartsStyle((props) => {
+ const { status = "normal" } = props
+ const defaultStyles = tagTheme.variants?.subtle(props)
+ const statusStyles = getStatusStyles(status, "subtle")
+ return {
+ container: {
+ ...defaultStyles?.container,
+ // Remove default dark mode styles
+ _dark: {},
+ ...statusStyles.container,
+ },
+ }
+})
+
+const variantSolid = definePartsStyle((props) => {
+ const { status = "normal" } = props
+ const defaultStyles = tagTheme.variants?.solid(props)
+ const statusStyles = getStatusStyles(status, "solid")
+ return {
+ container: {
+ ...defaultStyles?.container,
+ // Remove default dark mode styles
+ _dark: {},
+ ...statusStyles.container,
+ },
+ }
+})
+
+const variantOutline = definePartsStyle((props) => {
+ const { status = "normal" } = props
+ const defaultStyles = tagTheme.variants?.outline(props)
+ const statusStyles = getStatusStyles(status, "outline")
+ return {
+ container: {
+ ...defaultStyles?.container,
+ boxShadow: "none",
+ borderColor: $badgeColor.reference,
+ // Remove default dark mode styles
+ _dark: {},
+ ...statusStyles.container,
+ },
+ }
+})
+
+const variants = {
+ subtle: variantSubtle,
+ solid: variantSolid,
+ outline: variantOutline,
+}
+
+export const Tag = defineMultiStyleConfig({
+ baseStyle,
+ variants,
+ defaultProps: {
+ variant: "subtle",
+ },
+})
diff --git a/src/@chakra-ui/gatsby-plugin/components/Tag/utils.ts b/src/@chakra-ui/components/Tag/utils.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/components/Tag/utils.ts
rename to src/@chakra-ui/components/Tag/utils.ts
diff --git a/src/@chakra-ui/gatsby-plugin/components/Text.ts b/src/@chakra-ui/components/Text.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/components/Text.ts
rename to src/@chakra-ui/components/Text.ts
diff --git a/src/@chakra-ui/gatsby-plugin/components/components.utils.ts b/src/@chakra-ui/components/components.utils.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/components/components.utils.ts
rename to src/@chakra-ui/components/components.utils.ts
index c62af85985f..f0bb58df0a0 100644
--- a/src/@chakra-ui/gatsby-plugin/components/components.utils.ts
+++ b/src/@chakra-ui/components/components.utils.ts
@@ -1,5 +1,5 @@
-import { cssVar, SystemStyleObject, theme } from "@chakra-ui/react"
import { merge } from "lodash"
+import { cssVar, SystemStyleObject, theme } from "@chakra-ui/react"
const {
Accordion: accordionDefaultTheme,
diff --git a/src/@chakra-ui/components/index.ts b/src/@chakra-ui/components/index.ts
new file mode 100644
index 00000000000..f105ee21480
--- /dev/null
+++ b/src/@chakra-ui/components/index.ts
@@ -0,0 +1,60 @@
+import { Alert } from "./Alert"
+import { Avatar } from "./Avatar"
+import { Badge } from "./Badge"
+import { Breadcrumb } from "./Breadcrumb"
+import { Button } from "./Button"
+import { Checkbox } from "./Checkbox"
+import {
+ accordionDefaultTheme,
+ closeButtonDefaultTheme,
+ codeDefaultTheme,
+ dividerDefaultTheme,
+ drawerDefaultTheme,
+ formDefaultTheme,
+ formLabelDefaultTheme,
+ menuDefaultTheme,
+ spinnerDefaultTheme,
+} from "./components.utils"
+import { Heading } from "./Heading"
+import { Input } from "./Input"
+import { Link } from "./Link"
+import { Modal } from "./Modal"
+import { Progress } from "./Progress"
+import { Radio } from "./Radio"
+import { Select } from "./Select"
+import { Switch } from "./Switch"
+import { Table } from "./Table"
+import { Tabs } from "./Tabs"
+import { Tag } from "./Tag"
+import { Text } from "./Text"
+
+// eslint-disable-next-line import/no-anonymous-default-export
+export default {
+ Accordion: accordionDefaultTheme,
+ Alert,
+ Avatar,
+ Badge,
+ Breadcrumb,
+ Button,
+ Checkbox,
+ CloseButton: closeButtonDefaultTheme,
+ Code: codeDefaultTheme,
+ Divider: dividerDefaultTheme,
+ Drawer: drawerDefaultTheme,
+ Form: formDefaultTheme,
+ FormLabel: formLabelDefaultTheme,
+ Heading,
+ Input,
+ Link,
+ Menu: menuDefaultTheme,
+ Modal,
+ Progress,
+ Radio,
+ Select,
+ Spinner: spinnerDefaultTheme,
+ Switch,
+ Table,
+ Tabs,
+ Tag,
+ Text,
+}
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/colors.ts b/src/@chakra-ui/foundations/colors.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/foundations/colors.ts
rename to src/@chakra-ui/foundations/colors.ts
diff --git a/src/@chakra-ui/foundations/index.ts b/src/@chakra-ui/foundations/index.ts
new file mode 100644
index 00000000000..b06bb6b1b83
--- /dev/null
+++ b/src/@chakra-ui/foundations/index.ts
@@ -0,0 +1,20 @@
+import colors from "./colors"
+import shadows from "./shadows"
+import sizes from "./sizes"
+import spacing from "./spacing"
+import typography from "./typography"
+
+// Check the following link to see all the possible options:
+// https://github.com/chakra-ui/chakra-ui/blob/main/packages/theme/src/foundations/index.ts
+const foundations = {
+ colors,
+ shadows,
+ space: spacing,
+ sizes: {
+ ...spacing,
+ ...sizes,
+ },
+ ...typography,
+}
+
+export default foundations
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/shadows.ts b/src/@chakra-ui/foundations/shadows.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/foundations/shadows.ts
rename to src/@chakra-ui/foundations/shadows.ts
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/sizes.ts b/src/@chakra-ui/foundations/sizes.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/foundations/sizes.ts
rename to src/@chakra-ui/foundations/sizes.ts
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/spacing.ts b/src/@chakra-ui/foundations/spacing.ts
similarity index 100%
rename from src/@chakra-ui/gatsby-plugin/foundations/spacing.ts
rename to src/@chakra-ui/foundations/spacing.ts
diff --git a/src/@chakra-ui/foundations/typography.ts b/src/@chakra-ui/foundations/typography.ts
new file mode 100644
index 00000000000..862ad1edef3
--- /dev/null
+++ b/src/@chakra-ui/foundations/typography.ts
@@ -0,0 +1,20 @@
+const typography = {
+ fonts: {
+ heading: "var(--font-inter)",
+ body: "var(--font-inter)",
+ monospace: "var(--font-mono)",
+ },
+
+ lineHeights: {
+ "6xs": 1.1,
+ "5xs": 1.15,
+ "4xs": 1.2,
+ "3xs": 1.25,
+ "2xs": 1.35,
+ xs: 1.4,
+ sm: 1.5,
+ base: 1.6,
+ },
+}
+
+export default typography
diff --git a/src/@chakra-ui/gatsby-plugin/components/Tag/index.ts b/src/@chakra-ui/gatsby-plugin/components/Tag/index.ts
deleted file mode 100644
index 8e2ddea9ecd..00000000000
--- a/src/@chakra-ui/gatsby-plugin/components/Tag/index.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import {
- createMultiStyleConfigHelpers,
- theme,
- defineStyle,
-} from "@chakra-ui/react"
-import { tagAnatomy } from "@chakra-ui/anatomy"
-import { $badgeColor, STATUS_COLORS } from "./utils"
-import { defineMergeStyles } from "../components.utils"
-
-const { definePartsStyle, defineMultiStyleConfig } =
- createMultiStyleConfigHelpers(tagAnatomy.keys)
-
-const { Tag: tagTheme } = theme.components
-
-const baseStyleContainer = defineMergeStyles(tagTheme.baseStyle?.container, {
- border: "1px",
- borderColor: "transparent",
- boxSizing: "border-box",
- gap: 1,
- borderRadius: "full",
- px: 2,
- py: 0.5,
- minH: 8,
- fontWeight: 300,
- "&:any-link": {
- textDecor: "none",
- _focusWithin: {
- outline: "4px solid",
- outlineColor: "transparent",
- outlineOffset: 0,
- },
- },
-})
-
-const baseStyleLabel = defineStyle({
- ...tagTheme.baseStyle?.label,
- fontSize: "xs",
- textTransform: "uppercase",
- textAlign: "center",
- lineHeight: 1.6,
-})
-
-const baseStyleCloseButton = defineStyle({
- ...tagTheme.baseStyle?.closeButton,
- opacity: 1,
- m: 0,
- // Clear default
- _focusVisible: null,
- "&:focus-visible, &:hover": {
- outline: "3px solid",
- outlineOffset: "-2px",
- },
-})
-
-const baseStyle = definePartsStyle({
- container: baseStyleContainer,
- label: baseStyleLabel,
- closeButton: baseStyleCloseButton,
-})
-
-const getStatusStyles = (status: string, variant: string) => {
- const statusStyles = STATUS_COLORS[status][variant]
-
- return {
- container: statusStyles,
- }
-}
-
-const variantSubtle = definePartsStyle((props) => {
- const { status = "normal" } = props
- const defaultStyles = tagTheme.variants?.subtle(props)
- const statusStyles = getStatusStyles(status, "subtle")
- return {
- container: {
- ...defaultStyles?.container,
- // Remove default dark mode styles
- _dark: {},
- ...statusStyles.container,
- },
- }
-})
-
-const variantSolid = definePartsStyle((props) => {
- const { status = "normal" } = props
- const defaultStyles = tagTheme.variants?.solid(props)
- const statusStyles = getStatusStyles(status, "solid")
- return {
- container: {
- ...defaultStyles?.container,
- // Remove default dark mode styles
- _dark: {},
- ...statusStyles.container,
- },
- }
-})
-
-const variantOutline = definePartsStyle((props) => {
- const { status = "normal" } = props
- const defaultStyles = tagTheme.variants?.outline(props)
- const statusStyles = getStatusStyles(status, "outline")
- return {
- container: {
- ...defaultStyles?.container,
- boxShadow: "none",
- borderColor: $badgeColor.reference,
- // Remove default dark mode styles
- _dark: {},
- ...statusStyles.container,
- },
- }
-})
-
-const variants = {
- subtle: variantSubtle,
- solid: variantSolid,
- outline: variantOutline,
-}
-
-export const Tag = defineMultiStyleConfig({
- baseStyle,
- variants,
- defaultProps: {
- variant: "subtle",
- },
-})
diff --git a/src/@chakra-ui/gatsby-plugin/components/index.ts b/src/@chakra-ui/gatsby-plugin/components/index.ts
deleted file mode 100644
index 2dd5ab689be..00000000000
--- a/src/@chakra-ui/gatsby-plugin/components/index.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Alert } from "./Alert"
-import { Avatar } from "./Avatar"
-import { Badge } from "./Badge"
-import { Button } from "./Button"
-import { Breadcrumb } from "./Breadcrumb"
-import { Heading } from "./Heading"
-import { Link } from "./Link"
-import { Tag } from "./Tag"
-import { Modal } from "./Modal"
-import { Checkbox } from "./Checkbox"
-import { Progress } from "./Progress"
-import { Tabs } from "./Tabs"
-import { Text } from "./Text"
-import { Table } from "./Table"
-import { Radio } from "./Radio"
-import { Select } from "./Select"
-import { Switch } from "./Switch"
-import { Input } from "./Input"
-import {
- accordionDefaultTheme,
- closeButtonDefaultTheme,
- codeDefaultTheme,
- dividerDefaultTheme,
- drawerDefaultTheme,
- formDefaultTheme,
- formLabelDefaultTheme,
- headingDefaultTheme,
- menuDefaultTheme,
- spinnerDefaultTheme,
-} from "./components.utils"
-
-export default {
- Accordion: accordionDefaultTheme,
- Alert,
- Avatar,
- Badge,
- Breadcrumb,
- Button,
- Checkbox,
- CloseButton: closeButtonDefaultTheme,
- Code: codeDefaultTheme,
- Divider: dividerDefaultTheme,
- Drawer: drawerDefaultTheme,
- Form: formDefaultTheme,
- FormLabel: formLabelDefaultTheme,
- Heading,
- Input,
- Link,
- Menu: menuDefaultTheme,
- Modal,
- Progress,
- Radio,
- Select,
- Spinner: spinnerDefaultTheme,
- Switch,
- Table,
- Tabs,
- Tag,
- Text,
-}
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/index.ts b/src/@chakra-ui/gatsby-plugin/foundations/index.ts
deleted file mode 100644
index 2756e138558..00000000000
--- a/src/@chakra-ui/gatsby-plugin/foundations/index.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import colors from "./colors"
-import shadows from "./shadows"
-import typography from "./typography"
-import spacing from "./spacing"
-import sizes from "./sizes"
-
-// Check the following link to see all the possible options:
-// https://github.com/chakra-ui/chakra-ui/blob/main/packages/theme/src/foundations/index.ts
-const foundations = {
- colors,
- shadows,
- space: spacing,
- sizes: {
- ...spacing,
- ...sizes,
- },
- ...typography,
-}
-
-export default foundations
diff --git a/src/@chakra-ui/gatsby-plugin/foundations/typography.ts b/src/@chakra-ui/gatsby-plugin/foundations/typography.ts
deleted file mode 100644
index 96f855fcedd..00000000000
--- a/src/@chakra-ui/gatsby-plugin/foundations/typography.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-const typography = {
- fonts: {
- heading: "Inter, sans-serif",
- body: "Inter, sans-serif",
- monospace: "'IBM Plex Mono', Courier, monospace",
- },
-
- lineHeights: {
- "6xs": 1.1,
- "5xs": 1.15,
- "4xs": 1.2,
- "3xs": 1.25,
- "2xs": 1.35,
- xs: 1.4,
- sm: 1.5,
- base: 1.6,
- },
-}
-
-export default typography
diff --git a/src/@chakra-ui/gatsby-plugin/theme.ts b/src/@chakra-ui/gatsby-plugin/theme.ts
deleted file mode 100644
index d9b2b116818..00000000000
--- a/src/@chakra-ui/gatsby-plugin/theme.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { extendBaseTheme, type ThemeConfig } from "@chakra-ui/react"
-
-// Global style overrides
-import styles from "./styles"
-
-// Foundational style overrides
-import foundations from "./foundations"
-
-// Component style overrides
-import components from "./components"
-
-import semanticTokens from "./semanticTokens"
-
-const config: ThemeConfig = {
- cssVarPrefix: "eth",
- initialColorMode: "light",
- useSystemColorMode: true,
-}
-
-/**
- * Override default styles with our custom theme.
- *
- * The complete list of default Chakra styles can be found here:
- * https://github.com/chakra-ui/chakra-ui/tree/main/packages/theme/src
- */
-const theme = {
- config,
- styles,
- ...foundations,
- semanticTokens,
- components,
-}
-
-export default extendBaseTheme(theme)
diff --git a/src/@chakra-ui/gatsby-plugin/semanticTokens.ts b/src/@chakra-ui/semanticTokens.ts
similarity index 99%
rename from src/@chakra-ui/gatsby-plugin/semanticTokens.ts
rename to src/@chakra-ui/semanticTokens.ts
index 95af3bb8253..111583da38a 100644
--- a/src/@chakra-ui/gatsby-plugin/semanticTokens.ts
+++ b/src/@chakra-ui/semanticTokens.ts
@@ -1,7 +1,7 @@
import {
- lightTheme as oldLightTheme,
darkTheme as oldDarkTheme,
-} from "../../theme"
+ lightTheme as oldLightTheme,
+} from "../theme"
/** @deprecated */
const oldLightThemeColors = oldLightTheme.colors
diff --git a/src/@chakra-ui/gatsby-plugin/styles.ts b/src/@chakra-ui/styles.ts
similarity index 96%
rename from src/@chakra-ui/gatsby-plugin/styles.ts
rename to src/@chakra-ui/styles.ts
index 19ec78973da..4999f23a06e 100644
--- a/src/@chakra-ui/gatsby-plugin/styles.ts
+++ b/src/@chakra-ui/styles.ts
@@ -55,8 +55,8 @@ const styles = {
".header-anchor": {
position: "relative !important",
display: "initial",
- marginLeft: "-1.5em",
- paddingRight: "0.5rem !important",
+ marginStart: "-1.5em",
+ paddingEnd: "0.5rem !important",
fontSize: "1rem",
verticalAlign: "middle",
diff --git a/src/@chakra-ui/theme.ts b/src/@chakra-ui/theme.ts
new file mode 100644
index 00000000000..b965d326315
--- /dev/null
+++ b/src/@chakra-ui/theme.ts
@@ -0,0 +1,28 @@
+import type { ThemeConfig } from "@chakra-ui/react"
+
+import components from "./components"
+import foundations from "./foundations"
+import semanticTokens from "./semanticTokens"
+import styles from "./styles"
+
+const config: ThemeConfig = {
+ cssVarPrefix: "eth",
+ initialColorMode: "system",
+ useSystemColorMode: true,
+}
+
+/**
+ * Override default styles with our custom theme.
+ *
+ * The complete list of default Chakra styles can be found here:
+ * https://github.com/chakra-ui/chakra-ui/tree/main/packages/theme/src
+ */
+const theme = {
+ config,
+ styles,
+ ...foundations,
+ semanticTokens,
+ components,
+}
+
+export default theme
diff --git a/src/api/calendarEvents.ts b/src/api/calendarEvents.ts
deleted file mode 100644
index cddd834c5d4..00000000000
--- a/src/api/calendarEvents.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import axios from "axios"
-import type { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby"
-
-async function handler(
- __req: GatsbyFunctionRequest,
- res: GatsbyFunctionResponse
-): PromiseTX
:
+
+
+ S
, return an error.
+ S
with all input UTXO removed and all output UTXO added.
+
-
-
- {card.severityList.map((listItemId) => (
-
- {t(card.h2TranslationId)}
+
+ {card.severityList.map((listItemId) => (
+
+