From 9b0c689063d6642f16fedcd33eb39d87df66c032 Mon Sep 17 00:00:00 2001 From: fennar01 <42185291+fennar01@users.noreply.github.com> Date: Wed, 1 Jun 2022 23:12:50 +1200 Subject: [PATCH 001/244] Fixed broken link The link to "The Merge" was broken so I updated the path to the best link I could find. Needs verification. --- .../docs/consensus-mechanisms/pow/mining-algorithms/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md index 38c5a127ca7..0ad03ab6df9 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Ethereum mining has used two mining algorithms, Dagger Hashimoto and Ethash. Dagger Hashimoto was never used to mine Ethereum, being superseded by Ethash before mainet launched. It was a R&D mining algorithm that paved the way for Ethash. However, it has historical significance as an important innovation in Ethereum's development. Proof-of-work mining itself will be deprecated in favor of proof-of-stake during [The Merge](/merge/), which is forecast to happen in Q3-Q4 2022. +Ethereum mining has used two mining algorithms, Dagger Hashimoto and Ethash. Dagger Hashimoto was never used to mine Ethereum, being superseded by Ethash before mainet launched. It was a R&D mining algorithm that paved the way for Ethash. However, it has historical significance as an important innovation in Ethereum's development. Proof-of-work mining itself will be deprecated in favor of proof-of-stake during [The Merge](/en/upgrades/merge/), which is forecast to happen in Q3-Q4 2022. The fundamental idea of both mining algorithms is that a miner tries to find a nonce input using brute force computation so that the result is below a certain difficulty threshold. This difficulty threshold can be dynamically adjusted, allowing block production to happen at a regular interval. From d43b17d409dc107c8c84c0a7ce94bf3bb7c41198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Havel?= <61149543+taxmeifyoucan@users.noreply.github.com> Date: Fri, 3 Jun 2022 12:41:51 +0100 Subject: [PATCH 002/244] Pieces of software --- src/content/developers/docs/consensus-mechanisms/pos/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/index.md b/src/content/developers/docs/consensus-mechanisms/pos/index.md index b9bd6026629..bd61d40fa74 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -56,7 +56,7 @@ Overall, proof-of-stake, as it is implemented on Ethereum, has been demonstrated | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | Staking makes it easier for individuals to participate in securing the network, promoting decentralization. validator node can be run on a normal laptop. Staking pools allow users to stake without having 32 ETH. | Proof-of-stake is younger and less battle-tested compared to proof-of-work | | Staking is more decentralized. Economies of scale do not apply in the same way that they do for PoW mining. | Proof-of-stake is more complex to implement than proof-of-work | -| Proof-of-stake offers greater crypto-economic security than proof-of-work | Users need to run three pieces of software to participate in Ethereum's proof-of-stake compared to one for proof-of-work. | +| Proof-of-stake offers greater crypto-economic security than proof-of-work | Users need to run three pieces of software to participate in Ethereum's proof-of-stake. | | Less issuance of new ether is required to incentivize network participants | | ## Further reading {#further-reading} From 2391c780b2e68e9029f257f8dc1187eadcbb3907 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 6 Jun 2022 20:41:17 -0700 Subject: [PATCH 003/244] Update /upgrade/merge first round of edits --- src/content/upgrades/merge/index.md | 30 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index e93a62e90b3..b7b0d212cb3 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -5,14 +5,16 @@ lang: en template: upgrade sidebar: true image: ../../../assets/upgrades/merge.png -summaryPoint1: Eventually the current Ethereum Mainnet will "merge" with the beacon chain proof-of-stake system. +summaryPoint1: Soon the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. -summaryPoint3: This is planned to precede the roll out of shard chains. -summaryPoint4: We formerly referred to this as "the docking." +summaryPoint3: This sets the stage for future scaling upgrades including data sharding. +summaryPoint4: With The Merge, Ethereum's eneregy consumption drops by 99.95%. Welcome a new greener Ethereum. --- - This upgrade represents the official switch to proof-of-stake consensus. This eliminates the need for energy-intensive mining, and instead secures the network using staked ether. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. +The Merge is one of the most significant and high-stakes upgrades in the history of Ethereum. Extensive testing and bug bounties have been underway for years to make sure it’s done right, maximizing chances of a successful transition. + +This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the EF Blog or the client communication channels for the latest official word on When Merge? ## What is The Merge? {#what-is-the-docking} @@ -39,28 +41,30 @@ It is important to note that an implementation goal of The Merge is simplicity i The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. -### The Merge and the Beacon Chain {#docking-and-beacon-chain} +### The Merge and the Beacon Chain {#merge-and-beacon-chain} + +The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the current Mainnet execution layer. Once The Merge happens, validators will be assigned to secure Ethereum Mainnet and mining [proof-of-work](/developers/docs/consensus-mechanisms/pow/) will no longer be a valid means of block production. -Once The Merge happens, stakers will be assigned to validate the Ethereum Mainnet. [Mining](/developers/docs/consensus-mechanisms/pow/mining/) will no longer be required so miners will likely invest their earnings into staking in the new proof-of-stake system. +Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades including data sharding. The Beacon Chain -### The Merge and the post-merge cleanup {#merge-and-post-merge-cleanup} +### The Merge and the Shanghai upgrade {#merge-and-post-merge-cleanup} -Immediately after The Merge, some features such as withdrawing staked ETH, will not yet be supported. These are planned for a separate upgrade to follow shortly after The Merge. +In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, in which the ability to withdraw is slotted as a top priority. -Stay up-to-date with the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. +Stay up-to-date with the [Shanghai Planning issue on GitHub](https://github.com/ethereum/pm/issues/450), or the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. -### The Merge and shard chains {#docking-and-shard-chains} +### The Merge and data sharding {#merge-and-data-sharding} -Originally, the plan was to work on shard chains before The Merge – to address scalability. However, with the boom of [layer 2 scaling solutions](/developers/docs/scaling/#layer-2-scaling), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. +Originally, the plan was to work on shard chains before The Merge—to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. -This will be an ongoing assessment from the community as to the need for potentially multiple rounds of shard chains to allow for endless scalability. +Plans for sharding are rapidly evolving, but given the rise and success of layer 2 technologies to scale transaction execution, sharding plans have shifted to finding the most optimal way to distribute the burden of storing compressed calldata from rollup contracts, allowing for exponential growth in network capacity. This would not be possible without first transitioning to proof-of-stake. - Shard chains + Data sharding ## Read more {#read-more} From 5e3be9d744120d593bb801f277d2500476295ce9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 6 Jun 2022 23:21:27 -0700 Subject: [PATCH 004/244] Update MergeArticleList.js --- src/components/MergeArticleList.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/components/MergeArticleList.js b/src/components/MergeArticleList.js index f29b791eef5..e61f3dca6bf 100644 --- a/src/components/MergeArticleList.js +++ b/src/components/MergeArticleList.js @@ -19,9 +19,24 @@ const reads = [ link: "https://consensys.net/blog/news/the-state-of-the-merge-an-update-on-ethereums-merge-to-proof-of-stake-in-2022/", }, { - title: "Announcing the Kintsugi Merge Testnet", + title: "Announcing the Ropsten Merge Testnet", description: "Ethereum Foundation", - link: "https://blog.ethereum.org/2021/12/20/kintsugi-merge-testnet/", + link: "https://blog.ethereum.org/2022/05/30/ropsten-merge-announcement/", + }, + { + title: "Execution layer specs", + description: "Ethereum Foundation", + link: "https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/merge.md", + }, + { + title: "Consensus layer specs", + description: "Ethereum Foundation", + link: "https://github.com/ethereum/consensus-specs/tree/dev/specs/bellatrix", + }, + { + title: "Engine API specs", + description: "Ethereum Foundation", + link: "https://github.com/ethereum/execution-apis/tree/main/src/engine", }, ] From 0d20fa9482e7db56c8fc18848d909c0660e75acd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 6 Jun 2022 23:22:38 -0700 Subject: [PATCH 005/244] Update index.md --- src/content/upgrades/merge/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index b7b0d212cb3..9e5a999ddf1 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -8,11 +8,11 @@ image: ../../../assets/upgrades/merge.png summaryPoint1: Soon the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. summaryPoint3: This sets the stage for future scaling upgrades including data sharding. -summaryPoint4: With The Merge, Ethereum's eneregy consumption drops by 99.95%. Welcome a new greener Ethereum. +summaryPoint4: With The Merge, Ethereum's eneregy consumption drops by 99.95%. Welcome to a new greener Ethereum. --- -The Merge is one of the most significant and high-stakes upgrades in the history of Ethereum. Extensive testing and bug bounties have been underway for years to make sure it’s done right, maximizing chances of a successful transition. +The Merge is one of the most significant and high-stakes upgrades in the history of Ethereum. Extensive testing and bug bounties have been underway for years to ensure a safe transition to proof-of-stake. This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the EF Blog or the client communication channels for the latest official word on When Merge? From cbc7b2e5970c1f3f0dfaaab821ba1d3f09e2b747 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 6 Jun 2022 23:28:07 -0700 Subject: [PATCH 006/244] Add persona breakdown --- src/content/upgrades/merge/index.md | 64 +++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 9e5a999ddf1..3389efd7c81 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -37,6 +37,70 @@ It is important to note that an implementation goal of The Merge is simplicity i **This means a few features, such as the ability to withdraw staked ETH, will have to wait a little longer after The Merge is complete.** Plans include a post-merge "cleanup" upgrade to address these features, which is expected to happen very soon after The Merge is completed. +## Who does this upgrade affect? + +The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term there are a few things the following groups of people should be aware of that we'll discuss below: + +- Node-operating solo stakers +- Non-validating none operators +- Dapp and smart contract developers + +For everyday users and holders there is nothing you need to do, but a few things you should be on alert for. [More on this below](#users-holders). + +## What to I need to do to get ready? + +### Node-operating solo stakers + +If you are a solo staker running your own node setup, there are a few things you need to be aware to be prepared for The Merge. Key action items include: + +- [ ] Running _both_ a consensus client as well as an execution client. Third-party endpoints to obtain execution data will be unavailable after The Merge. +- [ ] Authenticated your execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. + +Not completing the above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. + +- [ ] Setting a `fee recipient` address to direct your earned transaction fee tips/MEV to. + +Not setting a `fee recipient` will still allow your validator to behave as usual, but you will miss out on unburnt fee tips and any MEV you would have otherwise earned in blocks your validator proposes. + +For more detailed information and summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. + +### Non-validating node operators + +If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) and the consensus layer (CL). + +You probably are already running an EL client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an execution layer client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. + +This means that a full Ethereum node after The Merge requires both an EL client as well as a CL client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. + +- [ ] I have installed a consensus layer client in addition to my execution layer client +- [ ] I have authenticated me execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. + +Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. +Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as much of the details apply to all node operators. + +### Dapp/smart contract developers + +The Merge has been designed to have minimal impact on smart contract and dapp developers, but there are a few small things devs may want to be aware of heading into The Merge. These changes relate to + +- block structure +- slot/block timing +- opcode changes +- sources of on-chain randomness +- concept of _safe head_ and _finalized blocks_ + +For more information, check out this blog post by Tim Beiko on [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer/). + +### Users & hodlers {#users-holders} + +You do not need to anything to protect your funds entering The Merge. + +_This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, **you do not need to do anything with your funds or wallet before The Merge.** + +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. + +As we approach The Merge of Ethereum Mainnet, **users should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. + +[More on Ethereum security](/security/) ## Relationship between upgrades {#relationship-between-upgrades} The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. From 784f40ab979e868ccb6fdc0279d68a8ac71e8e64 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 7 Jun 2022 13:02:38 -0700 Subject: [PATCH 007/244] Add misconceptions about The Merge --- src/content/upgrades/merge/index.md | 67 ++++++++++++++++++++++++++++- src/templates/upgrade.tsx | 2 + 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 3389efd7c81..2898fd5feac 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -96,11 +96,74 @@ You do not need to anything to protect your funds entering The Merge. _This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, **you do not need to do anything with your funds or wallet before The Merge.** -Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. -As we approach The Merge of Ethereum Mainnet, **users should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. +As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. [More on Ethereum security](/security/) + +## Misconceptions about The Merge {#misconceptions} + + +Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. + +With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at layer 2, while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. + + + +The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to finalization. + + + +Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. + +Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. + + + +After the _Shanghai_ update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, and depending on the APR and total ETH staked, they may also be incentivized to exit their validator(s) to reclaim their entire balance. + +An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH stake, and acts as a bottle neck to prevent a mass exodus of funds, or a potential attacker from committing a slashable offense and exiting all funds in the same epoch before the slashing penalty could be issued. + +The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the rate of return for everyone who remains, slowly attracting new or returning stakers yet again. + + + +This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. + +ETH is issued by the protocol as a reward to validators for contributing to consensus. This ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. + +ETH on the execution layer, Mainnet as we know it, is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being issued by the protocol, and is available to the validator immediately (given a proper `eth1` address is provided to the client software). + + + +There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. + +Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. + +The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid. + +Running a non-block-producing node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved privacy and censorship resistance. + +The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. + +[More on running your own node](/run-a-node/) + + + ## Relationship between upgrades {#relationship-between-upgrades} The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. diff --git a/src/templates/upgrade.tsx b/src/templates/upgrade.tsx index 2ec66190f45..0521b33edda 100644 --- a/src/templates/upgrade.tsx +++ b/src/templates/upgrade.tsx @@ -30,6 +30,7 @@ import UpgradeTableOfContents from "../components/UpgradeTableOfContents" import Translation from "../components/Translation" import TranslationsInProgress from "../components/TranslationsInProgress" import SectionNav from "../components/SectionNav" +import ExpandableCard from "../components/ExpandableCard" import { Divider, Paragraph, @@ -176,6 +177,7 @@ const components = { ShardChainsList, MergeArticleList, YouTube, + ExpandableCard, } const Title = styled.h1` From f8555c80e8c720777caffdf5bc160210016dab92 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 7 Jun 2022 19:21:27 -0700 Subject: [PATCH 008/244] copy tweaks --- src/content/upgrades/merge/index.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 2898fd5feac..18f6f79f799 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -8,7 +8,7 @@ image: ../../../assets/upgrades/merge.png summaryPoint1: Soon the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. summaryPoint3: This sets the stage for future scaling upgrades including data sharding. -summaryPoint4: With The Merge, Ethereum's eneregy consumption drops by 99.95%. Welcome to a new greener Ethereum. +summaryPoint4: With The Merge, Ethereum's energy consumption drops by 99.95%. Welcome to a new greener Ethereum. --- @@ -49,22 +49,22 @@ For everyday users and holders there is nothing you need to do, but a few things ## What to I need to do to get ready? -### Node-operating solo stakers +### Node-operating stakers and staking providers If you are a solo staker running your own node setup, there are a few things you need to be aware to be prepared for The Merge. Key action items include: -- [ ] Running _both_ a consensus client as well as an execution client. Third-party endpoints to obtain execution data will be unavailable after The Merge. -- [ ] Authenticated your execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +- Running _both_ a consensus client as well as an execution client. Third-party endpoints to obtain execution data will be unavailable after The Merge. +- Authenticated your execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. -- [ ] Setting a `fee recipient` address to direct your earned transaction fee tips/MEV to. +- Setting a `fee recipient` address to direct your earned transaction fee tips/MEV to. Not setting a `fee recipient` will still allow your validator to behave as usual, but you will miss out on unburnt fee tips and any MEV you would have otherwise earned in blocks your validator proposes. For more detailed information and summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. -### Non-validating node operators +### Non-validating node operators and infrastructure providers If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) and the consensus layer (CL). @@ -72,10 +72,11 @@ You probably are already running an EL client, such as Geth, Erigon, Besu or Net This means that a full Ethereum node after The Merge requires both an EL client as well as a CL client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. -- [ ] I have installed a consensus layer client in addition to my execution layer client -- [ ] I have authenticated me execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +- I have installed a consensus layer client in addition to my execution layer client +- I have authenticated my execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. + Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as much of the details apply to all node operators. ### Dapp/smart contract developers @@ -130,11 +131,12 @@ Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge -After the _Shanghai_ update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, and depending on the APR and total ETH staked, they may also be incentivized to exit their validator(s) to reclaim their entire balance. -An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH stake, and acts as a bottle neck to prevent a mass exodus of funds, or a potential attacker from committing a slashable offense and exiting all funds in the same epoch before the slashing penalty could be issued. +After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. + +An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, or a potential attacker from committing a slashable offense and exiting all funds in the same epoch before the slashing penalty could be issued. -The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the rate of return for everyone who remains, slowly attracting new or returning stakers yet again. +The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again. Date: Tue, 7 Jun 2022 19:57:48 -0700 Subject: [PATCH 009/244] Adds misconception copy --- src/content/upgrades/merge/index.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 18f6f79f799..a619b6e72fb 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -115,9 +115,14 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri -The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to finalization. +contentPreview="Mostly false... Though some slight changes exist, transaction speed will mostly remain the same on layer 1"> +The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." + +Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be a noticeable difference for the end user. + +PoS does introduce the concept of transaction "finality." Under PoW, the ability to reverse a block gets exponentially more difficult with every passing block that is mined on top of your transaction, but it never quite reaches zero. Under PoS, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which are voted on by validators. After an epoch ends, it can be voted on as "justified," and then one more epoch later results in a "finalized" state. To undo these transactions would require obtaining and burning over 1/3 the total ETH staked. + +Many dapps require a number of PoW block confirmations that take a period of time on par with how long PoS finality takes. Finality can offer additional security guarantees, but will not significantly speed up transactions. This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. @@ -150,7 +155,17 @@ ETH on the execution layer, Mainnet as we know it, is accounted for separately f +The APR for stakers is expected to increase post-merge. It is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. + +This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. + +Looking at recent blockchain activity, approximately 10% of all gas fees being paid are currently going to miners in the form of a tip, while the rest is burnt. Outdated predictions estimated this percentage to be much higher, and was calculated when network usage was at all time highs. Extrapolating the 10% number to average recent network activity, it is estimated that the APR for staking will increase to ~7%, approximately 50% higher than the base issuance APR at time of writing. + + + There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. From ad3fa69e8523db78e8878c8c1daba3875f3a2dc7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:43:19 -0700 Subject: [PATCH 010/244] update core copy of merge page --- src/content/upgrades/merge/index.md | 32 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index a619b6e72fb..271dad8244e 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -19,23 +19,23 @@ This process is in its final stages, with plans to undergo The Merge on a few pu ## What is The Merge? {#what-is-the-docking} -It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet) - the chain we use today. Ethereum Mainnet continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge is when these two systems finally come together. +The Merge represents the merger of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. -Imagine Ethereum is a space ship that isn’t quite ready for an interstellar voyage. With the Beacon Chain the community has built a new engine and a hardened hull. When it’s time, the current ship will dock with this new system, merging into one ship, ready to put in some serious lightyears and take on the universe. +It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) (the new "consensus layer") shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet (the "execution layer") continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. -## Merging with Mainnet {#docking-mainnet} +Imagine Ethereum is a space ship that isn’t quite ready for an interstellar voyage. With the Beacon Chain the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap in the new engine for the old mid-flight. This will merge the new more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. -When ready, Ethereum Mainnet will "merge" with the Beacon Chain, becoming its own shard which uses proof-of-stake instead of [proof-of-work](/developers/docs/consensus-mechanisms/pow/). +## Merging with Mainnet {#merging-with-mainnet} -Mainnet will bring the ability to run smart contracts into the proof-of-stake system, plus the full history and current state of Ethereum, to ensure that the transition is smooth for all ETH holders and users. +Since genesis, Mainnet has been secured by proof-of-work. This is the main Ethereum blockchain that we're all used to—it contains every transaction, every smart contract, and every balance since it began in July 2015. -## After The Merge {#after-the-merge} +During this growing history, developers have been hard at work preparing for an eventual transition away from proof-of-work, to proof-of-stake instead. On December 1, 2020 the Beacon Chain was born, which has since lived as a separate blockchain to Mainnet, running in parallel. -This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. At this point Ethereum will be one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). +The Beacon Chain has not been processing Mainnet transactions, and for all intents and purposed has simply been coming to consensus on the state of itself... which is great and all, but after extensive testing, the time for it to come to consensus on more than just itself is rapidly approaching. -It is important to note that an implementation goal of The Merge is simplicity in order to expedite the transition from proof-of-work to proof-of-stake. Developers are focusing their efforts on this transition, and minimizing additional features that could delay this goal. +The Merge itself represents the official switch to using the Beacon Chain as the official means of block production. Mining will no longer be the means of producing valid blocks, and instead this role will land with the validators who will then be responsible for processing the validity of all transactions. -**This means a few features, such as the ability to withdraw staked ETH, will have to wait a little longer after The Merge is complete.** Plans include a post-merge "cleanup" upgrade to address these features, which is expected to happen very soon after The Merge is completed. +No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. ## Who does this upgrade affect? @@ -181,6 +181,20 @@ The ability for anyone to run their own node is _absolutely essential_ to mainta + +An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. + +The Merge is akin to changing an engine on a rocketship mid-flight, and is designed to be performed without any need to pause anything during the switch. The Merge will be triggered by what is known as a TTD, or [terminal total difficulty](/glossary/#terminal-total-difficult), which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criteria is met, blocks will go from being produced using proof-of-work in one block, to being produced by proof-of-stake in the next. + +Ethereum does not go down. + + +## After The Merge {#after-the-merge} + +This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). + ## Relationship between upgrades {#relationship-between-upgrades} The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. From f126fc38a0091ffbc45c287c157c0fd676511a6a Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 8 Jun 2022 10:03:26 +0100 Subject: [PATCH 011/244] initial commit for pre-merge energy-consumption pg --- src/content/energy-consumption/index.md | 64 +++++++------------------ 1 file changed, 18 insertions(+), 46 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index bc6f095d924..6734b0a8bca 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,61 +7,44 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum's current energy expenditure with [proof-of-work](/developers/docs/consensus-mechanisms/#proof-of-work) is too high and unsustainable. Resolving energy expenditure concerns without sacrificing security and decentralization is a significant technical challenge and has been a focus of research and development for years. Let's explore why building Ethereum has had a high environmental impact and how the upcoming network upgrade to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) will dramatically change this. +[The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos) will reduce Ethereum's energy consumption by [~99.5%](https://blog.ethereum.org/2021/05/18/country-power-no-more/). After the Merge Ethereum will use dramatically less Carbon to be more secure. -## Energy secures the network {#energy-secures-the-network} - -Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. - -The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing proof-of-work (PoW). To be eligible to submit a block of transactions, a miner must solve an arbitrary computational puzzle faster than any other miner. Solving this puzzle creates competition between miners and costs in the form of energy expenditure. To successfully defraud the blockchain, a dishonest miner would have to consistently win the proof-of-work race, which is very unlikely and prohibitively expensive. - -Ethereum has used proof-of-work since genesis. Migrating off of proof-of-work and onto proof-of-stake has always been a fundamental goal of Ethereum. However, developing a proof-of-stake system that adheres to Ethereum's core principles of security and decentralization is not trivial. It has required a lot of research and breakthroughs in cryptography, cryptoeconomics, and mechanism design to get to a point where the transition is possible. - -## Proof-of-work energy expenditure {#proof-of-work} - -Proof-of-work is a robust way to secure the network and enforce honest changes to the blockchain, but it is problematic for several reasons. Since the right to mine a block requires solving an arbitrary computational puzzle, miners can increase their odds of success by investing in more powerful hardware. These incentives cause an arms race with miners acquiring increasingly power-hungry mining equipment. Ethereum's proof-of-work protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and carbon footprint similar to Switzerland[^1]. - -## Proof-of-stake {#proof-of-stake} - -A greener future for Ethereum is already being built in the form of a [**proof-of-stake (PoS)** chain](/upgrades/beacon-chain/). Under [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), arbitrary puzzle-solving is unnecessary. Removing puzzle-solving drastically reduces the energy expenditure required to secure the network. Miners get replaced by validators who perform the same function except that instead of expending their assets up-front in the form of computational work, they stake ETH as collateral against dishonest behavior. If the validator is lazy (offline when they are supposed to fulfill some validator duty) their staked ETH can slowly leak away, while provably dishonest behavior results in the staked assets being "slashed". This strongly incentivizes active and honest participation in securing the network. - -Similarly to proof-of-work, a malicious entity would require at least 51% of the total ETH staked in the network to execute a [51% attack](/glossary/#51-attack). However, unlike on proof-of-work, where the potential loss of a failed attack is only the cost of generating the hash power needed to mine, on proof-of-stake, the possible loss of an attack is the entire amount of ETH used as collateral. This disincentive structure allows for network security with proof-of-stake while eliminating the need to expend energy on arbitrary computations. Detailed explanations of the network security under proof-of-stake can be found [here](/developers/docs/consensus-mechanisms/pos/) and [here](https://vitalik.ca/general/2017/12/31/pos_faq.html). +Since inception, Ethereum has aimed to implement a PoS consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using PoW consensus. PoW consensus requires miners to use their computing hardware to solve puzzles. The solutions to these puzzles act as proof that some energy has been expended by the miner which in turn demonstrates that they have invested some real-world value for the right to add to the blockchain. Swapping this mechanism for PoS, where that real world value comes from ether staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. ## The Merge {#the-merge} -There is a functional proof-of-stake chain called the [Beacon Chain](/upgrades/beacon-chain/) that has been running since December 2020 that is demonstrating the viability of the proof-of-stake protocol. The Merge refers to the point in time when Ethereum leaves proof-of-work behind and fully adopts proof-of-stake. The Merge is expected to happen ~Q3/Q4 2022. [More on The Merge](/upgrades/merge/). +A PoS blockchain known as the "Beacon Chain" has been running since November 2020 alongside the PoW Ethereum Mainnet. In 2022 several custom devnets have been merged with their own Beacon Chains to aid in debugging Ethereum clients in advance of the real merge. More recently, Ethereum developers have started merging public testnets (Kiln, Kintsugi, Ropsten) and shadow-forks (forks of Ethereum Mainnet) as the final stage of testing. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's PoW mining will be switched off, PoS consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. -## Proof-of-stake energy expenditure {#proof-of-stake-energy} +## Why proof-of-stake is greener than proof-of-work {why-pos-is-greener-than-pow} -As well as building confidence in the proof-of-stake mechanism, the Beacon Chain also enables estimates of Ethereum's post-merge energy usage. A [recent estimate](https://blog.ethereum.org/2021/05/18/country-power-no-more/) suggested that The Merge to proof-of-stake could result in a 99.95% reduction in total energy use, with proof-of-stake being ~2000x more energy-efficient than proof-of-work. The energy expenditure of Ethereum will be roughly equal to the cost of running a home computer for each node on the network. +PoW is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. +The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing PoW. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the PoW race by investing in sufficient hardware and energy to outperform the majority of other miners. -![image](energy_use_per_transaction.png) +This mechanism of securing the network is problematic for several reasons. Miners can increase their odds of success by investing in more and more powerful hardware, creatign conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Ethereum's PoW protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and carbon footprint similar to Switzerland[^1]. -

Estimate of PoW energy consumption per tx used in figure based on May 2021 data, at time of writing the same source suggested up to 175.56 Kwh

+PoS uses validators instead of miners. Validators perform the same function as miners except that instead of expending their assets up-front in the form of energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ether cna be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the PoW network comes from the mining algorithm, switching to PoS reduces the energy expenditure dramatically. There is also no benefit to be had by investing in mroe powerful hardware under PoS, so there is no arms-race condition and less electronic waste. Ethereum validators can run on normal laptops or even low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). -Let's compare these numbers to a service such as Visa. 100,000 Visa transactions uses 149kWh of energy[^2]. Assuming sharding has been implemented, Ethereum's current transaction rate (15 transactions per second) will be increased by at least 64x (the number of shards), not accounting for additional optimization from rollups. A realistic estimate for post-merge, sharded Ethereum with rollups is [25,000 - 100,000](https://twitter.com/VitalikButerin/status/1312905884549300224?s=20) transactions per second. We can use this information to estimate maximum and minimum energy expenditure per 100,000 transactions. +Read more detailed information about [how PoS is implemented in Ethereum](/developers/docs/consensus-mechanisms/pos) and how it compares to PoW. -- 25,000 transactions per second. -- `100,000 / 25,000 = 4` seconds to process 100,000 transactions. +## Proof-of-stake energy expenditure {#proof-of-stake-energy} -We can also estimate Ethereum's energy expenditure per second, making a conservative estimate that 10,000 active validators are securing the network (there are over [250,000 validators on the Beacon Chain](https://beaconscan.com/) at the moment, but many validators can operate on a single node. Currently, there are estimated to be 3,000-4,000 individual nodes, so 10,000 is a conservative estimate for post-merge): +Estimates based on the current Beacon Chain suggest that the merge to PoS could result in a 99.95% reduction in total energy use, with PoS being ~2000x more energy-efficient than PoW. The energy expenditure of Ethereum will be roughly equal to the cost of running a modest laptop for each node on the network. -`1.44kWh daily usage * 10,000 network nodes = 14,400kWh` per day. -There are 86,400 seconds in a day, so `14,400 / 86,400 = 0.1667 kWh` per second. +Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand, but the energy required to mine a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure, and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. -If we multiply that by the amount of time it takes to process 100,000 transaction: `0.1667 * 4 = 0.667 kWh`. +For example, for Ethereum the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its “layer 2” rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. -This is ~0.4% of the energy used by Visa for the same number of transactions, or a reduction in energy expenditure by a factor of ~225 compared to Ethereum's current proof-of-work network. +More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values one can examine what that network offers to its users and to society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibit an honest cost-benefit analysis. -Repeating the calculation with the maximum transactions-per-second yields 0.1667 kWh per second which is about 0.1% of the energy expenditure of Visa, or a reduction of ~894x. +Whole-network energy consumption and carbon footprints for Bitcoin and Ethereum are estimated at [Digiconomist](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article Ethereum’s total energy consumption is ~112 TWh/yr, equivalent to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr energy and emits about 100 MT/yr C, while also generating about 32,000 T of electrical waste from obsolete hardware per year. Switching off Ethereum’s PoW in favor of PoS will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is expected to be closer to **0.01 TW/yr**. -_Note: it's not entirely accurate to compare based on number of transactions as Ethereum's energy usage is time-based. The energy usage of Ethereum is the same in 1 minute regardless if it does 1 or 1,000 transactions._ +To put this in context we can compare to annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare it to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube’s energy expenditure have even been broken down by channel and even further by individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that at least 400x more energy was expended watching Gangnam Style in 2019 than will be expended in a year of securing PoS Ethereum. -_We must also consider that Ethereum isn't limited to simple financial transactions but is also a complete platform built for smart contracts and decentralized applications._ ## A greener Ethereum {#green-ethereum} -While Ethereum's energy consumption has historically been substantial, there has been a major investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block validation. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by proof-of-work is simply to "turn it off", which is the approach Ethereum has committed to take. +While Ethereum's energy consumption has historically been substantial, there has been a major investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block production. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by PoW is simply to "turn it off", which is the approach Ethereum has committed to take. At the same time, there is a substantial, growing and highly active "ReFi" (Regenerative Finance) community building on Ethereum. ReFi refers to applications that use DeFi components to build financial applicatiosn that have positive externalities benfiting the environment. This is part of a wider "Solarpunk" movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. After the merge, the technology and philosophy of Ethereum will finally reconcile and Ethereum should become an overall environmentally-positive technology. + If you think these stats are incorrect or can be made more accurate, please raise an issue or PR. These are estimates by the ethereum.org team made using publicly accessible information and the current Ethereum roadmap. These statements don't represent an official promise from the Ethereum Foundation. @@ -82,14 +65,3 @@ While Ethereum's energy consumption has historically been substantial, there has - [The Merge](/upgrades/merge/) - [Sharding](/upgrades/beacon-chain/) -### Footnotes and sources {#footnotes-and-sources} - -#### 1. Ethereum proof-of-work energy consumption {#fn-1} - -[Energy Consumption by Country inc. Ethereum (Annualized TWh)](https://digiconomist.net/ethereum-energy-consumption) - -#### 2. Visa energy consumption {#fn-2} - -[Bitcoin network average energy consumption per transaction compared to VISA network as of 2020, Statista](https://www.statista.com/statistics/881541/bitcoin-energy-consumption-transaction-comparison-visa/) - -[Visa financials report Q4 2020](https://s1.q4cdn.com/050606653/files/doc_financials/2020/q4/Visa-Inc.-Q4-2020-Operational-Performance-Data.pdf) From b382cbe0ffdb6e1aec4f73f093a4590a5307d392 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 8 Jun 2022 13:16:01 +0100 Subject: [PATCH 012/244] apply suggestions from review --- src/content/energy-consumption/index.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index 6734b0a8bca..a4b802bc6b1 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,9 +7,9 @@ sidebar: true # Ethereum energy consumption {#introduction} -[The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos) will reduce Ethereum's energy consumption by [~99.5%](https://blog.ethereum.org/2021/05/18/country-power-no-more/). After the Merge Ethereum will use dramatically less Carbon to be more secure. +[The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos) will reduce Ethereum's energy consumption by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/). After the Merge Ethereum will use dramatically less carbon to be more secure. -Since inception, Ethereum has aimed to implement a PoS consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using PoW consensus. PoW consensus requires miners to use their computing hardware to solve puzzles. The solutions to these puzzles act as proof that some energy has been expended by the miner which in turn demonstrates that they have invested some real-world value for the right to add to the blockchain. Swapping this mechanism for PoS, where that real world value comes from ether staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. +Since inception, Ethereum has aimed to implement a PoS consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using PoW consensus. PoW consensus requires miners to use their computing hardware to solve a puzzle. The solution to this puzzle acts as proof that some energy has been expended by the miner which in turn demonstrates that they have invested some real-world value for the right to add to the blockchain. PoW is just a mechanism to decide who gets to add the next block, as is PoS. Swapping PoW for PoS, where the real world value invested comes from ether staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. ## The Merge {#the-merge} @@ -17,7 +17,7 @@ A PoS blockchain known as the "Beacon Chain" has been running since November 202 ## Why proof-of-stake is greener than proof-of-work {why-pos-is-greener-than-pow} -PoW is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. +PoW is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing PoW. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the PoW race by investing in sufficient hardware and energy to outperform the majority of other miners. This mechanism of securing the network is problematic for several reasons. Miners can increase their odds of success by investing in more and more powerful hardware, creatign conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Ethereum's PoW protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and carbon footprint similar to Switzerland[^1]. @@ -36,16 +36,14 @@ For example, for Ethereum the transaction throughput is not only that of the bas More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values one can examine what that network offers to its users and to society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibit an honest cost-benefit analysis. -Whole-network energy consumption and carbon footprints for Bitcoin and Ethereum are estimated at [Digiconomist](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article Ethereum’s total energy consumption is ~112 TWh/yr, equivalent to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr energy and emits about 100 MT/yr C, while also generating about 32,000 T of electrical waste from obsolete hardware per year. Switching off Ethereum’s PoW in favor of PoS will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is expected to be closer to **0.01 TW/yr**. - -To put this in context we can compare to annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare it to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube’s energy expenditure have even been broken down by channel and even further by individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that at least 400x more energy was expended watching Gangnam Style in 2019 than will be expended in a year of securing PoS Ethereum. +Whole-network energy consumption and carbon footprints for Bitcoin and Ethereum are estimated at [Digiconomist](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article Ethereum’s total energy consumption is ~112 TWh/yr, equivalent to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr energy and emits about 100 MT/yr C, while also generating about 32,000 T of electrical waste from obsolete hardware per year. Switching off Ethereum’s PoW in favor of PoS will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is expected to be closer to **0.01 TWh/yr**. +To put this in context we can compare to annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube’s energy expenditure have even been broken down by channel and even further by individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that at least 45x more energy was expended watching Gangnam Style in 2019 than will be expended in a year of securing PoS Ethereum. ## A greener Ethereum {#green-ethereum} While Ethereum's energy consumption has historically been substantial, there has been a major investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block production. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by PoW is simply to "turn it off", which is the approach Ethereum has committed to take. At the same time, there is a substantial, growing and highly active "ReFi" (Regenerative Finance) community building on Ethereum. ReFi refers to applications that use DeFi components to build financial applicatiosn that have positive externalities benfiting the environment. This is part of a wider "Solarpunk" movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. After the merge, the technology and philosophy of Ethereum will finally reconcile and Ethereum should become an overall environmentally-positive technology. - If you think these stats are incorrect or can be made more accurate, please raise an issue or PR. These are estimates by the ethereum.org team made using publicly accessible information and the current Ethereum roadmap. These statements don't represent an official promise from the Ethereum Foundation. @@ -64,4 +62,3 @@ While Ethereum's energy consumption has historically been substantial, there has - [The Beacon Chain](/upgrades/beacon-chain) - [The Merge](/upgrades/merge/) - [Sharding](/upgrades/beacon-chain/) - From 2511d25a5d2428578c64370b42b008726d3043e6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 8 Jun 2022 11:52:25 -0700 Subject: [PATCH 013/244] copy adjustments --- src/content/upgrades/merge/index.md | 46 +++++++++++++++++------------ 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 271dad8244e..2d688915a27 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -33,7 +33,7 @@ During this growing history, developers have been hard at work preparing for an The Beacon Chain has not been processing Mainnet transactions, and for all intents and purposed has simply been coming to consensus on the state of itself... which is great and all, but after extensive testing, the time for it to come to consensus on more than just itself is rapidly approaching. -The Merge itself represents the official switch to using the Beacon Chain as the official means of block production. Mining will no longer be the means of producing valid blocks, and instead this role will land with the validators who will then be responsible for processing the validity of all transactions. +The Merge itself represents the official switch to using the Beacon Chain as the official means of block production. Mining will no longer be the means of producing valid blocks, and instead this role will land with the proof-of-stake validators who will then be responsible for processing the validity of all transactions, and proposing blocks. No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. @@ -41,20 +41,22 @@ No history is lost. As Mainnet is merged with the Beacon Chain, the entire trans The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term there are a few things the following groups of people should be aware of that we'll discuss below: -- Node-operating solo stakers -- Non-validating none operators +- Node-operating stakers and staking providers +- Non-validating node operators and infrastructure providers - Dapp and smart contract developers -For everyday users and holders there is nothing you need to do, but a few things you should be on alert for. [More on this below](#users-holders). +For everyday users, holders, or non-node-operating stakers there is nothing you need to do, but a few things you should be on alert for. [More on this below](#users-holders). ## What to I need to do to get ready? ### Node-operating stakers and staking providers -If you are a solo staker running your own node setup, there are a few things you need to be aware to be prepared for The Merge. Key action items include: +If you are a staker running your own node setup, or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge. -- Running _both_ a consensus client as well as an execution client. Third-party endpoints to obtain execution data will be unavailable after The Merge. -- Authenticated your execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +Key action items include: + +- Running _both_ a consensus layer (CL) client as well as an execution layer (EL) client. Third-party endpoints to obtain execution data will be unavailable after The Merge. +- Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. @@ -64,16 +66,20 @@ Not setting a `fee recipient` will still allow your validator to behave as usual For more detailed information and summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. +Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe](#users-holders). + ### Non-validating node operators and infrastructure providers -If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) and the consensus layer (CL). +If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) _and_ the consensus layer (CL). -You probably are already running an EL client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an execution layer client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. +You probably are already running an EL client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an EL client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. This means that a full Ethereum node after The Merge requires both an EL client as well as a CL client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. -- I have installed a consensus layer client in addition to my execution layer client -- I have authenticated my execution and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +Key action items include: + +- Installing a CL client in addition to an EL client +- Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. @@ -115,12 +121,14 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri +contentPreview="Mostly false... Though some slight changes exist, transaction speed will mostly remain the same on layer 1."> The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." +tl;dr: Both change slightly, but not in a way that will be felt significantly by the end user. + Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be a noticeable difference for the end user. -PoS does introduce the concept of transaction "finality." Under PoW, the ability to reverse a block gets exponentially more difficult with every passing block that is mined on top of your transaction, but it never quite reaches zero. Under PoS, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which are voted on by validators. After an epoch ends, it can be voted on as "justified," and then one more epoch later results in a "finalized" state. To undo these transactions would require obtaining and burning over 1/3 the total ETH staked. +PoS does introduce the concept of transaction "finality" which did not previously exist. Under PoW, the ability to reverse a block gets exponentially more difficult with every passing block that is mined on top of your transaction, but it never quite reaches zero. Under PoS, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which are voted on by validators. After an epoch ends, it can be voted on as "justified," and then one more epoch later results in a "finalized" state. To undo these transactions would require obtaining and burning over 1/3 the total ETH staked. Many dapps require a number of PoW block confirmations that take a period of time on par with how long PoS finality takes. Finality can offer additional security guarantees, but will not significantly speed up transactions. @@ -139,7 +147,7 @@ contentPreview="❌ False. Validator exits are rate limited for security reasons After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. -An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, or a potential attacker from committing a slashable offense and exiting all funds in the same epoch before the slashing penalty could be issued. +An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again.
@@ -149,15 +157,15 @@ title="'Validators will not receive any liquid ETH rewards until Shanghai when w contentPreview="❌ False. Fee tips/MEV will be credited to a Mainnet account controlled by the validator, available immediately."> This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. -ETH is issued by the protocol as a reward to validators for contributing to consensus. This ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. +ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. -ETH on the execution layer, Mainnet as we know it, is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being issued by the protocol, and is available to the validator immediately (given a proper `eth1` address is provided to the client software). +ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software).
-The APR for stakers is expected to increase post-merge. It is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. +The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. @@ -171,9 +179,9 @@ There are two general types of Ethereum nodes: nodes that can propose blocks, an Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. -The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid. +The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid, and stop its propagation. -Running a non-block-producing node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved privacy and censorship resistance. +Running a "non block-producing" node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for all users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved security, privacy and censorship resistance. The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. From 49ba9930588c7f5927ac5d95f4cf3dd31ddec381 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 8 Jun 2022 12:24:21 -0700 Subject: [PATCH 014/244] header linking --- src/content/upgrades/merge/index.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 2d688915a27..7257d864830 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -37,19 +37,19 @@ The Merge itself represents the official switch to using the Beacon Chain as the No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. -## Who does this upgrade affect? +## Who does this upgrade affect? {#who-does-the-merge-affect} The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term there are a few things the following groups of people should be aware of that we'll discuss below: -- Node-operating stakers and staking providers -- Non-validating node operators and infrastructure providers -- Dapp and smart contract developers +- [Node-operating stakers and staking providers](#node-operating-stakers) +- [Non-validating node operators and infrastructure providers](#node-operators) +- [Dapp and smart contract developers](#developers) For everyday users, holders, or non-node-operating stakers there is nothing you need to do, but a few things you should be on alert for. [More on this below](#users-holders). -## What to I need to do to get ready? +## What to I need to do to get ready? {#preparing-for-the-merge} -### Node-operating stakers and staking providers +### Node-operating stakers and staking providers {#node-operating-stakers} If you are a staker running your own node setup, or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge. @@ -68,7 +68,7 @@ For more detailed information and summary of links to client resources, stakers Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe](#users-holders). -### Non-validating node operators and infrastructure providers +### Non-validating node operators and infrastructure providers {#node-operators} If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) _and_ the consensus layer (CL). @@ -85,7 +85,7 @@ Not completing the above items in time for The Merge will result in your node ap Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as much of the details apply to all node operators. -### Dapp/smart contract developers +### Dapp/smart contract developers {#developers} The Merge has been designed to have minimal impact on smart contract and dapp developers, but there are a few small things devs may want to be aware of heading into The Merge. These changes relate to @@ -196,7 +196,7 @@ An immense amount of work has been put into making sure the transition to proof- The Merge is akin to changing an engine on a rocketship mid-flight, and is designed to be performed without any need to pause anything during the switch. The Merge will be triggered by what is known as a TTD, or [terminal total difficulty](/glossary/#terminal-total-difficult), which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criteria is met, blocks will go from being produced using proof-of-work in one block, to being produced by proof-of-stake in the next. -Ethereum does not go down. +Ethereum does not have downtime. ## After The Merge {#after-the-merge} @@ -217,7 +217,7 @@ Blocks will instead be proposed by validating nodes that have ether staked for t The Beacon Chain -### The Merge and the Shanghai upgrade {#merge-and-post-merge-cleanup} +### The Merge and the Shanghai upgrade {#merge-and-shanghai} In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, in which the ability to withdraw is slotted as a top priority. From 1b14b63d30577661c833d6649391f52a83fb0875 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 8 Jun 2022 21:11:34 -0700 Subject: [PATCH 015/244] copy updates --- src/content/upgrades/merge/index.md | 101 +++++++++++++++------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 7257d864830..9b5d3672e41 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -41,19 +41,20 @@ No history is lost. As Mainnet is merged with the Beacon Chain, the entire trans The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term there are a few things the following groups of people should be aware of that we'll discuss below: -- [Node-operating stakers and staking providers](#node-operating-stakers) -- [Non-validating node operators and infrastructure providers](#node-operators) +- [Staking node operators and providers](#staking-node-operators) +- [Non-staking node operators and infrastructure providers](#node-operators) - [Dapp and smart contract developers](#developers) -For everyday users, holders, or non-node-operating stakers there is nothing you need to do, but a few things you should be on alert for. [More on this below](#users-holders). +For everyday users, holders, or non-node-operating stakers there is nothing you need to do, but a few things you should be on alert for. [More on this below.](#users-holders) ## What to I need to do to get ready? {#preparing-for-the-merge} -### Node-operating stakers and staking providers {#node-operating-stakers} - -If you are a staker running your own node setup, or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge. + Key action items include: - Running _both_ a consensus layer (CL) client as well as an execution layer (EL) client. Third-party endpoints to obtain execution data will be unavailable after The Merge. - Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. @@ -66,12 +67,13 @@ Not setting a `fee recipient` will still allow your validator to behave as usual For more detailed information and summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. -Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe](#users-holders). - -### Non-validating node operators and infrastructure providers {#node-operators} - -If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for _both_ the execution layer (EL) _and_ the consensus layer (CL). +Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe.](#users-holders) + + You probably are already running an EL client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an EL client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. This means that a full Ethereum node after The Merge requires both an EL client as well as a CL client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. @@ -84,10 +86,13 @@ Key action items include: Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as much of the details apply to all node operators. + -### Dapp/smart contract developers {#developers} - -The Merge has been designed to have minimal impact on smart contract and dapp developers, but there are a few small things devs may want to be aware of heading into The Merge. These changes relate to + +These changes relate to

- block structure - slot/block timing @@ -96,37 +101,40 @@ The Merge has been designed to have minimal impact on smart contract and dapp de - concept of _safe head_ and _finalized blocks_ For more information, check out this blog post by Tim Beiko on [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer/). +
-### Users & hodlers {#users-holders} - -You do not need to anything to protect your funds entering The Merge. + This bears repeating: As a user or holder of ETH or any other digital asset on Ethereum, you do not need to do anything with your funds or wallet before The Merge. Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. [More on Ethereum security](/security/) + ## Misconceptions about The Merge {#misconceptions} -Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. +title=""The Merge will reduce gas fees."" +contentPreview="False. The Merge is a change of consensus mechanism, not an expansion of network capacity, and will not result in lower gas fees." + +> Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at layer 2, while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. -The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." +title=""Transactions will be noticably faster after The Merge"" +contentPreview="False. Though some slight changes exist, transaction speed will mostly remain the same on layer 1." -tl;dr: Both change slightly, but not in a way that will be felt significantly by the end user. +> The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. -Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be a noticeable difference for the end user. +Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be noticed by users. PoS does introduce the concept of transaction "finality" which did not previously exist. Under PoW, the ability to reverse a block gets exponentially more difficult with every passing block that is mined on top of your transaction, but it never quite reaches zero. Under PoS, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which are voted on by validators. After an epoch ends, it can be voted on as "justified," and then one more epoch later results in a "finalized" state. To undo these transactions would require obtaining and burning over 1/3 the total ETH staked. @@ -134,18 +142,19 @@ Many dapps require a number of PoW block confirmations that take a period of tim -Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. +title=""You can withdraw staked ETH once The Merge occurs."" +contentPreview="False. Staking withdrawals are not yet enabled with The Merge." + +> Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. +title=""When withdrawals are enabled, stakers will all exit at once."" +contentPreview="False. Validator exits are rate limited for security reasons." -After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +> After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. @@ -153,9 +162,10 @@ The APR is intentionally dynamic, allowing a market of stakers to find a balance -This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. +title=""Validators will not receive any liquid ETH rewards until Shanghai when withdrawals are enabled."" +contentPreview="False. Fee tips/MEV will be credited to a Mainnet account controlled by the validator, available immediately." + +> This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. @@ -163,8 +173,8 @@ ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately +title=""Staking APR is expected to triple after The Merge. "" +contentPreview="False. More up-to-date estimations predict closer to a 50% increase in APR post-merge, not a 200% increase."> The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. @@ -173,9 +183,10 @@ Looking at recent blockchain activity, approximately 10% of all gas fees being p -There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. +title=""Running a node requires staking 32 ETH."" +contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum, aka run a node. No ETH required—not before The Merge, not after The Merge, not ever." + +> There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. @@ -186,13 +197,13 @@ Running a "non block-producing" node is not only _possible_ for anyone under eit The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. [More on running your own node](/run-a-node/) - -An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. +title=""The Merge will result in downtime of the chain."" +contentPreview="False. The Merge upgrade is designed to transition to proof-of-stake with zero downtime." + +> An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. The Merge is akin to changing an engine on a rocketship mid-flight, and is designed to be performed without any need to pause anything during the switch. The Merge will be triggered by what is known as a TTD, or [terminal total difficulty](/glossary/#terminal-total-difficult), which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criteria is met, blocks will go from being produced using proof-of-work in one block, to being produced by proof-of-stake in the next. From 6d6a886a1acddbf1c215edc22c153177df2e66b8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 8 Jun 2022 21:18:48 -0700 Subject: [PATCH 016/244] linting --- src/content/upgrades/merge/index.md | 45 ++++++++++++----------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 9b5d3672e41..00f634b24df 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -52,9 +52,8 @@ For everyday users, holders, or non-node-operating stakers there is nothing you Key action items include: +id="staking-node-operators"> +Key action items include: - Running _both_ a consensus layer (CL) client as well as an execution layer (EL) client. Third-party endpoints to obtain execution data will be unavailable after The Merge. - Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. @@ -106,9 +105,8 @@ For more information, check out this blog post by Tim Beiko on [How The Merge Im This bears repeating: As a user or holder of ETH or any other digital asset on Ethereum, you do not need to do anything with your funds or wallet before The Merge. +id="users-holders"> +This bears repeating: As a user or holder of ETH or any other digital asset on Ethereum, you do not need to do anything with your funds or wallet before The Merge. Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. @@ -121,18 +119,16 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. +contentPreview="False. The Merge is a change of consensus mechanism, not an expansion of network capacity, and will not result in lower gas fees."> +Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at layer 2, while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. +contentPreview="False. Though some slight changes exist, transaction speed will mostly remain the same on layer 1."> +The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be noticed by users. @@ -143,18 +139,16 @@ Many dapps require a number of PoW block confirmations that take a period of tim Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. +contentPreview="False. Staking withdrawals are not yet enabled with The Merge."> +Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +contentPreview="False. Validator exits are rate limited for security reasons."> +After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. @@ -163,9 +157,8 @@ The APR is intentionally dynamic, allowing a market of stakers to find a balance This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. +contentPreview="False. Fee tips/MEV will be credited to a Mainnet account controlled by the validator, available immediately."> +This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. @@ -184,9 +177,8 @@ Looking at recent blockchain activity, approximately 10% of all gas fees being p There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. +contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum, aka run a node. No ETH required—not before The Merge, not after The Merge, not ever."> +There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. @@ -201,9 +193,8 @@ The ability for anyone to run their own node is _absolutely essential_ to mainta An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. +contentPreview="False. The Merge upgrade is designed to transition to proof-of-stake with zero downtime."> +An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. The Merge is akin to changing an engine on a rocketship mid-flight, and is designed to be performed without any need to pause anything during the switch. The Merge will be triggered by what is known as a TTD, or [terminal total difficulty](/glossary/#terminal-total-difficult), which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criteria is met, blocks will go from being produced using proof-of-work in one block, to being produced by proof-of-stake in the next. From 3156d8367626e64064d69950f77a468b2303df69 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 10:08:54 -0700 Subject: [PATCH 017/244] design/layout updates --- src/content/upgrades/merge/index.md | 81 +++++++++++++---------------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 00f634b24df..734fb33e313 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -37,17 +37,11 @@ The Merge itself represents the official switch to using the Beacon Chain as the No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. -## Who does this upgrade affect? {#who-does-the-merge-affect} - -The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term there are a few things the following groups of people should be aware of that we'll discuss below: - -- [Staking node operators and providers](#staking-node-operators) -- [Non-staking node operators and infrastructure providers](#node-operators) -- [Dapp and smart contract developers](#developers) +## What to I need to do to get ready? {#preparing-for-the-merge} -For everyday users, holders, or non-node-operating stakers there is nothing you need to do, but a few things you should be on alert for. [More on this below.](#users-holders) +The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term some folks will need to take action to be fully prepared. -## What to I need to do to get ready? {#preparing-for-the-merge} +For everyday users, holders, or non-node-operating stakers there is **nothing you need to do**, but a few things you should be aware of heading into The Merge. [More on this below.](#users-holders)
For more information, check out this blog post by Tim Beiko on [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer/).
- +### Users and holders {#users-holders} + +You do not need to anything to protect your funds entering The Merge.

+ This bears repeating: As a user or holder of ETH or any other digital asset on Ethereum, you do not need to do anything with your funds or wallet before The Merge. Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. -[More on Ethereum security](/security/) -
+[More on Ethereum security](/security/#eth2-token-scam) + +## After The Merge {#after-the-merge} + +This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). ## Misconceptions about The Merge {#misconceptions} +There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. + +Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. + +The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid, and stop its propagation. + +Running a "non block-producing" node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for all users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved security, privacy and censorship resistance. + +The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. + +[More on running your own node](/run-a-node/) + + + Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. @@ -126,7 +139,7 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. @@ -138,7 +151,7 @@ Many dapps require a number of PoW block confirmations that take a period of tim Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. @@ -146,9 +159,9 @@ Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge -After the Shanghai update enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. @@ -156,7 +169,7 @@ The APR is intentionally dynamic, allowing a market of stakers to find a balance This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. @@ -166,7 +179,7 @@ ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. @@ -176,23 +189,7 @@ Looking at recent blockchain activity, approximately 10% of all gas fees being p -There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. - -Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. - -The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid, and stop its propagation. - -Running a "non block-producing" node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for all users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved security, privacy and censorship resistance. - -The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. - -[More on running your own node](/run-a-node/) - - - An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. @@ -201,10 +198,6 @@ The Merge is akin to changing an engine on a rocketship mid-flight, and is desig Ethereum does not have downtime. -## After The Merge {#after-the-merge} - -This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). - ## Relationship between upgrades {#relationship-between-upgrades} The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. @@ -223,7 +216,7 @@ Blocks will instead be proposed by validating nodes that have ether staked for t In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, in which the ability to withdraw is slotted as a top priority. -Stay up-to-date with the [Shanghai Planning issue on GitHub](https://github.com/ethereum/pm/issues/450), or the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. +Stay up-to-date with the [Shanghai upgrade planning issue on GitHub](https://github.com/ethereum/pm/issues/450), or the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. ### The Merge and data sharding {#merge-and-data-sharding} From 2a8edec0be125653218d0c8e5217146234c2d3c9 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 9 Jun 2022 12:16:03 -0600 Subject: [PATCH 018/244] wallet listing policy --- .../contributing/adding-wallet/index.md | 72 +++++++++++++++++++ src/content/contributing/index.md | 1 + 2 files changed, 73 insertions(+) create mode 100644 src/content/contributing/adding-wallet/index.md diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md new file mode 100644 index 00000000000..afc8de81617 --- /dev/null +++ b/src/content/contributing/adding-wallet/index.md @@ -0,0 +1,72 @@ +--- +title: Adding wallets +description: The policy we use when adding a wallet to ethereum.org +lang: en +sidebar: true +--- + +# Adding wallets {#adding-wallets} + +We want to make sure we show a variety of wallets covering the feature rich landscape of wallets so that users can navigate Ethereum in a confident manner. + +Anyone is free to suggest adding a wallet on ethereum.org. If there's a wallet that we have missed, please suggest it! + +Anyone is free to suggest a new wallet. Wallets are currently listed on: + +- [ethereum.org/wallets/find-wallet](/wallets/find-wallet/) + +Wallets are rapidly changing in Ethereum. We've tried to create a fair framework for consideration on ethereum.org but the listing criteria will change and evolve over time. + +## The decision framework {#the-decision-framework} + +### Criteria for inclusion: the must-haves {#the-must-haves} + +- **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallets security must be reliable. This reduces the risk to our users and shows us that you take security seriously. +- **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter our forks that are quickly abandoned as projects. +- **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. +- **Honest and accurate listing information** - it is expected that any suggesting listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. +- **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. + +### Other criteria: the nice-to-haves {#the-nice-to-haves} + +- **Globally accessible** - your wallet doesn’t have geographic limitations or KYC requirements that exclude certain people from accessing your service. +- **Available in multiple languages** - your wallet is translated into multiple languages allowing users around the world to access it. +- **Open source** - your whole project’s codebase (not just modules) should be accessible and you should accept PR’s from the wider community. +- **Non-custodial** - users control their funds. If your product disappears, users can still access and move their funds. +- **Hardware wallet support** - users can connect their hardware wallet to sign transactions. +- **WalletConnect** - users can connect to dapps using WalletConnect. +- **Importing Ethereum RPC endpoints** - users can import node RPC data, allowing them to connect to a node of their choice, or other EVM compatible networks. +- **NFTs** - users are able to view and interact with their NFT’s in the wallet. +- **Connect to Ethereum applications** - users are able to connect to and use Ethereum applications. +- **Staking** - users are able to stake directly through the wallet. +- **Swaps** - users are able to swap tokens through the wallet. +- **Multichain networks** - your wallet supports users accessing multiple blockchain networks by default. +- **Customize gas fees** - your wallet allows users to customize their transaction gas fees (base fee, priority fee, max fee) +- **ENS support** - your wallet allows users to send transactions to ENS names. +- **ERC-20 support** - your wallet allows users to import ERC-20 token contracts, or automatically queries and displays ERC-20 tokens. +- **EIP-1559 (type 2) transactions** - your wallet supports EIP-1559 (type 2) transactions. +- **Buy crypto** - your wallet supports users directly purchasing and onboarding to crypto. +- **Withdraw crypto** - your wallet supports users withdrawing directly to card or a bank account. +- **Multisig** - your wallet supports multiple signatures to sign a transaction. +- **Social recovery** - your wallet supports guardians and a user can recover their wallet if they lose their seed phrase using these guardians. +- **Dedicated support team** - your wallet has a dedicated support team where users can go to when experiencing issues. +- **Educational resources/documentation** - your product should have a well-designed onboarding experience to help and educate users. Or evidence of how-to content like articles or videos. + +## Adding a wallet {#adding-a-wallet} + +If you want to add a wallet to ethereum.org, create an issue on GitHub. + + + Create an issue + + +## Maintenance {#maintenance} + +As is the fluid nature of Ethereum, teams and products come and go and innovation happens daily, so we'll undertake routine checks of our content to: + +- ensure that all wallets and dapps listed still fulfil our criteria +- verify there aren't products that have been suggested that meet more of our criteria than the ones currently listed + +## Terms of use {#terms-of-use} + +Please also refer to our [terms of use](/terms-of-use/). Information on ethereum.org is provided solely for general information purposes. diff --git a/src/content/contributing/index.md b/src/content/contributing/index.md index ad483c20eb8..21d8c999e05 100644 --- a/src/content/contributing/index.md +++ b/src/content/contributing/index.md @@ -39,6 +39,7 @@ The ethereum.org website, like Ethereum more broadly, is an open-source project. - [Add a layer 2](/contributing/adding-layer-2) _- Add a layer 2 to a relevant page_ - [Add a staking product or service](/contributing/adding-staking-product/) - _Add a project that helps facilitate solo staking, pooled staking, or staking as a service_ +- [Add a wallet](/contributing/adding-wallet/) _- Add a wallet for the [find wallets page](/wallets/find-wallet/)._ _Any questions?_ 🤔 Reach out on our [Discord server](https://discord.gg/CetY6Y4) From 6de89fad886cdae4673c0fb945ca08d411747825 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 12:22:03 -0700 Subject: [PATCH 019/244] Add /eth-issuance page --- .../upgrades/merge/eth-issuance/index.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/content/upgrades/merge/eth-issuance/index.md diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md new file mode 100644 index 00000000000..9abc3737bb0 --- /dev/null +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -0,0 +1,102 @@ +--- +title: How will The Merge impact ether supply? +description: Discussion on how The Merge will impact ether supply +lang: en +sidebar: true +--- + +# How The Merge impacts ether supply + + + +- Mining rewards ~13,000 ETH/day pre-merge +- Staking rewards ~1,600 ETH/day pre-merge +- **After The Merge, only the ~1,600 ETH per day will remain, dropping total new ETH issuance by ~90%** +-  The burn: At an average gas price of at least 16 gwei, at least 1,600 ETH is burned every day, which effectively brings net ETH inflation to zero or less post-merge. + + + +We can break the supply of ETH into two primary forces: issuance, and burn. + +The **issuance** of ETH is the process of creating ETH that did not previously exist on the balance sheet, while the **burning** of ETH refers to when existing ETH is permanently removed from circulation. The rate of each of these fluctuates based on a number of parameters, and the balance between them determines the resulting inflation/deflation rate of ether. + +The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (EL, i.e. Mainnet) and the consensus layer (CL, i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. + +## Pre-merge: + +### EL Issuance + +Under proof-of-work, miners only interact with the EL, and are rewarded in the form of block rewards being the first to solve blocks. Since the [Constantinople upgrade](/history/#constantinople) on Feb-28-2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, which requires high levels of ETH issuance to sustain. + +### CL Issuance + +The [Beacon Chain](/history/#beacon-chain-genesis) has been live since Dec-01-2020, which is secured by proof-of-stake validators, not miners. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Right now these validators are not processing transactions, and are essentially coming to consensus on the state of the validator pool itself. + +Issuance of new ETH on this chain is rewarded to validators for properly attesting to the state of the chain, and is also rewarded when a validator proposes a block. Rewards (or penalties) are calculated and distributed every epoch (6.4 minutes) based on validator performance for that time period. These rewards are _significantly_ lower than the 2 ETH being issued under proof-of-work today every ~13.5 seconds, as operating a validating node is not an economically intense activity, thus does not require or warrant as high a reward. + +### Pre-merge issuance breakdown + +Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) + + + +**EL issuance:**
+ +- Estimating at 2.08 ETH per 13.3 seconds\*: **~4,930,000** ETH issued in a year +- Currently inflating at **~4.13%** (4.93M per year / 119.3M total) +- \*This includes the 2 ETH per canonical block, plus an average of 0.08 ETH over time from ommer blocks. Also uses 13.3 second, the baseline block time target without any influence from a [difficulty bomb](/glossary/#difficulty-bomb). ([See source](https://bitinfocharts.com/ethereum/)) + +**CL issuance:** + +- Using 13,000,000 total ETH staked, the rate of ETH issuance is ~1600 ETH/day ([SeeSource](https://ultrasound.money/)) +- Results in **~584,000** ETH issued in a year +- Currently inflating at **~0.49%** (584K per year / 119.3M total) + + +Total annual issuance rate: ~4.62% (4.13% + 0.49%) + +**~89.4%** of the issuance is going to miners on the EL (4.13 / 4.62 \* 100) + +**~10.6%** is being issued to stakers on the CL (0.49 / 4.62 \* 100) + + +## Post-merge + +### EL Issuance + +Will be zero. Proof-of-work will no longer be valid under the rules of consensus, and all EL activity will be included in "beacon blocks" which are published and attested to by proof-of-stake validators. + +### CL Issuance + +Will continue as it was, with small rewards for attesting-to and proposing blocks. These rewards will continue to accrue to _validator balances_ that are managed within the consensus layer. These are separate Ethereum accounts to the accounts we're used to on Mainnet, and until the Shanghai upgrade funds from validator accounts will not be withdrawable/transferrable. This means that although new ETH is still being issued, 100% of it will be locked from the market until this upgrade occurs. When the Shanghai upgrade is rolled out, this ETH will become available. + +When validator withdrawals are enabled, stakers will be incentivized to remove their _earnings/rewards (balance over 32)_ as these funds are otherwise not contributing to their stake weight (which maxes as 32). + +Stakers may also choose to exit and withdrawal their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. + +### Post-merge inflation breakdown + +- Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) +- EL issuance: **0** +- CL issuance: Same as above, **~0.49%** annual issuance rate (with 13 million ETH staked) +- Total annual issuance rate: **~0.49%** + + +Total annual issuance rate: ~0.49% +Net reduction in annual ETH issuance: ~89.4% (0.49% / 4.62% * 100) + + +##  The burn + +This flip side of ETH issuance is the rate at which ETH is burned. To execute a transaction on Ethereum, a minimum fee (known as a `base fee`) must be paid, which fluctuates depending on network activity in the moment. This fee is paid in ETH, is _required_ for the transaction to be considered valid, and is _burned_ in the process, removing it from circulation. + + +This went live with the London upgrade Aug-4-2021, and will not change after the Merge. + + +On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validators balance, which is not directly rewarded to any other account, effectively burning it from circulation. + +## Further reading {#further-reading} + +- [Ultrasound.money](https://ultrasound.money/) - Dashboards available to visualize ETH issuance and burn in real time From 465303b7fd60fef28bed0aee2433a7bd814990ce Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 12:22:20 -0700 Subject: [PATCH 020/244] Update /upgrades/merge --- src/content/upgrades/merge/index.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 734fb33e313..c27e121b45a 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -14,7 +14,7 @@ summaryPoint4: With The Merge, Ethereum's energy consumption drops by 99.95%. We The Merge is one of the most significant and high-stakes upgrades in the history of Ethereum. Extensive testing and bug bounties have been underway for years to ensure a safe transition to proof-of-stake. -This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the EF Blog or the client communication channels for the latest official word on When Merge? +This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the [EF Blog](https://blog.ethereum.org) or the client communication channels for the latest official word on _When Merge?_ ## What is The Merge? {#what-is-the-docking} @@ -37,6 +37,10 @@ The Merge itself represents the official switch to using the Beacon Chain as the No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. + +This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about ether issuance before and after The Merge. + + ## What to I need to do to get ready? {#preparing-for-the-merge} The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term some folks will need to take action to be fully prepared. @@ -110,7 +114,9 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for ## After The Merge {#after-the-merge} -This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). +This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Learn more about [Ethereum energy consumption](/energy-consumption/). + +This will also set the stage for further scalability upgrades not possible under proof-of-work, bringing Ethereum one step closer to achieving the full scale, security and sustainability outlined in its [Ethereum vision](/upgrades/vision/). ## Misconceptions about The Merge {#misconceptions} @@ -128,6 +134,7 @@ Running a "non block-producing" node is not only _possible_ for anyone under eit The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. [More on running your own node](/run-a-node/) +
-## Read more {#read-more} +## Further reading {#further-reading} From 00f66aaeb77ce16169226bc0bca1105bd1b695c0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 12:33:00 -0700 Subject: [PATCH 021/244] metadata/header link fixes --- .../upgrades/merge/eth-issuance/index.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md index 9abc3737bb0..8d4ff9e9d89 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -1,11 +1,11 @@ --- -title: How will The Merge impact ether supply? -description: Discussion on how The Merge will impact ether supply +title: How The Merge impacts ether supply +description: Breakdown on how The Merge will impact ether supply lang: en sidebar: true --- -# How The Merge impacts ether supply +# How The Merge impacts ether supply {#how-the-merge-impacts-ether-supply} @@ -23,19 +23,19 @@ The **issuance** of ETH is the process of creating ETH that did not previously e The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (EL, i.e. Mainnet) and the consensus layer (CL, i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. -## Pre-merge: +## Pre-merge {#pre-merge} -### EL Issuance +### EL Issuance {#el-issuance-pre-merge} Under proof-of-work, miners only interact with the EL, and are rewarded in the form of block rewards being the first to solve blocks. Since the [Constantinople upgrade](/history/#constantinople) on Feb-28-2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, which requires high levels of ETH issuance to sustain. -### CL Issuance +### CL Issuance {#cl-issuance-pre-merge} The [Beacon Chain](/history/#beacon-chain-genesis) has been live since Dec-01-2020, which is secured by proof-of-stake validators, not miners. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Right now these validators are not processing transactions, and are essentially coming to consensus on the state of the validator pool itself. Issuance of new ETH on this chain is rewarded to validators for properly attesting to the state of the chain, and is also rewarded when a validator proposes a block. Rewards (or penalties) are calculated and distributed every epoch (6.4 minutes) based on validator performance for that time period. These rewards are _significantly_ lower than the 2 ETH being issued under proof-of-work today every ~13.5 seconds, as operating a validating node is not an economically intense activity, thus does not require or warrant as high a reward. -### Pre-merge issuance breakdown +### Pre-merge issuance breakdown {#pre-merge-issuance-breakdown} Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) @@ -61,13 +61,13 @@ Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) **~10.6%** is being issued to stakers on the CL (0.49 / 4.62 \* 100) -## Post-merge +## Post-merge {#post-merge} -### EL Issuance +### EL Issuance {#el-issuance-post-merge} Will be zero. Proof-of-work will no longer be valid under the rules of consensus, and all EL activity will be included in "beacon blocks" which are published and attested to by proof-of-stake validators. -### CL Issuance +### CL Issuance {#cl-issuance-post-merge} Will continue as it was, with small rewards for attesting-to and proposing blocks. These rewards will continue to accrue to _validator balances_ that are managed within the consensus layer. These are separate Ethereum accounts to the accounts we're used to on Mainnet, and until the Shanghai upgrade funds from validator accounts will not be withdrawable/transferrable. This means that although new ETH is still being issued, 100% of it will be locked from the market until this upgrade occurs. When the Shanghai upgrade is rolled out, this ETH will become available. @@ -75,7 +75,7 @@ When validator withdrawals are enabled, stakers will be incentivized to remove t Stakers may also choose to exit and withdrawal their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. -### Post-merge inflation breakdown +### Post-merge inflation breakdown {#post-merge-inflation-breakdown} - Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) - EL issuance: **0** @@ -87,7 +87,7 @@ Total annual issuance rate: ~0.49% Net reduction in annual ETH issuance: ~89.4% (0.49% / 4.62% * 100) -##  The burn +##  The burn {#the-burn} This flip side of ETH issuance is the rate at which ETH is burned. To execute a transaction on Ethereum, a minimum fee (known as a `base fee`) must be paid, which fluctuates depending on network activity in the moment. This fee is paid in ETH, is _required_ for the transaction to be considered valid, and is _burned_ in the process, removing it from circulation. From 513087a08bdeef3da1a261d9efbaefa5f5af353e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 13:59:05 -0700 Subject: [PATCH 022/244] link to /eth-issuance --- src/content/upgrades/merge/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index c27e121b45a..d3aef9b4811 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -188,7 +188,7 @@ ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately -The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. +The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. From 523291fd9f743cac6acba1f12793209883428a9a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 14:13:02 -0700 Subject: [PATCH 023/244] Apply suggestions from code review Co-authored-by: Corwin Smith --- src/content/energy-consumption/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index a4b802bc6b1..f39dbdf73fd 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -15,14 +15,14 @@ Since inception, Ethereum has aimed to implement a PoS consensus mechanism, but A PoS blockchain known as the "Beacon Chain" has been running since November 2020 alongside the PoW Ethereum Mainnet. In 2022 several custom devnets have been merged with their own Beacon Chains to aid in debugging Ethereum clients in advance of the real merge. More recently, Ethereum developers have started merging public testnets (Kiln, Kintsugi, Ropsten) and shadow-forks (forks of Ethereum Mainnet) as the final stage of testing. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's PoW mining will be switched off, PoS consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. -## Why proof-of-stake is greener than proof-of-work {why-pos-is-greener-than-pow} +## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} PoW is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing PoW. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the PoW race by investing in sufficient hardware and energy to outperform the majority of other miners. -This mechanism of securing the network is problematic for several reasons. Miners can increase their odds of success by investing in more and more powerful hardware, creatign conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Ethereum's PoW protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and carbon footprint similar to Switzerland[^1]. +This mechanism of securing the network is problematic for several reasons. Miners can increase their odds of success by investing in more and more powerful hardware, creating conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Ethereum's PoW protocol currently has a total annualized power consumption approximately equal to that of Finland [^1] and carbon footprint similar to Switzerland[^1]. -PoS uses validators instead of miners. Validators perform the same function as miners except that instead of expending their assets up-front in the form of energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ether cna be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the PoW network comes from the mining algorithm, switching to PoS reduces the energy expenditure dramatically. There is also no benefit to be had by investing in mroe powerful hardware under PoS, so there is no arms-race condition and less electronic waste. Ethereum validators can run on normal laptops or even low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). +PoS uses validators instead of miners. Validators perform the same function as miners except that instead of expending their assets up-front in the form of energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ether can be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the PoW network comes from the mining algorithm, switching to PoS reduces the energy expenditure dramatically. There is also no benefit to be had by investing in more powerful hardware under PoS, so there is no arms-race condition and less electronic waste. Ethereum validators can run on normal laptops or even low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). Read more detailed information about [how PoS is implemented in Ethereum](/developers/docs/consensus-mechanisms/pos) and how it compares to PoW. @@ -32,7 +32,7 @@ Estimates based on the current Beacon Chain suggest that the merge to PoS could Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand, but the energy required to mine a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure, and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. -For example, for Ethereum the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its “layer 2” rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. +For example, for Ethereum the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its “[layer 2](/layer-2/)” rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values one can examine what that network offers to its users and to society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibit an honest cost-benefit analysis. From afc98cd7e023be78a460a4048ac776419b1281e0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 14:14:12 -0700 Subject: [PATCH 024/244] remove comment --- src/content/upgrades/merge/eth-issuance/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md index 8d4ff9e9d89..f31ae150d8f 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -39,8 +39,6 @@ Issuance of new ETH on this chain is rewarded to validators for properly attesti Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) - - **EL issuance:**
- Estimating at 2.08 ETH per 13.3 seconds\*: **~4,930,000** ETH issued in a year From f4c90c9f5843b4c3aa8989c97b4030fcd5c68241 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 9 Jun 2022 17:10:48 -0600 Subject: [PATCH 025/244] add note about wallet addresses to layer 2 page --- src/pages/layer-2.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 36504dcd83b..958a4e83f31 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -679,6 +679,15 @@ const Layer2Page = ({ data }) => {

+

+ NOTE: When bridging over and using layer 2, it is important to note + that you will control the address for you EOA account just like on + Ethereum Mainnet. However, if you are using a smart contract wallet, + you will not have control over this address on a layer 2 by default + unless deployed using `CREATE2`. If you are bridging or sending funds + to a smart contract wallet, test this out first to make sure you + control that address on the layer 2 you are using. +

From 20a533f73e98e3e42d1435b19d4936976241b0ed Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 9 Jun 2022 16:17:58 -0700 Subject: [PATCH 026/244] rearrange misconceptions for flow --- src/content/upgrades/merge/index.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index d3aef9b4811..baf7c0a9aad 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -159,30 +159,30 @@ Many dapps require a number of PoW block confirmations that take a period of tim +contentPreview="False. Staking withdrawals are not yet enabled with The Merge. These will have to wait until the Shanghai upgrade to follow."> Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. -Withdrawal functionality is planned for the Shanghai upgrade to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. +Withdrawal functionality is planned for the **Shanghai upgrade** to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. -After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +title="Misconception 5: "Validators will not receive any liquid ETH rewards til the Shanghai upgrade when withdrawals are enabled."" +contentPreview="False. Fee tips/MEV will be credited to a Mainnet account controlled by the validator, available immediately."> +This may seem counterintuitive to the above note that withdrawals are not enabled til the Shanghai upgrade, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. -An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. +ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. -The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again. +ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). -This may seem counterintuitive to the above note that withdrawals are not enabled til Shanghai, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. +title="Misconception 6: "When withdrawals are enabled, stakers will all exit at once."" +contentPreview="False. Validator exits are rate limited for security reasons."> +After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. -ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. +An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. -ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). +The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again. Date: Thu, 9 Jun 2022 21:06:17 -0700 Subject: [PATCH 027/244] Adds PreMergeBanner to pages flagged during audit --- src/components/PreMergeBanner.tsx | 27 ++++++++ .../pow/mining-algorithms/index.md | 1 + .../consensus-mechanisms/pow/mining/index.md | 1 + .../docs/development-networks/index.md | 1 + .../developers/docs/intro-to-ether/index.md | 1 + src/content/developers/docs/mev/index.md | 1 + .../developers/docs/networking-layer/index.md | 1 + src/content/developers/docs/networks/index.md | 1 + .../client-diversity/index.md | 1 + .../docs/nodes-and-clients/index.md | 1 + .../nodes-as-a-service/index.md | 1 + .../nodes-and-clients/run-a-node/index.md | 1 + .../tutorials/run-light-node-geth/index.md | 1 + .../tutorials/run-node-raspberry-pi/index.md | 1 + src/content/governance/index.md | 1 + src/content/nft/index.md | 1 + src/content/security/index.md | 1 + src/pages/developers/tutorials.js | 1 + src/schema/sdls/Frontmatter.ts | 1 + src/templates/docs.tsx | 14 +++-- src/templates/tutorial.tsx | 63 +++++++++++-------- src/templates/use-cases.tsx | 27 +++++--- 22 files changed, 108 insertions(+), 41 deletions(-) create mode 100644 src/components/PreMergeBanner.tsx diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx new file mode 100644 index 00000000000..e051862f357 --- /dev/null +++ b/src/components/PreMergeBanner.tsx @@ -0,0 +1,27 @@ +import React from "react" +import styled from "styled-components" +import BannerNotification from "./BannerNotification" +import Link from "./Link" + +const StyledBannerNotification = styled(BannerNotification)` + display: block; + z-index: 1; + a { + text-decoration: underline; + } +` + +export interface IProps { + className?: string +} + +const PreMergeBanner: React.FC = ({ className }) => ( + + The Merge is approaching which comes with many changes to Ethereum. Some + content on this page may be out-of-date related to these changes, and + updates are coming soon.{" "} + Learn more about The Merge. + +) + +export default PreMergeBanner diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md index 9b238f93bb1..0defa86d376 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md @@ -3,6 +3,7 @@ title: Mining algorithms description: A detailed look at the algorithms used for Ethereum mining. lang: en sidebar: true +preMergeBanner: true --- Ethereum mining has used two mining algorithms, Dagger Hashimoto and Ethash. Dagger Hashimoto was never used to mine Ethereum, being superseded by Ethash before mainet launched. It was a R&D mining algorithm that paved the way for Ethash. However, it has historical significance as an important innovation in Ethereum's development. Proof-of-work mining itself will be deprecated in favor of proof-of-stake during [The Merge](/merge/), which is forecast to happen in Q3-Q4 2022. diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md index 427f86f6cf7..aa2370710ac 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -3,6 +3,7 @@ title: Mining description: An explanation of how mining works in Ethereum and how it helps keep Ethereum secure and decentralized. lang: en sidebar: true +preMergeBanner: true --- ## Prerequisites {#prerequisites} diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index 3e37e5b1e57..9008ec45f31 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -3,6 +3,7 @@ title: Development Networks description: An overview of development networks and the tools available to help build Ethereum applications. lang: en sidebar: true +preMergeBanner: true --- When building an Ethereum application with smart contracts, you'll want to run it on a local network to see how it works before deploying it. diff --git a/src/content/developers/docs/intro-to-ether/index.md b/src/content/developers/docs/intro-to-ether/index.md index d3b4ae52413..b6726657015 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -3,6 +3,7 @@ title: Intro to ether description: A developer's introduction to the ether cryptocurrency. lang: en sidebar: true +preMergeBanner: true --- ## Prerequisites {#prerequisites} diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index d15c62f6897..a7a9af1a414 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -3,6 +3,7 @@ title: Maximal extractable value (MEV) description: An introduction to maximal extractable value (MEV) lang: en sidebar: true +preMergeBanner: true --- Maximal extractable value (MEV) refers to the maximum value that can be extracted from block production in excess of the standard block reward and gas fees by including, excluding, and changing the order of transactions in a block. diff --git a/src/content/developers/docs/networking-layer/index.md b/src/content/developers/docs/networking-layer/index.md index 425d2119ccc..98a8bae2c76 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -4,6 +4,7 @@ description: An introduction to Ethereum's networking layer. lang: en sidebar: true sidebarDepth: 2 +preMergeBanner: true --- Ethereum is a peer-to-peer network with thousands of nodes that must be able to communicate with one another using standardized protocols. The "networking layer" is the stack of protocols that allow those nodes to find each other and exchange information. This includes "gossiping" information (one-to-many communication) over the network as well as swapping requests and responses between specific nodes (one-to-one communication). Each node must adhere to specific networking rules to ensure they are sending and receiving the correct information. diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index 59062963f32..1de9b5d1768 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -3,6 +3,7 @@ title: Networks description: An overview of Ethereum's networks and where to get testnet ether (ETH) for testing your application. lang: en sidebar: true +preMergeBanner: true --- Networks are different Ethereum environments you can access for development, testing, or production use cases. Since Ethereum is a protocol, there can be multiple independent "networks" that conform to the protocol without interacting with each other. diff --git a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md index aebacbef902..2ec6e717790 100644 --- a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -4,6 +4,7 @@ description: A high level explanation of the importance of Ethereum client diver lang: en sidebar: true sidebarDepth: 2 +preMergeBanner: true --- The behavior of an Ethereum node is controlled by the client software it runs. There are several production-level Ethereum clients, each one developed and maintained in different languages by separate teams. The clients are built to a common spec that ensures the clients seamlessly communicate with each other and have the same functionality and provide an equivalent user experience. However, at the moment the distribution of clients across nodes is not equal enough to realize this network fortification to its full potential. Ideally, users divide roughly equally across the various clients to bring as much client diversity as possible to the network. diff --git a/src/content/developers/docs/nodes-and-clients/index.md b/src/content/developers/docs/nodes-and-clients/index.md index e8d45a51b70..f3db7a88be9 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -4,6 +4,7 @@ description: An overview of Ethereum nodes and client software, plus how to set lang: en sidebar: true sidebarDepth: 2 +preMergeBanner: true --- Ethereum is a distributed network of computers running software (known as nodes) that can verify blocks and transaction data. You need an application, known as a client, on your computer to "run" a node. diff --git a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index 4dfdd79e03b..94b0c69afc1 100644 --- a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -4,6 +4,7 @@ description: An entry-level overview of node services, the pros and cons, and po lang: en sidebar: true sidebarDepth: 2 +preMergeBanner: true --- ## Introduction {#Introduction} diff --git a/src/content/developers/docs/nodes-and-clients/run-a-node/index.md b/src/content/developers/docs/nodes-and-clients/run-a-node/index.md index 5dc2877a1ad..c769b2eec8f 100644 --- a/src/content/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/src/content/developers/docs/nodes-and-clients/run-a-node/index.md @@ -4,6 +4,7 @@ description: General introduction to running your own instance of an Ethereum cl lang: en sidebar: true sidebarDepth: 2 +preMergeBanner: true --- Running your own node provides you various benefits, opens new possibilities, and helps to support the ecosystem. This page will guide you through spinning up your own node and taking part in validating Ethereum transactions. diff --git a/src/content/developers/tutorials/run-light-node-geth/index.md b/src/content/developers/tutorials/run-light-node-geth/index.md index 2281246cb6c..b23641801b1 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -7,6 +7,7 @@ skill: beginner lang: en sidebar: true published: 2022-03-04 +preMergeBanner: true --- You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running Geth. With Geth, we can have a light node up and running in minutes. diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 2223a440d97..5a766685995 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -9,6 +9,7 @@ skill: intermediate published: 2020-05-07 source: r/ethereum sourceUrl: https://www.reddit.com/r/ethereum/comments/gf3nhg/ethereum_on_arm_raspberry_pi_4_images_release/ +preMergeBanner: true --- **TL;DR**: Flash your Raspberry Pi 4, plug in an ethernet cable, connect the SSD disk and power up the device to turn the Raspberry Pi 4 into a full Ethereum node running the execution layer, or the consensus layer (Beacon Chain / validator) diff --git a/src/content/governance/index.md b/src/content/governance/index.md index 7bff3d0e388..1b541cc6a15 100644 --- a/src/content/governance/index.md +++ b/src/content/governance/index.md @@ -3,6 +3,7 @@ title: Ethereum Governance description: An introduction to how decisions about Ethereum are made. lang: en sidebar: true +preMergeBanner: true --- # Introduction to Ethereum governance {#introduction} diff --git a/src/content/nft/index.md b/src/content/nft/index.md index e7da18f0d9d..32366d20b18 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -11,6 +11,7 @@ alt: An Eth logo being displayed via hologram. summaryPoint1: A way to represent anything unique as an Ethereum-based asset. summaryPoint2: NFTs are giving more power to content creators than ever before. summaryPoint3: Powered by smart contracts on the Ethereum blockchain. +preMergeBanner: true --- NFTs are currently taking the digital art and collectibles world by storm. Digital artists are seeing their lives change thanks to huge sales to a new crypto-audience. And celebrities are joining in as they spot a new opportunity to connect with fans. But digital art is only one way to use NFTs. Really they can be used to represent ownership of any unique asset, like a deed for an item in the digital or physical realm. diff --git a/src/content/security/index.md b/src/content/security/index.md index 05c65c4692f..9562620820c 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -3,6 +3,7 @@ title: Ethereum security and scam prevention description: Staying safe on Ethereum lang: en sidebar: true +preMergeBanner: true --- # Ethereum security and scam prevention {#introduction} diff --git a/src/pages/developers/tutorials.js b/src/pages/developers/tutorials.js index 3b5e1db27b5..d3c5b0e6432 100644 --- a/src/pages/developers/tutorials.js +++ b/src/pages/developers/tutorials.js @@ -498,6 +498,7 @@ export const query = graphql` skill published lang + preMergeBanner } } } diff --git a/src/schema/sdls/Frontmatter.ts b/src/schema/sdls/Frontmatter.ts index e1c5ef159b2..92c20c03fa7 100644 --- a/src/schema/sdls/Frontmatter.ts +++ b/src/schema/sdls/Frontmatter.ts @@ -24,5 +24,6 @@ export const Frontmatter = ` author: String tags: [String] isOutdated: Boolean + preMergeBanner: Boolean } ` diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index c447fb49f46..a78eb12a5b8 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -33,6 +33,7 @@ import { Header4, ListItem, } from "../components/SharedStyledComponents" +import PreMergeBanner from "../components/PreMergeBanner" import { ZenModeContext } from "../contexts/ZenModeContext.js" import { isLangRightToLeft } from "../utils/translations" @@ -179,6 +180,7 @@ const DocsPage = ({ const tocItems = mdx.tableOfContents?.items const isPageIncomplete = !!mdx.frontmatter.incomplete + const showMergeBanner = !!mdx.frontmatter.preMergeBanner const { editContentUrl } = siteData.siteMetadata || {} const { relativePath, slug } = pageContext @@ -190,10 +192,13 @@ const DocsPage = ({ title={mdx.frontmatter.title} description={mdx.frontmatter.description} /> - - {/* TODO move to common.json */} - + {isPageIncomplete && ( + + {/* TODO move to common.json */} + + )} + {showMergeBanner && }

{mdx.frontmatter.title}

@@ -253,6 +258,7 @@ export const query = graphql` sidebar sidebarDepth isOutdated + preMergeBanner } body tableOfContents diff --git a/src/templates/tutorial.tsx b/src/templates/tutorial.tsx index 742733bc0f4..b742e43c401 100644 --- a/src/templates/tutorial.tsx +++ b/src/templates/tutorial.tsx @@ -29,6 +29,7 @@ import { } from "../components/SharedStyledComponents" import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" +import PreMergeBanner from "../components/PreMergeBanner" import { isLangRightToLeft } from "../utils/translations" import { Lang } from "../utils/languages" @@ -156,6 +157,7 @@ const TutorialPage = ({ } const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + const showMergeBanner = !!mdx.frontmatter.preMergeBanner const tocItems = mdx.tableOfContents?.items @@ -164,34 +166,40 @@ const TutorialPage = ({ const absoluteEditPath = `${editContentUrl}${relativePath}` return ( - - - -

{mdx.frontmatter.title}

- - + {showMergeBanner && } + + - - {mdx.body} - - -
- {mdx.frontmatter.sidebar && tocItems && ( - - )} -
+ +

{mdx.frontmatter.title}

+ + + + {mdx.body} + + +
+ {mdx.frontmatter.sidebar && tocItems && ( + + )} + + ) } @@ -225,6 +233,7 @@ export const query = graphql` sidebarDepth address isOutdated + preMergeBanner } body tableOfContents diff --git a/src/templates/use-cases.tsx b/src/templates/use-cases.tsx index 94acd16abe7..2c081ef2cc7 100644 --- a/src/templates/use-cases.tsx +++ b/src/templates/use-cases.tsx @@ -36,6 +36,7 @@ import { } from "../components/SharedStyledComponents" import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" +import PreMergeBanner from "../components/PreMergeBanner" import { isLangRightToLeft } from "../utils/translations" import { getSummaryPoints } from "../utils/getSummaryPoints" @@ -120,7 +121,7 @@ const InfoTitle = styled.h2` margin-top: 0rem; @media (max-width: ${(props) => props.theme.breakpoints.l}) { text-align: left; - font-size: 2.5rem + font-size: 2.5rem; display: none; } ` @@ -306,6 +307,7 @@ const UseCasePage = ({ } const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + const showMergeBanner = !!mdx.frontmatter.preMergeBanner const tocItems = mdx.tableOfContents?.items const summaryPoints = getSummaryPoints(mdx.frontmatter) @@ -342,15 +344,19 @@ const UseCasePage = ({ return ( - - -
- {" "} - - - -
-
+ {showMergeBanner ? ( + + ) : ( + + +
+ {" "} + + + +
+
+ )} @@ -438,6 +444,7 @@ export const useCasePageQuery = graphql` } } isOutdated + preMergeBanner } body tableOfContents From d604270bb527bb7b13457a3c46f18385f0410e9a Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 10 Jun 2022 13:23:24 +0100 Subject: [PATCH 028/244] rasp-pi tutorial --- .../tutorials/run-node-raspberry-pi/index.md | 275 ++++++------------ 1 file changed, 82 insertions(+), 193 deletions(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 2223a440d97..c7c8971f079 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -1,264 +1,153 @@ --- title: How to turn your Raspberry Pi 4 into a node just by flashing the MicroSD card -description: Flash your Raspberry Pi 4, plug in an ethernet cable, connect the SSD disk and power up the device to turn the Raspberry Pi 4 into a full Ethereum node running the execution layer, or consensus layer (Beacon Chain / validator) +description: Flash your Raspberry Pi 4, plug in an ethernet cable, connect the SSD disk and power up the device to turn the Raspberry Pi 4 into a full Ethereum node + validator author: "EthereumOnArm" tags: ["clients", "execution layer", "consensus layer", "nodes"] lang: en sidebar: true skill: intermediate -published: 2020-05-07 -source: r/ethereum +published: 2022-06-10 +source: [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html) sourceUrl: https://www.reddit.com/r/ethereum/comments/gf3nhg/ethereum_on_arm_raspberry_pi_4_images_release/ --- -**TL;DR**: Flash your Raspberry Pi 4, plug in an ethernet cable, connect the SSD disk and power up the device to turn the Raspberry Pi 4 into a full Ethereum node running the execution layer, or the consensus layer (Beacon Chain / validator) +**Ethereum on Arm is a custom Linux image that can turn a Raspberry Pi into an Ethereum node.** -[Learn about Ethereum upgrades](/upgrades/) +To use Ethereum on Arm to turn a Raspberry Pi into an Ethereum node, the following hardware is recommended: -Some background first. As you know, we’ve been running into some memory issues [[1]](/developers/tutorials/run-node-raspberry-pi/#references) with the Raspberry Pi 4 image as Raspbian OS is still on 32bits [[2]](/developers/tutorials/run-node-raspberry-pi/#references) (at least the userland). While we prefer to stick with the official OS we came to the conclusion that, in order to solve these issues, we need to migrate to a native 64 bits OS - -Besides, [consensus clients](/upgrades/get-involved/#clients) don’t support 32 bits binaries so using Raspbian would exclude the Raspberry Pi 4 from running a consensus layer node (and the possibility of staking). - -So, after several tests we are now releasing 2 different images based on Ubuntu 20.04 64bit [[3]](/developers/tutorials/run-node-raspberry-pi/#references): execution layer and consensus layer editions. - -Basically, both are the same image and include the same features of the Raspbian based images. But they are setup for running execution layer or consensus layer software by default. - -**Images take care of all the necessary steps**, from setting up the environment and formatting the SSD disk to installing and running the Ethereum software as well as starting the blockchain synchronization. - -## Main features {#main-features} - -- Based on Ubuntu 20.04 64bit -- Automatic USB disk partitioning and formatting -- Adds swap memory (ZRAM kernel module + a swap file) based on Armbian work [[7]](/developers/tutorials/run-node-raspberry-pi/#references) -- Changes the hostname to something like “ethnode-e2a3e6fe” based on MAC hash -- Runs software as a systemd service and starts syncing the Blockchain -- Includes an APT repository for installing and upgrading Ethereum software -- Includes a monitoring dashboard based on Grafana / Prometheus - -## Software included {#software-included} - -Both images include the same packages, the only difference between them is that the execution version runs Geth by default and the consensus version runs Prysm beacon chain by default. - -### Execution clients {#execution-clients} - -- Geth [[8]](/developers/tutorials/run-node-raspberry-pi/#references): 1.9.13 (official binary) -- Parity [[9]](/developers/tutorials/run-node-raspberry-pi/#references): 2.7.2 (cross compiled) -- Nethermind [[10]](/developers/tutorials/run-node-raspberry-pi/#references): 1.8.28 (cross compiled) -- Hyperledger Besu [[11]](/developers/tutorials/run-node-raspberry-pi/#references): 1.4.4 (compiled) - -### Consensus clients {#consensus-clients} - -- Prysm [[12]](/developers/tutorials/run-node-raspberry-pi/#references): 1.0.0-alpha6 (official binary) -- Lighthouse [[13]](/developers/tutorials/run-node-raspberry-pi/#references): 0.1.1 (compiled) - -### Ethereum framework {#ethereum-framework} - -- Swarm [[14]](/developers/tutorials/run-node-raspberry-pi/#references): 0.5.7 (official binary) -- Raiden Network [[15]](/developers/tutorials/run-node-raspberry-pi/#references): 0.200.0~rc1 (official binary) -- IPFS [[16]](/developers/tutorials/run-node-raspberry-pi/#references): 0.5.0 (official binary) -- Statusd [[17]](/developers/tutorials/run-node-raspberry-pi/#references): 0.52.3 (compiled) -- Vipnode [[18]](/developers/tutorials/run-node-raspberry-pi/#references): 2.3.3 (official binary) - -## Installation guide and usage {#installation-guide-and-usage} - -### Recommended hardware and setup {#recommended-hardware-and-setup} - -- Raspberry 4 (model B) - 4GB +- Raspberry 4 (model B 8GB) - MicroSD Card (16 GB Class 10 minimum) -- SSD USB 3.0 disk (see storage section) +- 1 TB SSD minimum USB 3.0 disk or an SSD with an USB to SATA case (see Storage section). - Power supply - Ethernet cable -- 30303 Port forwarding (execution layer) and 13000 port forwarding (consensus layer) [[4]](/developers/tutorials/run-node-raspberry-pi/#references) -- A case with heatsink and fan (optional but strongly recommended) -- USB keyboard, Monitor and HDMI cable (micro-HDMI) (optional) +- Port forwarding (see clients for further info) +- A case with heatsink and fan +- USB keyboard, Monitor and HDMI cable (micro-HDMI) (Optional) -## Storage {#storage} +## Why run Ethereum on ARM? -You will need an SSD to run the Ethereum clients (without an SSD drive there’s absolutely no chance of syncing the Ethereum blockchain). There are 2 options: +ARM boards are very affordable, flexible, small computers. They are good choices for running Ethereum nodes because they can be bought cheaply, configured so that all their resources focus just on the node, making them efficient, they consume low amounts of power and have are physically small so they can fit unobtrusively in any home. It is also very easy to spin up nodes because the Raspberry Pi's MicroSD can simply be flashed with a prebuilt image, with no downloading or building software required. -- Use a USB portable SSD disk such as the Samsung T5 Portable SSD. -- Use a USB 3.0 External Hard Drive Case with a SSD Disk. In our case we used a Inateck 2.5 Hard Drive Enclosure FE2011. Make sure to buy a case with an UAS compliant chip, particularly, one of these: JMicron (JMS567 or JMS578) or ASMedia (ASM1153E). +## How does it work? -In both cases, avoid getting low quality SSD disks as it is a key component of your node and it can drastically affect the performance (and sync times). +The Raspberry Pi's memory card is flashed with a prebuilt image. This image contains everything needed to run an Ethereum node. With a flashed card, all the user needs to do is power-on the Raspberry Pi. All the processes required to run the node are automatically started. This works because the memory card contains a Linux-based operating system (OS) on top of which system-level processes are automatically run that turn the unit into an Ethereum node. -Keep in mind that you need to plug the disk to an USB 3.0 port (blue) +Ethereum cannot be run using the popular Raspberry Pi Linux OS "Raspbian" because Raspbian still uses a 32-bit architecture which leads Ethereum users to run into memory issues and consensus clients do not support 32-bit binaries. To overcome this, the Ethereum on Arm team migrated to a native 64-bit OS called "Armbian". -## Image download and installation {#image-download-and-installation} +**Images take care of all the necessary steps**, from setting up the environment and formatting the SSD disk to installing and running the Ethereum software as well as starting the blockchain synchronization. -### 1. Download the execution and consensus layer images {#1-download-execution-or-consensus-images} +## Note on execution and consensus clients - - Download execution layer image - +The Ethereum on Arm documentation explains how to set up _either_ an execution client OR a consensus client, except for two Ethereum testnets (Kiln and Ropsten). This optionality is only possible in advance of Ethereum's upcoming transition from proof-of-work (PoW) to proof-of-stake (PoS) known as [The Merge](/upgrades/merge). After The Merge, it will not be possible to run execution and consensus clients separately - they must be run as a pair. Therefore, in this tutorial we will run a pair of execution and consensus clients together on an Ethereum testnet (Kiln). -sha256 7fa9370d13857dd6abcc8fde637c7a9a7e3a66b307d5c28b0c0d29a09c73c55c +## The Kiln Raspberry Pi 4 Image - - Download consensus layer image - +Kiln is a public testnet specifically designed for testing The Merge. Ethereum on Arm developed an image allowing users to rapidly spin up a pair of Ethereum clients on this merge testnet. The Kiln merge has already happened, but the network is still live, so it can be used for this tutorial. Ether on Kiln has no real-world value. -sha256 74c0c15b708720e5ae5cac324f1afded6316537fb17166109326755232cd316e +The Kiln Raspberry Pi 4 image is a "plug and play" image that automatically installs and sets up both the execution and consensus clients, configuring them to talk to each other and connect to the Kiln network. All the user needs to do is start their processes using a simple command. The image contains four execution clients (Geth, Nethermind, Besu and Erigon) and four consensus clients (Lighthouse, Prysm, Nimbus, Teku) that the user can choose from. -### 2. Flash the image {#2-flash-the-image} +Download the Raspberry Pi image from [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/ES56R_SuvaVFkiMO1Tgnf6kB7lEbBfla5c2c18E3WQRJzA?download=1) and verify the file with the following SH256 hash: `485cf36128ca60a41b5de82b5fee3ee46b7c479d0fc5dfa5b9341764414c4c57`. -Insert the microSD in your Desktop / Laptop and download the file (execution layer, for instance): +Note that for users that do not own a Raspberry Pi but do have an AWS account, there are ARM instances available that can run the same image. Instructions and the AWS image are available to download from Ethereum on Arm (https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html). -```bash -wget https://ethraspbian.com/downloads/ubuntu-20.04-preinstalled-server-arm64+raspi-eth1.img.zip -``` +## Flashing the MicroSD -Note: If you are not comfortable with command line or if you are running Windows, you can use [Etcher](https://etcher.io) +The MicroSD card that will be used for the Raspberry Pi should first be inserted into a desktop or laptop so it can be flashed. Then, the following terminal commands will flash the downloaded image onto the SD card: -Open a terminal and check your MicroSD device name running: +```shell +# check the MicroSD card name +sudo fdisk -I -```bash -sudo fdisk -l +>> sdxxx ``` -You should see a device named mmcblk0 or sdd. Unzip and flash the image: +It is really important to get the name correct because the next command includes `dd` which completely erases the existing content of the card before pushing the image onto it. To continue, navigate to the directory containing the zipped image: -```bash -unzip ubuntu-20.04-preinstalled-server-arm64+raspi-eth1.img.zip -sudo dd bs=1M if=ubuntu-20.04-preinstalled-server-arm64+raspi-eth1.img of=/dev/mmcblk0 && sync +```shell +# unzip and flash image +unzip ethonarm_kiln_22.03.01.img.zip +sudo dd bs=1M if=ethonarm_kiln_22.03.01.img of=/dev/mmcblk0 conv=fdatasync status=progress ``` -### 3. Insert the MicroSD into the Raspberry Pi 4. Connect an Ethernet cable and attach the USB SSD disk (make sure you are using a blue port). {#3-insert-the-microsd-into-the-raspberry-pi-4-connect-an-ethernet-cable-and-attach-the-usb-ssd-disk-make-sure-you-are-using-a-blue-port} - -### 4. Power on the device {#4-power-on-the-device} - -The Ubuntu OS will boot up in less than one minute but **you will need to wait approximately 10 minutes** in order to allow the script to perform the necessary tasks to turn the device into an Ethereum node and reboot the Raspberry. - -Depending on the image, you will be running: +The card is now flashed, so it can be inserted into the Raspberry Pi. -- Execution client: Geth as the default client syncing the blockchain -- Consensus client: Prysm as default client syncing the beacon chain (Prater testnet) +## Start the node -### 5. Log in {#5-log-in} +With the SD card inserted into the Raspberry Pi, connect the ethernet cable and SSD then switch the power on. The OS will boot up and automatically start performing the preconfigured tasks that turn the Raspberry Pi into an Ethereum node, including installing and building the client software. This will probably take 10-15 minutes. -You can log in through SSH or using the console (if you have a monitor and keyboard attached) +Once everything is installed and configured, log in to the device via an ssh connection or using the terminal directly if a monitor and keyboard is attached to the board. Use the `ethereum` account to log in, as this has permissions required to start the node. -```bash +```shell User: ethereum Password: ethereum ``` -You will be prompted to change the password on first login, so you will need to login twice. +The user can then choose the execution-consensus client combination they wish to run, and start their systemctl processes as follows (example runs Geth and Lighthouse): -### 6. Open 30303 port for Geth and 13000 if you are running Prysm beacon chain. If you don’t know how to do this, google “port forwarding” followed by your router model. {#6-open-30303-port-for-geth-and-13000-if-you-are-running-prysm-beacon-chain-if-you-dont-know-how-to-do-this-google-port-forwarding-followed-by-your-router-model} - -### 7. Get console output {#7-get-console-output} - -You can see what’s happening in the background by typing: - -```bash -sudo tail -f /var/log/syslog +```shell +sudo systemctl start geth-lh +sudo systemctl start lh-geth-beacon ``` -**Congratulations. You are now running a full Ethereum node on your Raspberry Pi 4.** - -## Syncing the Blockchain {#syncing-the-blockchain} - -Now you need to wait for the blockchain to be synced. In the case of the execution layer this will take a few days depending on several factors but you can expect up to about 5-7 days. - -If you are running the consensus layer Prater testnet you can expect 1-2 days of Beacon chain synchronization time. Remember that you will need to setup the validator later in order to start the staking process. [How to run the consensus layer validator](/developers/tutorials/run-node-raspberry-pi/#validator) +The logs can be checked using -## Monitoring dashboards {#monitoring-dashboards} - -For this first release, we included 3 monitoring dashboards based on Prometheus [[5]](/developers/tutorials/run-node-raspberry-pi/#references) / Grafana [[6]](/developers/tutorials/run-node-raspberry-pi/#references) in order to monitor the node and clients’ data (Geth and Besu). You can access through your web browser: - -```bash -URL: http://your_raspberrypi_IP:3000 -User: admin -Password: ethereum +```shell +# logs for Geth +sudo journalctl -u geth-lh -f +#logs for lighthouse +sudo journalctl -u lh-geth-beacon -f ``` -## Switching clients {#switching-clients} +The specific service names for every combination of clients are available at the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#id2). Theyu can be used to update the commands provided here for any combination. -All clients run as a systemd service. This is important because if a problem arises the system will respawn the process automatically. +## Validators -Geth and Prysm beacon chain run by default (depending on what you are synchronizing, execution layer or consensus layer) so, if you want to switch to other clients (from Geth to Nethermind, for instance), you need to stop and disable Geth first, and enable and start the other client: +In order to run a validator it is first necessary to deposit 32 test-ether into the Kiln deposit contract. This means the user must have access to an account containing 32 ETH. This can be done by following the step-by-step guide on the [Kiln Launchpad](https://kiln.launchpad.ethereum.org/en/). Do this on a desktop/laptop, built do not generate keys - this can be done directly on the Raspberry Pi. -```bash -sudo systemctl stop geth && sudo systemctl disable geth -``` - -Commands to enable and start each execution client: +Open a terminal on the Raspberry Pi and run the following command to generate the deposit keys: -```bash -sudo systemctl enable besu && sudo systemctl start besu -sudo systemctl enable nethermind && sudo systemctl start nethermind -sudo systemctl enable parity && sudo systemctl start parity ``` - -Consensus clients: - -```bash -sudo systemctl stop prysm-beacon && sudo systemctl disable prysm-beacon -sudo systemctl start lighthouse && sudo systemctl enable lighthouse +cd && deposit new-mnemonic --num_validators 1 --chain kiln ``` -## Changing parameters {#changing-parameters} - -Clients’ config files are located in the /etc/ethereum/ directory. You can edit these files and restart the systemd service in order for the changes to take effect. The only exception is Nethermind which, additionally, has a Mainnet config file located here: - -```bash -/etc/nethermind/configs/mainnet.cfg -``` +Keep the mnemonic phrase safe! The command above generated two files in the node's keystore: the validator keys and a deposit data file. The deposit data needs to be uploaded into the launchpad, so it must be copied from the Raspberry Pi to the desktop/laptop. This can be done using an ssh connection or any other copy/paste method. -Blockchain clients’ data is stored on the Ethereum home account as follows (note the dot before the directory name): +Once the deposit data file is available on the computer running the launchpad, it can be dragged and dropped onto the `+` on the launchpad screen. Follow the instructions on the screen to send a transaction to the deposit contract. -### Execution layer {#execution-layer} +Back on the Raspberry Pi, a validator cna be started. This requires importing the validator keys, setting the address to collect rewards, then starting the preconfigured validator process. The example below is for Lighthouse - instructions for other consensus clients are available on the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#lighthouse): -```bash -/home/ethereum/.geth -/home/ethereum/.parity -/home/ethereum/.besu -/home/ethereum/.nethermind -``` +```shell +# import the validator keys +lighthouse-kl account validator import --directory=/home/ethereum/validator_keys --datadir=/home/ethereum/.lh-geth/kiln/testnet-lh -### Consensus layer {#consensus-layer} +# set the reward address +sudo sed -i '' /etc/ethereum/kiln/lh-geth-validator.conf -```bash -/home/ethereum/.eth2 -/home/ethereum/.eth2validators -/home/ethereum/.lighthouse +# start the validator +sudo systemctl start lh-geth-validator ``` -## Nethermind and Hyperledger Besu {#nethermind-and-hyperledger-besu} - -These 2 great execution clients have become a great alternative to Geth and Parity. The more diversity in the network, the better, so you may give them a try and contribute to the network health. - -Both need further testing so feel free to play with them and report back your feedback. - -## How to run the consensus validator (staking) {#validator} - -Once the Prater testnet beacon chain is synchronized you can run a validator in the same device. You will need to follow [these participation steps](https://prylabs.net/participate). - -The first time, you need to create manually an account by running the “validator” binary and setup a password. Once you have completed this step you can add the password to `/etc/ethereum/prysm-validator.conf` and start the validator as a systemd service. +Congratulations, you now have a full Ethereum node and validator running on a Raspberry Pi! ## Feedback appreciated {#feedback-appreciated} -We put a lot of work trying to setup the Raspberry Pi 4 as a full Ethereum node as we know the massive user base of this device may have a very positive impact in the network. - -Please, take into account that this is the first image based on Ubuntu 20.04 so there may be some bugs. If so, open an issue on [GitHub](https://github.com/diglos/ethereumonarm) or reach us on [Twitter](https://twitter.com/EthereumOnARM). +We know the Raspberry Pi has a massive user base that could have a very positive impact on the health of the Ethereum network. +Please dig into the details in this tutorial, try running on other testnets or even Ethereum Mainnet, check out the Ethereum on Arm Github, gvie feedback, raise issues and pull requests and help advance the technology and documentation! ## References {#references} -1. [geth repeatedly crashes with SIGSEGV](https://github.com/ethereum/go-ethereum/issues/20190) -2. [https://github.com/diglos/ethereumonarm](https://github.com/diglos/ethereumonarm) -3. https://ubuntu.com/download/raspberry-pi -4. https://wikipedia.org/wiki/Port_forwarding -5. https://prometheus.io -6. https://grafana.com -7. https://forum.armbian.com/topic/5565-zram-vs-swap/ -8. https://geth.ethereum.org -9. https://github.com/openethereum/openethereum \* **Note that OpenEthereum [has been deprecated](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) and is no longer being maintained.** Use it with caution and preferably switch to another client implementation. -10. https://nethermind.io -11. https://www.hyperledger.org/projects/besu -12. https://github.com/prysmaticlabs/prysm -13. https://lighthouse.sigmaprime.io -14. https://ethersphere.github.io/swarm-home -15. https://raiden.network -16. https://ipfs.io -17. https://status.im -18. https://vipnode.org +1. https://ubuntu.com/download/raspberry-pi +2. https://wikipedia.org/wiki/Port_forwarding +3. https://prometheus.io +4. https://grafana.com +5. https://forum.armbian.com/topic/5565-zram-vs-swap/ +6. https://geth.ethereum.org +7. https://nethermind.io +8. https://www.hyperledger.org/projects/besu +9. https://github.com/prysmaticlabs/prysm +10. https://lighthouse.sigmaprime.io +11. https://ethersphere.github.io/swarm-home +12. https://raiden.network +13. https://ipfs.io +14. https://status.im +15. https://vipnode.org From 76568a6a3b2dab089d804d2d20148b9c71585906 Mon Sep 17 00:00:00 2001 From: mempirate Date: Fri, 10 Jun 2022 17:47:28 +0200 Subject: [PATCH 029/244] rename Turbo-Geth to Erigon and update links --- .../developers/docs/programming-languages/golang/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/programming-languages/golang/index.md b/src/content/developers/docs/programming-languages/golang/index.md index 697672f1e9f..645788dff34 100644 --- a/src/content/developers/docs/programming-languages/golang/index.md +++ b/src/content/developers/docs/programming-languages/golang/index.md @@ -34,7 +34,7 @@ Need a more basic primer first? Check out [ethereum.org/learn](/learn/) or [ethe ## Intermediate articles and docs {#intermediate-articles-and-docs} - [Go Ethereum Documentation](https://geth.ethereum.org/docs/) - _The documentation for the official Ethereum Golang_ -- [Turbo-Geth Programmer's Guide](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _Illustrated guide including the state tree, multi-proofs, and transaction processing_ +- [Erigon Programmer's Guide](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Illustrated guide including the state tree, multi-proofs, and transaction processing_ - [Turbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Community Conference (EthCC 3)_ - [Turbo-Geth: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) @@ -55,7 +55,7 @@ Need a more basic primer first? Check out [ethereum.org/learn](/learn/) or [ethe - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Official Go implementation of the Ethereum protocol_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Review and analysis of Go Ethereum source code_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Faster derivative of Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Faster derivative of Go Ethereum, with a focus on archive nodes_ - [Golem](https://github.com/golemfactory/golem) - _Golem is creating a global market for computing power_ - [Quorum](https://github.com/jpmorganchase/quorum) - _A permissioned implementation of Ethereum supporting data privacy_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Ethereum 'Serenity' 2.0 Go Implementation_ From 75ea8c707bef9667b9922515b40cb03c5bf3eef3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 11:02:55 -0700 Subject: [PATCH 030/244] revert static page changes --- src/content/governance/index.md | 1 - src/content/security/index.md | 1 - 2 files changed, 2 deletions(-) diff --git a/src/content/governance/index.md b/src/content/governance/index.md index 1b541cc6a15..7bff3d0e388 100644 --- a/src/content/governance/index.md +++ b/src/content/governance/index.md @@ -3,7 +3,6 @@ title: Ethereum Governance description: An introduction to how decisions about Ethereum are made. lang: en sidebar: true -preMergeBanner: true --- # Introduction to Ethereum governance {#introduction} diff --git a/src/content/security/index.md b/src/content/security/index.md index 9562620820c..05c65c4692f 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -3,7 +3,6 @@ title: Ethereum security and scam prevention description: Staying safe on Ethereum lang: en sidebar: true -preMergeBanner: true --- # Ethereum security and scam prevention {#introduction} From 57dadb93ef5101560d2feb883c5f6c94394af6d6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 12:14:28 -0700 Subject: [PATCH 031/244] Update /eth-issuance --- .../upgrades/merge/eth-issuance/index.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md index f31ae150d8f..e8df5456d4a 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -21,17 +21,17 @@ We can break the supply of ETH into two primary forces: issuance, and burn. The **issuance** of ETH is the process of creating ETH that did not previously exist on the balance sheet, while the **burning** of ETH refers to when existing ETH is permanently removed from circulation. The rate of each of these fluctuates based on a number of parameters, and the balance between them determines the resulting inflation/deflation rate of ether. -The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (EL, i.e. Mainnet) and the consensus layer (CL, i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. +The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (i.e. Mainnet) and the consensus layer (i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. ## Pre-merge {#pre-merge} -### EL Issuance {#el-issuance-pre-merge} +### Execution layer issuance {#el-issuance-pre-merge} -Under proof-of-work, miners only interact with the EL, and are rewarded in the form of block rewards being the first to solve blocks. Since the [Constantinople upgrade](/history/#constantinople) on Feb-28-2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, which requires high levels of ETH issuance to sustain. +Under proof-of-work, miners only interact with the execution layer, and are rewarded in the form of block rewards being the first to solve blocks. Since the [Constantinople upgrade](/history/#constantinople) in 2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, which requires high levels of ETH issuance to sustain. -### CL Issuance {#cl-issuance-pre-merge} +### Consensus layer issuance {#cl-issuance-pre-merge} -The [Beacon Chain](/history/#beacon-chain-genesis) has been live since Dec-01-2020, which is secured by proof-of-stake validators, not miners. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Right now these validators are not processing transactions, and are essentially coming to consensus on the state of the validator pool itself. +The [Beacon Chain](/history/#beacon-chain-genesis) has been live since 2020, which is secured by proof-of-stake validators, not miners. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Right now these validators are not processing transactions, and are essentially coming to consensus on the state of the validator pool itself. Issuance of new ETH on this chain is rewarded to validators for properly attesting to the state of the chain, and is also rewarded when a validator proposes a block. Rewards (or penalties) are calculated and distributed every epoch (6.4 minutes) based on validator performance for that time period. These rewards are _significantly_ lower than the 2 ETH being issued under proof-of-work today every ~13.5 seconds, as operating a validating node is not an economically intense activity, thus does not require or warrant as high a reward. @@ -39,33 +39,33 @@ Issuance of new ETH on this chain is rewarded to validators for properly attesti Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) -**EL issuance:**
+**Execution layer issuance:**
- Estimating at 2.08 ETH per 13.3 seconds\*: **~4,930,000** ETH issued in a year - Currently inflating at **~4.13%** (4.93M per year / 119.3M total) - \*This includes the 2 ETH per canonical block, plus an average of 0.08 ETH over time from ommer blocks. Also uses 13.3 second, the baseline block time target without any influence from a [difficulty bomb](/glossary/#difficulty-bomb). ([See source](https://bitinfocharts.com/ethereum/)) -**CL issuance:** +**Consensus layer issuance:** -- Using 13,000,000 total ETH staked, the rate of ETH issuance is ~1600 ETH/day ([SeeSource](https://ultrasound.money/)) +- Using 13,000,000 total ETH staked, the rate of ETH issuance is ~1600 ETH/day ([See source](https://ultrasound.money/)) - Results in **~584,000** ETH issued in a year - Currently inflating at **~0.49%** (584K per year / 119.3M total) Total annual issuance rate: ~4.62% (4.13% + 0.49%) -**~89.4%** of the issuance is going to miners on the EL (4.13 / 4.62 \* 100) +**~89.4%** of the issuance is going to miners on the execution layer (4.13 / 4.62 \* 100) -**~10.6%** is being issued to stakers on the CL (0.49 / 4.62 \* 100) +**~10.6%** is being issued to stakers on the consensus layer (0.49 / 4.62 \* 100) ## Post-merge {#post-merge} -### EL Issuance {#el-issuance-post-merge} +### Execution layer issuance {#el-issuance-post-merge} -Will be zero. Proof-of-work will no longer be valid under the rules of consensus, and all EL activity will be included in "beacon blocks" which are published and attested to by proof-of-stake validators. +Will be zero. Proof-of-work will no longer be valid under the rules of consensus, and all execution layer activity will be included in "beacon blocks" which are published and attested to by proof-of-stake validators. -### CL Issuance {#cl-issuance-post-merge} +### Consensus layer issuance {#cl-issuance-post-merge} Will continue as it was, with small rewards for attesting-to and proposing blocks. These rewards will continue to accrue to _validator balances_ that are managed within the consensus layer. These are separate Ethereum accounts to the accounts we're used to on Mainnet, and until the Shanghai upgrade funds from validator accounts will not be withdrawable/transferrable. This means that although new ETH is still being issued, 100% of it will be locked from the market until this upgrade occurs. When the Shanghai upgrade is rolled out, this ETH will become available. @@ -76,8 +76,8 @@ Stakers may also choose to exit and withdrawal their entire validator balance, b ### Post-merge inflation breakdown {#post-merge-inflation-breakdown} - Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) -- EL issuance: **0** -- CL issuance: Same as above, **~0.49%** annual issuance rate (with 13 million ETH staked) +- Execution layer issuance: **0** +- Consensus layer issuance: Same as above, **~0.49%** annual issuance rate (with 13 million ETH staked) - Total annual issuance rate: **~0.49%** From 6e6b5dcf621f26778d7bc6a5ce8f8d5b3af8fff3 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 10 Jun 2022 20:50:48 +0100 Subject: [PATCH 032/244] Apply suggestions from code review update energy-consumption according to @minimalsm review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/energy-consumption/index.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index f39dbdf73fd..a49a184a0bd 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,9 +7,9 @@ sidebar: true # Ethereum energy consumption {#introduction} -[The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos) will reduce Ethereum's energy consumption by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/). After the Merge Ethereum will use dramatically less carbon to be more secure. +Ethereum's energy consumption will be reduced by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/) following [The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos). After The Merge Ethereum will use dramatically less carbon to be more secure. -Since inception, Ethereum has aimed to implement a PoS consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using PoW consensus. PoW consensus requires miners to use their computing hardware to solve a puzzle. The solution to this puzzle acts as proof that some energy has been expended by the miner which in turn demonstrates that they have invested some real-world value for the right to add to the blockchain. PoW is just a mechanism to decide who gets to add the next block, as is PoS. Swapping PoW for PoS, where the real world value invested comes from ether staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. +Since its inception, Ethereum has aimed to implement a proof-of-stake consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using proof-of-work consensus. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle. The solution to the puzzle proves that some energy has been expended by the miner, demonstrating that they have invested real-world value for the right to add to the blockchain. Proof-of-work is just a mechanism to decide who gets to add the next block, as is proof-of-stake. Swapping proof-of-work for proof-of-stake, where the real world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. ## The Merge {#the-merge} @@ -38,11 +38,13 @@ More relevant is the overall energy consumption and carbon footprint of the netw Whole-network energy consumption and carbon footprints for Bitcoin and Ethereum are estimated at [Digiconomist](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article Ethereum’s total energy consumption is ~112 TWh/yr, equivalent to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr energy and emits about 100 MT/yr C, while also generating about 32,000 T of electrical waste from obsolete hardware per year. Switching off Ethereum’s PoW in favor of PoS will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is expected to be closer to **0.01 TWh/yr**. -To put this in context we can compare to annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube’s energy expenditure have even been broken down by channel and even further by individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that at least 45x more energy was expended watching Gangnam Style in 2019 than will be expended in a year of securing PoS Ethereum. +To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube's energy expenditure have been broken down by channel and individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that people consumed 45 times more energy watching Gangnam Style in 2019 than proof-of-stake Ethereum will use in a year. ## A greener Ethereum {#green-ethereum} -While Ethereum's energy consumption has historically been substantial, there has been a major investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block production. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by PoW is simply to "turn it off", which is the approach Ethereum has committed to take. At the same time, there is a substantial, growing and highly active "ReFi" (Regenerative Finance) community building on Ethereum. ReFi refers to applications that use DeFi components to build financial applicatiosn that have positive externalities benfiting the environment. This is part of a wider "Solarpunk" movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. After the merge, the technology and philosophy of Ethereum will finally reconcile and Ethereum should become an overall environmentally-positive technology. +While Ethereum's energy consumption has historically been substantial, there has been a significant investment of developer time and intellect into transitioning from energy-hungry to energy-efficient block production. To quote [Bankless](http://podcast.banklesshq.com/), the best way to reduce the energy consumed by proof-of-work is simply to "turn it off", which is the approach Ethereum has committed to taking. + +At the same time, there is a substantial, growing, and highly active **regenerative finance (ReFI)** community building on Ethereum. ReFi applications use DeFi components to build financial applications that have positive externalities benefiting the environment. ReFi is part of a wider "Solarpunk" movement that is closely aligned with Ethereum and aims to couple technological advancement and environmental stewardship. The decentralized, permissionless, composable nature of Ethereum makes it the ideal base layer for the ReFi and solarpunk communities. After The Merge, the technology and philosophy of Ethereum will finally reconcile, and Ethereum should become an environmentally-positive technology. If you think these stats are incorrect or can be made more accurate, please raise an issue or PR. These are estimates by the ethereum.org team made using publicly accessible information and the current Ethereum roadmap. These statements don't represent an official promise from the Ethereum Foundation. From cb0bdab68084e859d9cc3ce403369121f73bca5e Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 10 Jun 2022 20:54:47 +0100 Subject: [PATCH 033/244] incorporate TBs suggestionsto energy page --- src/content/energy-consumption/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index a49a184a0bd..7e0dc44ae1c 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -13,7 +13,7 @@ Since its inception, Ethereum has aimed to implement a proof-of-stake consensus ## The Merge {#the-merge} -A PoS blockchain known as the "Beacon Chain" has been running since November 2020 alongside the PoW Ethereum Mainnet. In 2022 several custom devnets have been merged with their own Beacon Chains to aid in debugging Ethereum clients in advance of the real merge. More recently, Ethereum developers have started merging public testnets (Kiln, Kintsugi, Ropsten) and shadow-forks (forks of Ethereum Mainnet) as the final stage of testing. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's PoW mining will be switched off, PoS consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. +A blockchain known as the "Beacon Chain" has been running the consensus algorithm since November 2020 alongside the PoW Ethereum Mainnet. In 2022, several proof-of-work devnets were launched and transitioned to proof-of-stake by merging with their own Beacon Chains. These helped client teams test software before moving to longer-lived networks. After these devnets, Ethereum developers launched new testnets for the community to use (Kiln & Kintsugi) and ran multiple shadow forks of existing testnets and mainnet. Now that these have stabilized, teams are moving to the final stages of testing: transitioning long-lived testnets (Ropsten, Goerli, Sepolia) to proof-of-stake. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's PoW mining will be switched off, PoS consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. ## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} From c8a1962ce7ad488627bce98d4ffd9741d5eb63e2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:38:44 -0700 Subject: [PATCH 034/244] Update index.md --- src/content/upgrades/merge/eth-issuance/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md index e8df5456d4a..4f8ce460ce4 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -90,7 +90,7 @@ Net reduction in annual ETH issuance: ~89.4% (0.49% / 4.62% * 1 This flip side of ETH issuance is the rate at which ETH is burned. To execute a transaction on Ethereum, a minimum fee (known as a `base fee`) must be paid, which fluctuates depending on network activity in the moment. This fee is paid in ETH, is _required_ for the transaction to be considered valid, and is _burned_ in the process, removing it from circulation. -This went live with the London upgrade Aug-4-2021, and will not change after the Merge. +Fee burning went live with the London upgrade in August 2021, and will not change after the Merge. On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validators balance, which is not directly rewarded to any other account, effectively burning it from circulation. From b8fd134f4d892c6d37c3e02467344dbf034d0f7e Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Fri, 10 Jun 2022 16:48:53 -0600 Subject: [PATCH 035/244] add example smart contract wallets --- src/pages/layer-2.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 958a4e83f31..9f999b56659 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -683,10 +683,12 @@ const Layer2Page = ({ data }) => { NOTE: When bridging over and using layer 2, it is important to note that you will control the address for you EOA account just like on Ethereum Mainnet. However, if you are using a smart contract wallet, - you will not have control over this address on a layer 2 by default - unless deployed using `CREATE2`. If you are bridging or sending funds - to a smart contract wallet, test this out first to make sure you - control that address on the layer 2 you are using. + such as Gnosis Safe or{" "} + Argent, you will not have + control over this address on a layer 2 by default unless deployed + using `CREATE2`. If you are bridging or sending funds to a smart + contract wallet, test this out first to make sure you control that + address on the layer 2 you are using.

From 8033e597f275a2afe058c8b1ef7dd96ee68e15cc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:58:04 -0700 Subject: [PATCH 036/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index baf7c0a9aad..f5f30602a7d 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -12,7 +12,7 @@ summaryPoint4: With The Merge, Ethereum's energy consumption drops by 99.95%. We --- -The Merge is one of the most significant and high-stakes upgrades in the history of Ethereum. Extensive testing and bug bounties have been underway for years to ensure a safe transition to proof-of-stake. +The Merge is the most significant and high-stakes upgrade in the history of Ethereum. Extensive testing and bug bounties were undertaken to ensure a safe transition to proof-of-stake. This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the [EF Blog](https://blog.ethereum.org) or the client communication channels for the latest official word on _When Merge?_ @@ -23,13 +23,13 @@ The Merge represents the merger of the existing execution layer of Ethereum (the It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) (the new "consensus layer") shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet (the "execution layer") continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. -Imagine Ethereum is a space ship that isn’t quite ready for an interstellar voyage. With the Beacon Chain the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap in the new engine for the old mid-flight. This will merge the new more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. +Let's consider an example. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -Since genesis, Mainnet has been secured by proof-of-work. This is the main Ethereum blockchain that we're all used to—it contains every transaction, every smart contract, and every balance since it began in July 2015. +Since genesis, Mainnet has been secured by proof-of-work. This is the main Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. -During this growing history, developers have been hard at work preparing for an eventual transition away from proof-of-work, to proof-of-stake instead. On December 1, 2020 the Beacon Chain was born, which has since lived as a separate blockchain to Mainnet, running in parallel. +During this growing history, developers have been hard at work preparing for an eventual transition away from proof-of-work to proof-of-stake instead. On December 1, 2020, the Beacon Chain was created, which has since existed as a separate blockchain to Mainnet, running in parallel. The Beacon Chain has not been processing Mainnet transactions, and for all intents and purposed has simply been coming to consensus on the state of itself... which is great and all, but after extensive testing, the time for it to come to consensus on more than just itself is rapidly approaching. From d3aaef4b4f059d16ae23c4de62020535beb7f520 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 16:09:37 -0700 Subject: [PATCH 037/244] remove numbering --- src/content/upgrades/merge/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index f5f30602a7d..a1d78201f33 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -121,7 +121,7 @@ This will also set the stage for further scalability upgrades not possible under ## Misconceptions about The Merge {#misconceptions} There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. @@ -138,7 +138,7 @@ The ability for anyone to run their own node is _absolutely essential_ to mainta Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. @@ -146,7 +146,7 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. @@ -158,7 +158,7 @@ Many dapps require a number of PoW block confirmations that take a period of tim Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. @@ -166,7 +166,7 @@ Withdrawal functionality is planned for the **Shanghai upgrade** to follow The M This may seem counterintuitive to the above note that withdrawals are not enabled til the Shanghai upgrade, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. @@ -176,7 +176,7 @@ ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. @@ -186,7 +186,7 @@ The APR is intentionally dynamic, allowing a market of stakers to find a balance The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (ETH issuance after The Merge is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. @@ -196,7 +196,7 @@ Looking at recent blockchain activity, approximately 10% of all gas fees being p An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. From aaab9213ea536d853ed5bba2d11538894b61ccb0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 16:24:51 -0700 Subject: [PATCH 038/244] Add header ids --- .../tutorials/run-node-raspberry-pi/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index c7c8971f079..9cac6e2fe65 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -24,11 +24,11 @@ To use Ethereum on Arm to turn a Raspberry Pi into an Ethereum node, the followi - A case with heatsink and fan - USB keyboard, Monitor and HDMI cable (micro-HDMI) (Optional) -## Why run Ethereum on ARM? +## Why run Ethereum on ARM? {#why-run-ethereum-on-arm} ARM boards are very affordable, flexible, small computers. They are good choices for running Ethereum nodes because they can be bought cheaply, configured so that all their resources focus just on the node, making them efficient, they consume low amounts of power and have are physically small so they can fit unobtrusively in any home. It is also very easy to spin up nodes because the Raspberry Pi's MicroSD can simply be flashed with a prebuilt image, with no downloading or building software required. -## How does it work? +## How does it work? {#how-does-it-work} The Raspberry Pi's memory card is flashed with a prebuilt image. This image contains everything needed to run an Ethereum node. With a flashed card, all the user needs to do is power-on the Raspberry Pi. All the processes required to run the node are automatically started. This works because the memory card contains a Linux-based operating system (OS) on top of which system-level processes are automatically run that turn the unit into an Ethereum node. @@ -36,11 +36,11 @@ Ethereum cannot be run using the popular Raspberry Pi Linux OS "Raspbian" becaus **Images take care of all the necessary steps**, from setting up the environment and formatting the SSD disk to installing and running the Ethereum software as well as starting the blockchain synchronization. -## Note on execution and consensus clients +## Note on execution and consensus clients {#note-on-execution-and-consensus-clients} The Ethereum on Arm documentation explains how to set up _either_ an execution client OR a consensus client, except for two Ethereum testnets (Kiln and Ropsten). This optionality is only possible in advance of Ethereum's upcoming transition from proof-of-work (PoW) to proof-of-stake (PoS) known as [The Merge](/upgrades/merge). After The Merge, it will not be possible to run execution and consensus clients separately - they must be run as a pair. Therefore, in this tutorial we will run a pair of execution and consensus clients together on an Ethereum testnet (Kiln). -## The Kiln Raspberry Pi 4 Image +## The Kiln Raspberry Pi 4 Image {#the-kiln-raspberry-pi-4-image} Kiln is a public testnet specifically designed for testing The Merge. Ethereum on Arm developed an image allowing users to rapidly spin up a pair of Ethereum clients on this merge testnet. The Kiln merge has already happened, but the network is still live, so it can be used for this tutorial. Ether on Kiln has no real-world value. @@ -50,7 +50,7 @@ Download the Raspberry Pi image from [Ethereum on Arm](https://ethereumonarm-my. Note that for users that do not own a Raspberry Pi but do have an AWS account, there are ARM instances available that can run the same image. Instructions and the AWS image are available to download from Ethereum on Arm (https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html). -## Flashing the MicroSD +## Flashing the MicroSD {#flashing-the-microsd} The MicroSD card that will be used for the Raspberry Pi should first be inserted into a desktop or laptop so it can be flashed. Then, the following terminal commands will flash the downloaded image onto the SD card: @@ -71,7 +71,7 @@ sudo dd bs=1M if=ethonarm_kiln_22.03.01.img of=/dev/mmcblk0 conv=fdatasync statu The card is now flashed, so it can be inserted into the Raspberry Pi. -## Start the node +## Start the node {#start-the-node} With the SD card inserted into the Raspberry Pi, connect the ethernet cable and SSD then switch the power on. The OS will boot up and automatically start performing the preconfigured tasks that turn the Raspberry Pi into an Ethereum node, including installing and building the client software. This will probably take 10-15 minutes. @@ -100,7 +100,7 @@ sudo journalctl -u lh-geth-beacon -f The specific service names for every combination of clients are available at the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#id2). Theyu can be used to update the commands provided here for any combination. -## Validators +## Validators {#validators} In order to run a validator it is first necessary to deposit 32 test-ether into the Kiln deposit contract. This means the user must have access to an account containing 32 ETH. This can be done by following the step-by-step guide on the [Kiln Launchpad](https://kiln.launchpad.ethereum.org/en/). Do this on a desktop/laptop, built do not generate keys - this can be done directly on the Raspberry Pi. From 0acd8ecdeef30a1b9655d377df4c50ff772980ce Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 16:58:55 -0700 Subject: [PATCH 039/244] typo fixes --- .../developers/tutorials/run-node-raspberry-pi/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 9cac6e2fe65..9a5c12e2f35 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -98,7 +98,7 @@ sudo journalctl -u geth-lh -f sudo journalctl -u lh-geth-beacon -f ``` -The specific service names for every combination of clients are available at the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#id2). Theyu can be used to update the commands provided here for any combination. +The specific service names for every combination of clients are available at the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#id2). They can be used to update the commands provided here for any combination. ## Validators {#validators} @@ -114,7 +114,7 @@ Keep the mnemonic phrase safe! The command above generated two files in the node Once the deposit data file is available on the computer running the launchpad, it can be dragged and dropped onto the `+` on the launchpad screen. Follow the instructions on the screen to send a transaction to the deposit contract. -Back on the Raspberry Pi, a validator cna be started. This requires importing the validator keys, setting the address to collect rewards, then starting the preconfigured validator process. The example below is for Lighthouse - instructions for other consensus clients are available on the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#lighthouse): +Back on the Raspberry Pi, a validator can be started. This requires importing the validator keys, setting the address to collect rewards, then starting the preconfigured validator process. The example below is for Lighthouse—instructions for other consensus clients are available on the [Ethereum on Arm docs](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html#lighthouse): ```shell # import the validator keys @@ -132,7 +132,7 @@ Congratulations, you now have a full Ethereum node and validator running on a Ra ## Feedback appreciated {#feedback-appreciated} We know the Raspberry Pi has a massive user base that could have a very positive impact on the health of the Ethereum network. -Please dig into the details in this tutorial, try running on other testnets or even Ethereum Mainnet, check out the Ethereum on Arm Github, gvie feedback, raise issues and pull requests and help advance the technology and documentation! +Please dig into the details in this tutorial, try running on other testnets or even Ethereum Mainnet, check out the Ethereum on Arm Github, give feedback, raise issues and pull requests and help advance the technology and documentation! ## References {#references} From 4139b4ae0dd7ea5d94b81a12d053fd2e3f41a88b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 16:59:11 -0700 Subject: [PATCH 040/244] Add shasum command --- .../developers/tutorials/run-node-raspberry-pi/index.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 9a5c12e2f35..7dfef84494b 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -46,7 +46,13 @@ Kiln is a public testnet specifically designed for testing The Merge. Ethereum o The Kiln Raspberry Pi 4 image is a "plug and play" image that automatically installs and sets up both the execution and consensus clients, configuring them to talk to each other and connect to the Kiln network. All the user needs to do is start their processes using a simple command. The image contains four execution clients (Geth, Nethermind, Besu and Erigon) and four consensus clients (Lighthouse, Prysm, Nimbus, Teku) that the user can choose from. -Download the Raspberry Pi image from [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/ES56R_SuvaVFkiMO1Tgnf6kB7lEbBfla5c2c18E3WQRJzA?download=1) and verify the file with the following SH256 hash: `485cf36128ca60a41b5de82b5fee3ee46b7c479d0fc5dfa5b9341764414c4c57`. +Download the Raspberry Pi image from [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/ES56R_SuvaVFkiMO1Tgnf6kB7lEbBfla5c2c18E3WQRJzA?download=1) and verify the SHA256 hash: + +```sh +# From directory containing the downloaded image +shasum -a 256 ethonarm_kiln_22.03.01.img.zip +# Hash should output: 485cf36128ca60a41b5de82b5fee3ee46b7c479d0fc5dfa5b9341764414c4c57 +``` Note that for users that do not own a Raspberry Pi but do have an AWS account, there are ARM instances available that can run the same image. Instructions and the AWS image are available to download from Ethereum on Arm (https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html). From fa5bedda9f9c5dc4b43e1c246206f53045fbcda0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 17:55:52 -0700 Subject: [PATCH 041/244] Updates copy for upgrades Merge related to start --- src/intl/en/page-upgrades-index.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index b618f80070f..a88b7e2ee89 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -16,7 +16,7 @@ "page-upgrade-article-title-rollup-roadmap": "A rollup-centric roadmap", "page-upgrades-beacon-chain-btn": "More on the Beacon Chain", "page-upgrades-beacon-chain-date": "The Beacon Chain went live on December 1, 2020.", - "page-upgrades-beacon-chain-desc": "The Beacon Chain brought staking to Ethereum, laid the groundwork for future upgrades, and will eventually coordinate the new system.", + "page-upgrades-beacon-chain-desc": "The Beacon Chain brought staking to Ethereum, laid the groundwork for future upgrades, and will soon coordinate the new system.", "page-upgrades-beacon-chain-estimate": "The Beacon Chain is live", "page-upgrades-beacon-chain-title": "The Beacon Chain", "page-upgrades-bug-bounty": "View the bug bounty program", @@ -47,7 +47,7 @@ "page-upgrades-docking": "The Merge", "page-upgrades-merge-answer-1": "The Merge is when Mainnet begins using the Beacon Chain for consensus, and proof-of-work is turned off, sometime in 2022.", "page-upgrades-merge-btn": "More on The Merge", - "page-upgrades-merge-desc": "Mainnet Ethereum will need to 'merge' with the Beacon Chain at some point. This will enable staking for the entire network and signal the end of energy-intensive mining.", + "page-upgrades-merge-desc": "Mainnet Ethereum will soon 'merge' with the proof-of-stake Beacon Chain. This will signal the end of energy-intensive mining.", "page-upgrades-merge-estimate": "Estimate: 2022", "page-upgrades-merge-mainnet": "What's Mainnet?", "page-upgrades-merge-mainnet-eth2": "Merging Mainnet and the Beacon Chain", @@ -61,7 +61,7 @@ "page-upgrades-index-staking": "Staking is here", "page-upgrades-index-staking-desc": "Key to the Ethereum upgrades is the introduction of staking. If you want to use your ETH to help secure the Ethereum network, make sure you follow these steps.", "page-upgrades-index-staking-learn": "Learn about staking", - "page-upgrades-index-staking-learn-desc": "The Beacon Chain will bring staking to Ethereum. This means if you have ETH, you can do a public good by securing the network and earn more ETH in the process.", + "page-upgrades-index-staking-learn-desc": "The Beacon Chain brought staking to Ethereum. This means if you have ETH, you can do a public good by securing the network and earn more ETH in the process.", "page-upgrades-index-staking-step-1": "1. Set up with the launchpad", "page-upgrades-index-staking-step-1-btn": "Visit staking launchpad", "page-upgrades-index-staking-step-1-desc": "To stake on Ethereum you'll need to use the launchpad - this will walk you through the process.", @@ -91,7 +91,7 @@ "page-upgrades-question-4-answer-3": "After The Merge, validators will secure the entire network via proof-of-stake.", "page-upgrades-question-4-answer-6": "Anyone can become a validator by staking their ETH.", "page-upgrades-question-4-answer-7": "More on staking", - "page-upgrades-question-4-answer-8": "The Beacon Chain and shard chain upgrades will not disrupt the execution layer (Mainnet) as they are being built out separately.", + "page-upgrades-question-4-answer-8": "The Beacon Chain and sharding upgrades will not disrupt the execution layer (Mainnet) as they are being built out separately.", "page-upgrades-question-4-title": "What is the execution layer?", "page-upgrades-question-4-desc": "The Ethereum Mainnet you transact on today has previously been referred to as 'Eth1.' This term is being phased out in favor of the 'execution layer'.", "page-upgrades-question-5-answer-1": "To become a full validator on the network, you'll need to stake 32 ETH. If you don't have that much, or aren't willing to stake that much, you can join staking pools. These pools will let you stake less and earn fractions of the total rewards.", @@ -155,10 +155,10 @@ "page-upgrades-secure-desc": "Ethereum needs to be more secure. As the adoption of Ethereum grows, the protocol needs to become more secure against all forms of attack.", "page-upgrades-shard-button": "More on the shard chains", "page-upgrades-shard-date": "Shard chains should follow The Merge, sometime in 2023.", - "page-upgrades-shard-desc": "Shard chains will expand Ethereum's capacity to process transactions and store data. The shards themselves will gain more features over time, rolled out in multiple phases.", - "page-upgrades-shard-estimate": "Estimate: 2023", - "page-upgrades-shard-lower": "More on shard chains", - "page-upgrades-shard-title": "Shard chains", + "page-upgrades-shard-desc": "Data sharding will expand Ethereum's capacity to store data, and work harmoniously with L2s to scale throughput and reduce network fees. Sharding will be rolled out in multiple stages.", + "page-upgrades-shard-estimate": "Estimate: 2023-2024", + "page-upgrades-shard-lower": "More on data sharding", + "page-upgrades-shard-title": "Data sharding", "page-upgrades-stay-up-to-date": "Stay up to date", "page-upgrades-stay-up-to-date-desc": "Get the latest from the researchers and developers working on the Ethereum upgrades.", "page-upgrades-sustainable-desc": "Ethereum needs to be better for the environment. The technology today requires too much computing power and energy.", @@ -193,9 +193,9 @@ "page-upgrades-why-cant-we-just-use-eth2-mental-models-description": "One major problem with the Eth2 branding is that it creates a broken mental model for new users of Ethereum. They intuitively think that Eth1 comes first and Eth2 comes after. Or that Eth1 ceases to exist once Eth2 exists. Neither of these is true. By removing Eth2 terminology, we save all future users from navigating this confusing mental model.", "page-upgrades-why-cant-we-just-use-eth2-inclusivity-title": "Inclusivity", "page-upgrades-why-cant-we-just-use-eth2-inclusivity-description": "As the roadmap for Ethereum has evolved, Ethereum 2.0 has become an inaccurate representation of Ethereum’s roadmap. Being careful and accurate in our word choice allows content on Ethereum to be understood by the broadest audience possible.", - "page-upgrades-why-cant-we-just-use-eth2-scam-prevention-title": "Scam Prevention", + "page-upgrades-why-cant-we-just-use-eth2-scam-prevention-title": "Scam prevention", "page-upgrades-why-cant-we-just-use-eth2-scam-prevention-description": "Unfortunately, malicious actors have attempted to use the Eth2 misnomer to scam users by telling them to swap their ETH for ‘ETH2’ tokens or that they must somehow migrate their ETH before the Eth2 upgrade. We hope this updated terminology will bring clarity to eliminate this scam vector and help make the ecosystem safer.", - "page-upgrades-why-cant-we-just-use-eth2-staking-clarity-title": "Staking Clarity", + "page-upgrades-why-cant-we-just-use-eth2-staking-clarity-title": "Staking clarity", "page-upgrades-why-cant-we-just-use-eth2-staking-clarity-description": "Some staking operators have also represented ETH staked on the Beacon Chain with the ‘ETH2’ ticker. This creates potential confusion, given that users of these services are not actually receiving an ‘ETH2’ token. No ‘ETH2’ token exists; it simply represents their share in that specific providers’ stake.", "page-upgrades-what-to-do": "What do you need to do?", "page-upgrades-what-to-do-desc": "If you're a dapp user or ETH holder, you don't need to do anything. If you're a developer or want to start staking, there are ways you can get involved today.", From 6e91edaa59a8a3bf3c86ff77977752b0aa47a4aa Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 17:56:12 -0700 Subject: [PATCH 042/244] remove deprecated/unused strings --- src/intl/en/common.json | 1 - ...page-upgrades-get-involved-bug-bounty.json | 1 - src/intl/en/page-upgrades-index.json | 20 ------------------- src/intl/en/page-upgrades-vision.json | 10 ---------- 4 files changed, 32 deletions(-) diff --git a/src/intl/en/common.json b/src/intl/en/common.json index e8930bec70a..737b95241cd 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -217,7 +217,6 @@ "security": "Security", "see-contributors": "See contributors", "set-up-local-env": "Set up local environment", - "shard-chains": "Shard chains", "show-all": "Show all", "show-less": "Show less", "site-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.", diff --git a/src/intl/en/page-upgrades-get-involved-bug-bounty.json b/src/intl/en/page-upgrades-get-involved-bug-bounty.json index ff4285b50f7..7c04ba72ca8 100644 --- a/src/intl/en/page-upgrades-get-involved-bug-bounty.json +++ b/src/intl/en/page-upgrades-get-involved-bug-bounty.json @@ -50,7 +50,6 @@ "page-upgrades-bug-bounty-quality-repro-desc": ": A Proof of Concept (POC) must be included to be eligible for rewards. Please include test code, scripts and detailed instructions. The easier it is for us to reproduce and verify the vulnerability, the higher the reward.", "page-upgrades-bug-bounty-questions": "Questions?", "page-upgrades-bug-bounty-rules": "Read rules", - "page-upgrades-bug-bounty-shard-chains": "shard chains", "page-upgrades-bug-bounty-slogan": "Bug Bounty Program", "page-upgrades-bug-bounty-specs": "Consensus Layer Specifications", "page-upgrades-bug-bounty-execution-specs": "Execution Layer Specifications", diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index a88b7e2ee89..7ca51e9bdf5 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -22,26 +22,6 @@ "page-upgrades-bug-bounty": "View the bug bounty program", "page-upgrades-clients": "Check out the consensus clients (previously known as 'Eth2' clients)", "page-staking-deposit-contract-title": "Check the deposit contract address", - "page-upgrades-diagram-ethereum-mainnet": "Ethereum Mainnet", - "page-upgrades-diagram-h2": "How the upgrades fit together", - "page-upgrades-diagram-link-1": "More on proof of work", - "page-upgrades-diagram-link-2": "More on shard chains", - "page-upgrades-diagram-mainnet": "Mainnet", - "page-upgrades-diagram-p": "Ethereum Mainnet will continue to exist in its current form for a while. This means the Beacon Chain and shard upgrades won't disrupt the network.", - "page-upgrades-diagram-p-1": "Mainnet will eventually merge with the new system introduced by the Beacon Chain.", - "page-upgrades-diagram-p-2": "The Beacon Chain will become the conductor of Ethereum, coordinating validators and setting the pace for block creation.", - "page-upgrades-diagram-p-3": "At first, it will exist separately from Mainnet and manage validators - it will have nothing to do with smart contracts, transactions, or accounts.", - "page-upgrades-diagram-p-4": "Shards will provide lots of extra data to help increase the amount of transactions Mainnet can handle. They'll be coordinated by the Beacon Chain.", - "page-upgrades-diagram-p-5": "But all transactions will still rely on Mainnet, which will continue to exist as we know it today – secured by proof-of-work and miners.", - "page-upgrades-diagram-p-6": "Mainnet will merge with the proof-of-stake system, coordinated by the Beacon Chain.", - "page-upgrades-diagram-p-8": "This will turn Mainnet into a shard within the new system. Miners will no longer be needed as all of Ethereum will be secured by validators.", - "page-upgrades-diagram-p10": "Ethereum scaling is not a migration or a single thing. It describes a set of upgrades being worked on to unlock Ethereum's true potential. This is how they all fit together.", - "page-upgrades-diagram-scroll": "Scroll to explore – tap for more information.", - "page-upgrades-diagram-shard": "Shard (1)", - "page-upgrades-diagram-shard-1": "Shard (...)", - "page-upgrades-diagram-shard-2": "Shard (2)", - "page-upgrades-diagram-shard-3": "Shard (...)", - "page-upgrades-diagram-validators": "More on validators", "page-upgrades-dive": "Dive into the vision", "page-upgrades-dive-desc": "How are we going to make Ethereum more scalable, secure, and sustainable? All while keeping Ethereum's core ethos of decentralization.", "page-upgrades-docking": "The Merge", diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index 39a2459413f..a27b8d6c4c8 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -2,16 +2,9 @@ "page-upgrades-vision-2014": "View a 2014 blog post detailing proof of stake", "page-upgrades-vision-2021": "View a 2021 blog post on the Ethereum roadmap evolution", "page-upgrades-vision-2021-updates": "View a 2021 blog post on the Ethereum Protocol Updates", - "page-upgrades-vision-beacon-chain": "The beacon chain", - "page-upgrades-vision-beacon-chain-btn": "More on the Beacon Chain", - "page-upgrades-vision-beacon-chain-date": "The Beacon Chain is live", - "page-upgrades-vision-beacon-chain-desc": "The Beacon Chain brought staking to Ethereum, laid the groundwork for future upgrades, and will eventually coordinate the new system.", - "page-upgrades-vision-beacon-chain-upper": "Beacon Chain", "page-upgrades-vision-desc-1": "Ethereum needs to reduce network congestion and improve speeds to better service a global user base.", "page-upgrades-vision-desc-2": "Running a node is getting harder as the network grows. This will only get harder with efforts to scale the network.", "page-upgrades-vision-desc-3": "Ethereum uses too much electricity. The technology that keeps the network secure needs to be more sustainable.", - "page-upgrades-vision-merge-date": "Estimate: 2022", - "page-upgrades-vision-merge-desc": "Mainnet Ethereum will need to \"merge\" with the Beacon Chain at some point. This will enable staking for the entire network and signal the end of energy-intensive mining.", "page-upgrades-vision-ethereum-node": "More on nodes", "page-upgrades-vision-explore-upgrades": "Explore the upgrades", "page-upgrades-vision-future": "A digital future on a global scale", @@ -32,9 +25,6 @@ "page-upgrades-vision-security-desc-10": "Staking also means you don't need to invest in elite hardware to 'run' an Ethereum node. This should encourage more people to become a validator, increasing the network's decentralization and decreasing the attack surface area.", "page-upgrades-vision-security-staking": "Stake ETH", "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH.", - "page-upgrades-vision-shard-chains": "shard chains", - "page-upgrades-vision-shard-date": "Estimate: 2021", - "page-upgrades-vision-shard-desc-4": "Shard chains will spread the load of the network into 64 new blockchains. Shards have the potential to drastically improve transaction speed - up to 100,000 per second.", "page-upgrades-vision-shard-upgrade": "More on shard chains", "page-upgrades-vision-staking-lower": "More on staking", "page-upgrades-vision-subtitle": "Grow Ethereum until it's powerful enough to help all of humanity.", From b1da527d2e4206c6eed10c185269812e52a1ff93 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Fri, 10 Jun 2022 21:40:18 -0600 Subject: [PATCH 043/244] rewording note --- src/pages/layer-2.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 9f999b56659..ea3564f85c5 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -681,14 +681,17 @@ const Layer2Page = ({ data }) => {

NOTE: When bridging over and using layer 2, it is important to note - that you will control the address for you EOA account just like on - Ethereum Mainnet. However, if you are using a smart contract wallet, - such as Gnosis Safe or{" "} + that you will control the address for your{" "} + EOA account (an account where only a + single private key controls the account) just like on Ethereum + Mainnet. However, if you are using a{" "} + contract account, such + as Gnosis Safe or{" "} Argent, you will not have - control over this address on a layer 2 by default unless deployed - using `CREATE2`. If you are bridging or sending funds to a smart - contract wallet, test this out first to make sure you control that - address on the layer 2 you are using. + control over this address on a layer 2 until you redeploy your + contract account to that address on the layer 2. If you are bridging + or sending funds to a contract account, and you do not control this + address for the contract account, your funds may be lost.

From a65ff11e67b11295571c642c2c1ad940638df2cb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 22:18:01 -0700 Subject: [PATCH 044/244] Update /upgrades copy premerge --- src/intl/en/page-upgrades-index.json | 34 +++++------ src/pages/upgrades/index.js | 86 ++++++++++++++++------------ 2 files changed, 67 insertions(+), 53 deletions(-) diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index 7ca51e9bdf5..2386b02283d 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -5,8 +5,8 @@ "consensus-client-prysm-logo-alt": "Prysm logo", "consensus-client-teku-logo-alt": "Teku logo", "consensus-client-under-review": "Review and audit in progress", - "page-upgrades-answer-1": "Think of the changes being rolled out as a set of upgrades being added to improve the Ethereum we use today. These upgrades included the creation of a new chain called the Beacon Chain, and will introduce new chains known as 'shards' in the future.", - "page-upgrades-answer-2": "Some upgrades are separate from the Ethereum Mainnet we use today but won't replace it. Instead Mainnet will 'merge' with this parallel system that's being added over time.", + "page-upgrades-answer-1": "Think of the changes being rolled out as a set of upgrades being added to improve the Ethereum we use today. These upgrades included the creation of a new chain called the Beacon Chain, which will soon act as the consensus engine for the entire network.", + "page-upgrades-answer-2": "Despite the Beacon Chain starting as a separate chain, soon the existing Mainnet will be 'merged' with this new proof-of-stake consensus layer.", "page-upgrades-answer-4": "In other words the Ethereum we use today will eventually embody all the features that we're aiming towards in the Ethereum vision.", "page-upgrade-article-title-two-point-oh": "Two Point Oh: The Beacon Chain", "page-upgrade-article-title-beacon-chain-explainer": "The Beacon Chain Ethereum 2.0 explainer you need to read first", @@ -25,7 +25,7 @@ "page-upgrades-dive": "Dive into the vision", "page-upgrades-dive-desc": "How are we going to make Ethereum more scalable, secure, and sustainable? All while keeping Ethereum's core ethos of decentralization.", "page-upgrades-docking": "The Merge", - "page-upgrades-merge-answer-1": "The Merge is when Mainnet begins using the Beacon Chain for consensus, and proof-of-work is turned off, sometime in 2022.", + "page-upgrades-merge-answer-1": "The Merge is when Mainnet begins using the Beacon Chain for consensus, and proof-of-work is turned off, coming soon.", "page-upgrades-merge-btn": "More on The Merge", "page-upgrades-merge-desc": "Mainnet Ethereum will soon 'merge' with the proof-of-stake Beacon Chain. This will signal the end of energy-intensive mining.", "page-upgrades-merge-estimate": "Estimate: 2022", @@ -49,24 +49,24 @@ "page-upgrades-index-staking-step-2-btn": "Confirm deposit contract address", "page-upgrades-index-staking-step-2-desc": "Before you stake your ETH, be sure to check you've got the right address. You must have gone through the launchpad before doing this.", "page-upgrades-index-staking-sustainability": "More sustainable", - "page-upgrades-just-docking": "More on The Merge", "page-upgrades-meta-desc": "An overview of the Ethereum upgrades and the vision they hope to make a reality.", "page-upgrades-meta-title": "Ethereum upgrades (formerly 'Eth2')", - "page-upgrades-miners": "More on miners", - "page-upgrades-more-on-upgrades": "More on the Ethereum upgrades", "page-upgrades-proof-of-stake": "proof-of-stake", "page-upgrades-proof-of-work": "proof-of-work", "page-upgrades-proof-stake-link": "More on proof of stake", "page-upgrades-question-1-title": "When will the upgrades ship?", "page-upgrades-question-1-desc": "Ethereum is being upgraded progressively; the upgrades are distinct with different ship dates.", "page-upgrades-question-2-title": "Is the Beacon Chain a separate blockchain?", - "page-upgrades-question-2-desc": "It's not accurate to think of these upgrades as a separate blockchain.", - "page-upgrades-question-3-answer-2": "The Merge and shard chain upgrades may impact dapp developers. But the specifications have not been finalized yet, so there's no immediate action required.", + "page-upgrades-question-2-desc": "It's not accurate to think of this upgrade as a separate blockchain.", + "page-upgrades-question-3-answer-2a": "The Merge specifications have been finalized, and is designed to have minimal impact on dapp developers.", + "page-upgrades-question-3-answer-2a-link": "The Merge and dapp developers", + "page-upgrades-question-3-answer-2b": "Sharding plans are still being developed, but will be designed with layer 2 rollups in mind.", + "page-upgrades-layer-2-rollups": "More on layer 2 rollups", "page-upgrades-question-3-answer-3": "Talk to the Ethereum research and development team over at ethresear.ch.", "page-upgrades-question-3-answer-3-link": "Visit ethresear.ch", "page-upgrades-question-3-desc": "You don't have to do anything right now to prepare for the upgrades.", "page-upgrades-question-3-title": "How do I prepare for the upgrades?", - "page-upgrades-question-4-answer-1": "Whenever you send a transaction or use a dapp today, you're using the execution layer, or Mainnet. This is the Ethereum that is secured by miners.", + "page-upgrades-question-4-answer-1": "Whenever you send a transaction or use a dapp today, you're using the execution layer, also known as Mainnet.", "page-upgrades-question-4-answer-2": "Mainnet will continue to run as normal until The Merge.", "page-upgrades-question-4-answer-3": "After The Merge, validators will secure the entire network via proof-of-stake.", "page-upgrades-question-4-answer-6": "Anyone can become a validator by staking their ETH.", @@ -77,12 +77,14 @@ "page-upgrades-question-5-answer-1": "To become a full validator on the network, you'll need to stake 32 ETH. If you don't have that much, or aren't willing to stake that much, you can join staking pools. These pools will let you stake less and earn fractions of the total rewards.", "page-upgrades-question-5-desc": "You'll need to use the staking launchpad or join a staking pool.", "page-upgrades-question-5-title": "How do I stake?", - "page-upgrades-question-6-answer-1": "For now, there's no actions to take. But we recommend you stay up to date with developments on The Merge and shard chain upgrades.", "page-upgrades-question-6-answer-3": "Danny Ryan of the Ethereum foundation regularly updates the community:", "page-upgrades-question-6-answer-4": "Ben Edgington of ConsenSys has a weekly newsletter about the Ethereum upgrades:", "page-upgrades-question-6-answer-5": "You can also join the discussion on Ethereum research and development at ethresear.ch.", - "page-upgrades-question-6-desc": "Your dapp won't be affected by any imminent upgrades. However future upgrades may require some changes.", "page-upgrades-question-6-title": "What do I need to do with my dapp?", + "page-upgrades-question-6-desc": "The Merge has been designed with the goal of minimizing impact on dapp developers, though there are a couple things work noting.", + "page-upgrades-question-6-answer-1": "A few changes are coming with The Merge that can impact certain types of applications. This includes block structure and timing, a few opcode changes, sources of on-chain randomness and the concept of epoch finalization.", + "page-upgrades-question-6-answer-1-link": "How The Merge Impacts Ethereum's Application Layer", + "page-upgrades-question-6-answer-2": "Most applications will be unaffected, but developers are recommended to stay up to date on the latest with The Merge.", "page-upgrades-question-7-desc": "Many different teams from all over the community are working on the various Ethereum upgrades.", "page-upgrades-question-7-lighthouse": "Lighthouse", "page-upgrades-question-7-lighthouse-lang": "(Rust implementation)", @@ -99,7 +101,7 @@ "page-upgrades-question-7-clients": "Learn more about Ethereum clients", "page-upgrades-question-8-answer-1": "The Ethereum upgrades will help Ethereum scale in a decentralized way, while maintaining security, and increasing sustainability.", "page-upgrades-question-8-answer-2": "Perhaps the most obvious problem is that Ethereum needs to be able to handle more than 15-45 transactions per second. But the upgrades also address some other problems with Ethereum today.", - "page-upgrades-question-8-answer-3": "The network is in such high demand that it's making Ethereum expensive to use. Nodes in the network are struggling under the size of Ethereum and the amount of data their computers are having to process. And the underlying algorithm that keeps Ethereum secure and decentralized is energy intensive and needs to be greener.", + "page-upgrades-question-8-answer-3": "The network is in such high demand that it's making Ethereum expensive to use. Nodes in the network are struggling under the size of Ethereum and the amount of data their computers are having to process. The original algorithm that underlies Ethereum security and decentralization is energy intensive and needs to be greener.", "page-upgrades-question-8-answer-4": "A lot of what's changing has always been on the Ethereum roadmap, even since 2015. But current conditions are making the need for the upgrades even greater.", "page-upgrades-question-8-answer-6": "Explore the Ethereum vision", "page-upgrades-question-8-desc": "The Ethereum we use today needs to offer a better experience to end users and network participants.", @@ -120,8 +122,8 @@ "page-upgrades-question-10-answer-2": "But if you've followed the discussions, here's how the upgrades fit into technical roadmaps, and a bit on how they're changing.", "page-upgrades-question-10-answer-3": "Phase 0 described the work to get the Beacon Chain live.", "page-upgrades-question-10-answer-5": "Phase 1 originally focused on implementing the shard chains, but prioritization has shifted to 'The Merge' which is the next planned upgrade.", - "page-upgrades-question-10-answer-6": "Phase 1.5 was originally planned to follow shard implementations, when Mainnet would be added as the last shard to the Beacon Chain. To expedite the transition away from proof-of-work mining, Mainnet will instead represent the first shard to connect with the Beacon Chain. This is now known as 'The Merge' and will be a significant step towards a greener Ethereum.", - "page-upgrades-question-10-answer-7": "Though the plans around Phase 2 have been a point of intense research and discussion, with The Merge planned before shard chains, this will allow for continued reassessment as to the needs of Ethereum development moving forward. Given a rollup-centric roadmap, the immediate necessity of shard chains is debatable.", + "page-upgrades-question-10-answer-6": "Phase 1.5 was originally planned to follow shard implementations, when Mainnet would be added as the last shard to the Beacon Chain. With rollup technology progressing, the transition away from proof-of-work was expedited. Mainnet will instead be 'merged' into the Beacon Chain and remain as the execution layer of Ethereum. This will be a significant step towards a greener Ethereum.", + "page-upgrades-question-10-answer-7": "The plans around Phase 2 have been a point of intense research and discussion. With The Merge planned before sharding, and the advancements in layer 2 solutions, plans have shifted to provide a more simplified form of data sharding to maximize rollup efficiency. Current layer 2s are enabling the ability to scale transaction execution, and data sharding will help make storing the proofs for this data on layer 1 in a cheap and scalable manner. This will continue to undergo reassessment and research as progress is made.", "page-upgrades-question-10-answer-8": "More on a rollup-centric roadmap", "page-upgrades-question-11-title": "Can I buy Eth2?", "page-upgrades-question-11-desc": "No. There is no Eth2 token and your ETH will not change after The Merge.", @@ -134,7 +136,7 @@ "page-upgrades-secure": "More secure", "page-upgrades-secure-desc": "Ethereum needs to be more secure. As the adoption of Ethereum grows, the protocol needs to become more secure against all forms of attack.", "page-upgrades-shard-button": "More on the shard chains", - "page-upgrades-shard-date": "Shard chains should follow The Merge, sometime in 2023.", + "page-upgrades-shard-date": "Data sharding will follow The Merge in multiple phases, sometime in 2023-2024.", "page-upgrades-shard-desc": "Data sharding will expand Ethereum's capacity to store data, and work harmoniously with L2s to scale throughput and reduce network fees. Sharding will be rolled out in multiple stages.", "page-upgrades-shard-estimate": "Estimate: 2023-2024", "page-upgrades-shard-lower": "More on data sharding", @@ -152,7 +154,7 @@ "page-upgrades-upgrades-aria-label": "Ethereum upgrades menu", "page-upgrades-upgrades-beacon-chain": "The Beacon Chain", "page-upgrades-upgrades-docking": "The Merge", - "page-upgrades-upgrades-guide": "Guide to Ethereum upgrades", + "page-upgrades-energy-consumption": "More on Ethereum energy consumption", "page-upgrades-upgrades-shard-chains": "The shard chains", "page-upgrades-upgrading": "Upgrading Ethereum to radical new heights", "page-upgrades-vision": "The vision", diff --git a/src/pages/upgrades/index.js b/src/pages/upgrades/index.js index 0c97229345f..486e2b4c82c 100644 --- a/src/pages/upgrades/index.js +++ b/src/pages/upgrades/index.js @@ -502,9 +502,6 @@ const Eth2IndexPage = ({ data }) => {

{" "} - - -

@@ -522,15 +519,12 @@ const Eth2IndexPage = ({ data }) => { >

{" "} - - -

{" "} - - - {" "} + + +

{" "} @@ -553,19 +547,34 @@ const Eth2IndexPage = ({ data }) => {

- +

  • - + + +
  • +
  • + +
  • +
+

+ +

+
  • +
  • + + + +

@@ -583,14 +592,14 @@ const Eth2IndexPage = ({ data }) => { >

{" "} - - + +

{" "} - +

@@ -654,34 +663,37 @@ const Eth2IndexPage = ({ data }) => {

+

+ + + +

+

+ +

  • - - + {" "} + +
  • - - + {" "} + + + +
  • +
  • + {" "} + +

- {" "} - - - -

-

- {" "} - - - -

-

- {" "} - - + +

@@ -745,12 +757,12 @@ const Eth2IndexPage = ({ data }) => {

{" "} - - -

- + {" "} + + +

From b24097af263266c88196cd48b35eca150671a95a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 22:30:06 -0700 Subject: [PATCH 045/244] update sharding path --- redirects.json | 6 +++++- src/content/upgrades/{shard-chains => sharding}/index.md | 0 2 files changed, 5 insertions(+), 1 deletion(-) rename src/content/upgrades/{shard-chains => sharding}/index.md (100%) diff --git a/redirects.json b/redirects.json index 8fd75313911..294ffec2098 100644 --- a/redirects.json +++ b/redirects.json @@ -289,7 +289,11 @@ }, { "fromPath": "/*/eth2/shard-chains/", - "toPath": "/:splat/upgrades/shard-chains/" + "toPath": "/:splat/upgrades/sharding/" + }, + { + "fromPath": "/*/upgrades/shard-chains/", + "toPath": "/:splat/upgrades/sharding/" }, { "fromPath": "/*/eth2/staking/", diff --git a/src/content/upgrades/shard-chains/index.md b/src/content/upgrades/sharding/index.md similarity index 100% rename from src/content/upgrades/shard-chains/index.md rename to src/content/upgrades/sharding/index.md From 1d01fc9c40c3d2c6b57d06ccfed2092b2492ec1c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Fri, 10 Jun 2022 22:30:56 -0700 Subject: [PATCH 046/244] updates react /sharding links --- src/intl/en/page-layer-2.json | 2 +- src/pages/layer-2.js | 2 +- src/pages/upgrades/index.js | 11 ++++++----- src/pages/upgrades/vision.js | 4 ++-- src/templates/upgrade.tsx | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index dd3e9224482..ed32953d1fa 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -99,7 +99,7 @@ "layer-2-faq-question-2-description-3": "At the moment, most zk-rollups are application specific, in contrast with optimistic rollups which have largely been generalizable.", "layer-2-faq-question-2-description-4": "More info on optimistic rollups and zero-knowledge rollups.", "layer-2-faq-question-3-title": "Is scaling at layer 1 possible?", - "layer-2-faq-question-3-description-1": "Yes. Currently in the Ethereum roadmap there are plans for shard chains. While these are in the roadmap, further scaling through layer 2 networks is still necessary. More info on sharding.", + "layer-2-faq-question-3-description-1": "Yes. Currently in the Ethereum roadmap there are plans for shard chains. While these are in the roadmap, further scaling through layer 2 networks is still necessary. More info on sharding.", "layer-2-faq-question-4-title": "What are the risks with layer 2?", "layer-2-faq-question-4-description-1": "Layer 2 projects contain additional risks compared to holding funds and transacting directly on Ethereum Mainnet. For instance, sequencers may go down, leading you to have to wait to access funds.", "layer-2-faq-question-4-description-2": "We encourage you to do your own research before transferring significant funds to a layer 2. For more information on the technology, risks, and trust assumptions of layer 2s, we recommend checking out L2BEAT, which provides a comprehensive risk assessment framework of each project.", diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 36504dcd83b..fe03248ce86 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -883,7 +883,7 @@ const Layer2Page = ({ data }) => { - Finematics

  • - +
  • diff --git a/src/pages/upgrades/index.js b/src/pages/upgrades/index.js index 486e2b4c82c..8ec2d61622a 100644 --- a/src/pages/upgrades/index.js +++ b/src/pages/upgrades/index.js @@ -102,8 +102,9 @@ const ContributeCard = styled.div` display: flex; align-items: center; justify-content: space-between; - margin: 0rem 3rem; + margin: 0rem auto; margin-bottom: 2rem; + max-width: 100ch; @media (max-width: ${(props) => props.theme.breakpoints.l}) { margin-left: 0rem; margin-right: 0rem; @@ -260,7 +261,7 @@ const Eth2IndexPage = ({ data }) => { image: getImage(data.shards), title: , description: , - to: "/upgrades/shard-chains/", + to: "/upgrades/sharding/", date: , }, ] @@ -503,7 +504,7 @@ const Eth2IndexPage = ({ data }) => {

    {" "}

    - +

    @@ -566,7 +567,7 @@ const Eth2IndexPage = ({ data }) => {

    • - +
    • @@ -847,7 +848,7 @@ const Eth2IndexPage = ({ data }) => {

      {" "} - +

      diff --git a/src/pages/upgrades/vision.js b/src/pages/upgrades/vision.js index e2a2c9ff113..5470111a462 100644 --- a/src/pages/upgrades/vision.js +++ b/src/pages/upgrades/vision.js @@ -115,7 +115,7 @@ const VisionPage = ({ data, location }) => { image: getImage(data.shards), title: , description: , - to: "/upgrades/shard-chains/", + to: "/upgrades/sharding/", date: , }, ] @@ -207,7 +207,7 @@ const VisionPage = ({ data, location }) => {

      {" "} - + {" "}

      diff --git a/src/templates/upgrade.tsx b/src/templates/upgrade.tsx index 2ec66190f45..eeec05bff71 100644 --- a/src/templates/upgrade.tsx +++ b/src/templates/upgrade.tsx @@ -317,7 +317,7 @@ const dropdownLinks = { }, { text: "page-upgrades-upgrades-shard-chains", - to: "/upgrades/shard-chains/", + to: "/upgrades/sharding/", }, ], } From 1ab9647c819fa8a01574ec86ce254062b187fe29 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Sat, 11 Jun 2022 09:22:07 +0100 Subject: [PATCH 047/244] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../tutorials/run-node-raspberry-pi/index.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 7dfef84494b..32f2e4c2113 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -17,7 +17,7 @@ To use Ethereum on Arm to turn a Raspberry Pi into an Ethereum node, the followi - Raspberry 4 (model B 8GB) - MicroSD Card (16 GB Class 10 minimum) -- 1 TB SSD minimum USB 3.0 disk or an SSD with an USB to SATA case (see Storage section). +- 2 TB SSD minimum USB 3.0 disk or an SSD with a USB to SATA case. - Power supply - Ethernet cable - Port forwarding (see clients for further info) @@ -38,7 +38,11 @@ Ethereum cannot be run using the popular Raspberry Pi Linux OS "Raspbian" becaus ## Note on execution and consensus clients {#note-on-execution-and-consensus-clients} -The Ethereum on Arm documentation explains how to set up _either_ an execution client OR a consensus client, except for two Ethereum testnets (Kiln and Ropsten). This optionality is only possible in advance of Ethereum's upcoming transition from proof-of-work (PoW) to proof-of-stake (PoS) known as [The Merge](/upgrades/merge). After The Merge, it will not be possible to run execution and consensus clients separately - they must be run as a pair. Therefore, in this tutorial we will run a pair of execution and consensus clients together on an Ethereum testnet (Kiln). +The Ethereum on Arm documentation explains how to set up _either_ an execution client OR a consensus client, except for two Ethereum testnets (Kiln and Ropsten). This optionality is only possible in advance of Ethereum's upcoming transition from proof-of-work (PoW) to proof-of-stake (PoS) known as [The Merge](/upgrades/merge). + + +After The Merge, it will not be possible to run execution and consensus clients separately—they must be run as a pair. Therefore, in this tutorial we will run a pair of execution and consensus clients together on an Ethereum testnet (Kiln). + ## The Kiln Raspberry Pi 4 Image {#the-kiln-raspberry-pi-4-image} @@ -108,7 +112,7 @@ The specific service names for every combination of clients are available at the ## Validators {#validators} -In order to run a validator it is first necessary to deposit 32 test-ether into the Kiln deposit contract. This means the user must have access to an account containing 32 ETH. This can be done by following the step-by-step guide on the [Kiln Launchpad](https://kiln.launchpad.ethereum.org/en/). Do this on a desktop/laptop, built do not generate keys - this can be done directly on the Raspberry Pi. +In order to run a validator you must first have access to 32 testnet ETH, which must be deposited into the Kiln deposit contract. This can be done by following the step-by-step guide on the [Kiln Launchpad](https://kiln.launchpad.ethereum.org/en/). Do this on a desktop/laptop, but do not generate keys—this can be done directly on the Raspberry Pi. Open a terminal on the Raspberry Pi and run the following command to generate the deposit keys: From cbe002024d12c85abc840c3d63a8d9e464ff5651 Mon Sep 17 00:00:00 2001 From: Akim Benchiha Date: Sat, 11 Jun 2022 17:43:57 +0200 Subject: [PATCH 048/244] feat(beaconchainaction): migrate component to typescript Refs: #6392 --- ...ChainActions.js => BeaconChainActions.tsx} | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) rename src/components/{BeaconChainActions.js => BeaconChainActions.tsx} (84%) diff --git a/src/components/BeaconChainActions.js b/src/components/BeaconChainActions.tsx similarity index 84% rename from src/components/BeaconChainActions.js rename to src/components/BeaconChainActions.tsx index 408390d7e99..7afce5ae1a4 100644 --- a/src/components/BeaconChainActions.js +++ b/src/components/BeaconChainActions.tsx @@ -6,10 +6,11 @@ import { useIntl } from "gatsby-plugin-intl" import { translateMessageId } from "../utils/translations" -import CardList from "./CardList" +import CardList, { CardListItem } from "./CardList" import Card from "./Card" import ButtonLink from "./ButtonLink" -import Translation from "../components/Translation" +import Translation from "./Translation" +import { GatsbyImageProps } from "gatsby-plugin-image" const Container = styled.div` margin-bottom: 4rem; @@ -69,36 +70,45 @@ export const DataLogo = graphql` } ` -const BeaconChainActions = () => { - const intl = useIntl() - const data = useStaticQuery(graphql` - query { - beaconscan: file(relativePath: { eq: "upgrades/etherscan.png" }) { - ...DataLogo - } - beaconchain: file(relativePath: { eq: "upgrades/beaconchainemoji.png" }) { - ...DataLogo - } +const BeaconStaticQuery = graphql` + query { + beaconscan: file(relativePath: { eq: "upgrades/etherscan.png" }) { + ...DataLogo + } + beaconchain: file(relativePath: { eq: "upgrades/beaconchainemoji.png" }) { + ...DataLogo } - `) + } +` + +type BeaconQueryTypes = { + beaconscan: string + beaconchain: string +} + +const BeaconChainActions: React.FC = () => { + const intl = useIntl() + const data = useStaticQuery(BeaconStaticQuery) - const datapoints = [ + const datapoints: CardListItem[] = [ { title: "beaconscan", image: getImage(data.beaconscan), + alt: "test beaconscan", link: "https://beaconscan.com", description: translateMessageId("consensus-beaconscan-desc", intl), }, { title: "beaconcha.in", image: getImage(data.beaconchain), + alt: "beaconcha test", link: "https://beaconcha.in", description: translateMessageId("consensus-beaconcha-in-desc", intl), }, ] //TODO: we should refactor the naming here instead of using authors into the description field - const reads = [ + const reads: CardListItem[] = [ { title: translateMessageId( "page-upgrade-article-title-two-point-oh", From f83045834dd09149abc0aab4e9a5f9369ca48e48 Mon Sep 17 00:00:00 2001 From: Akim Benchiha Date: Sat, 11 Jun 2022 18:01:16 +0200 Subject: [PATCH 049/244] feat(boxgrid): migrate component to typescript Refs: #6392 --- src/components/{BoxGrid.js => BoxGrid.tsx} | 45 ++++++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) rename src/components/{BoxGrid.js => BoxGrid.tsx} (80%) diff --git a/src/components/BoxGrid.js b/src/components/BoxGrid.tsx similarity index 80% rename from src/components/BoxGrid.js rename to src/components/BoxGrid.tsx index 77be65631cd..bb6605f11dc 100644 --- a/src/components/BoxGrid.js +++ b/src/components/BoxGrid.tsx @@ -3,6 +3,35 @@ import styled from "styled-components" import Emoji from "./Emoji" +export interface IOpener { + isOpen: boolean +} + +export interface IGridStyle { + columnNumber: number +} + +export interface IColor { + color: string +} + +export interface IBaseItem { + emoji: string + title: string + description: string +} + +export interface IBoxStyle extends IOpener, IGridStyle, IColor {} + +export interface IGridItemProps extends IBaseItem, IBoxStyle { + index: number + callback: (idx: number) => void +} + +export interface IBoxProps { + items: Array +} + const Title = styled.h3` font-size: 2.5rem; font-weight: 400; @@ -35,7 +64,7 @@ const StyledEmoji = styled(Emoji)` } ` -const Box = styled.div` +const Box = styled.div` grid-row-start: ${(props) => (props.isOpen ? `1` : `auto`)}; grid-row-end: ${(props) => (props.isOpen ? `span 2` : `auto`)}; grid-column-start: ${(props) => (props.isOpen ? props.columnNumber : `auto`)}; @@ -70,9 +99,9 @@ const Box = styled.div` ` // Represent string as 32-bit integer -const hashCode = (string) => { +const hashCode = (stringPhrase: string) => { let hash = 0 - for (const char of string) { + for (const char of stringPhrase) { const code = char.charCodeAt(0) hash = (hash << 5) - hash + code hash |= 0 @@ -91,7 +120,7 @@ const colors = [ "gridPurple", ] -const GridItem = ({ +const GridItem: React.FC = ({ description, columnNumber, emoji, @@ -112,9 +141,9 @@ const GridItem = ({ color={color} > {isOpen ? ( - + ) : ( - + )}
      {title} @@ -124,12 +153,12 @@ const GridItem = ({ ) } -const BoxGrid = ({ items }) => { +const BoxGrid: React.FC = ({ items }) => { const [indexOpen, setOpenIndex] = useState(0) return ( - {items.map((item, idx) => { + {items.map((item, idx: number) => { let columnNumber = idx + 1 if (columnNumber > 4) { columnNumber = columnNumber - 3 From a8f2e1da81c38b7741efdcc0a595105fc249e85f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 11 Jun 2022 18:45:10 -0700 Subject: [PATCH 050/244] updates markdown /sharding links --- src/content/community/research/index.md | 2 +- .../translation-program/content-buckets/index.md | 2 +- src/content/developers/docs/scaling/index.md | 2 +- src/content/developers/docs/scaling/plasma/index.md | 2 +- src/content/nft/index.md | 2 +- src/content/translations/ar/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ar/upgrades/merge/index.md | 2 +- .../ar/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/bg/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/bg/upgrades/merge/index.md | 2 +- .../bg/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/ca/nft/index.md | 2 +- src/content/translations/ca/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ca/upgrades/merge/index.md | 2 +- .../ca/upgrades/{shard-chains => sharding}/index.md | 0 .../de/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/de/developers/docs/scaling/index.md | 2 +- src/content/translations/de/nft/index.md | 2 +- src/content/translations/de/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/de/upgrades/merge/index.md | 2 +- .../de/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/el/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/el/upgrades/merge/index.md | 6 +++--- .../el/upgrades/{shard-chains => sharding}/index.md | 0 .../es/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- src/content/translations/es/nft/index.md | 2 +- src/content/translations/es/upgrades/beacon-chain/index.md | 4 ++-- src/content/translations/es/upgrades/merge/index.md | 2 +- .../es/upgrades/{shard-chains => sharding}/index.md | 0 .../fa/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- src/content/translations/fa/nft/index.md | 2 +- src/content/translations/fa/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/fa/upgrades/merge/index.md | 2 +- .../fa/upgrades/{shard-chains => sharding}/index.md | 0 .../fr/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/fr/developers/docs/scaling/index.md | 2 +- src/content/translations/fr/nft/index.md | 2 +- src/content/translations/fr/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/fr/upgrades/merge/index.md | 2 +- .../fr/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/hi/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/hi/upgrades/merge/index.md | 4 ++-- .../hi/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/hr/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/hr/upgrades/merge/index.md | 4 ++-- .../hr/upgrades/{shard-chains => sharding}/index.md | 0 .../hu/developers/docs/consensus-mechanisms/pos/index.md | 2 +- src/content/translations/hu/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/hu/upgrades/merge/index.md | 4 ++-- .../hu/upgrades/{shard-chains => sharding}/index.md | 0 .../id/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/id/developers/docs/scaling/index.md | 2 +- src/content/translations/id/nft/index.md | 2 +- src/content/translations/id/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/id/upgrades/merge/index.md | 2 +- .../id/upgrades/{shard-chains => sharding}/index.md | 0 .../it/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/it/developers/docs/scaling/index.md | 2 +- src/content/translations/it/nft/index.md | 2 +- src/content/translations/it/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/it/upgrades/merge/index.md | 2 +- .../it/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/ja/nft/index.md | 2 +- src/content/translations/ja/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ja/upgrades/merge/index.md | 2 +- .../ja/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/ml/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ml/upgrades/merge/index.md | 4 ++-- .../ml/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/nl/nft/index.md | 2 +- src/content/translations/nl/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/nl/upgrades/merge/index.md | 2 +- .../nl/upgrades/{shard-chains => sharding}/index.md | 0 .../pl/developers/docs/consensus-mechanisms/pos/index.md | 2 +- .../translations/pl/developers/docs/scaling/index.md | 2 +- src/content/translations/pl/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/pl/upgrades/merge/index.md | 4 ++-- .../pl/upgrades/{shard-chains => sharding}/index.md | 0 .../pt-br/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- src/content/translations/pt-br/nft/index.md | 2 +- .../translations/pt-br/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/pt-br/upgrades/merge/index.md | 2 +- .../pt-br/upgrades/{shard-chains => sharding}/index.md | 0 .../ro/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/ro/developers/docs/scaling/index.md | 2 +- src/content/translations/ro/nft/index.md | 2 +- src/content/translations/ro/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ro/upgrades/merge/index.md | 2 +- .../ro/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/ru/nft/index.md | 2 +- src/content/translations/ru/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/ru/upgrades/merge/index.md | 2 +- .../ru/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/sl/nft/index.md | 2 +- src/content/translations/sl/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/sl/upgrades/merge/index.md | 2 +- .../sl/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/sw/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/sw/upgrades/merge/index.md | 2 +- .../sw/upgrades/{shard-chains => sharding}/index.md | 0 .../tr/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/tr/developers/docs/scaling/index.md | 2 +- src/content/translations/tr/nft/index.md | 2 +- src/content/translations/tr/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/tr/upgrades/merge/index.md | 2 +- .../tr/upgrades/{shard-chains => sharding}/index.md | 0 src/content/translations/uk/nft/index.md | 2 +- src/content/translations/uk/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/uk/upgrades/merge/index.md | 2 +- .../uk/upgrades/{shard-chains => sharding}/index.md | 0 .../zh/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- .../translations/zh/developers/docs/scaling/index.md | 2 +- src/content/translations/zh/nft/index.md | 2 +- src/content/translations/zh/upgrades/beacon-chain/index.md | 6 +++--- src/content/translations/zh/upgrades/merge/index.md | 2 +- .../zh/upgrades/{shard-chains => sharding}/index.md | 0 src/content/upgrades/beacon-chain/index.md | 6 +++--- src/content/upgrades/merge/index.md | 2 +- 118 files changed, 161 insertions(+), 161 deletions(-) rename src/content/translations/ar/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/bg/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/ca/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/de/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/el/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/es/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/fa/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/fr/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/hi/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/hr/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/hu/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/id/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/it/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/ja/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/ml/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/nl/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/pl/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/pt-br/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/ro/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/ru/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/sl/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/sw/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/tr/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/uk/upgrades/{shard-chains => sharding}/index.md (100%) rename src/content/translations/zh/upgrades/{shard-chains => sharding}/index.md (100%) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e83a396b38c..a6f3a91f345 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -134,7 +134,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Background reading {#background-reading-4} -- [Introduction to Ethereum sharding](/upgrades/shard-chains/) +- [Introduction to Ethereum sharding](/upgrades/sharding/) - [Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - [Bankless Danksharding video](https://www.youtube.com/watch?v=N5p0TB77flM) - [Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) diff --git a/src/content/contributing/translation-program/content-buckets/index.md b/src/content/contributing/translation-program/content-buckets/index.md index 62b6f841a50..dcbc9544936 100644 --- a/src/content/contributing/translation-program/content-buckets/index.md +++ b/src/content/contributing/translation-program/content-buckets/index.md @@ -49,7 +49,7 @@ Below is a breakdown of the website pages each content bucket contains. - [Ethereum vision](/upgrades/vision/) - [The Beacon Chain](/upgrades/beacon-chain/) - [The Merge](/upgrades/merge/) -- [Shard chains](/upgrades/shard-chains/) +- [Shard chains](/upgrades/sharding/) - [Staking](/staking/) - [Ethereum upgrades get involved](/upgrades/get-involved/) - [Consensus layer bug bounty](/upgrades/bug-bounty/) diff --git a/src/content/developers/docs/scaling/index.md b/src/content/developers/docs/scaling/index.md index 625611f825d..6378d78320c 100644 --- a/src/content/developers/docs/scaling/index.md +++ b/src/content/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ This method of scaling requires changes to the Ethereum protocol (layer 1 [Mainn Sharding is the process of splitting a database horizontally to spread the load. In an Ethereum context, sharding will reduce network congestion and increase transactions per second by creating new chains, known as “shards.” This will also lighten the load for each validator who will no longer be required to process the entirety of all transactions across the network. -Learn more about [sharding](/upgrades/shard-chains/). +Learn more about [sharding](/upgrades/sharding/). ## Off-chain scaling {#off-chain-scaling} diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index 0adcaadb792..8c879e0b883 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -36,7 +36,7 @@ Conversely, plasma chains derive their security from Mainnet. This makes them me ### Plasma vs sharding {#plasma-vs-sharding} -Both plasma chains and [shard chains](/upgrades/shard-chains/) periodically publish cryptographic proofs to Ethereum Mainnet. However, both have different security properties. +Both plasma chains and [shard chains](/upgrades/sharding/) periodically publish cryptographic proofs to Ethereum Mainnet. However, both have different security properties. Shard chains commit "collation headers" to Mainnet containing detailed information about each data shard. Nodes on Mainnet verify and enforce the validity of data shards, reducing the possibility of invalid shard transitions and protecting the network against malicious activity. diff --git a/src/content/nft/index.md b/src/content/nft/index.md index e7da18f0d9d..c2fc1491b23 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -408,7 +408,7 @@ It's estimated that scalability upgrades will allow the network to process betwe [Vitalik Buterin on transactions per second potential with sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) -At the bare minimum, sharding will allow 64 times the amount of transactions as today which sits at around 15 transactions. That's the amount of shard chains (extra data and capacity) being introduced. [More on shard chains](/upgrades/shard-chains/) +At the bare minimum, sharding will allow 64 times the amount of transactions as today which sits at around 15 transactions. That's the amount of shard chains (extra data and capacity) being introduced. [More on shard chains](/upgrades/sharding/) That means we can estimate how long it will take to process 100,000 transactions so we can compare it to the Visa example above. diff --git a/src/content/translations/ar/upgrades/beacon-chain/index.md b/src/content/translations/ar/upgrades/beacon-chain/index.md index 3861775544b..fc3aa1f3be8 100644 --- a/src/content/translations/ar/upgrades/beacon-chain/index.md +++ b/src/content/translations/ar/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: قد تعرفون هذا كـ "المرحلة 0" على خرائ ## ما الذي تفعله السلسلة المُنارة ؟ {#what-does-the-beacon-chain-do} -ستقوم سلسلة المنارة بإدارة أو تنسيق الشبكة الموسعة من [الأجزاء](/upgrades/shard-chains/) و[المراهنين](/staking/). لكن لن تكون مشابهة لـ[شبكة إثيريوم الرئيسية](/glossary/#mainnet) لليوم. لا يمكنها التعامل مع الحسابات أو العقود الذكية. +ستقوم سلسلة المنارة بإدارة أو تنسيق الشبكة الموسعة من [الأجزاء](/upgrades/sharding/) و[المراهنين](/staking/). لكن لن تكون مشابهة لـ[شبكة إثيريوم الرئيسية](/glossary/#mainnet) لليوم. لا يمكنها التعامل مع الحسابات أو العقود الذكية. سوف يتغير دور سلسلة المنارة بِمرور الوقت ولكنه عنصر أساسي لـ[ إثيريوم الآمن والمستدام والقابل للتطور الذي نعمل من أجله](/upgrades/vision/). @@ -33,7 +33,7 @@ summaryPoint4: قد تعرفون هذا كـ "المرحلة 0" على خرائ إذا كنت مهتمًا بأن تصبح مدققًا وتساعد على تأمين سلسلة المنارة، فتعلم المزيد عن تجميد العملات. -و هذا ايضًا تغيير مهم لترقية "Eth2" أخرى [سلسلة الأجزاء](/upgrades/shard-chains/). +و هذا ايضًا تغيير مهم لترقية "Eth2" أخرى [سلسلة الأجزاء](/upgrades/sharding/). ### إعداد سلسلة الأجزاء {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ summaryPoint4: قد تعرفون هذا كـ "المرحلة 0" على خرائ ولا يمكن لسلاسل الأجزاء أن تدخل إلى منظومة إثيريوم إلا بأمان، مع وجود آلية إجماع لإثبات الحصة. سلسلة المنارة سوف تقدم عملية تجميد عملات، مما يمهد الطريق أمام ترقية سلسلة الأجزاء لتتبعها. - + سلاسل الأجزاء diff --git a/src/content/translations/ar/upgrades/merge/index.md b/src/content/translations/ar/upgrades/merge/index.md index 1398d6b7aec..d5b6cde6a34 100644 --- a/src/content/translations/ar/upgrades/merge/index.md +++ b/src/content/translations/ar/upgrades/merge/index.md @@ -59,6 +59,6 @@ summaryPoint4: أشرنا إلى هذا سابقًا "بالإرساء". سيكون هذا تقييمًا متواصلاً من طرف المجتمع بخصوص الحاجة الى عدة حلقات من سلسة الأحزاء لتحقيق قابلية اتساع غير متناهية. - + سلاسل قطع diff --git a/src/content/translations/ar/upgrades/shard-chains/index.md b/src/content/translations/ar/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ar/upgrades/shard-chains/index.md rename to src/content/translations/ar/upgrades/sharding/index.md diff --git a/src/content/translations/bg/upgrades/beacon-chain/index.md b/src/content/translations/bg/upgrades/beacon-chain/index.md index fbb95e2a7fc..d5b0b4f9385 100644 --- a/src/content/translations/bg/upgrades/beacon-chain/index.md +++ b/src/content/translations/bg/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Това може да ви познато като „Фаза 0 ## Какво прави Сигналната верига? {#what-does-the-beacon-chain-do} -Сигналната верига ще ръководи или координира разширената мрежа на [фрагменти](/upgrades/shard-chains/) и [залагащи](/staking/). Но това няма да бъде същото като [основната мрежа на Етереум ](/glossary/#mainnet) към днешна дата. Тя не може да се справя с акаунтите и умните договори. +Сигналната верига ще ръководи или координира разширената мрежа на [фрагменти](/upgrades/sharding/) и [залагащи](/staking/). Но това няма да бъде същото като [основната мрежа на Етереум ](/glossary/#mainnet) към днешна дата. Тя не може да се справя с акаунтите и умните договори. Ролята на Сигналната верига ще се променя с времето, но тя е основна част на [сигурния, устойчив и разширяващ се Етереум, върху който работим](/upgrades/vision/). @@ -33,7 +33,7 @@ summaryPoint4: Това може да ви познато като „Фаза 0 Ако се интересувате как да станете валидатор и да помогнете в осигуряването на Сигналната верига, научете повече за залагането. -Това е и важна промяна за друга надстройка на Eth2: [вериги от компоненти](/upgrades/shard-chains/). +Това е и важна промяна за друга надстройка на Eth2: [вериги от компоненти](/upgrades/sharding/). ### Настройки за веригите от компоненти {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ summaryPoint4: Това може да ви познато като „Фаза 0 Веригите от компоненти могат безопасно да влязат в екосистемата на Етереум само чрез съществуващ механизъм на консесус при доказателство-за-залог. Сигналната верига ще активира залагането и така ще проправи пътя за следващата надстройка на веригата от компоненти. -Вериги от компоненти +Вериги от компоненти diff --git a/src/content/translations/bg/upgrades/merge/index.md b/src/content/translations/bg/upgrades/merge/index.md index e8ab1a90a8c..11a60cfd6cf 100644 --- a/src/content/translations/bg/upgrades/merge/index.md +++ b/src/content/translations/bg/upgrades/merge/index.md @@ -57,4 +57,4 @@ summaryPoint4: По-рано наричахме това „прикрепван Това ще бъде една дълготрайна задача пред общността, имайки предвид нуждата от потенциално многократни повторения на веригите от компоненти с цел едно безкрайно разширяване. -Вериги от компоненти +Вериги от компоненти diff --git a/src/content/translations/bg/upgrades/shard-chains/index.md b/src/content/translations/bg/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/bg/upgrades/shard-chains/index.md rename to src/content/translations/bg/upgrades/sharding/index.md diff --git a/src/content/translations/ca/nft/index.md b/src/content/translations/ca/nft/index.md index 35bf5ccb859..a08976dbf34 100644 --- a/src/content/translations/ca/nft/index.md +++ b/src/content/translations/ca/nft/index.md @@ -406,7 +406,7 @@ S'estima que les millores en l'escalabilitat permetran la xarxa processar entre [Vitalik Buterin parla sobre el potencial de les transaccions per segon amb la fragmentació](https://twitter.com/VitalikButerin/status/1312905884549300224) -Amb un mínim, la fragmentació permetrà una quantitat de transaccions multiplicada per 64 en comparació amb les que es fan avui en dia que ronden les 15. Aquesta és la quantitat de cadenes fragmentades (capacitat i dades extra) que s'han introduït. [Més informació sobre les cadenes de fragments](/upgrades/shard-chains/) +Amb un mínim, la fragmentació permetrà una quantitat de transaccions multiplicada per 64 en comparació amb les que es fan avui en dia que ronden les 15. Aquesta és la quantitat de cadenes fragmentades (capacitat i dades extra) que s'han introduït. [Més informació sobre les cadenes de fragments](/upgrades/sharding/) Això vol dir que podem estimar quant es trigaria a processar 100.000 transaccions per poder comparar-ho amb l'exemple de Visa esmentat. diff --git a/src/content/translations/ca/upgrades/beacon-chain/index.md b/src/content/translations/ca/upgrades/beacon-chain/index.md index 974de271baf..4ce01f6c098 100644 --- a/src/content/translations/ca/upgrades/beacon-chain/index.md +++ b/src/content/translations/ca/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Potser, això, ho coneixeu com la "Fase 0" dels mapes tècnics. ## Què fa la cadena de balisa? {#what-does-the-beacon-chain-do} -La cadena de balisa dirigirà o coordinarà l'expansió de la xarxa de [fragments](/upgrades/shard-chains/) i [participants](/staking/). Però no serà com [la xarxa principal d'Ethereum](/glossary/#mainnet) d'avui en dia. No pot gestionar comptes o contractes intel·ligents. +La cadena de balisa dirigirà o coordinarà l'expansió de la xarxa de [fragments](/upgrades/sharding/) i [participants](/staking/). Però no serà com [la xarxa principal d'Ethereum](/glossary/#mainnet) d'avui en dia. No pot gestionar comptes o contractes intel·ligents. El rol de la cadena de balisa canviarà amb el pas del temps, però és un element fonamental de [l'Ethereum segur, sostenible i escalable per la qual treballem](/upgrades/vision/). @@ -33,7 +33,7 @@ Apostar i convertir-se en validador és més senzill que [minar](/developers/doc Si us interessa ser validador i contribuir a protegir la cadena de balisa, aquí podeu aprendre més sobre les apostes. -Això és un canvi important per una altra millora:[les cadenes de fragments](/upgrades/shard-chains/). +Això és un canvi important per una altra millora:[les cadenes de fragments](/upgrades/sharding/). ### Configuració de les cadenes de fragments {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ En un principi, la cadena de balisa serà independent de la xarxa principal d'Et Les cadenes de fragments només poden entrar de forma segura a l'ecosistema Ethereum si existeix un mecanisme de consens de prova de participació. La cadena de balisa introduirà l'aposta i aplanarà el camí a la futura introducció de la cadena de fragments. - + Cadenes de fragments diff --git a/src/content/translations/ca/upgrades/merge/index.md b/src/content/translations/ca/upgrades/merge/index.md index 414a798f408..48e531e66c3 100644 --- a/src/content/translations/ca/upgrades/merge/index.md +++ b/src/content/translations/ca/upgrades/merge/index.md @@ -59,7 +59,7 @@ Originalment, el pla era treballar en cadenes de fragments abans de La Fusió, p La comunitat avaluarà de forma contínua la necessitat de múltiples rondes de cadenes de fragments per permetre una escalabilitat infinita. - + Cadenes de fragments diff --git a/src/content/translations/ca/upgrades/shard-chains/index.md b/src/content/translations/ca/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ca/upgrades/shard-chains/index.md rename to src/content/translations/ca/upgrades/sharding/index.md diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md index ea5bb629253..ed636a72728 100644 --- a/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ Proof-of-Stake kommt mit einer Anzahl an Verbesserungen zum Proof-of-Work-System - bessere Energieeffizienz – weniger Energieaufwand für das Minen (Schürfen) von Blöcken - weniger Hindernisse für den Einstieg, zeduziert Hardwareanforderungen – Du brauchst keine Elite-Hardware, um neue Blöcke zu erstellen - stärkere Immunität gegen die Zentralisierung – Proof-of-Stake sollte zu mehr Nodes im Netzwerk führen -- stärkere Unterstützung für [Shard Chains](/upgrades/shard-chains/) – ein wichtiges Upgrade bei der Skalierung des Ethereum-Netzwerks +- stärkere Unterstützung für [Shard Chains](/upgrades/sharding/) – ein wichtiges Upgrade bei der Skalierung des Ethereum-Netzwerks ## Proof-of-Stake, Staking und Validatoren {#pos-staking-validators} @@ -37,7 +37,7 @@ Wenn du bösartige Blöcke attestierst, verlierst du deinen Einsatz. ### Die Beacon Chain {#the-beacon-chain} -Wenn Ethereum den Proof-of-Work durch den Proof-of-Stake ersetzt, wird es zusätzlich die Komplexität von [Shard-Chains](/upgrades/shard-chains/) geben. Das sind separate Blockchains, die Validatoren benötigen, um Transaktionen zu verarbeiten und neue Blöcke zu erstellen. Der Plan sind 64 Scherben-Ketten, die alle ein geteiltes Verständnis vom Status des Netzwerks haben. Daher ist eine zusätzliche Koordination notwendig, die von [der Beacon Chain](/upgrades/beacon-chain/) übernommen wird. +Wenn Ethereum den Proof-of-Work durch den Proof-of-Stake ersetzt, wird es zusätzlich die Komplexität von [Shard-Chains](/upgrades/sharding/) geben. Das sind separate Blockchains, die Validatoren benötigen, um Transaktionen zu verarbeiten und neue Blöcke zu erstellen. Der Plan sind 64 Scherben-Ketten, die alle ein geteiltes Verständnis vom Status des Netzwerks haben. Daher ist eine zusätzliche Koordination notwendig, die von [der Beacon Chain](/upgrades/beacon-chain/) übernommen wird. Die Beacon Chain erhält Statusinformationen von den Fragmenten und stellt sie für die anderen Fragmente zur Verfügung, so dass das Netzwerken synchronisiert bleiben kann. Die Beacon Chain verwaltet auch die Validatoren, von der Registrierung ihrer Einlagen bis hin zur Verteilung ihrer Belohnungen und Strafen. diff --git a/src/content/translations/de/developers/docs/scaling/index.md b/src/content/translations/de/developers/docs/scaling/index.md index b53a5defdde..3f1a550016f 100644 --- a/src/content/translations/de/developers/docs/scaling/index.md +++ b/src/content/translations/de/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ Diese Methode der Skalierung erfordert Änderungen am Ethereum-Protokoll (Layer Unter Sharding versteht man die horizontale Aufteilung einer Datenbank, um die Last zu verteilen. Im Ethereum-Kontext wird das Sharding die Netzwerküberlastung reduzieren und die Transaktionen pro Sekunde erhöhen, indem neue Ketten, die sogenannten „Shards", geschaffen werden. Dies entlastet auch die einzelnen Prüfer, die nicht mehr die Gesamtheit aller Transaktionen im Netz bearbeiten müssen. -Erfahren Sie mehr über [Sharding](/upgrades/shard-chains/). +Erfahren Sie mehr über [Sharding](/upgrades/sharding/). ## Off-Chain-Skalierung {#off-chain-scaling} diff --git a/src/content/translations/de/nft/index.md b/src/content/translations/de/nft/index.md index bf876176d9d..cd14e97be66 100644 --- a/src/content/translations/de/nft/index.md +++ b/src/content/translations/de/nft/index.md @@ -406,7 +406,7 @@ Schätzungen zufolge ermöglichen Upgrades an der Skalierbarkeit dem Netzwerk, z [Vitalik Buterin über das Potenzial für Transaktionen pro Sekunde mit Sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) -Sharding wird mindestens 64-fache Beschleunigung der derzeitigen Transkationszahlen pro Sekunde ermöglichen, die aktuell bei 15 liegt. Das ist die Menge der Shard Chains (zusätzliche Daten und Kapazität), die eingeführt werden. [Mehr zu Shard-Chains](/upgrades/shard-chains/) +Sharding wird mindestens 64-fache Beschleunigung der derzeitigen Transkationszahlen pro Sekunde ermöglichen, die aktuell bei 15 liegt. Das ist die Menge der Shard Chains (zusätzliche Daten und Kapazität), die eingeführt werden. [Mehr zu Shard-Chains](/upgrades/sharding/) Damit können wir abschätzen, wie lange die Verarbeitung von 100.000 Transaktionen dauert, und das ermöglicht den Vergleich mit dem Visa-Beispiel oben. diff --git a/src/content/translations/de/upgrades/beacon-chain/index.md b/src/content/translations/de/upgrades/beacon-chain/index.md index d2ba5fc7e39..d08aa634af2 100644 --- a/src/content/translations/de/upgrades/beacon-chain/index.md +++ b/src/content/translations/de/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Sie kennen das möglicherweise als „Phase 0“ in technischen D ## Welche Funktion hat die Beacon Chain? {#what-does-the-beacon-chain-do} -Die Beacon Chain übernimmt die Koordination und Verknüpfung des Netzwerks der [Shards](/upgrades/shard-chains/) und [Staker](/staking/). Aber sie ist nicht mit dem [Ethereum-Mainnet](/glossary/#mainnet) von heute vergleichbar, da sie keine Konten oder Smart Contracts verarbeitet. +Die Beacon Chain übernimmt die Koordination und Verknüpfung des Netzwerks der [Shards](/upgrades/sharding/) und [Staker](/staking/). Aber sie ist nicht mit dem [Ethereum-Mainnet](/glossary/#mainnet) von heute vergleichbar, da sie keine Konten oder Smart Contracts verarbeitet. Mit der Zeit können sich Aufgabe und Rolle der Beacon Chain zwar verändern, sie ist jedoch ein fundamentaler Baustein für das [sichere, nachhaltige und skalierbare Ethereum der Zukunft](/upgrades/vision/). @@ -33,7 +33,7 @@ Das Staking als Validator ist einfacher, als das [Mining](/developers/docs/minin Wenn Sie Interesse haben, die Beacon Chain als Validator sicherer zu machen, können Sie hier mehr über das Staking lernen. -Das ist auch eine wichtige Änderung für ein anderes Upgrade: [Shard Chains](/upgrades/shard-chains/). +Das ist auch eine wichtige Änderung für ein anderes Upgrade: [Shard Chains](/upgrades/sharding/). ### Vorbereitung für Shard Chains {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ Die Beacon Chain wird zunächst getrennt vom Ethereum-Mainnet existieren, welche Shard Chains können nur dann sicher ins Ethereum-Netzwerk eingeführt werden, wenn ein funktionierender Proof-of-Stake-Konsensmechanismus bereits etabliert ist. Mit der Beacon Chain wird Staking eingeführt, wodurch der Weg für das Shard Chains-Upgrade geebnet wird. - + Shard Chains diff --git a/src/content/translations/de/upgrades/merge/index.md b/src/content/translations/de/upgrades/merge/index.md index 051d127a1b3..aace633e797 100644 --- a/src/content/translations/de/upgrades/merge/index.md +++ b/src/content/translations/de/upgrades/merge/index.md @@ -59,7 +59,7 @@ Ursprünglich war geplant, vor der Zusammenführung an Shard Chains zu arbeiten, Hier wird eine fortlaufende Bewertung der Gemeinschaft geben, ob ggf. mehrere Runden von Shard Chains erforderlich werden, um eine unbegrenzte Skalierbarkeit zu ermöglichen. - + Shard Chains diff --git a/src/content/translations/de/upgrades/shard-chains/index.md b/src/content/translations/de/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/de/upgrades/shard-chains/index.md rename to src/content/translations/de/upgrades/sharding/index.md diff --git a/src/content/translations/el/upgrades/beacon-chain/index.md b/src/content/translations/el/upgrades/beacon-chain/index.md index 5f9d47a32cf..bbad6a1e5b6 100644 --- a/src/content/translations/el/upgrades/beacon-chain/index.md +++ b/src/content/translations/el/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Μπορεί να το γνωρίζετε αυτό ως "Φάση ## Τι ακριβώς κάνει η κύρια αλυσίδα; {#what-does-the-beacon-chain-do} -Η κύρια αλυσίδα θα διεξάγει ή θα συντονίζει το διευρυμένο δίκτυο των [shards](/upgrades/shard-chains/) και των [stakers](/staking/). Αλλά δεν θα είναι όπως το σημερινό [κεντρικό δίκτυο του Ethereum](/glossary/#mainnet). Δεν μπορεί να χειριστεί λογαριασμούς ή έξυπνα συμβόλαια. +Η κύρια αλυσίδα θα διεξάγει ή θα συντονίζει το διευρυμένο δίκτυο των [shards](/upgrades/sharding/) και των [stakers](/staking/). Αλλά δεν θα είναι όπως το σημερινό [κεντρικό δίκτυο του Ethereum](/glossary/#mainnet). Δεν μπορεί να χειριστεί λογαριασμούς ή έξυπνα συμβόλαια. Ο ρόλος της κύρια αλυσίδας θα αλλάξει με την πάροδο του χρόνου, αλλά είναι ένα θεμελιώδες συστατικό για [ένα ασφαλές, βιώσιμο και κλιμακούμενο Ethereum προς το οποίο εργαζόμαστε](/upgrades/vision/). @@ -33,7 +33,7 @@ summaryPoint4: Μπορεί να το γνωρίζετε αυτό ως "Φάση Αν ενδιαφέρεστε να γίνετε επικυρωτής και να βοηθήσετε στην ασφάλιση του Beacon Chain, μάθετε περισσότερα για το staking. -Αυτή είναι επίσης μια σημαντική αλλαγή για τη δεύτερη αναβάθμιση Eth2: [shard chains](/upgrades/shard-chains/). +Αυτή είναι επίσης μια σημαντική αλλαγή για τη δεύτερη αναβάθμιση Eth2: [shard chains](/upgrades/sharding/). ### Ρύθμιση για τις shard chains {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ summaryPoint4: Μπορεί να το γνωρίζετε αυτό ως "Φάση Οι Shard chains μπορούν να εισέλθουν με ασφάλεια στο οικοσύστημα του Ethereum μόνο με έναν μηχανισμό επαλήθευσης (proof-of-stake). Η κύρια αλυσίδα θα εισαγάγει το staking, ανοίγοντας το δρόμο για την αναβάθμιση της shard chain. -Shard chains +Shard chains diff --git a/src/content/translations/el/upgrades/merge/index.md b/src/content/translations/el/upgrades/merge/index.md index 1c570640ec1..928905b060d 100644 --- a/src/content/translations/el/upgrades/merge/index.md +++ b/src/content/translations/el/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: Μπορεί να το γνωρίζετε αυτό ως "Φάση ## Ποια είναι η ενσωμάτωση; {#what-is-the-docking} -Είναι σημαντικό να θυμόμαστε ότι αρχικά, οι υπόλοιπες αναβαθμίσεις του Eth2 αποστέλλονται ξεχωριστά από το [κεντρικό δίκτυο](/glossary/#mainnet) - την αλυσίδα (chain) που χρησιμοποιούμε σήμερα. Το κεντρικό δίκτυο του Ethereum θα συνεχίσει να ασφαλίζεται με το λεγόμενο [proof-of-work](/developers/docs/consensus-mechanisms/pow/), ακόμη και όταν [η Beacon Chain](/upgrades/beacon-chain/) και οι [shard chains](/upgrades/shard-chains/) θα εκτελούνται παράλληλα χρησιμοποιώντας το [proof of stake](/developers/docs/consensus-mechanisms/pos/). Η ενσωμάτωση θα πραγματοποιηθεί όταν αυτά τα δύο συστήματα θα συγχωνευτούν. +Είναι σημαντικό να θυμόμαστε ότι αρχικά, οι υπόλοιπες αναβαθμίσεις του Eth2 αποστέλλονται ξεχωριστά από το [κεντρικό δίκτυο](/glossary/#mainnet) - την αλυσίδα (chain) που χρησιμοποιούμε σήμερα. Το κεντρικό δίκτυο του Ethereum θα συνεχίσει να ασφαλίζεται με το λεγόμενο [proof-of-work](/developers/docs/consensus-mechanisms/pow/), ακόμη και όταν [η Beacon Chain](/upgrades/beacon-chain/) και οι [shard chains](/upgrades/sharding/) θα εκτελούνται παράλληλα χρησιμοποιώντας το [proof of stake](/developers/docs/consensus-mechanisms/pos/). Η ενσωμάτωση θα πραγματοποιηθεί όταν αυτά τα δύο συστήματα θα συγχωνευτούν. Φανταστείτε το Ethereum να είναι ένα διαστημόπλοιο που δεν είναι αρκετά έτοιμο για ένα διαστρικό ταξίδι του. Με την Beacon Chain και τις shard chains η κοινότητα έχει χτίσει ένα νέο κινητήρα και ένα ποιο ανθεκτικό κύτος. Όταν έρθει η ώρα, το διαστημόπλοιο θα προσγειωθεί με αυτό το νέο σύστημα, έτσι ώστε να μπορεί να καταστεί έτοιμο να τεθεί σε σοβαρά έτη φωτός και να επικρατήσει στο σύμπαν. @@ -43,6 +43,6 @@ summaryPoint4: Μπορεί να το γνωρίζετε αυτό ως "Φάση ### Η ενσωμάτωση και οι shard chains {#docking-and-shard-chains} -Με το κεντρικό δίκτυο να γίνεται ένα shard, η επιτυχής εφαρμογή των shard chains είναι κρίσιμη για αυτή την αναβάθμιση. Είναι πιθανό η μετάβαση να διαδραματίσει σημαντικό ρόλο βοηθώντας την κοινότητα να αποφασίσει αν θα ξεκινήσει μια δεύτερη αναβάθμιση για το sharding. Αυτή η αναβάθμιση θα κάνει τα άλλα shards όπως το Mainnet: θα είναι σε θέση να χειριστεί συναλλαγές και Smart Contract και όχι μόνο να παρέχει περισσότερα δεδομένα.Shard chains +Με το κεντρικό δίκτυο να γίνεται ένα shard, η επιτυχής εφαρμογή των shard chains είναι κρίσιμη για αυτή την αναβάθμιση. Είναι πιθανό η μετάβαση να διαδραματίσει σημαντικό ρόλο βοηθώντας την κοινότητα να αποφασίσει αν θα ξεκινήσει μια δεύτερη αναβάθμιση για το sharding. Αυτή η αναβάθμιση θα κάνει τα άλλα shards όπως το Mainnet: θα είναι σε θέση να χειριστεί συναλλαγές και Smart Contract και όχι μόνο να παρέχει περισσότερα δεδομένα.Shard chains -Shard chains +Shard chains diff --git a/src/content/translations/el/upgrades/shard-chains/index.md b/src/content/translations/el/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/el/upgrades/shard-chains/index.md rename to src/content/translations/el/upgrades/sharding/index.md diff --git a/src/content/translations/es/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/es/developers/docs/consensus-mechanisms/pos/index.md index 4c35e88f46d..c90f061b8a0 100644 --- a/src/content/translations/es/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/es/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ La Prueba de participación incluye una serie de mejoras para el sistema de Prue - Mejor eficiencia energética: no necesitas usar mucha energía para minar los bloques - Barreras de entrada más bajas, requisitos de hardware reducidos: no necesitas hardware de primer nivel para tener una oportunidad de crear nuevos bloques - Mayor inmunidad a la centralización: la Prueba de participación debería conducir a la existencia de más nodos en la red -- mayor soporte para la [cadena de fragmentos](/upgrades/shard-chains/) – una mejora clave en la escala de la red Ethereum +- mayor soporte para la [cadena de fragmentos](/upgrades/sharding/) – una mejora clave en la escala de la red Ethereum ## Prueba de participación, staking (apuestas) y validadores {#pos-staking-validators} @@ -37,7 +37,7 @@ Si certificas bloques maliciosos, perderás tu apuesta. ### La cadena de baliza (blockchain) {#the-beacon-chain} -Cuando en Ethereum se reemplaza la prueba de trabajo por la prueba de participación, se añade la complejidad de las [cadenas de fragmentos](/upgrades/shard-chains/). Se trata de cadenas de valores independientes que necesitarán validadores para procesar las transacciones y crear nuevos bloques. El plan es disponer de 64 cadenas fragmentadas y todos necesitan comprender cuál es el estado de la red. Como consecuencia, se necesita una coordinación adicional, la cual se realizará mediante [la cadena de baliza](/upgrades/beacon-chain/). +Cuando en Ethereum se reemplaza la prueba de trabajo por la prueba de participación, se añade la complejidad de las [cadenas de fragmentos](/upgrades/sharding/). Se trata de cadenas de valores independientes que necesitarán validadores para procesar las transacciones y crear nuevos bloques. El plan es disponer de 64 cadenas fragmentadas y todos necesitan comprender cuál es el estado de la red. Como consecuencia, se necesita una coordinación adicional, la cual se realizará mediante [la cadena de baliza](/upgrades/beacon-chain/). La cadena de baliza recibe la información del estado de los fragmentos y la hace disponible para otros fragmentos para que, de este modo, la red pueda permanecer sincronizada. La cadena de baliza también gestionará a los validadores, desde el registro de los depósitos de sus apuestas hasta la emisión de sus recompensas y penalizaciones. diff --git a/src/content/translations/es/nft/index.md b/src/content/translations/es/nft/index.md index e993061e8f5..a15f496e453 100644 --- a/src/content/translations/es/nft/index.md +++ b/src/content/translations/es/nft/index.md @@ -406,7 +406,7 @@ Se calcula que las actualizaciones de escalabilidad podrán permitir que la red [Vitalik Buterin sobre el potencial de las transacciones por segundo con la fragmentación](https://twitter.com/VitalikButerin/status/1312905884549300224) -Como mínimo, fraccionar permitirá aumentar 64 veces la cantidad de transacciones, que en la actualidad se sitúa en alrededor de 15 transacciones. Esa es la cantidad de cadenas de fragmentación (datos y capacidad adicionales) que se están introduciendo. [Más información sobre las cadenas de fragmentación](/upgrades/shard-chains/) +Como mínimo, fraccionar permitirá aumentar 64 veces la cantidad de transacciones, que en la actualidad se sitúa en alrededor de 15 transacciones. Esa es la cantidad de cadenas de fragmentación (datos y capacidad adicionales) que se están introduciendo. [Más información sobre las cadenas de fragmentación](/upgrades/sharding/) Eso significa que podemos estimar cuánto tiempo llevará procesar 100.000 transacciones para poder compararlo con el ejemplo anterior de Visa. diff --git a/src/content/translations/es/upgrades/beacon-chain/index.md b/src/content/translations/es/upgrades/beacon-chain/index.md index 61d2d11225b..61699e679f9 100644 --- a/src/content/translations/es/upgrades/beacon-chain/index.md +++ b/src/content/translations/es/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Puede que se describa como «Fase 0» en las hojas de ruta técni ## ¿Qué hace la cadena de baliza? {#what-does-the-beacon-chain-do} -La cadena de baliza conducirá o coordinará la expansión de la red de [fragmentos](/upgrades/shard-chains/) y [participantes](/staking/). Pero no será como la [red principal de Ethereum](/glossary/#mainnet) de hoy en día: no puede manejar cuentas o contratos inteligentes. +La cadena de baliza conducirá o coordinará la expansión de la red de [fragmentos](/upgrades/sharding/) y [participantes](/staking/). Pero no será como la [red principal de Ethereum](/glossary/#mainnet) de hoy en día: no puede manejar cuentas o contratos inteligentes. La función de la cadena de baliza cambiará con el tiempo, pero es un componente fundamental para lograr el [ Ethereum seguro, sostenible y escalable en el que estamos trabajando](/upgrades/vision/). @@ -57,7 +57,7 @@ La cadena de baliza al principio existirá con independencia de la red principal Las cadenas de fragmentos solo pueden introducirse en el ecosistema Ethereum de manera segura con un mecanismo de consenso de la prueba de participación establecido. La cadena de baliza introducirá la apuesta y allanará el camino a la cadena de fragmentos actualizada que se implementará posteriormente. - + Cadenas de fragmentos diff --git a/src/content/translations/es/upgrades/merge/index.md b/src/content/translations/es/upgrades/merge/index.md index 33eb1c5db1e..e98d6cf6090 100644 --- a/src/content/translations/es/upgrades/merge/index.md +++ b/src/content/translations/es/upgrades/merge/index.md @@ -59,7 +59,7 @@ El plan inicial consistía en trabajar en cadenas de fragmentos antes de la fusi La necesidad de múltiples rondas de cadenas de fragmentos para permitir una escalabilidad infinita será objeto de evaluación continua por parte de la comunidad. - + Cadenas de fragmentos diff --git a/src/content/translations/es/upgrades/shard-chains/index.md b/src/content/translations/es/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/es/upgrades/shard-chains/index.md rename to src/content/translations/es/upgrades/sharding/index.md diff --git a/src/content/translations/fa/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/fa/developers/docs/consensus-mechanisms/pos/index.md index b6c214704ab..92910e56ced 100644 --- a/src/content/translations/fa/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/fa/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ incomplete: true - کارایی انرژی بهتر – نیازی به استفاده از انرژی زیاد برای استخراج بلوک‌ها ندارید - موانع کمتر برای ورود، سخت‌افزار موردنیاز کمتر – برای برخورداری از شانس ساختن بلوک‌های جدید، نیاز به سخت‌افزار عجیب و خاص ندارید - مصونیت بیشتر در برابر متمرکز شدن – اثبات سهام به گره‌های بیشتری در شبکه منجر می‌شود -- پشتیبانی بیشتر برای [خرده‌زنجیره‌ها](/upgrades/shard-chains/) – یک ارتقای مهم در مقیاس‌پذیری شبکه‌ی اتریوم +- پشتیبانی بیشتر برای [خرده‌زنجیره‌ها](/upgrades/sharding/) – یک ارتقای مهم در مقیاس‌پذیری شبکه‌ی اتریوم ## اثبات سهام، سهام‌گذاری و اعتبارسنج‌ها {#pos-staking-validators} @@ -37,7 +37,7 @@ incomplete: true ### زنجیره‌ی بیکن {#the-beacon-chain} -زمانی که اتریوم اثبات سهام را جایگزین اثبات کار کند، پیچیدگی بیشتری به [خرده‌زنجیره‌ها](/upgrades/shard-chains/) اضافه می‌شود. این‌ها زنجیره‌های بلوکی مجزایی هستنند که به اعتبارسنج‌ها برای بررسی تراکنش‌ها و ساختن بلوک‌های جدید نیاز دارند. برنامه این است که 64 خرده‌زنجیره وجود داشته باشد که هر کدام فهم مشترکی از وضعیت شبکه داشته باشند. در نتیجه هماهنگی بیشتری لازم است و این کار توسط [زنجیره‌ی بیکن](/upgrades/beacon-chain/) انجام خواهد شد. +زمانی که اتریوم اثبات سهام را جایگزین اثبات کار کند، پیچیدگی بیشتری به [خرده‌زنجیره‌ها](/upgrades/sharding/) اضافه می‌شود. این‌ها زنجیره‌های بلوکی مجزایی هستنند که به اعتبارسنج‌ها برای بررسی تراکنش‌ها و ساختن بلوک‌های جدید نیاز دارند. برنامه این است که 64 خرده‌زنجیره وجود داشته باشد که هر کدام فهم مشترکی از وضعیت شبکه داشته باشند. در نتیجه هماهنگی بیشتری لازم است و این کار توسط [زنجیره‌ی بیکن](/upgrades/beacon-chain/) انجام خواهد شد. زنجیره‌ی بیکن اطلاعات وضعیت را از خرده‌زنجیره‌ها دریافت کرده و برای بقیه قابل دسترسی می‌کند و به شبکه اجازه‌ی هماهنگی می‌دهد. زنجیره‌ی بیکن همچنین اعتبارسنج‌ها را از سهام‌گذاری سپرده گرفته تا صدور پاداش و جریمه‌ی آن‌ها مدیریت می‌کند. diff --git a/src/content/translations/fa/nft/index.md b/src/content/translations/fa/nft/index.md index 61e46b8106e..6372506316c 100644 --- a/src/content/translations/fa/nft/index.md +++ b/src/content/translations/fa/nft/index.md @@ -406,7 +406,7 @@ _نباید فراموش کرد که اتریوم کاری بیش از تراک [ویتالیک بوترین درباره‌ی پتانسیل تراکنش بر ثانیه‌ با زنجیره‌ای‌سازی](https://twitter.com/VitalikButerin/status/1312905884549300224) -در کمترین حالت، زنجیره‌ای‌سازی حدود 64 برابر مقدار تراکنش‌های امروزی را که حدوداً 15 تراکنش است، ممکن می‌سازد. این مقدارِ زنجیره‌های خردشده (داده‌ها و ظرفیت اضافی) معرفی‌شده است. [اطلاعات بیشتر درباره‌ی زنجیره‌های خردشده](/upgrades/shard-chains/) +در کمترین حالت، زنجیره‌ای‌سازی حدود 64 برابر مقدار تراکنش‌های امروزی را که حدوداً 15 تراکنش است، ممکن می‌سازد. این مقدارِ زنجیره‌های خردشده (داده‌ها و ظرفیت اضافی) معرفی‌شده است. [اطلاعات بیشتر درباره‌ی زنجیره‌های خردشده](/upgrades/sharding/) این یعنی ما می‌توانیم تخمین بزنیم پردازش 100,000 تراکنش چقدر طول خواهد کشید تا بتوانیم آن را با مثال Visa که در بالا ارائه شد، مقایسه کنیم. diff --git a/src/content/translations/fa/upgrades/beacon-chain/index.md b/src/content/translations/fa/upgrades/beacon-chain/index.md index 09d200281e2..6b1239d7632 100644 --- a/src/content/translations/fa/upgrades/beacon-chain/index.md +++ b/src/content/translations/fa/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: احتمالاً شما آن را در نقشه راه فنی ت ## زنجیره بیکن چه می‌کند؟ {#what-does-the-beacon-chain-do} -زنجیره‌ی بیکن شبکه‌ی بسط‌یافته [خرده‌زنجیره‌ها](/upgrades/shard-chains/) و [سهام‌گذارها](/staking/) را هدایت یا هماهنگ می‌کند. اما نظیر[شبکه اصلی اتریوم ](/glossary/#mainnet) امروز نخواهد بود. قابلیت استفاده از حساب های کاربری و قرارداد های هوشمند را ندارد. +زنجیره‌ی بیکن شبکه‌ی بسط‌یافته [خرده‌زنجیره‌ها](/upgrades/sharding/) و [سهام‌گذارها](/staking/) را هدایت یا هماهنگ می‌کند. اما نظیر[شبکه اصلی اتریوم ](/glossary/#mainnet) امروز نخواهد بود. قابلیت استفاده از حساب های کاربری و قرارداد های هوشمند را ندارد. نقش زنجیره‌ی بیکن در طی زمان تغییر می‌کند اما همچنان عنصری بنیادین برای [ اتریوم امن، پایدار و مقیاس پذیری که اکنون داریم به سویش پیش می‌رویم](/upgrades/vision/) باقی می‌ماند. @@ -33,7 +33,7 @@ summaryPoint4: احتمالاً شما آن را در نقشه راه فنی ت اگر به اعتبارسنج شدن و کمک به ایمن‌سازی شبکه‌ی بیکن علاقمند دارید، درباره سهام‌گذاری بیشتر بدانید. -این موضوع هم‌چنین تغییری مهم برای ارتقای دیگری است: [خرده‌زنجیره‌ها](/upgrades/shard-chains/). +این موضوع هم‌چنین تغییری مهم برای ارتقای دیگری است: [خرده‌زنجیره‌ها](/upgrades/sharding/). ### راه اندازی زنجیره های شارد {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ summaryPoint4: احتمالاً شما آن را در نقشه راه فنی ت زنجیره های شارد تنها می‌توانند با داشتن یک مکانیسم توافق مجموعه اثبات مالکیت سهام به شکل ایمن وارد اکوسیستم اتریوم شوند. زنجیره بیکن سهام گذاری را معرفی خواهد کرد، که راه را برای ارتقای رنجیره های شارد هموار خواهد کرد. - + زنجیره های شارد diff --git a/src/content/translations/fa/upgrades/merge/index.md b/src/content/translations/fa/upgrades/merge/index.md index 7d8f88fa97c..9d09c6ab84d 100644 --- a/src/content/translations/fa/upgrades/merge/index.md +++ b/src/content/translations/fa/upgrades/merge/index.md @@ -59,7 +59,7 @@ summaryPoint4: ما پیش تر به این کار "داکینیگ" می‌ گف این یک ارزیابی مداوم از جامعه برای پاسخ به چندین دوره احتمالی از خده زنجیره های شارد برای امکان پذیر کردن مقیاس پذیری بی نهایت است. - + خرده زنجیرها diff --git a/src/content/translations/fa/upgrades/shard-chains/index.md b/src/content/translations/fa/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/fa/upgrades/shard-chains/index.md rename to src/content/translations/fa/upgrades/sharding/index.md diff --git a/src/content/translations/fr/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/fr/developers/docs/consensus-mechanisms/pos/index.md index 40bf7ebf5e4..18d02b16457 100644 --- a/src/content/translations/fr/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/fr/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ La preuve d'enjeu apporte un certain nombre d'améliorations au système de preu - Meilleure efficacité énergétique : vous n'avez pas besoin d'utiliser beaucoup d'énergie en minant des blocs. - Réduction des barrières à l'entrée et des exigences matérielles : vous n'avez pas besoin de matériel haut de gamme pour avoir une chance de créer de nouveaux blocs. - Plus grande immunité à la centralisation : la preuve d'enjeu devrait conduire à plus de nœuds sur le réseau. -- meilleur support des [chaînes fragmentées](/upgrades/shard-chains/) - un point clé dans le passage à l'échelle du réseau Ethereum +- meilleur support des [chaînes fragmentées](/upgrades/sharding/) - un point clé dans le passage à l'échelle du réseau Ethereum ## Preuve d'enjeu, mise et validateurs {#pos-staking-validators} @@ -37,7 +37,7 @@ Si vous attestez la conformité de blocs malveillants, vous perdez votre mise. ### La chaîne phare {#the-beacon-chain} -Quand Ethereum remplacera la preuve de travail par une preuve d'enjeu, cela entraînera la complexité supplémentaire des [chaînes de fragments](/upgrades/shard-chains/). Ce sont des blockchains séparées qui nécessitent des validateurs pour traiter les transactions et créer de nouveaux blocs. Le projet est de disposer de 64 chaînes de fragments, qui exigent toutes une compréhension partagée de l'état du réseau. Cela implique qu'une coordination suplémentaire est nécéssaire et celle ci sera réalisée par [la chaine phare](/upgrades/beacon-chain/). +Quand Ethereum remplacera la preuve de travail par une preuve d'enjeu, cela entraînera la complexité supplémentaire des [chaînes de fragments](/upgrades/sharding/). Ce sont des blockchains séparées qui nécessitent des validateurs pour traiter les transactions et créer de nouveaux blocs. Le projet est de disposer de 64 chaînes de fragments, qui exigent toutes une compréhension partagée de l'état du réseau. Cela implique qu'une coordination suplémentaire est nécéssaire et celle ci sera réalisée par [la chaine phare](/upgrades/beacon-chain/). La chaîne phare reçoit des informations d'état provenant de fragments et les met à la disposition d'autres fragments afin que le réseau puisse rester synchronisé. La chaîne phare gère également les validateurs, de l'enregistrement de leur mise jusqu'à l'émission de leurs récompenses et pénalités. diff --git a/src/content/translations/fr/developers/docs/scaling/index.md b/src/content/translations/fr/developers/docs/scaling/index.md index 9e92026825f..d7b87a9c65d 100644 --- a/src/content/translations/fr/developers/docs/scaling/index.md +++ b/src/content/translations/fr/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ Cette méthode de mise à l’échelle nécessite des modifications du protocole La fragmentation est le processus de fractionnement horizontal d'une base de données pour répartir la charge. Dans le cadre d'Ethereum, cette fragmentation permettra de réduire l'encombrement du réseau en augmentant le nombre de transactions par seconde grâce à la création de nouvelles chaînes, appelées « fragments ». Cela allègera également la charge pour chaque validateur qui ne sera plus tenu de traiter l’intégralité de toutes les transactions sur le réseau. -En savoir plus sur [la fragmentation](/upgrades/shard-chains/). +En savoir plus sur [la fragmentation](/upgrades/sharding/). ## Mise à l'echelle hors de la chaîne {#off-chain-scaling} diff --git a/src/content/translations/fr/nft/index.md b/src/content/translations/fr/nft/index.md index 6430b8406b3..38e7ccdf695 100644 --- a/src/content/translations/fr/nft/index.md +++ b/src/content/translations/fr/nft/index.md @@ -406,7 +406,7 @@ On estime que les mises à niveau d'évolutivité vont permettre au réseau de t [Vitalik Buterin sur le potentiel de transactions par seconde avec la fragmentation](https://twitter.com/VitalikButerin/status/1312905884549300224) -Au strict minimum, la fragmentation va permettre 64 fois plus de transactions à la seconde qu'à l'heure actuelle, avec environ 15 transactions à la seconde. C'est la quantité de chaînes de fragments (données et capacité supplémentaires) qui est introduite. [En savoir plus sur les chaînes de fragments](/upgrades/shard-chains/) +Au strict minimum, la fragmentation va permettre 64 fois plus de transactions à la seconde qu'à l'heure actuelle, avec environ 15 transactions à la seconde. C'est la quantité de chaînes de fragments (données et capacité supplémentaires) qui est introduite. [En savoir plus sur les chaînes de fragments](/upgrades/sharding/) Cela signifie que nous pouvons estimer le temps qu'il faudra pour traiter 100 000 transactions et le comparer à l'exemple Visa ci-dessus. diff --git a/src/content/translations/fr/upgrades/beacon-chain/index.md b/src/content/translations/fr/upgrades/beacon-chain/index.md index f2e6c29c6f2..f2e527afc0b 100644 --- a/src/content/translations/fr/upgrades/beacon-chain/index.md +++ b/src/content/translations/fr/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Vous pouvez le connaître sous le nom de « Phase 0 » sur les fe ## Que fait la chaîne phare ? {#what-does-the-beacon-chain-do} -La chaîne phare dirigera ou coordonnera le réseau étendu de [fragments](/upgrades/shard-chains/) et de [validateurs](/staking/). Mais ce ne sera pas comme le [réseau principal Ethereum](/glossary/#mainnet) d'aujourd'hui. Elle ne peut gérer ni les comptes ni les contrats intelligents. +La chaîne phare dirigera ou coordonnera le réseau étendu de [fragments](/upgrades/sharding/) et de [validateurs](/staking/). Mais ce ne sera pas comme le [réseau principal Ethereum](/glossary/#mainnet) d'aujourd'hui. Elle ne peut gérer ni les comptes ni les contrats intelligents. Le rôle de la chaîne phare évoluera au fil du temps, mais restera un élément fondamental de l'[Ethereum sécurisé, durable et évolutif auquel nous travaillons](/upgrades/vision/). @@ -33,7 +33,7 @@ Miser des ETH et devenir validateur est plus simple que de [miner](/developers/d Si vous souhaitez devenir validateur et aider à sécuriser la chaîne phare, familiarisez-vous avec le concept de mise en jeu. -Il s'agit également d'un changement important pour une autre mise à jour : [les chaînes de fragments](/upgrades/shard-chains/). +Il s'agit également d'un changement important pour une autre mise à jour : [les chaînes de fragments](/upgrades/sharding/). ### Mise en place des chaînes de fragments {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ La chaîne phare existera d'abord séparément du réseau principal Ethereum que Les chaînes de fragments ne peuvent s'ajouter en toute sécurité dans l'écosystème Ethereum que s'il existe un mécanisme de consensus sur la preuve de mise à enjeu. La chaîne phare introduira la mise en jeu, ouvrant la voie à la mise à niveau suivante : la chaîne de fragments. - + Chaînes de fragments diff --git a/src/content/translations/fr/upgrades/merge/index.md b/src/content/translations/fr/upgrades/merge/index.md index 527623f5e74..23b1f1298f8 100644 --- a/src/content/translations/fr/upgrades/merge/index.md +++ b/src/content/translations/fr/upgrades/merge/index.md @@ -59,7 +59,7 @@ Restez à jour avec le [Blog de Recherche et Développement EF](https://blog.eth Il s'agira d'une évaluation continue de la part de la communauté quant à la potentielle nécessité de plusieurs séries de chaînes fragmentées afin de permettre une évolutivité sans fin. - + Chaines de fragments diff --git a/src/content/translations/fr/upgrades/shard-chains/index.md b/src/content/translations/fr/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/fr/upgrades/shard-chains/index.md rename to src/content/translations/fr/upgrades/sharding/index.md diff --git a/src/content/translations/hi/upgrades/beacon-chain/index.md b/src/content/translations/hi/upgrades/beacon-chain/index.md index 9e27fd7cfa0..85247f0f0c1 100644 --- a/src/content/translations/hi/upgrades/beacon-chain/index.md +++ b/src/content/translations/hi/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: आप इसे तकनीकी रोडमैप पर " ## बीकन चेन क्या करती है? {#what-does-the-beacon-chain-do} -बीकन चेन [शार्ड](/upgrades/shard-chains/) और [स्टेकर](/staking/) के विस्तारित नेटवर्क का संचालन या समन्वय करेगी। लेकिन यह आज के [इथेरियम मेननेट](/glossary/#mainnet) की तरह नहीं होगा। यह खातों या स्मार्ट अनुबंधों को संभाल नहीं सकता है। +बीकन चेन [शार्ड](/upgrades/sharding/) और [स्टेकर](/staking/) के विस्तारित नेटवर्क का संचालन या समन्वय करेगी। लेकिन यह आज के [इथेरियम मेननेट](/glossary/#mainnet) की तरह नहीं होगा। यह खातों या स्मार्ट अनुबंधों को संभाल नहीं सकता है। बीकन चेन की भूमिका समय के साथ बदल जाएगी, लेकिन यह [ सुरक्षित, टिकाऊ और स्केलेबल इथेरियम के लिए एक मूलभूत घटक है, जिसके लिए हम काम कर रहे हैं ](/upgrades/vision/)। @@ -33,7 +33,7 @@ summaryPoint4: आप इसे तकनीकी रोडमैप पर " यदि आप एक सत्यापनकर्ता बनने में रुचि रखते हैं और बीकन चेन को सुरक्षित करने में मदद करते हैं, तो स्टेकिंग के बारे में और जानें। -यह दूसरे Eth2 अपग्रेड के लिए एक महत्वपूर्ण बदलाव भी है: [शार्ड चेन](/upgrades/shard-chains/)। +यह दूसरे Eth2 अपग्रेड के लिए एक महत्वपूर्ण बदलाव भी है: [शार्ड चेन](/upgrades/sharding/)। ### शार्ड चेन के लिए सेटिंग {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Eth2 अपग्रेड कुछ हद तक परस्पर जुड शार्ड चेन केवल इथेरियम इकोसिस्टम में सुरक्षित रूप से हिस्सेदारी के लिए सर्वसम्मति के साथ हिस्सेदारी कर सकती है। बीकन चेन स्टेकिंग को पेश करेगा, शार्ड चेन अपग्रेड का अनुसरण करने का मार्ग प्रशस्त करेगा। -शार्ड चेन +शार्ड चेन diff --git a/src/content/translations/hi/upgrades/merge/index.md b/src/content/translations/hi/upgrades/merge/index.md index aed563b5e50..74fd687f226 100644 --- a/src/content/translations/hi/upgrades/merge/index.md +++ b/src/content/translations/hi/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: आप इसे तकनीकी रोडमैप पर" ## डॉकिंग क्या है? {#what-is-the-docking} -यह याद रखना महत्वपूर्ण है कि शुरू में, अन्य Eth2 अपग्रेड को [मेननेट](/glossary/#mainnet) - आज हम जिस चेन का उपयोग करते हैं, से अलग-अलग शिप किया जा रहा है। इथेरियम मेननेट को [कार्य-के-प्रमाण](/developers/docs/consensus-mechanisms/pow/) द्वारा सुरक्षित किया जाता रहेगा, जबकि [बीकन चेन](/upgrades/beacon-chain/) और इसके [शार्ड चेन](/upgrades/shard-chains/) [स्टेक-के-प्रमाण](/developers/docs/consensus-mechanisms/pos/) के समानांतर में चलते हैं। डॉकिंग तब होता है जब इन दोनों प्रणालियों को एक साथ मिला दिया जाता है। +यह याद रखना महत्वपूर्ण है कि शुरू में, अन्य Eth2 अपग्रेड को [मेननेट](/glossary/#mainnet) - आज हम जिस चेन का उपयोग करते हैं, से अलग-अलग शिप किया जा रहा है। इथेरियम मेननेट को [कार्य-के-प्रमाण](/developers/docs/consensus-mechanisms/pow/) द्वारा सुरक्षित किया जाता रहेगा, जबकि [बीकन चेन](/upgrades/beacon-chain/) और इसके [शार्ड चेन](/upgrades/sharding/) [स्टेक-के-प्रमाण](/developers/docs/consensus-mechanisms/pos/) के समानांतर में चलते हैं। डॉकिंग तब होता है जब इन दोनों प्रणालियों को एक साथ मिला दिया जाता है। कल्पना कीजिए कि इथेरियम एक अंतरिक्ष जहाज है, जो तारों के बीच यात्रा के लिए बिल्कुल तैयार नहीं है। बीकन चेन और शार्ड चेन के साथ समुदाय ने एक नया इंजन और एक कठोर पतवार बनाया है। जब यह समय होता है, तो वर्तमान जहाज इस नई प्रणाली के साथ डॉक करेगा, ताकि यह एक जहाज बन सके, कुछ गंभीर प्रकाश वर्ष के लिए डाला जा सके और ब्रह्मांड पर ले जाने के लिए तैयार हो सके। @@ -45,4 +45,4 @@ Eth2 अपग्रेड कुछ हद तक परस्पर जुड मेननेट शार्ड बनने के साथ, शार्ड चेन का सफल क्रियान्वयन इस अपग्रेड के लिए महत्वपूर्ण है। यह संभावना है कि संक्रमण समुदाय को यह निर्णय लेने में मदद करने में महत्वपूर्ण भूमिका निभाएगा कि क्या एक दूसरे अपग्रेड को शार्डिंग में रोल आउट किया जाए। इस अपग्रेड से अन्य शार्ड जैसे मेननेट: वे लेन-देन और स्मार्ट अनुबंध को संभालने में सक्षम होंगे और न केवल अधिक डेटा प्रदान करेंगे। -शार्ड चेन +शार्ड चेन diff --git a/src/content/translations/hi/upgrades/shard-chains/index.md b/src/content/translations/hi/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/hi/upgrades/shard-chains/index.md rename to src/content/translations/hi/upgrades/sharding/index.md diff --git a/src/content/translations/hr/upgrades/beacon-chain/index.md b/src/content/translations/hr/upgrades/beacon-chain/index.md index 96b049f280c..d2d30640496 100644 --- a/src/content/translations/hr/upgrades/beacon-chain/index.md +++ b/src/content/translations/hr/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: To možete prepoznati kao „Fazu 0” na tehničkom planu. ## Što radi Beacon Chain? {#what-does-the-beacon-chain-do} -Beacon Chain će dirigirati ili uskladiti proširenu mrežu [ djelića](/upgrades/shard-chains/) i [učesnika](/staking/). Ali neće biti kao današnja [glavna mreža Ethereum](/glossary/#mainnet). Ne podržava račune ili pametne ugovore. +Beacon Chain će dirigirati ili uskladiti proširenu mrežu [ djelića](/upgrades/sharding/) i [učesnika](/staking/). Ali neće biti kao današnja [glavna mreža Ethereum](/glossary/#mainnet). Ne podržava račune ili pametne ugovore. Beacon Chain će tijekom vremena mijenjati ulogu, međutim to je temeljna komponenta za [siguran, održiv i nadogradiv Ethereum na kojem radimo](/upgrades/vision/). @@ -33,7 +33,7 @@ Ulagati i postati validator, jednostavnije je od [ rudarenja ](/developers/docs/ Ako ste zainteresirani za validiranje i pomoć u osiguranju za Beacon Chain, saznajte više o sudjelovanju. -Ovo je također važna promjena za drugu nadogradnju Eth2: [lanci djelića](/upgrades/shard-chains/). +Ovo je također važna promjena za drugu nadogradnju Eth2: [lanci djelića](/upgrades/sharding/). ### Postavljanje lanaca djelića {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Beacon Chain će u početku postojati odvojeno od glavne mreže Ethereum mreže Lanci djelića mogu sigurno ući u Ethereumov ekosustav samo ako je uspostavljen mehanizam konsenzusa proof-of-stake. Beacon Chain predstavit će ulaganje, radeći put za nadogradnju lanca djelića. -Lanci djelića +Lanci djelića diff --git a/src/content/translations/hr/upgrades/merge/index.md b/src/content/translations/hr/upgrades/merge/index.md index b38371508bf..1b981601ade 100644 --- a/src/content/translations/hr/upgrades/merge/index.md +++ b/src/content/translations/hr/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: To vam može biti poznato kao „faza 1.5” na tehničkim planov ## Što je spajanje? {#what-is-the-docking} -Važno je imati na umu da se u početku ostale nadogradnje Eth2 isporučuju odvojeno od [ glavne mreže ](/glossary/#mainnet) – lanca kojim se koristimo danas. Glavna mreža Ethereum i dalje biti osigurana pomoću mehanizma [proof-of-work](/developers/docs/consensus-mechanisms/pow/), čak i dok [Beacon Chain](/upgrades/beacon-chain/) i njegovi [lanci djelića](/upgrades/shard-chains/) rade paralelno pomoću mehanizma [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). Spajanje je kad se ova dva sustava sjedine. +Važno je imati na umu da se u početku ostale nadogradnje Eth2 isporučuju odvojeno od [ glavne mreže ](/glossary/#mainnet) – lanca kojim se koristimo danas. Glavna mreža Ethereum i dalje biti osigurana pomoću mehanizma [proof-of-work](/developers/docs/consensus-mechanisms/pow/), čak i dok [Beacon Chain](/upgrades/beacon-chain/) i njegovi [lanci djelića](/upgrades/sharding/) rade paralelno pomoću mehanizma [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). Spajanje je kad se ova dva sustava sjedine. Zamislite da je Ethereum svemirski brod koji nije baš spreman za međuzvjezdano putovanje. Zajednica je s nadogradnjom Beacon chain i lancima djelića izgradila novi motor i očvrsnuti trup. Kad dođe vrijeme, trenutačni brod pristat će uz novi sustav i oni će postati jedno, spremni za ozbiljne svjetlosne godine i zauzimanje svemira. @@ -45,4 +45,4 @@ Nakon spajanja, bit će dodijeljeni učesnici koji će provjeriti valjanost mre Kad glavna mreža postane djelić, uspješna implementacija lanaca djelića bit će presudna za ovu nadogradnju. Vjerojatno će tranzicija igrati važnu ulogu u pomaganju zajednici da odluči hoće li pokrenuti drugu nadogradnju na metodu razdjeljivanja. Ova će nadogradnja kreirati druge djeliće poput glavne mreže: oni će moći obrađivati transakcije i pametne ugovore, a ne samo pružati više podataka. -Lanci djelića +Lanci djelića diff --git a/src/content/translations/hr/upgrades/shard-chains/index.md b/src/content/translations/hr/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/hr/upgrades/shard-chains/index.md rename to src/content/translations/hr/upgrades/sharding/index.md diff --git a/src/content/translations/hu/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/hu/developers/docs/consensus-mechanisms/pos/index.md index 35e4ddc8b25..b6d3bfce457 100644 --- a/src/content/translations/hu/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/hu/developers/docs/consensus-mechanisms/pos/index.md @@ -37,7 +37,7 @@ Ha tanúsítasz egy rosszindulatú blokkot, akkor elveszted a letéted. ### A Beacon Chain {#the-beacon-chain} -Amikor az Ethereum leváltja a proof-of-work-öt a proof-of-stake-kel, hozzáadott komplexitás fog életbe lépni a [shard láncok](/upgrades/shard-chains/) által. Ezek különálló blokkláncok, melynek szükségük van validátorokra, hogy tranzakciókat dolgozzanak fel és új blokkokat hozzanak létre. A terv az, hogy 64 shard láncot fogunk létrehozni, melyeknek megosztottan egyet kell érteniük a hálózat állapotára vonatkozóan. Így további koordináció szükségeltetik, ezt pedig [a beacon chain](/upgrades/beacon-chain/) fogja biztosítani. +Amikor az Ethereum leváltja a proof-of-work-öt a proof-of-stake-kel, hozzáadott komplexitás fog életbe lépni a [shard láncok](/upgrades/sharding/) által. Ezek különálló blokkláncok, melynek szükségük van validátorokra, hogy tranzakciókat dolgozzanak fel és új blokkokat hozzanak létre. A terv az, hogy 64 shard láncot fogunk létrehozni, melyeknek megosztottan egyet kell érteniük a hálózat állapotára vonatkozóan. Így további koordináció szükségeltetik, ezt pedig [a beacon chain](/upgrades/beacon-chain/) fogja biztosítani. A Beacon Chain állapot információkat kap a shardoktól, melyet elérhetővé tesz a többi shard számára, hogy azok szinkronban tudjanak maradni. A Beacon Chain fogja kezelni a validátorokat is a letétbetételtől egészen a jutalmak és büntetések kiosztásáig. diff --git a/src/content/translations/hu/upgrades/beacon-chain/index.md b/src/content/translations/hu/upgrades/beacon-chain/index.md index c75257f0496..9088adf07b8 100644 --- a/src/content/translations/hu/upgrades/beacon-chain/index.md +++ b/src/content/translations/hu/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: A technikai ütemtervekben "Fázis 0"-ként is ismerheted. ## Mit csinál a Beacon Chain? {#what-does-the-beacon-chain-do} -A Beacon Chain fogja koordinálni vagy vezetni a [shardokból](/upgrades/shard-chains/) és [stakerekből](/staking/) álló kiterjesztett hálózatot. De nem olyan lesz, mint jelenleg az [Ethereum főhálózat](/glossary/#mainnet). Nem fog tudni számlákat vagy okosszerződéseket kezelni. +A Beacon Chain fogja koordinálni vagy vezetni a [shardokból](/upgrades/sharding/) és [stakerekből](/staking/) álló kiterjesztett hálózatot. De nem olyan lesz, mint jelenleg az [Ethereum főhálózat](/glossary/#mainnet). Nem fog tudni számlákat vagy okosszerződéseket kezelni. A Beacon Chain szerepe meg fog változni idővel, de egy olyan alapvető összetevője [ a biztonságos, fenntartható és skálázható Ethereumnak, amiért dolgozunk](/upgrades/vision/). @@ -33,7 +33,7 @@ A letétbe helyezés és a validátorrá válás egyszerűbb, mint a [bányásza Ha érdekel a letétbe helyezés és szeretnél segíteni a Beacon Chain biztosításában, akkor tudj meg többet a letétbe helyezésről. -Ez a második Eth2 fejlesztésnél is fontos változás: [a shard láncoknál](/upgrades/shard-chains/). +Ez a második Eth2 fejlesztésnél is fontos változás: [a shard láncoknál](/upgrades/sharding/). ### Shard láncok előkészítése {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ A Beacon Chain eleinte különállóan fog létezni az Ethereum főhálózattól A shard láncokat csak a proof-of-stake konszenzus mechnanizmussal lehet biztonságosan bevezetni az Ethereum ökoszisztémába. A Beacon Chain bevezeti a letétbe helyezést (staking) ezzel lekövezve a shard láncok bevezetéséhez szükséges utat. -Shard láncok +Shard láncok diff --git a/src/content/translations/hu/upgrades/merge/index.md b/src/content/translations/hu/upgrades/merge/index.md index cd807d6702a..444aefbd46e 100644 --- a/src/content/translations/hu/upgrades/merge/index.md +++ b/src/content/translations/hu/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: Úgy is ismerheted, mint a Fázis 1.5 a technikai ütemtervek sze ## Mi az a dokkolás? {#what-is-the-docking} -Fontos megjegyezni, hogy eredetileg a többi Eth2 fejlesztés a [főhálózattól](/glossary/#mainnet) - azaz a lánctól, amit ma is használunk - külön kerül bevezetésre. Az Ethereum főhálózat biztonságát továbbra is a [proof-of-work](/developers/docs/consensus-mechanisms/pow/) szolgáltatja majd, még akkor is amikor [a Beacon Chain](/upgrades/beacon-chain/) és a [shard láncok](/upgrades/shard-chains/) párhuzamosan futnak majd a [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) használatával. A dokkolás az, amikor ez a két rendszer egybeolvad. +Fontos megjegyezni, hogy eredetileg a többi Eth2 fejlesztés a [főhálózattól](/glossary/#mainnet) - azaz a lánctól, amit ma is használunk - külön kerül bevezetésre. Az Ethereum főhálózat biztonságát továbbra is a [proof-of-work](/developers/docs/consensus-mechanisms/pow/) szolgáltatja majd, még akkor is amikor [a Beacon Chain](/upgrades/beacon-chain/) és a [shard láncok](/upgrades/sharding/) párhuzamosan futnak majd a [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) használatával. A dokkolás az, amikor ez a két rendszer egybeolvad. Képzeld el, hogy az Ethereum egy űrhajó, ami még nem teljesen áll készen egy csillagközi utazásra. A Beacon Chainnel és a shard láncokkal a közösség egy új hajtóművet és egy erősebb hajótestet épített. Ha eljön az idő, a meglévő hajó dokkol ezzel az új rendszerrel, eggyé válik vele és készen áll arra, hogy néhány fényév alatt meghódítsa az univerzumot. @@ -45,4 +45,4 @@ Amint megtörtént a dokkolás, a letétbe helyezőket kijelölik az Ethereum f Mivel a főhálózat egy sharddá válik, a shard láncok sikeres implementációja kritikus ezen fejlesztési lépés szempontjából. Valószínű, hogy az átmenet egy fontos szerepet fog játszani, hogy a közösség eldöntse szeretne-e egy második sharding fejlesztést. Ez a fejlesztés a többi shardot is a főhálózathoz hasonlóvá teszi: képesek lesznek tranzakciókat és okosszerződéseket feldolgozni, nem csak több adatot biztosítani. -Shard láncok +Shard láncok diff --git a/src/content/translations/hu/upgrades/shard-chains/index.md b/src/content/translations/hu/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/hu/upgrades/shard-chains/index.md rename to src/content/translations/hu/upgrades/sharding/index.md diff --git a/src/content/translations/id/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/id/developers/docs/consensus-mechanisms/pos/index.md index 08b1f796885..baae36b6084 100644 --- a/src/content/translations/id/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/id/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ Bukti taruhan hadir dengan sejumlah peningkatan pada sistem bukti kerja: - efisiensi energi yang lebih baik - Anda tidak perlu menggunakan banyak blok penambangan energi - hambatan masuk yang lebih rendah, persyaratan perangkat keras yang berkurang – Anda tidak memerlukan perangkat keras elit untuk mendapat peluang membuat blok baru - kekebalan yang lebih kuat terhadap sentralisasi - bukti taruhan harus mengarah ke lebih banyak node di jaringan -- dukungan yang lebih kuat untuk [rantai shard](/upgrades/shard-chains/) – sebuah peningkatan kunci dalam perluasan jaringan Ethereum +- dukungan yang lebih kuat untuk [rantai shard](/upgrades/sharding/) – sebuah peningkatan kunci dalam perluasan jaringan Ethereum ## Bukti taruhan, penaruhan, dan validator {#pos-staking-validators} @@ -37,7 +37,7 @@ Jika Anda melakukan pengesahan terhadap blok jahat, Anda akan kehilangan taruhan ### Rantai suar {#the-beacon-chain} -Ketika Ethereum menggantikan bukti kerja dengan bukti taruhan, akan ada kompleksitas tambahan dari [rantai shard](/upgrades/shard-chains/). Ini adalah blockchain terpisah yang membutuhkan validator untuk memproses transaksi dan membuat blok baru. Rencananya adalah memiliki 64 rantai shard dan mereka semua membutuhkan pemahaman bersama tentang keadaan jaringan. Akibatnya, diperlukan koordinasi ekstra dan akan dilakukan oleh [rantai suar](/upgrades/beacon-chain/). +Ketika Ethereum menggantikan bukti kerja dengan bukti taruhan, akan ada kompleksitas tambahan dari [rantai shard](/upgrades/sharding/). Ini adalah blockchain terpisah yang membutuhkan validator untuk memproses transaksi dan membuat blok baru. Rencananya adalah memiliki 64 rantai shard dan mereka semua membutuhkan pemahaman bersama tentang keadaan jaringan. Akibatnya, diperlukan koordinasi ekstra dan akan dilakukan oleh [rantai suar](/upgrades/beacon-chain/). Rantai suar menerima informasi state dari shard dan membuatnya tersedia untuk shard lainnya, sehingga jaringan dapat terus disinkronkan. Rantai suar juga akan mengatur validator mulai dari mendaftarkan deposito taruhan mereka hingga menerbitkan imbalan dan penalti mereka. diff --git a/src/content/translations/id/developers/docs/scaling/index.md b/src/content/translations/id/developers/docs/scaling/index.md index 3899ec68a15..df04c681e50 100644 --- a/src/content/translations/id/developers/docs/scaling/index.md +++ b/src/content/translations/id/developers/docs/scaling/index.md @@ -27,7 +27,7 @@ Metode penskalaan ini memerlukan perubahan pada protokol Ethereum (lapisan 1 [Ja Sharding adalah proses pemisahan basis data secara horizontal untuk menyebarkan muatan. Dalam konteks Ethereum, sharding akan mengurangi kemacetan jaringan dan meningkatkan transaksi per detik dengan membuat rantai baru, yang dikenal sebagai “shard.” Ini juga akan meringankan beban setiap validator yang tidak lagi diharuskan untuk memroses keseluruhan transaksi di seluruh jaringan. -Pelajari lebih lanjut tentang [sharding](/upgrades/shard-chains/). +Pelajari lebih lanjut tentang [sharding](/upgrades/sharding/). ## Penskalaan off-chain {#off-chain-scaling} diff --git a/src/content/translations/id/nft/index.md b/src/content/translations/id/nft/index.md index e2f53df66e4..f11814efb6f 100644 --- a/src/content/translations/id/nft/index.md +++ b/src/content/translations/id/nft/index.md @@ -406,7 +406,7 @@ Diperkirakan bahwa peningkatan skalabilitas akan memungkinkan jaringan untuk mem [Vitalik Buterik membahas transaksi per detik yang potensial dengan sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) -Pada tingkat terendah, sharding akan memungkinkan 64 kali jumlah transaksi dari jumlah saat ini yang berada sekitar 15 transaksi. Itulah jumlah rantai shard (data dan kapasitas tambahan) yang akan dimasukkan. [Selengkapnya tentang rantai shard](/upgrades/shard-chains/) +Pada tingkat terendah, sharding akan memungkinkan 64 kali jumlah transaksi dari jumlah saat ini yang berada sekitar 15 transaksi. Itulah jumlah rantai shard (data dan kapasitas tambahan) yang akan dimasukkan. [Selengkapnya tentang rantai shard](/upgrades/sharding/) Itu berarti kita dapat memperkirakan berapa lama waktu yang diperlukan untuk memroses 100.000 transaksi, sehingga kita dapat membandingkannya dengan contoh Visa di atas. diff --git a/src/content/translations/id/upgrades/beacon-chain/index.md b/src/content/translations/id/upgrades/beacon-chain/index.md index 107a4c5745a..7266ebd6e17 100644 --- a/src/content/translations/id/upgrades/beacon-chain/index.md +++ b/src/content/translations/id/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Anda mungkin mengenalnya sebagai "Fase 0" pada roadmap teknis. ## Apa yang dilakukan oleh Rantai Suar? {#what-does-the-beacon-chain-do} -Rantai Suar akan mengadakan atau mengoordinasi jaringan yang sudah diperluas dari [shard](/upgrades/shard-chains/) dan [penaruh](/staking/). Tapi itu tidak akan sama seperti [Jaringan Utama Ethereum](/glossary/#mainnet) saat ini. Rantai suar tidak bisa menangani akun ataupun kontrak pintar. +Rantai Suar akan mengadakan atau mengoordinasi jaringan yang sudah diperluas dari [shard](/upgrades/sharding/) dan [penaruh](/staking/). Tapi itu tidak akan sama seperti [Jaringan Utama Ethereum](/glossary/#mainnet) saat ini. Rantai suar tidak bisa menangani akun ataupun kontrak pintar. Peran Rantai Suar akan berubah seiring berjalannya waktu, namun rantai ini merupakan komponen dasar untuk [jaringan Ethereum yang aman, berkelanjutan, dan terukur yang sedang kami kerjakan](/upgrades/vision/). @@ -33,7 +33,7 @@ Penaruhan dan menjadi validator lebih mudah daripada [menambang](/developers/doc Jika Anda tertarik untuk menjadi validator dan membantu mengamankan Rantai Suar, pelajari selengkapnya tentang penaruhan. -Ini juga merupakan perubahan penting untuk peningkatan lainnya: [rantai shard](/upgrades/shard-chains/). +Ini juga merupakan perubahan penting untuk peningkatan lainnya: [rantai shard](/upgrades/sharding/). ### Menyiapkan rantai shard {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ Rantai Suar, pada awalnya, akan hadir terpisah dari Jaringan Utama Ethereum yang Rantai shard hanya dapat masuk dalam ekosistem Ethereum dengan mekanisme konsesus bukti taruhan. Rantai Suar akan memperkenalkan penaruhan, menyiapkan jalan bagi peningkatan rantai shard berikutnya. - + Rantai shard diff --git a/src/content/translations/id/upgrades/merge/index.md b/src/content/translations/id/upgrades/merge/index.md index 15a4f2b4590..6581fd6bc27 100644 --- a/src/content/translations/id/upgrades/merge/index.md +++ b/src/content/translations/id/upgrades/merge/index.md @@ -59,7 +59,7 @@ Pada awalnya, rencananya adalah melanjutkan pengembangan rantai shard sebelum Pe Ini akan menjadi penilaian berkelanjutan dari komunitas seiring dengan kebutuhan akan potensi beberapa putaran rantai shard untuk memungkinkan skalabilitas yang tak terbatas. - + Pecahan rantai jaringan diff --git a/src/content/translations/id/upgrades/shard-chains/index.md b/src/content/translations/id/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/id/upgrades/shard-chains/index.md rename to src/content/translations/id/upgrades/sharding/index.md diff --git a/src/content/translations/it/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/it/developers/docs/consensus-mechanisms/pos/index.md index 04ea3358c35..d0e440cfc8f 100644 --- a/src/content/translations/it/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/it/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ La proof-of-stake porta con sé una serie di miglioramenti rispetto al sistema P - migliore efficienza energetica: non occorre molta energia per il mining dei blocchi - minori barriere all'ingresso, requisiti hardware ridotti: non serve hardware d'èlite per avere la possibilità di creare nuovi blocchi - maggiore immunità alla centralizzazione: la proof-of-stake dovrebbe portare un maggior numero di nodi alla rete -- Migliore supporto per le [catene di shard](/upgrades/shard-chains/): un aggiornamento importante per scalare la rete Ethereum +- Migliore supporto per le [catene di shard](/upgrades/sharding/): un aggiornamento importante per scalare la rete Ethereum ## Proof-of-stake, staking e validatori {#pos-staking-validators} @@ -37,7 +37,7 @@ Se attesti un blocco dannoso, perdi il tuo stake. ### La beacon chain {#the-beacon-chain} -Dal momento in cui Ethereum sostituirà il Proof of Work con il proof-of-stake, verrà aggiunta la complessità delle [catene di shard](/upgrades/shard-chains/). Si tratta di blockchain separate, in cui i validatori dovranno elaborare transazioni e creare nuovi blocchi. Si prevede di avere 64 shard chain e tutte dovranno avere una comprensione condivisa dello stato della rete. Ne risulta che è necessaria una maggiore coordinazione, che sarà garantita [dalla Beacon Chain](/upgrades/beacon-chain/). +Dal momento in cui Ethereum sostituirà il Proof of Work con il proof-of-stake, verrà aggiunta la complessità delle [catene di shard](/upgrades/sharding/). Si tratta di blockchain separate, in cui i validatori dovranno elaborare transazioni e creare nuovi blocchi. Si prevede di avere 64 shard chain e tutte dovranno avere una comprensione condivisa dello stato della rete. Ne risulta che è necessaria una maggiore coordinazione, che sarà garantita [dalla Beacon Chain](/upgrades/beacon-chain/). La beacon chain riceve informazioni sullo stato dagli shard e le rende disponibili ad altri shard, in modo che la rete possa rimanere sincronizzata. La beacon chain gestirà anche i validatori, dalla registrazione dei depositi di stake fino all'emissione delle ricompense o delle penalità. diff --git a/src/content/translations/it/developers/docs/scaling/index.md b/src/content/translations/it/developers/docs/scaling/index.md index c23aa5fcac4..4aba9861710 100644 --- a/src/content/translations/it/developers/docs/scaling/index.md +++ b/src/content/translations/it/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ Questo metodo di scalabilità richiede modifiche al protocollo Ethereum ([rete p Sharding è il processo di suddivisione orizzontale di un database per distribuire il carico. In un contesto Ethereum, lo sharding ridurrà la congestione della rete e aumenterà le transazioni al secondo creando nuove catene, note come "shard". Questo alleggerirà anche il carico per ogni validatore, che non dovrà più elaborare la totalità di tutte le transazioni sulla rete. -Ulteriori informazioni sullo [sharding](/upgrades/shard-chains/). +Ulteriori informazioni sullo [sharding](/upgrades/sharding/). ## Scalabilità off-chain {#off-chain-scaling} diff --git a/src/content/translations/it/nft/index.md b/src/content/translations/it/nft/index.md index d5401148a2b..89cedebd331 100644 --- a/src/content/translations/it/nft/index.md +++ b/src/content/translations/it/nft/index.md @@ -406,7 +406,7 @@ Si stima che gli aggiornamenti di scalabilità consentiranno alla rete di elabor [Vitalik Buterin sulle transazioni per secondo potenziali con lo sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) -Come minimo, lo sharding consentirà 64 volte la quantità di transazioni di oggi, che si attesta a circa 15 transazioni. È la quantità di shard chain (dati e capacità supplementari) che vengono introdotte. [Maggiori informazioni sulle shard chain](/upgrades/shard-chains/) +Come minimo, lo sharding consentirà 64 volte la quantità di transazioni di oggi, che si attesta a circa 15 transazioni. È la quantità di shard chain (dati e capacità supplementari) che vengono introdotte. [Maggiori informazioni sulle shard chain](/upgrades/sharding/) Ciò significa che possiamo stimare quanto tempo ci vorrà per elaborare 100.000 transazioni in modo da poterlo confrontare con l'esempio di Visa sopra riportato. diff --git a/src/content/translations/it/upgrades/beacon-chain/index.md b/src/content/translations/it/upgrades/beacon-chain/index.md index 1034f071993..76c3fff7c9e 100644 --- a/src/content/translations/it/upgrades/beacon-chain/index.md +++ b/src/content/translations/it/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Potresti conoscere questa come "Fase 0" sulle roadmap tecniche. ## Cosa fa la beacon chain? {#what-does-the-beacon-chain-do} -La Beacon Chain condurrà o coordinerà la rete ampliata di [shard](/upgrades/shard-chains/) e [staker](/staking/). Ma non sarà come l'attuale [Rete principale di Ethereum](/glossary/#mainnet). Non è in grado di gestire gli account o gli Smart Contracts. +La Beacon Chain condurrà o coordinerà la rete ampliata di [shard](/upgrades/sharding/) e [staker](/staking/). Ma non sarà come l'attuale [Rete principale di Ethereum](/glossary/#mainnet). Non è in grado di gestire gli account o gli Smart Contracts. Il ruolo della beacon chain cambierà con il passare del tempo ma è una componente fondamentale per [la sicurezza, la sostenibilità e la scalabilità di Ethereum che stiamo cercando di raggiungere](/upgrades/vision/). @@ -33,7 +33,7 @@ Fare staking e diventare validatore è più facile che [fare mining](/developers Se sei interessato a diventare un validatore e ad contribuire a proteggere la beacon chain, scopri di più sullo staking. -È anche un importante cambiamento per un altro aggiornamento: [shard chains](/upgrades/shard-chains/). +È anche un importante cambiamento per un altro aggiornamento: [shard chains](/upgrades/sharding/). ### Prepararsi alle shard chain {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ In un primo momento la beacon chain godrà di vita separata rispetto all'attuale Le shard chain potranno entrare in modo sicuro nell'ecosistema Ethereum solo quando sarà presente un meccanismo di consenso proof of stake. La beacon chain introdurrà lo staking, aprendo la strada al successivo upgrade basato sulla shard chain. - + Shard chain diff --git a/src/content/translations/it/upgrades/merge/index.md b/src/content/translations/it/upgrades/merge/index.md index 900daa32a12..49bbb3a58a4 100644 --- a/src/content/translations/it/upgrades/merge/index.md +++ b/src/content/translations/it/upgrades/merge/index.md @@ -59,7 +59,7 @@ In origine, il piano era quello di operare sulle shard chain prima della Fusione Si tratterà di una valutazione continua da parte della community circa la necessità di cicli potenzialmente multipli di shard chain per consentire una scalabilità senza fine. - + Shard chain diff --git a/src/content/translations/it/upgrades/shard-chains/index.md b/src/content/translations/it/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/it/upgrades/shard-chains/index.md rename to src/content/translations/it/upgrades/sharding/index.md diff --git a/src/content/translations/ja/nft/index.md b/src/content/translations/ja/nft/index.md index 0344925fbe4..7c0245bb6fe 100644 --- a/src/content/translations/ja/nft/index.md +++ b/src/content/translations/ja/nft/index.md @@ -406,7 +406,7 @@ _また、イーサリアムは金融取引だけでなく、アプリケーシ [Vitalik Buterin によるシャーディングでの 1 秒当たりのトランザクション件数見込みについて](https://twitter.com/VitalikButerin/status/1312905884549300224) -最低でも、シャーディングは現在の約 15 件のトランザクション件数の 64 倍のトランザクションが可能になります。 それは、シャードチェーン(データや容量の追加)が導入されている分です。 [シャードチェーンの詳細](/upgrades/shard-chains/) +最低でも、シャーディングは現在の約 15 件のトランザクション件数の 64 倍のトランザクションが可能になります。 それは、シャードチェーン(データや容量の追加)が導入されている分です。 [シャードチェーンの詳細](/upgrades/sharding/) 上記の Visa の例と比較できるよう、100,000 件のトランザクションを処理するのにかかる時間を見積もることができます。 diff --git a/src/content/translations/ja/upgrades/beacon-chain/index.md b/src/content/translations/ja/upgrades/beacon-chain/index.md index fa243277656..c2c9cf2e0ed 100644 --- a/src/content/translations/ja/upgrades/beacon-chain/index.md +++ b/src/content/translations/ja/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: 技術的なロードマップでは、「フェーズ0」と呼 ## ビーコンチェーンとは {#what-does-the-beacon-chain-do} -ビーコンチェーンは、[シャード](/upgrades/shard-chains/)と[ステーカー](/staking/)の拡張ネットワークを管理・調整します。 しかし、それは今日の [イーサリアムメインネット](/glossary/#mainnet) のようなものではなく、 アカウントやスマートコントラクトを処理しません。 +ビーコンチェーンは、[シャード](/upgrades/sharding/)と[ステーカー](/staking/)の拡張ネットワークを管理・調整します。 しかし、それは今日の [イーサリアムメインネット](/glossary/#mainnet) のようなものではなく、 アカウントやスマートコントラクトを処理しません。 ビーコンチェーンの役割は時間の経過とともに変わりますが、これは、私たちが取り組んでいる、[安全で持続可能、そしてスケーラブルなイーサリアム](/upgrades/vision/)の基本的な構成要素となります。 @@ -33,7 +33,7 @@ summaryPoint4: 技術的なロードマップでは、「フェーズ0」と呼 バリデータになり、ビーコンチェーンの安全性の確保にご興味がある場合は、ステーキングの詳細をご参照ください。 -これは、[シャードチェーン](/upgrades/shard-chains/)という別のアップグレードにとっても重要な変更です。 +これは、[シャードチェーン](/upgrades/sharding/)という別のアップグレードにとっても重要な変更です。 ### シャードチェーンの設定 {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ summaryPoint4: 技術的なロードマップでは、「フェーズ0」と呼 シャードチェーンは、プルーフ・オブ・ステークのコンセンサスメカニズムがあることにより、イーサリアムのエコシステムに安全に参加することができます。 ビーコンチェーンはステーキングを導入し、シャードチェーンのアップグレードへの道を開きます。 - + シャードチェーン diff --git a/src/content/translations/ja/upgrades/merge/index.md b/src/content/translations/ja/upgrades/merge/index.md index 782668cb8d4..ab3691107b8 100644 --- a/src/content/translations/ja/upgrades/merge/index.md +++ b/src/content/translations/ja/upgrades/merge/index.md @@ -59,7 +59,7 @@ summaryPoint4: 旧称は「ドッキング」です。 ただし、無限のスケーラビリティを可能にするために、複数のシャードチェーンの潜在的な必要性について、継続的な評価検証がコミュニティにより行われています。 - + シャードチェーン diff --git a/src/content/translations/ja/upgrades/shard-chains/index.md b/src/content/translations/ja/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ja/upgrades/shard-chains/index.md rename to src/content/translations/ja/upgrades/sharding/index.md diff --git a/src/content/translations/ml/upgrades/beacon-chain/index.md b/src/content/translations/ml/upgrades/beacon-chain/index.md index 653be6a047d..22a596cca79 100644 --- a/src/content/translations/ml/upgrades/beacon-chain/index.md +++ b/src/content/translations/ml/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: സാങ്കേതിക റോഡ്മാപ്പിൽ " ## ബീക്കൺ ചെയിൻ എന്താണ് ചെയ്യുന്നത്? {#what-does-the-beacon-chain-do} -ബീക്കൺ ചെയിൻ [ഷാർഡുകളുടെയും](/upgrades/shard-chains/) [സ്റ്റേക്കറുകളുടെയും](/staking/) വിപുലീകരിച്ച ശൃംഖല നടത്തുകയോ ഏകോപിപ്പിക്കുകയോ ചെയ്യും. പക്ഷെ ഇത് ഇന്നത്തെ [Ethereum mainnet](/glossary/#mainnet) പോലെ ആയിരിക്കില്ല. ഇതിന് അക്കൗണ്ടുകളോ സ്മാർട്ട് കരാറുകളോ കൈകാര്യം ചെയ്യാൻ കഴിയില്ല. +ബീക്കൺ ചെയിൻ [ഷാർഡുകളുടെയും](/upgrades/sharding/) [സ്റ്റേക്കറുകളുടെയും](/staking/) വിപുലീകരിച്ച ശൃംഖല നടത്തുകയോ ഏകോപിപ്പിക്കുകയോ ചെയ്യും. പക്ഷെ ഇത് ഇന്നത്തെ [Ethereum mainnet](/glossary/#mainnet) പോലെ ആയിരിക്കില്ല. ഇതിന് അക്കൗണ്ടുകളോ സ്മാർട്ട് കരാറുകളോ കൈകാര്യം ചെയ്യാൻ കഴിയില്ല. ബീക്കൺ ചെയിനിന്റെ പങ്ക് കാലക്രമേണ മാറും, പക്ഷേ ഇത് [സുരക്ഷിതവും സുസ്ഥിരവും വിപുലീകരിക്കാവുന്നതുമായ Ethereumനുള്ള അടിസ്ഥാന ഘടകമാണ്](/upgrades/vision/). @@ -33,7 +33,7 @@ summaryPoint4: സാങ്കേതിക റോഡ്മാപ്പിൽ " ഒരു വാലിഡേറ്ററാകാനും ബീക്കൺ ചെയിൻ സുരക്ഷിതമാക്കാൻ സഹായിക്കാനും നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടെങ്കിൽ, സ്റ്റേക്കിംഗിനെക്കുറിച്ച് കൂടുതലറിയുക . -രണ്ടാമത്തെ Eth2 അപ്‌ഗേഡിനായുള്ള ഒരു പ്രധാന മാറ്റവും ഇതാണ്: [ ഷാർഡ് ചെയിനുകൾ ](/upgrades/shard-chains/). +രണ്ടാമത്തെ Eth2 അപ്‌ഗേഡിനായുള്ള ഒരു പ്രധാന മാറ്റവും ഇതാണ്: [ ഷാർഡ് ചെയിനുകൾ ](/upgrades/sharding/). ### ഷാർഡ് ചെയ്‌നുകൾക്കായി സജ്ജമാക്കുന്നു {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Eth2 അപ്‌ഗ്രേഡുകളെല്ലാം പരസ്പര ഒരു പ്രൂഫ് ഓഫ് സ്റ്റേക്ക് കന്‍സെന്‍സസ് മെക്കാനിസം ഉണ്ടെങ്കില്‍ മാത്രമേ ഷാർഡ് ചെയിനുകൾക്ക് സുരക്ഷിതമായി Ethereum ഇക്കോസിസ്റ്റത്തിലേക്ക് പ്രവേശിക്കാൻ കഴിയൂ. ഷാർഡ് ചെയിൻ അപ്‌ഗ്രേഡ് പിന്തുടരാൻ വഴിയൊരുക്കിക്കൊണ്ട് ബീക്കൺ ചെയിൻ സ്റ്റേക്കിംഗ് അവതരിപ്പിക്കും. -ഷാർഡ് ചെയിനുകള്‍ +ഷാർഡ് ചെയിനുകള്‍ diff --git a/src/content/translations/ml/upgrades/merge/index.md b/src/content/translations/ml/upgrades/merge/index.md index 9f518d6b370..cf43fe705ac 100644 --- a/src/content/translations/ml/upgrades/merge/index.md +++ b/src/content/translations/ml/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: ഇത് സാങ്കേതിക റോഡ്മാപ്പ ## ഡോക്കിംഗ് എന്താണ്? {#what-is-the-docking} -തുടക്കത്തിൽ, മറ്റ് Eth2 അപ്‌ഗ്രേഡുകൾ [ മെയിൻനെറ്റ് ](/glossary/#mainnet) ൽ നിന്ന് വെവ്വേറെ ഷിപ്പുചെയ്യുന്നുവെന്നത് ഓർത്തിരിക്കേണ്ടത് പ്രധാനമാണ് - ഇന്ന് നമ്മൾ ഉപയോഗിക്കുന്ന ശൃംഖല. [ബീക്കൺ ചെയിനും](/upgrades/beacon-chain/) അതിന്റെ [ഷാർഡ് ചെയിനുകളും](/upgrades/shard-chains/) സമാന്തരമായി [പ്രൂഫ് ഓഫ് സ്റ്റേക്ക് സിസ്റ്റത്തിൽ](/developers/docs/consensus-mechanisms/pos/) പ്രവർത്തിക്കുമ്പോൾ തന്നെ [പ്രൂഫ് ഓഫ് വർക്ക്](/developers/docs/consensus-mechanisms/pow/) ഉപയോഗിച്ച് Ethereum മെയിൻനെറ്റ് സമാന്തരമായി പ്രവർത്തിക്കും. ഈ രണ്ട് സിസ്റ്റങ്ങളും ഒന്നിച്ച് ലയിപ്പിക്കുന്നതാണ് ഡോക്കിംഗ്. +തുടക്കത്തിൽ, മറ്റ് Eth2 അപ്‌ഗ്രേഡുകൾ [ മെയിൻനെറ്റ് ](/glossary/#mainnet) ൽ നിന്ന് വെവ്വേറെ ഷിപ്പുചെയ്യുന്നുവെന്നത് ഓർത്തിരിക്കേണ്ടത് പ്രധാനമാണ് - ഇന്ന് നമ്മൾ ഉപയോഗിക്കുന്ന ശൃംഖല. [ബീക്കൺ ചെയിനും](/upgrades/beacon-chain/) അതിന്റെ [ഷാർഡ് ചെയിനുകളും](/upgrades/sharding/) സമാന്തരമായി [പ്രൂഫ് ഓഫ് സ്റ്റേക്ക് സിസ്റ്റത്തിൽ](/developers/docs/consensus-mechanisms/pos/) പ്രവർത്തിക്കുമ്പോൾ തന്നെ [പ്രൂഫ് ഓഫ് വർക്ക്](/developers/docs/consensus-mechanisms/pow/) ഉപയോഗിച്ച് Ethereum മെയിൻനെറ്റ് സമാന്തരമായി പ്രവർത്തിക്കും. ഈ രണ്ട് സിസ്റ്റങ്ങളും ഒന്നിച്ച് ലയിപ്പിക്കുന്നതാണ് ഡോക്കിംഗ്. ഒരു ഇന്റർസ്റ്റെല്ലാർ യാത്രയ്ക്ക് തികച്ചും തയ്യാറാകാത്ത ഒരു ബഹിരാകാശ കപ്പലാണ് Ethereum എന്ന് സങ്കൽപ്പിക്കുക. ബീക്കൺ ചെയിനും ഷാർഡ് ചെയിനുകളും ഉപയോഗിച്ച് കമ്മ്യൂണിറ്റി ഒരു പുതിയ എഞ്ചിനും കഠിനമാക്കിയ ഹലും നിർമ്മിച്ചു. സമയമാകുമ്പോൾ, ഒരൊറ്റ കപ്പൽ ആയി മാറാന്‍ പാകത്തില്‍ നിലവിലെ കപ്പൽ ഈ പുതിയ സിസ്റ്റത്തിൽ ഡോക്ക് ചെയ്യുന്നതിനാൽ, കുറച്ചധികം ലൈറ്റ്‌ഇയറുകൾ പിന്നിട്ട് പ്രപഞ്ചത്തെ വെല്ലുവിളിക്കാന്‍ തയ്യാറാവും. @@ -45,4 +45,4 @@ Eth2 അപ്‌ഗ്രേഡുകളെല്ലാം ഏതാണ്ട മെയിൻനെറ്റ് ഒരു ഷാർഡായി മാറുന്നതോടെ, ഷാർഡ് ചെയിനുകൾ വിജയകരമായി നടപ്പിലാക്കുന്നത് ഈ നവീകരണത്തിന് നിർണ്ണായകമാണ്. ഷാർഡിംഗിലേക്ക് രണ്ടാമത്തെ നവീകരണം നടത്തണോ എന്ന് തീരുമാനിക്കാൻ കമ്മ്യൂണിറ്റിയെ സഹായിക്കുന്നതിൽ ഈ മാറ്റം ഒരു പ്രധാന പങ്ക് വഹിക്കാൻ സാധ്യതയുണ്ട്. ഈ അപ്‌ഗ്രേഡ് മറ്റ് ഷാർഡുകളെ മെയിൻനെറ്റ് പോലെയാക്കും: കൂടുതൽ ഡാറ്റ മാത്രമല്ല അവയ്ക്ക് ഇടപാടുകളും സ്മാർട്ട് കരാറുകളും കൈകാര്യം ചെയ്യാനും കഴിയും. -ഷാർഡ് ചെയിനുകള്‍ +ഷാർഡ് ചെയിനുകള്‍ diff --git a/src/content/translations/ml/upgrades/shard-chains/index.md b/src/content/translations/ml/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ml/upgrades/shard-chains/index.md rename to src/content/translations/ml/upgrades/sharding/index.md diff --git a/src/content/translations/nl/nft/index.md b/src/content/translations/nl/nft/index.md index 3691c92ac31..4e22fcf0d1b 100644 --- a/src/content/translations/nl/nft/index.md +++ b/src/content/translations/nl/nft/index.md @@ -406,7 +406,7 @@ Geschat wordt dat upgrades voor schaalbaarheid het netwerk toestaan om tussen de [Vitalik Buterin over het potentieel voor transacties per seconde met sharding](https://twitter.com/VitalikButerin/status/1312905884549300224) -Minimaal zal sharding 64 keer de hoeveelheid transacties van vandaag de dag toestaan, die momenteel op ongeveer 15 transacties staat. Dat is de hoeveelheid shardketens (extra gegevens en capaciteit) die wordt geïntroduceerd. [Meer over shardketens](/upgrades/shard-chains/) +Minimaal zal sharding 64 keer de hoeveelheid transacties van vandaag de dag toestaan, die momenteel op ongeveer 15 transacties staat. Dat is de hoeveelheid shardketens (extra gegevens en capaciteit) die wordt geïntroduceerd. [Meer over shardketens](/upgrades/sharding/) Dat betekent dat we kunnen inschatten hoelang het zal duren om 100.000 transacties te verwerken zodat we het kunnen vergelijken met het bovenstaande voorbeeld van Visa. diff --git a/src/content/translations/nl/upgrades/beacon-chain/index.md b/src/content/translations/nl/upgrades/beacon-chain/index.md index b34ae0dcfc1..98d1467b381 100644 --- a/src/content/translations/nl/upgrades/beacon-chain/index.md +++ b/src/content/translations/nl/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: U kent dit wellicht als "Fase 0" op technische routekaarten. ## Wat doet de Beacon Chain? {#what-does-the-beacon-chain-do} -De Beacon Chain zal het uitgebreide netwerk leiden of coördineren tussen [shards](/upgrades/shard-chains/) en [stakers](/staking/). Maar het zal niet zijn zoals het [Ethereum-hoofdnet](/glossary/#mainnet) dat we nu gebruiken. Het kan geen accounts of slimme contracten aan. +De Beacon Chain zal het uitgebreide netwerk leiden of coördineren tussen [shards](/upgrades/sharding/) en [stakers](/staking/). Maar het zal niet zijn zoals het [Ethereum-hoofdnet](/glossary/#mainnet) dat we nu gebruiken. Het kan geen accounts of slimme contracten aan. Het doel van de Beacon Chain zal in de loop van de tijd veranderen, maar het is een fundamenteel onderdeel voor [het veilige, duurzame en haalbare Ethereum waar we naartoe werken.](/upgrades/vision/). @@ -33,7 +33,7 @@ Sstaken en een validator worden is makkelijker dan [mining](/developers/docs/min Als u geïnteresseerd bent om een validator te worden en de Beacon Chain te beveiligen, hier vindt u meer informatie over staken. -Dit is ook een belangrijke verandering voor een andere upgrade: [shardketens](/upgrades/shard-chains/). +Dit is ook een belangrijke verandering voor een andere upgrade: [shardketens](/upgrades/sharding/). ### Opzetten van shardketens {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ In het begin zal de Beacon Chain apart bestaan van het Ethereum-hoofdnet dat we Shardketens kunnen alleen op een veilige manier in het Ethereum-netwerk komen als er een proof-of-stake consensusmechanisme geïmplementeerd is. De Beacon Chain zal het staken introduceren en de weg vrijmaken voor de upgrade van de shardketen die zal volgen. - + Shardketens diff --git a/src/content/translations/nl/upgrades/merge/index.md b/src/content/translations/nl/upgrades/merge/index.md index 3f2af5a5895..9ecded259c5 100644 --- a/src/content/translations/nl/upgrades/merge/index.md +++ b/src/content/translations/nl/upgrades/merge/index.md @@ -59,7 +59,7 @@ Oorspronkelijk was het plan om aan shardketens te werken voor de merge, om de sc Dit zal een voortdurende beoordeling zijn van de gemeenschap over de noodzaak van mogelijk meerdere rondes van shardketens om eindeloze schaalbaarheid mogelijk te maken. - + Shardketens diff --git a/src/content/translations/nl/upgrades/shard-chains/index.md b/src/content/translations/nl/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/nl/upgrades/shard-chains/index.md rename to src/content/translations/nl/upgrades/sharding/index.md diff --git a/src/content/translations/pl/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/pl/developers/docs/consensus-mechanisms/pos/index.md index f1657256a94..5ef6e9f999e 100644 --- a/src/content/translations/pl/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/pl/developers/docs/consensus-mechanisms/pos/index.md @@ -37,7 +37,7 @@ Jeżeli poświadczasz szkodliwe bloki, tracisz zastaw. ### Łańcuch śledzący {#the-beacon-chain} -Gdy Ethereum zastąpi proof-of-work przez proof-of-stake, zostanie dodana złożoność [łańcuchów odłamkowych](/upgrades/shard-chains/). Są to oddzielne blockchainy, które będą potrzebowały walidatorów do przetwarzania transakcji i tworzenia nowych bloków. Planowane są 64 łańcuchy odłamkowe, a wszystkie one wymagają współdzielonego porozumienia w kwestii stanu sieci. Potrzebna jest więc dodatkowa koordynacja, która zostanie zrealizowana z użyciem [łańcucha nawigacyjnego](/upgrades/beacon-chain/). +Gdy Ethereum zastąpi proof-of-work przez proof-of-stake, zostanie dodana złożoność [łańcuchów odłamkowych](/upgrades/sharding/). Są to oddzielne blockchainy, które będą potrzebowały walidatorów do przetwarzania transakcji i tworzenia nowych bloków. Planowane są 64 łańcuchy odłamkowe, a wszystkie one wymagają współdzielonego porozumienia w kwestii stanu sieci. Potrzebna jest więc dodatkowa koordynacja, która zostanie zrealizowana z użyciem [łańcucha nawigacyjnego](/upgrades/beacon-chain/). Łańcuch śledzący odbiera informację o stanie z odłamków (fragmentów) i udostępnia ją innym odłamkom, aby sieć mogła pozostać zsynchronizowana. Łańcuch śledzący zarządza również walidatorami, od rejestrowania ich depozytów zastawnych po wydawanie im nagród i kar. diff --git a/src/content/translations/pl/developers/docs/scaling/index.md b/src/content/translations/pl/developers/docs/scaling/index.md index 9e7231c298d..422639581ab 100644 --- a/src/content/translations/pl/developers/docs/scaling/index.md +++ b/src/content/translations/pl/developers/docs/scaling/index.md @@ -27,7 +27,7 @@ Ta metoda skalowania wymaga zmian w protokole Ethereum ([sieć główna](/glossa Sharding jest procesem poziomego dzielenia bazy danych w celu rozłożenia obciążenia. W kontekście Ethereum sharding zmniejszy zatłoczenie sieci i zwiększy liczbę transakcji na sekundę dzięki tworzeniu nowych łańcuchów — „odłamków”. Odciąży to również każdego walidatora, który nie będzie już musiał przetwarzać wszystkich transakcji w całej sieci. -Dowiedz się więcej o shardingu. +Dowiedz się więcej o shardingu. ## Skalowanie off-chain {#off-chain-scaling} diff --git a/src/content/translations/pl/upgrades/beacon-chain/index.md b/src/content/translations/pl/upgrades/beacon-chain/index.md index 98969da9602..8754aa8a912 100644 --- a/src/content/translations/pl/upgrades/beacon-chain/index.md +++ b/src/content/translations/pl/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Być może znasz to jako "etap 0" w hamonogramie technicznym ## Co robi łańcuch śledzący? {#what-does-the-beacon-chain-do} -Łańcuch śledzący będzie prowadził lub koordynował rozszerzoną sieć [fragmentów](/upgrades/shard-chains/) i [zastawiających](/staking/). Ale nie będzie jak sieć główna [Ethereum](/glossary/#mainnet) dzisiaj. Nie może on obsługiwać kont ani inteligentnych kontraktów. +Łańcuch śledzący będzie prowadził lub koordynował rozszerzoną sieć [fragmentów](/upgrades/sharding/) i [zastawiających](/staking/). Ale nie będzie jak sieć główna [Ethereum](/glossary/#mainnet) dzisiaj. Nie może on obsługiwać kont ani inteligentnych kontraktów. Rola łańcucha śledzącego z czasem się zmieni, ale jest to podstawowy komponent [bezpiecznego, zrównoważonego i skalowalnego Ethereum, nad którym pracujemy](/upgrades/vision/). @@ -33,7 +33,7 @@ Zastawianie i stawanie się walidatorem jest łatwiejsze niż [wydobywanie](/dev Jeżeli jesteś zainteresowany staniem się walidatorem i pomocą w zabezpieczaniu łańcucha śledzącego, dowiedz się więcej o zastawianiu. -Jest to również ważna zmiana w stosunku do drugiej aktualizacji Eth2: [łańcuchów szczątkowych](/upgrades/shard-chains/). +Jest to również ważna zmiana w stosunku do drugiej aktualizacji Eth2: [łańcuchów szczątkowych](/upgrades/sharding/). ### Ustawianie łańcuchów szczątkowych {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Wszystkie ulepszenia Eth2 są poniekąd wzajemnie powiązane. Więc podsumujmy, Łańcuch śledzący będzie początkowo odrębny od głównej sieci Ethereum, której używamy dziś. Jednak ostatecznie zostaną one połączone. -Dokowanie +Dokowanie diff --git a/src/content/translations/pl/upgrades/merge/index.md b/src/content/translations/pl/upgrades/merge/index.md index 15ba381773f..0d3daa97d87 100644 --- a/src/content/translations/pl/upgrades/merge/index.md +++ b/src/content/translations/pl/upgrades/merge/index.md @@ -17,7 +17,7 @@ summaryPoint4: Być może znasz ten etap jako „Faza 1.5” z technicznego harm ## Czym jest dokowanie? {#what-is-the-docking} -Ważne jest, by pamiętać, że początkowo inne ulepszenia Eth2 zostaną przetransportowane oddzielnie z [sieci głównej](/glossary/#mainnet) — sieci, której używamy dzisiaj. Sieć główna Ethereum będzie nadal zabezpieczona za pomocą [proof-of-work](/developers/docs/consensus-mechanisms/pow/), nawet gdy [łańcuch śledzący](/upgrades/beacon-chain/) i jego [łańcuch odłamków](/upgrades/shard-chains/) działają równolegle przy użyciu [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). Dokowanie jest łączeniem tych dwóch systemów. +Ważne jest, by pamiętać, że początkowo inne ulepszenia Eth2 zostaną przetransportowane oddzielnie z [sieci głównej](/glossary/#mainnet) — sieci, której używamy dzisiaj. Sieć główna Ethereum będzie nadal zabezpieczona za pomocą [proof-of-work](/developers/docs/consensus-mechanisms/pow/), nawet gdy [łańcuch śledzący](/upgrades/beacon-chain/) i jego [łańcuch odłamków](/upgrades/sharding/) działają równolegle przy użyciu [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). Dokowanie jest łączeniem tych dwóch systemów. Wyobraź sobie że Ethereum jest statkiem kosmicznym, który nie jest gotowy na międzygalaktyczną podróż. Dzięki łańcuchowi śledzącemu i łańcuchom odłamkowym społeczność zbuduje nowy silnik i utwardzony kadłub. Kiedy przyjdzie czas, statek zostanie zadokowany z tymi nowymi systemami, więc będzie mógł być jedną całością, gotową do podróży na odległość wielu lat świetlnych i odkrywania wszechświata. @@ -45,4 +45,4 @@ Kiedy nastąpi dokowanie, stakerzy zostaną przydzieleni do walidacji sieci gł W momencie, gdy sieć główna staje się odłamkiem, udana implementacja łańcuchów odłamkowych jest kluczowa dla tej aktualizacji. Najprawdopodobniej ta sytuacja odegra kluczową rolę w pomaganiu społeczności w decydowaniu o dalszym rozwoju drugiego ulepszenia shardingu. To ulepszenie sprawi że pojawią się inne odłamki podobne do sieci głównej: będą gotowe do obsługi transakcji, inteligentnych kontraktów, a nie tylko dostarczania większej ilości danych. -Łańcuchy odłamkowe +Łańcuchy odłamkowe diff --git a/src/content/translations/pl/upgrades/shard-chains/index.md b/src/content/translations/pl/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/pl/upgrades/shard-chains/index.md rename to src/content/translations/pl/upgrades/sharding/index.md diff --git a/src/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/index.md index 2e013fe5d09..49d86d7fd7d 100644 --- a/src/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/pt-br/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ A prova de participação vem com várias melhorias referente ao sistema de prov - melhor eficiência energética: você não precisa usar muita energia minerando blocos - menores barreiras à entrada, redução dos requisitos de hardware — você não precisa de um hardware potente para ter a chance de criar novos blocos - maior imunidade à centralização: a prova de participação deve gerar mais nós na rede -- suporte mais forte para as [cadeias de fragmentos](/upgrades/shard-chains/) – uma atualização chave para dimensionamento da rede Ethereum +- suporte mais forte para as [cadeias de fragmentos](/upgrades/sharding/) – uma atualização chave para dimensionamento da rede Ethereum ## Prova de participação, participação (staking) e validadores {#pos-staking-validators} @@ -37,7 +37,7 @@ Se você atesta/certifica blocos maliciosos, perde sua participação (stake). ### A Beacon Chain {#the-beacon-chain} -Quando o Ethereum substituir a prova de trabalho para a prova de participação, existirá uma complexidade adicional devido às [cadeias de fragmentos](/upgrades/shard-chains/). Estas são blockchains separadas que vão precisar de validadores para processar transações e criar novos blocos. O plano é ter 64 cadeias de fragmentos e todas elas precisam de uma compreensão compartilhada do estado da rede. Como resultado, uma coordenação extra é necessária, e será feita pela chamada cadeia de referência ou [Beacon Chain](/upgrades/beacon-chain/). +Quando o Ethereum substituir a prova de trabalho para a prova de participação, existirá uma complexidade adicional devido às [cadeias de fragmentos](/upgrades/sharding/). Estas são blockchains separadas que vão precisar de validadores para processar transações e criar novos blocos. O plano é ter 64 cadeias de fragmentos e todas elas precisam de uma compreensão compartilhada do estado da rede. Como resultado, uma coordenação extra é necessária, e será feita pela chamada cadeia de referência ou [Beacon Chain](/upgrades/beacon-chain/). A Beacon Chain recebe informações de estado de fragmentos (shards) e as disponibiliza para outros fragmentos para que a rede possa permanecer em sincronia. A Beacon Chain também gerenciará os validadores, do registro de depósito de suas participações (stakes) até a emissão de suas recompensas e penalidades. diff --git a/src/content/translations/pt-br/nft/index.md b/src/content/translations/pt-br/nft/index.md index 7979f07d2e4..345dc7172da 100644 --- a/src/content/translations/pt-br/nft/index.md +++ b/src/content/translations/pt-br/nft/index.md @@ -406,7 +406,7 @@ Estima-se que a melhoria de dimensionamento permitirá que a rede processe entre [Vitalik Buterin sobre transações potenciais por segundo com a fragmentação](https://twitter.com/VitalikButerin/status/1312905884549300224) -No mínimo, a fragmentação permitirá 64 vezes mais transações, que hoje está em torno de 15 transações. Essa é a quantidade de cadeias de fragmentos (dados extras e capacidade) sendo introduzida. [Mais sobre cadeias de fragmentação](/upgrades/shard-chains/) +No mínimo, a fragmentação permitirá 64 vezes mais transações, que hoje está em torno de 15 transações. Essa é a quantidade de cadeias de fragmentos (dados extras e capacidade) sendo introduzida. [Mais sobre cadeias de fragmentação](/upgrades/sharding/) Isso significa que podemos estimar quanto tempo levará para processar 100.000 transações, para que possamos comparar com o exemplo da Visa acima. diff --git a/src/content/translations/pt-br/upgrades/beacon-chain/index.md b/src/content/translations/pt-br/upgrades/beacon-chain/index.md index c3e9907710d..9262178770c 100644 --- a/src/content/translations/pt-br/upgrades/beacon-chain/index.md +++ b/src/content/translations/pt-br/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Talvez você tenha visto isso sendo mencionado como "Fase 0" nos ## O que a Beacon Chain faz? {#what-does-the-beacon-chain-do} -A Beacon Chain conduzirá ou coordenará a rede estendida de [shards](/upgrades/shard-chains/) ("fragmentos") e [stakers](/staking/) ("participantes"). Mas não será como a [rede principal da Ethereum](/glossary/#mainnet) de hoje. Ela não será capaz de gerenciar contas ou contratos inteligentes. +A Beacon Chain conduzirá ou coordenará a rede estendida de [shards](/upgrades/sharding/) ("fragmentos") e [stakers](/staking/) ("participantes"). Mas não será como a [rede principal da Ethereum](/glossary/#mainnet) de hoje. Ela não será capaz de gerenciar contas ou contratos inteligentes. O papel da Beacon Chain mudará com o tempo, mas é um componente fundamental para [o Ethereum seguro, sustentável e dimensionável rumo ao qual estamos trabalhando](/upgrades/vision/). @@ -33,7 +33,7 @@ Participar e se tornar um validador é mais fácil do que [minerar](/developers/ Se você estiver interessado em se tornar um validador e ajudar a manter a Beacon Chain segura, veja mais informações sobre como participar. -Essa também é uma mudança importante para outra melhoria do Ethereum: [as cadeias de fragmentos (shard chains)](/upgrades/shard-chains/). +Essa também é uma mudança importante para outra melhoria do Ethereum: [as cadeias de fragmentos (shard chains)](/upgrades/sharding/). ### Preparação para as cadeias de fragmentos {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ A Beacon Chain existirá, a princípio, separada da rede principal Ethereum que As cadeias de fragmentos (shard chains) somente podem ser introduzidas ao ecossistema Ethereum com um mecanismo de consenso de prova de participação em vigor. A Beacon Chain introduzirá a participação (staking), preparando assim o caminho para a implementação das cadeias de fragmentos na próxima atualização. - + Cadeias de fragmentos diff --git a/src/content/translations/pt-br/upgrades/merge/index.md b/src/content/translations/pt-br/upgrades/merge/index.md index c9d50532b3c..788000b1329 100644 --- a/src/content/translations/pt-br/upgrades/merge/index.md +++ b/src/content/translations/pt-br/upgrades/merge/index.md @@ -59,7 +59,7 @@ No início, o plano era trabalhar em cadeias de fragmentos antes da fusão – p Essa será uma avaliação contínua da comunidade quanto à necessidade de rodadas potencialmente múltiplas de cadeias de fragmentos para permitir dimensionamento sem limites. - + Cadeias de fragmentos diff --git a/src/content/translations/pt-br/upgrades/shard-chains/index.md b/src/content/translations/pt-br/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/pt-br/upgrades/shard-chains/index.md rename to src/content/translations/pt-br/upgrades/sharding/index.md diff --git a/src/content/translations/ro/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/ro/developers/docs/consensus-mechanisms/pos/index.md index b71a78fd2be..3174bbae1d0 100644 --- a/src/content/translations/ro/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/ro/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ Dovada-mizei aduce o serie de îmbunătățiri ale sistemului dovezii-muncii: - eficiență energetică mai bună – nu trebuie utilizată multă energie pentru minarea blocurilor - bariere mai mici la intrare, cerințe hardware reduse – nu aveți nevoie de hardware super performant pentru a avea o șansă de a crea blocuri noi - imunitate mai puternică la centralizare – dovada-mizei ar trebui să conducă la mai multe noduri în rețea -- o compatibilitate mai mare pentru [lanțurile de fragmente](/upgrades/shard-chains/) – o actualizare esențială în scalarea rețelei Ethereum +- o compatibilitate mai mare pentru [lanțurile de fragmente](/upgrades/sharding/) – o actualizare esențială în scalarea rețelei Ethereum ## Dovada-mizei, mizarea și validatorii {#pos-staking-validators} @@ -37,7 +37,7 @@ Dacă atestați blocuri rău intenționate, veți pierde miza. ### Lanțul Beacon {#the-beacon-chain} -Când Ethereum va înlocui dovada-muncii (PoW) cu dovada-mizei (PoS), se va adăuga o complexitate numită [lanțuri de fragmente](/upgrades/shard-chains/). Acestea sunt blockchain-uri separate care vor avea nevoie de validatori pentru a procesa tranzacțiile și a crea noi blocuri. Se prevede să avem 64 de lanțuri de fragmente și toate au nevoie de o înțelegere comună a stării rețelei. Din acest motiv este necesară o coordonare suplimentară și va fi realizată de [lanțul beacon](/upgrades/beacon-chain/). +Când Ethereum va înlocui dovada-muncii (PoW) cu dovada-mizei (PoS), se va adăuga o complexitate numită [lanțuri de fragmente](/upgrades/sharding/). Acestea sunt blockchain-uri separate care vor avea nevoie de validatori pentru a procesa tranzacțiile și a crea noi blocuri. Se prevede să avem 64 de lanțuri de fragmente și toate au nevoie de o înțelegere comună a stării rețelei. Din acest motiv este necesară o coordonare suplimentară și va fi realizată de [lanțul beacon](/upgrades/beacon-chain/). Lanțul beacon primește informații de stare de la fragmente și le face disponibile altor fragmente, astfel încât rețeaua să poată rămâne sincronizată. Lanțul beacon va gestiona și validatorii, de la înregistrarea depozitelor de miză ale acestora până la emiterea recompenselor și a penalităților. diff --git a/src/content/translations/ro/developers/docs/scaling/index.md b/src/content/translations/ro/developers/docs/scaling/index.md index 7365e937fe9..86f75243708 100644 --- a/src/content/translations/ro/developers/docs/scaling/index.md +++ b/src/content/translations/ro/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ Această metodă de scalare necesită modificări ale protocolului Ethereum (niv Fragmentarea este procesul de divizare orizontală a unei baze de date pentru a distribui sarcina. În contextul Ethereum, fragmentarea va reduce congestionarea rețelei și va crește numărul de tranzacții pe secundă prin crearea de noi lanțuri, cunoscute sub numele de „fragmente.” Acest lucru va ușura de asemenea sarcina fiecărui validator, care nu va mai fi nevoit să proceseze integral toate tranzacțiile din întreaga rețea. -Aflați mai multe despre [fragmentare](/upgrades/shard-chains/). +Aflați mai multe despre [fragmentare](/upgrades/sharding/). ## Scalarea off-chain {#off-chain-scaling} diff --git a/src/content/translations/ro/nft/index.md b/src/content/translations/ro/nft/index.md index ccab24c77f4..4d84537c057 100644 --- a/src/content/translations/ro/nft/index.md +++ b/src/content/translations/ro/nft/index.md @@ -406,7 +406,7 @@ Se estimează că actualizările de scalabilitate vor permite rețelei să proce [Vitalik Buterin despre potențialul tranzacțiilor pe secundă cu sistemul de fragmentare](https://twitter.com/VitalikButerin/status/1312905884549300224) -Fragmentarea va permite cel puțin un număr de tranzacții de 64 de ori mai mare decât numărul actual, care este de aproximativ 15 tranzacții. Este cantitatea de lanțuri de fragmente (date și capacitate în plus) care va fi introdusă. [Mai multe informații despre lanțurile de fragmente](/upgrades/shard-chains/) +Fragmentarea va permite cel puțin un număr de tranzacții de 64 de ori mai mare decât numărul actual, care este de aproximativ 15 tranzacții. Este cantitatea de lanțuri de fragmente (date și capacitate în plus) care va fi introdusă. [Mai multe informații despre lanțurile de fragmente](/upgrades/sharding/) Asta înseamnă că putem estima cât timp va dura procesarea a 100.000 de tranzacții, astfel încât să putem compara cu exemplul Visa de mai sus. diff --git a/src/content/translations/ro/upgrades/beacon-chain/index.md b/src/content/translations/ro/upgrades/beacon-chain/index.md index 8b09c0f18c3..1f1ffeec5b0 100644 --- a/src/content/translations/ro/upgrades/beacon-chain/index.md +++ b/src/content/translations/ro/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: S-ar putea să-l cunoști sub numele de „Faza 0” pe foile de ## Ce face Lanțul Beacon? {#what-does-the-beacon-chain-do} -Lanțul Beacon va conduce sau va coordona rețeaua extinsă de [fragmente](/upgrades/shard-chains/) și [stakeri](/staking/). Dar nu va fi ca [Rețeaua principală Ethereum](/glossary/#mainnet) de astăzi. Nu poate gestiona conturi sau contracte inteligente. +Lanțul Beacon va conduce sau va coordona rețeaua extinsă de [fragmente](/upgrades/sharding/) și [stakeri](/staking/). Dar nu va fi ca [Rețeaua principală Ethereum](/glossary/#mainnet) de astăzi. Nu poate gestiona conturi sau contracte inteligente. Rolul rețelei Beacon se va schimba în timp, dar este o componentă fundamentală pentru [Ethereum-ul sigur, durabil și scalabil la care lucrăm](/upgrades/vision/). @@ -33,7 +33,7 @@ Mizarea și transformarea în validator este mai ușoară decât [minatul](/deve Dacă dorești să devii validator și să ajuți la securizarea rețelei Beacon, află mai multe despre mizare. -Aceasta este o altă schimbare importantă pentru următorul upgrade Eth2: [lanțurile de fragmente](/upgrades/shard-chains/). +Aceasta este o altă schimbare importantă pentru următorul upgrade Eth2: [lanțurile de fragmente](/upgrades/sharding/). ### Configurarea lanțurilor de fragmente {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ La început, Rețeaua Beacon va exista separat de Rețeaua principală Ethereum Lanțurile de fragmente nu pot intra în siguranță în ecosistemul Ethereum decât cu un mecanism de consens bazat pe Dovada de Minare(proof-of-stake). Rețeaua Beacon va introduce mizarea, pregătind astfel terenul pentru ca actualizarea lanțului de fragmente să aibă loc. -Lanțuri de fragmente +Lanțuri de fragmente diff --git a/src/content/translations/ro/upgrades/merge/index.md b/src/content/translations/ro/upgrades/merge/index.md index 74085beccd1..eb69a6549b6 100644 --- a/src/content/translations/ro/upgrades/merge/index.md +++ b/src/content/translations/ro/upgrades/merge/index.md @@ -57,4 +57,4 @@ Inițial, planul era ca lanțurile de fragmente să fie folosite înainte de uni Acest lucru va fi evaluat în continuu de către comunitate în ceea ce privește necesitatea unor potențiale runde multiple de lanțuri de fragmente pentru a permite o scalabilitate infinită. -Lanțuri de fragmente +Lanțuri de fragmente diff --git a/src/content/translations/ro/upgrades/shard-chains/index.md b/src/content/translations/ro/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ro/upgrades/shard-chains/index.md rename to src/content/translations/ro/upgrades/sharding/index.md diff --git a/src/content/translations/ru/nft/index.md b/src/content/translations/ru/nft/index.md index 048c7575fbf..e7ed18f401a 100644 --- a/src/content/translations/ru/nft/index.md +++ b/src/content/translations/ru/nft/index.md @@ -406,7 +406,7 @@ _Также важно помнить, что Ethereum делает больше [Виталик Бутерин о потенциале транзакций в секунду при использовании шардинга](https://twitter.com/VitalikButerin/status/1312905884549300224) -Как минимум, шардинг позволит в 64 раза увеличить количество транзакций по сравнению с сегодняшним уровнем, который составляет около 15 транзакций. Это количество вводимых цепочек-осколков (дополнительные данные и емкость). [Подробнее о цепочках-осколках](/upgrades/shard-chains/) +Как минимум, шардинг позволит в 64 раза увеличить количество транзакций по сравнению с сегодняшним уровнем, который составляет около 15 транзакций. Это количество вводимых цепочек-осколков (дополнительные данные и емкость). [Подробнее о цепочках-осколках](/upgrades/sharding/) Это означает, что мы можем оценить, сколько времени потребуется для обработки 100 000 транзакций, чтобы сравнить это с примером Visa выше. diff --git a/src/content/translations/ru/upgrades/beacon-chain/index.md b/src/content/translations/ru/upgrades/beacon-chain/index.md index 55073dfa14e..cac911207e9 100644 --- a/src/content/translations/ru/upgrades/beacon-chain/index.md +++ b/src/content/translations/ru/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: В технических дорожных картах вы мо ## Что делает Beacon Chain? {#what-does-the-beacon-chain-do} -Beacon Chain будет осуществлять или координировать расширенную сеть [осколков](/upgrades/shard-chains/) и [стейкеров](/staking/). Но это не будет похоже на сегодняшнюю [основную сеть Ethereum](/glossary/#mainnet). Она не может работать с аккаунтами или смарт-контрактами. +Beacon Chain будет осуществлять или координировать расширенную сеть [осколков](/upgrades/sharding/) и [стейкеров](/staking/). Но это не будет похоже на сегодняшнюю [основную сеть Ethereum](/glossary/#mainnet). Она не может работать с аккаунтами или смарт-контрактами. Роль Beacon Chain со временем изменится, но это основополагающий компонент для [безопасного, устойчивого и масштабируемого Ethereum, над которым мы работаем](/upgrades/vision/). @@ -33,7 +33,7 @@ Beacon Chain вводит [доказательство владения](/devel Если вы хотите стать валидатором и принять участие в защите Beacon Chain, узнайте больше о стейкинге. -Это также важное изменение для другого обновления: [цепочек осколков](/upgrades/shard-chains/). +Это также важное изменение для другого обновления: [цепочек осколков](/upgrades/sharding/). ### Настройка цепей-осколков {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ Beacon Chain вводит [доказательство владения](/devel Цепочки-осколки способны только на безопасный вход в экосистему Ethereum с механизмом консенсуса на основе доказательства владения. Beacon Chain вводит ставки, прокладывая путь к последующему обновлению с цепочками-осколками. - + Цепочки-осколки diff --git a/src/content/translations/ru/upgrades/merge/index.md b/src/content/translations/ru/upgrades/merge/index.md index cb94a283ba5..5d6f8684898 100644 --- a/src/content/translations/ru/upgrades/merge/index.md +++ b/src/content/translations/ru/upgrades/merge/index.md @@ -59,7 +59,7 @@ summaryPoint4: Раньше мы называли это «стыковкой». Это будет постоянная оценка сообщества относительно необходимости потенциально нескольких раундов цепочек осколков, чтобы обеспечить бесконечную масштабируемость. - + Цепочки-осколки diff --git a/src/content/translations/ru/upgrades/shard-chains/index.md b/src/content/translations/ru/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/ru/upgrades/shard-chains/index.md rename to src/content/translations/ru/upgrades/sharding/index.md diff --git a/src/content/translations/sl/nft/index.md b/src/content/translations/sl/nft/index.md index dc849e44f45..82673490a0d 100644 --- a/src/content/translations/sl/nft/index.md +++ b/src/content/translations/sl/nft/index.md @@ -400,7 +400,7 @@ Ocenjuje se, da bo Eth2 omrežju omogočal, da bo procesiralo med 25.000 in 100. [Vitalik Buterin o potencialu transakcij na sekundo na Eth2](https://twitter.com/VitalikButerin/status/1312905884549300224?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1312905886327664640%7Ctwgr%5E%7Ctwcon%5Es2_&ref_url=https%3A%2F%2Fwww.coinspeaker.com%2Fvitalik-buterin-ethereum-layer-2%2F) -Eth2 bo omogočal vsaj 64-krat večjo količino transakcij kot danes, ko ta številka stoji okoli 15 transakcij. To je število razdrobljenih verig (dodatnih podatkov in kapacitet), ki se jih uvaja. [Več o razdrobljenih verigah](/upgrades/shard-chains/) +Eth2 bo omogočal vsaj 64-krat večjo količino transakcij kot danes, ko ta številka stoji okoli 15 transakcij. To je število razdrobljenih verig (dodatnih podatkov in kapacitet), ki se jih uvaja. [Več o razdrobljenih verigah](/upgrades/sharding/) To pomeni, da lahko ocenimo, kako dolgo bo trajalo, da se obdela 100.000 transakcij in tako to primerjamo z zgornjim primerom Vise. diff --git a/src/content/translations/sl/upgrades/beacon-chain/index.md b/src/content/translations/sl/upgrades/beacon-chain/index.md index ad6263605c1..87ad08aaebe 100644 --- a/src/content/translations/sl/upgrades/beacon-chain/index.md +++ b/src/content/translations/sl/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Oddajniško verigo morda poznate pod imenom "faza 0", ki se upora ## Kakšen je namen oddajniške verige? {#what-does-the-beacon-chain-do} -Oddajniška veriga bo izvajala in usklajevala razširjeno omrežje [drobcev](/upgrades/shard-chains/) in [zastavljavcev](/staking/). Vendar ne bo enaka kot [glavno Ethereum omrežje](/glossary/#mainnet) danes. Ne more obdelovati računov ali pametnih pogodb. +Oddajniška veriga bo izvajala in usklajevala razširjeno omrežje [drobcev](/upgrades/sharding/) in [zastavljavcev](/staking/). Vendar ne bo enaka kot [glavno Ethereum omrežje](/glossary/#mainnet) danes. Ne more obdelovati računov ali pametnih pogodb. Vloga oddajniške verige se bo sčasoma spremenila, vendar je temeljni sestavni del [varnega, trajnostnega in nadgradljivega Ethereuma, ki ga želimo razviti](/upgrades/vision/). @@ -33,7 +33,7 @@ Zastavljanje in delovanje kot validator sta lažja kot [rudarjenje](/developers/ Če vas zanima, da bi postali validator in pomagali zaščititi oddajniško verigo, preberite več o zastavljanju. -To je prav tako pomembna sprememba za drugo Eth2 nadgradnjo: [razdrobljene verige](/upgrades/shard-chains/). +To je prav tako pomembna sprememba za drugo Eth2 nadgradnjo: [razdrobljene verige](/upgrades/sharding/). ### Priprava na razdrobljene verige {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Oddajniška veriga bo sprva obstajala ločeno od glavnega omrežja, ki ga uporab Razdrobljene verige lahko v ekosistem Ethereum varno vstopijo samo, ko je vključen mehanizem za doseganje soglasja z dokazom o deležu. Oddajniška veriga bo uvedla zastavljanje in tlakovala pot za nadgradnjo razdrobljenih verig, ki prihaja. -Razdrobljene verige +Razdrobljene verige diff --git a/src/content/translations/sl/upgrades/merge/index.md b/src/content/translations/sl/upgrades/merge/index.md index a8bdde1738f..5f469b41b62 100644 --- a/src/content/translations/sl/upgrades/merge/index.md +++ b/src/content/translations/sl/upgrades/merge/index.md @@ -57,4 +57,4 @@ Začetni načrt je delo na razdrobljenih verigah predvideval pred spojitvijo – Skupnost bo sprotno ocenjevala potencialno potrebo po več krogih razdrobljenih verig, da bi lahko omogočili neskončno nadgradljivost. -Razdrobljene verige +Razdrobljene verige diff --git a/src/content/translations/sl/upgrades/shard-chains/index.md b/src/content/translations/sl/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/sl/upgrades/shard-chains/index.md rename to src/content/translations/sl/upgrades/sharding/index.md diff --git a/src/content/translations/sw/upgrades/beacon-chain/index.md b/src/content/translations/sw/upgrades/beacon-chain/index.md index 5e19bfe212a..da491d286fa 100644 --- a/src/content/translations/sw/upgrades/beacon-chain/index.md +++ b/src/content/translations/sw/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Unaweza kua unaitambua hii kama "Awamu 0" kwenye mipango ya kitaa ## Myororo wa Kioleza ni nini? {#what-does-the-beacon-chain-do} -Mnyororo wa Beacon utaendeleza mwenendo wa kutanua mtandao wake wa [shards](/upgrades/shard-chains/) na [wanahisa](/staking/). Lakini haitakua kama [mtandao mkuu wa Ethereum](/glossary/#mainnet) wa leo. Inaweza kuhimili akaunti au mikataba mahiri. +Mnyororo wa Beacon utaendeleza mwenendo wa kutanua mtandao wake wa [shards](/upgrades/sharding/) na [wanahisa](/staking/). Lakini haitakua kama [mtandao mkuu wa Ethereum](/glossary/#mainnet) wa leo. Inaweza kuhimili akaunti au mikataba mahiri. Jukumu ya mnyororo wa Kioleza litabadilika baada ya mda ila sehemu ya msingi ya [usalama, kuendeleza na ubadilikaji wa Ethereum tunayoijenga](/upgrades/vision/). @@ -33,7 +33,7 @@ Kuweka hisa na kua mt hibitishaji ni rahisi kuliko [kuchimba](/developers/docs/m Kama ungependa kua mthibitishaji na kusaidia kulinda mnyororo wa Kioleza, jifunze zaidi jinsi ya kuweka hisa. -Hili pia ni badiliko muhumu kwa ajili ya uboreshaji wa Eth2:[minyororo ya vigae](/upgrades/shard-chains/). +Hili pia ni badiliko muhumu kwa ajili ya uboreshaji wa Eth2:[minyororo ya vigae](/upgrades/sharding/). ### Maandalizi ya minyororo ya shards {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ Mnyororo Kioleza, mwanzoni, itakuwa imetengana na Mtandao mkuu wa Ethereum tunao Minyororo ya Vigae itakua salama kuingia katika ikolojia ya Ethereum pale tu utaratibu wa makubaliano kwenye uthibitisho-wa-hisa utakapochukua nafasi. Mnyororo Kioleza utaanzisha hisa, ikitengeneza njia ili uboreshwaji wa mnyororo-kigae ufuate. - + Minyororo ya Kigae diff --git a/src/content/translations/sw/upgrades/merge/index.md b/src/content/translations/sw/upgrades/merge/index.md index b189f270d6c..a8f7e8ccda7 100644 --- a/src/content/translations/sw/upgrades/merge/index.md +++ b/src/content/translations/sw/upgrades/merge/index.md @@ -59,7 +59,7 @@ Hapo awali, mpango huo ulikuwa ukifanya kazi kwenye minyororo iliyokatwa kabla y Hii itakuwa tathmini inayoendelea kutoka kwa jamii juu ya hitaji la raundi nyingi za vipande vya minyororo ili kuruhusu uendelevu usio na mwisho. - + Vipande vya minyororo diff --git a/src/content/translations/sw/upgrades/shard-chains/index.md b/src/content/translations/sw/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/sw/upgrades/shard-chains/index.md rename to src/content/translations/sw/upgrades/sharding/index.md diff --git a/src/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md index 108aabdf24a..298ef6f1c8b 100644 --- a/src/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/tr/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ Hisse ispatı, bir dizi iyileştirme ile iş ispatının (PoW) yerini alacak: - daha iyi enerji verimliliği - blok madenciliği için yüksek enerji kullanmanıza gerek yok - daha düşük giriş bedeli ve donanım gereksinimleri - yeni bloklar oluşturma kabiliyeti için elit donanıma ihtiyacınız yok - merkezileştirmeye karşı daha güçlü bağışıklık - hisse ispatı ağdaki düğüm sayısını artıracaktır -- [parça zincirleri](/upgrades/shard-chains/) için daha güçlü destek - Ethereum ağını ölçeklendirme için önemli bir yükseltme +- [parça zincirleri](/upgrades/sharding/) için daha güçlü destek - Ethereum ağını ölçeklendirme için önemli bir yükseltme ## Hisse ispatı, stake etme ve doğrulayıcılar {#pos-staking-validators} @@ -37,7 +37,7 @@ Kötü niyetli blokları tasdiklerseniz, stake ettiğiniz miktarı kaybedersiniz ### İşaret zinciri {#the-beacon-chain} -Ethereum, iş ispatını hisse ispatı ile değiştirdiğinde, [parça zincirlerinin (shard chain)](/upgrades/shard-chains/) karmaşıklığı artacaktır. Bunlar, işlemleri gerçekleştirmek ve yeni bloklar oluşturmak için doğrulayıcılara ihtiyaç duyacak ayrı blok zincirleridir. 64 parça zincirinin bulunması ve hepsinin ağın durumu hakkında ortak bir anlayışa sahip olması planlanır. Sonuç olarak, ekstra koordinasyon gereklidir ve bu koordinasyon [işaret zinciri](/upgrades/beacon-chain/) tarafından sağlanacaktır. +Ethereum, iş ispatını hisse ispatı ile değiştirdiğinde, [parça zincirlerinin (shard chain)](/upgrades/sharding/) karmaşıklığı artacaktır. Bunlar, işlemleri gerçekleştirmek ve yeni bloklar oluşturmak için doğrulayıcılara ihtiyaç duyacak ayrı blok zincirleridir. 64 parça zincirinin bulunması ve hepsinin ağın durumu hakkında ortak bir anlayışa sahip olması planlanır. Sonuç olarak, ekstra koordinasyon gereklidir ve bu koordinasyon [işaret zinciri](/upgrades/beacon-chain/) tarafından sağlanacaktır. İşaret zinciri, parçalardan durum bilgilerini alır ve ağın senkronize kalabilmesi için diğer parçalar için kullanılabilir hâle getirir. Aynı zamanda işaret zinciri, stake yatırımlarını kaydetmekten ödüllerini ve cezalarını vermeye kadar doğrulayıcıları yönetecektir. diff --git a/src/content/translations/tr/developers/docs/scaling/index.md b/src/content/translations/tr/developers/docs/scaling/index.md index 866766471d8..9cf6054b13b 100644 --- a/src/content/translations/tr/developers/docs/scaling/index.md +++ b/src/content/translations/tr/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ Bu ölçeklendirme yöntemi, Ethereum protokolünde değişiklik yapılmasını Parçalama, yükü yaymak için bir veri tabanını yatay olarak bölme işlemidir. Ethereum bağlamında parçalama, "parça" olarak bilinen yeni zincirler oluşturarak ağ tıkanıklığını azaltır ve saniye başına işlem kapasitesini artırır. Bu, aynı zamanda doğrulayıcıların ağdaki işlemlerin tamamını işleme zorunluluğunu ortadan kaldırarak tüm doğrulayıcıların yükünü azaltır. -[Parçalama](/upgrades/shard-chains/) hakkında daha fazla bilgi. +[Parçalama](/upgrades/sharding/) hakkında daha fazla bilgi. ## Zincir dışında ölçeklendirme {#off-chain-scaling} diff --git a/src/content/translations/tr/nft/index.md b/src/content/translations/tr/nft/index.md index 6b930404979..0b1897cbeed 100644 --- a/src/content/translations/tr/nft/index.md +++ b/src/content/translations/tr/nft/index.md @@ -406,7 +406,7 @@ Eylül 2020 yıl sonunda 140.839.000.000 işlem gerçekleştirdiler – [Visa ma [Vitalik Buterin'in parçalama ile saniye başına işlem potansiyeli hakkında düşünceleri](https://twitter.com/VitalikButerin/status/1312905884549300224) -Parçalama, bugün yaklaşık 15 işlem olan işlem miktarının en az 64 katını mümkün kılacaktır. Bu, kullanıma giren parça zincirlerinin (ekstra veri ve kapasite) miktarıdır. [Parça zincirleri hakkında daha fazla bilgi](/upgrades/shard-chains/) +Parçalama, bugün yaklaşık 15 işlem olan işlem miktarının en az 64 katını mümkün kılacaktır. Bu, kullanıma giren parça zincirlerinin (ekstra veri ve kapasite) miktarıdır. [Parça zincirleri hakkında daha fazla bilgi](/upgrades/sharding/) Bu, yukarıdaki Visa örneğiyle karşılaştırabilmemiz için 100.000 işlemin ne kadar süreceğini tahmin edebileceğimiz anlamına gelir. diff --git a/src/content/translations/tr/upgrades/beacon-chain/index.md b/src/content/translations/tr/upgrades/beacon-chain/index.md index a0eb42c3c76..e9bc4e04f06 100644 --- a/src/content/translations/tr/upgrades/beacon-chain/index.md +++ b/src/content/translations/tr/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Bunu teknik yol haritalarından "Aşama 0" olarak biliyor olabili ## İşaret (Beacon) Zinciri Ne Yapar? {#what-does-the-beacon-chain-do} -İşaret Zinciri, [parçalardan](/upgrades/shard-chains/) ve [stake edenlerden](/staking/) oluşan genişletilmiş ağı yönetir veya koordine eder. Ancak günümüzün [Ethereum ana ağı](/glossary/#mainnet) gibi olmayacaktır. Hesapları veya akıllı sözleşmeleri ele alamaz. +İşaret Zinciri, [parçalardan](/upgrades/sharding/) ve [stake edenlerden](/staking/) oluşan genişletilmiş ağı yönetir veya koordine eder. Ancak günümüzün [Ethereum ana ağı](/glossary/#mainnet) gibi olmayacaktır. Hesapları veya akıllı sözleşmeleri ele alamaz. İşaret Zincirinin rolü zamanla değişecek ancak [geliştirmeye çalıştığımız güvenli, sürdürülebilir ve ölçeklenebilir Ethereum](/upgrades/vision/) için temel bir bileşendir. @@ -33,7 +33,7 @@ Paydaşlık ve doğrulayıcı oluşturmak [madencilik](/developers/docs/mining/) Bir doğrulayıcı olarak İşaret Zincirinin güvenliğine yardımcı olmak istiyorsanız stake etme konusunda daha fazla bilgi alın. -Bu ayrıca başka bir yükseltme için de önemli bir değişikliktir: [parça zincirleri](/upgrades/shard-chains/). +Bu ayrıca başka bir yükseltme için de önemli bir değişikliktir: [parça zincirleri](/upgrades/sharding/). ### Shard zincirleri kurulumu {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ Ethereum yükseltmelerinin tamamı bir şekilde ilişkilidir. İşaret (Beacon) Parça zincirleri, Ethereum ekosistemine yalnızca hisse ispatı mutabakat mekanizması ile güvenli bir şekilde girebilir. İşaret Zinciri, staking sistemini başlatarak gelecekte parça zinciri yükseltmesine olanak verir. - + Parça zincirleri diff --git a/src/content/translations/tr/upgrades/merge/index.md b/src/content/translations/tr/upgrades/merge/index.md index 041452db052..98251bebd3c 100644 --- a/src/content/translations/tr/upgrades/merge/index.md +++ b/src/content/translations/tr/upgrades/merge/index.md @@ -59,7 +59,7 @@ Başlangıçta plan, ölçeklenebilirliği ele almak için Birleştirmeden önce Bu, sonsuz ölçeklenebilirliğe izin vermek için potansiyel olarak birden fazla parça zinciri turuna duyulan ihtiyaç konusunda topluluk tarafından, devam eden bir değerlendirme olacaktır. - + Shard zincirleri diff --git a/src/content/translations/tr/upgrades/shard-chains/index.md b/src/content/translations/tr/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/tr/upgrades/shard-chains/index.md rename to src/content/translations/tr/upgrades/sharding/index.md diff --git a/src/content/translations/uk/nft/index.md b/src/content/translations/uk/nft/index.md index 87d396849d3..46a87aef5b6 100644 --- a/src/content/translations/uk/nft/index.md +++ b/src/content/translations/uk/nft/index.md @@ -406,7 +406,7 @@ _Важливо також пам’ятати, що Ethereum виконує н [Розповідь Віталіка Бутеріна про потенціал транзакцій за секунду за використання шардингу](https://twitter.com/VitalikButerin/status/1312905884549300224) -Як мінімум, шардинг дасть змогу здійснювати в 64 рази більше транзакцій у порівнянні з поточним рівнем (близько 15 транзакцій). Це кількість ланцюгів шардів (додаткові дані та потужність), які впроваджуються. [Докладніше про ланцюги шардів](/upgrades/shard-chains/) +Як мінімум, шардинг дасть змогу здійснювати в 64 рази більше транзакцій у порівнянні з поточним рівнем (близько 15 транзакцій). Це кількість ланцюгів шардів (додаткові дані та потужність), які впроваджуються. [Докладніше про ланцюги шардів](/upgrades/sharding/) Це означає, що ми можемо оцінити, скільки часу потрібно для процесу обробки 100 000 транзакцій, щоб порівняти дані з прикладом Visa вище. diff --git a/src/content/translations/uk/upgrades/beacon-chain/index.md b/src/content/translations/uk/upgrades/beacon-chain/index.md index 285aa73bfba..bb90f693275 100644 --- a/src/content/translations/uk/upgrades/beacon-chain/index.md +++ b/src/content/translations/uk/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: Дізнатися більше про це оновлення м ## Про оновлення Beacon Chain {#what-does-the-beacon-chain-do} -Оновлення Beacon Chain керуватиме розширеною мережею [сегментів даних](/upgrades/shard-chains/) і [часток](/staking/). Але це нововведення не буде схожим на [основну мережу Ethereum](/glossary/#mainnet), що функціонує сьогодні. Воно не стосуватиметься акаунтів і розумних контрактів. +Оновлення Beacon Chain керуватиме розширеною мережею [сегментів даних](/upgrades/sharding/) і [часток](/staking/). Але це нововведення не буде схожим на [основну мережу Ethereum](/glossary/#mainnet), що функціонує сьогодні. Воно не стосуватиметься акаунтів і розумних контрактів. Роль оновлення Beacon Chain із часом змінюватиметься, однак воно й надалі залишатиметься базовою умовою для [безпечної та надійної мережі Ethereum, яку можна масштабувати](/upgrades/vision/). @@ -33,7 +33,7 @@ summaryPoint4: Дізнатися більше про це оновлення м Якщо ви хочете стати валідатором і допомогти захистити Beacon Chain, дізнайтеся більше про стейкінг. -Це також важлива зміна для іншого оновлення Eth2, що стосується [ланцюгів сегментів даних](/upgrades/shard-chains/). +Це також важлива зміна для іншого оновлення Eth2, що стосується [ланцюгів сегментів даних](/upgrades/sharding/). ### Налаштування ланцюгів сегментів даних {#setting-up-for-shard-chains} @@ -55,7 +55,7 @@ Beacon Chain також відповідатиме за випадкове пр Ланцюги сегментів даних зможуть безпечно входити в екосистему Ethereum лише за наявності механізму консенсусу, що перевірятиме докази частки володіння. Завдяки Beacon Chain ми впровадимо стейкінг, а згодом — оновлення стосовно ланцюгів сегментів даних. -Ланцюги сегментів даних +Ланцюги сегментів даних diff --git a/src/content/translations/uk/upgrades/merge/index.md b/src/content/translations/uk/upgrades/merge/index.md index c60607c7890..0abc89fcd5c 100644 --- a/src/content/translations/uk/upgrades/merge/index.md +++ b/src/content/translations/uk/upgrades/merge/index.md @@ -57,4 +57,4 @@ summaryPoint4: Раніше ми називали це злиттям. Спільнотою постійно оцінюватиметься необхідність потенційного проведення кількох раундів ланцюгів сегментів даних, щоб забезпечити нескінченну масштабованість. -Ланцюги сегментів даних +Ланцюги сегментів даних diff --git a/src/content/translations/uk/upgrades/shard-chains/index.md b/src/content/translations/uk/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/uk/upgrades/shard-chains/index.md rename to src/content/translations/uk/upgrades/sharding/index.md diff --git a/src/content/translations/zh/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/zh/developers/docs/consensus-mechanisms/pos/index.md index cab4f1ed234..d378d574caa 100644 --- a/src/content/translations/zh/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/zh/developers/docs/consensus-mechanisms/pos/index.md @@ -23,7 +23,7 @@ incomplete: true - 提高能效——您不需要大量能源去挖掘区块 - 门槛降低,硬件要求减少——您不需要优秀的硬件从而获得建立新区块的机会 - 更强的去中心化——权益证明可以在网络中提供更多的节点。 -- 更有力地支持[分片链](/upgrades/shard-chains/),这是以太坊网络扩展的关键升级 +- 更有力地支持[分片链](/upgrades/sharding/),这是以太坊网络扩展的关键升级 ## 权益证明、权益质押和验证者 {#pos-staking-validators} @@ -37,7 +37,7 @@ incomplete: true ### 信标链 {#the-beacon-chain} -以太坊用权益证明取代工作量证明时,[分片链](/upgrades/shard-chains/)的复杂性会增加。 这是需要验证者来处理交易和创建新区块的独立区块链。 计划中将有 64 个分片链,并且它们都需要对网络的当下状态有一个共同的理解。 所以这需要额外的协调工作,这将由[信标链](/upgrades/beacon-chain/)来完成。 +以太坊用权益证明取代工作量证明时,[分片链](/upgrades/sharding/)的复杂性会增加。 这是需要验证者来处理交易和创建新区块的独立区块链。 计划中将有 64 个分片链,并且它们都需要对网络的当下状态有一个共同的理解。 所以这需要额外的协调工作,这将由[信标链](/upgrades/beacon-chain/)来完成。 信标链从碎片接收状态信息,并可供其他碎片使用,以便网络能够一直保持同步。 信标链也会管理验证者,从注册其股份存储到发布奖励和惩罚。 diff --git a/src/content/translations/zh/developers/docs/scaling/index.md b/src/content/translations/zh/developers/docs/scaling/index.md index 813840a447e..e8ca4803375 100644 --- a/src/content/translations/zh/developers/docs/scaling/index.md +++ b/src/content/translations/zh/developers/docs/scaling/index.md @@ -28,7 +28,7 @@ sidebarDepth: 3 区块分片是一个横向分割数据库以扩展网络承载能力的过程。 在以太坊中,区块分片将通过创建新链(称为“分片”)来减少网络拥塞和增加每秒交易量。 这还可以减轻每位验证者的负担,因为他们不再需要处理整个网络的所有交易。 -详细了解[区块分片](/upgrades/shard-chains/)。 +详细了解[区块分片](/upgrades/sharding/)。 ## 链下扩容 {#off-chain-scaling} diff --git a/src/content/translations/zh/nft/index.md b/src/content/translations/zh/nft/index.md index 1c4c7bfd246..d94a6eedd25 100644 --- a/src/content/translations/zh/nft/index.md +++ b/src/content/translations/zh/nft/index.md @@ -406,7 +406,7 @@ Digiconomist 预估以太坊矿工当前每年消耗 44.94 太瓦时的总能耗 [Vitalik Buterin 谈论在分片上每秒可行的交易量](https://twitter.com/VitalikButerin/status/1312905884549300224) -最起码,分片允许的交易量是现在的 64 倍,当前交易量大约为 15 笔交易。 这是正在引入分片链(额外数据和容量)的数量。 [关于分片链的更多信息](/upgrades/shard-chains/) +最起码,分片允许的交易量是现在的 64 倍,当前交易量大约为 15 笔交易。 这是正在引入分片链(额外数据和容量)的数量。 [关于分片链的更多信息](/upgrades/sharding/) 这意味着我们可以估算处理 100,000 笔交易需要的时间,以便我们能够将其与上述 Visa 例子对比。 diff --git a/src/content/translations/zh/upgrades/beacon-chain/index.md b/src/content/translations/zh/upgrades/beacon-chain/index.md index 1bd5f0bc1d0..054c96e92c7 100644 --- a/src/content/translations/zh/upgrades/beacon-chain/index.md +++ b/src/content/translations/zh/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: 您可能知道,它在技术路线图上属于“阶段 0”。 ## 信标链有什么作用? {#what-does-the-beacon-chain-do} -信标链将处理或协调[分片](/upgrades/shard-chains/)和[质押人](/staking/)的扩展网络。 但它会与今天的[以太坊主网](/glossary/#mainnet)不同。 它无法处理帐户或智能合约。 +信标链将处理或协调[分片](/upgrades/sharding/)和[质押人](/staking/)的扩展网络。 但它会与今天的[以太坊主网](/glossary/#mainnet)不同。 它无法处理帐户或智能合约。 信标链的角色将随着时间的推移而改变,但它是[我们正在努力实现的安全、可持续和可扩展以太坊的](/upgrades/vision/)基础组件。 @@ -33,7 +33,7 @@ summaryPoint4: 您可能知道,它在技术路线图上属于“阶段 0”。 如果您有兴趣成为验证者并帮助保护信标链,请点击了解关于质押的更多信息。 -引入该机制这一重要变化也有助于实现另一个升级:[分片链](/upgrades/shard-chains/)。 +引入该机制这一重要变化也有助于实现另一个升级:[分片链](/upgrades/sharding/)。 ### 设置分片链 {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ summaryPoint4: 您可能知道,它在技术路线图上属于“阶段 0”。 分片链只有在已建立权益证明共识机制的情况下才能安全进入以太坊生态系统。 信标链将引入权益质押,为后续的分片链升级奠定基础。 - + 分片链 diff --git a/src/content/translations/zh/upgrades/merge/index.md b/src/content/translations/zh/upgrades/merge/index.md index eb41d87e4ee..7a0b55446d9 100644 --- a/src/content/translations/zh/upgrades/merge/index.md +++ b/src/content/translations/zh/upgrades/merge/index.md @@ -59,7 +59,7 @@ summaryPoint4: 我们以前将此称为“对接”。 这需要社区进行持续评估,以确定是否可能需要多轮分片链来实现无限的可扩展性。 - + 分片链 diff --git a/src/content/translations/zh/upgrades/shard-chains/index.md b/src/content/translations/zh/upgrades/sharding/index.md similarity index 100% rename from src/content/translations/zh/upgrades/shard-chains/index.md rename to src/content/translations/zh/upgrades/sharding/index.md diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 41f6ce5a831..e0f02946a90 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -17,7 +17,7 @@ summaryPoint4: You might know this as "Phase 0" on technical roadmaps. ## What does the Beacon Chain do? {#what-does-the-beacon-chain-do} -The Beacon Chain will conduct or coordinate the expanded network of [shards](/upgrades/shard-chains/) and [stakers](/staking/). But it won't be like the [Ethereum Mainnet](/glossary/#mainnet) of today. It can't handle accounts or smart contracts. +The Beacon Chain will conduct or coordinate the expanded network of [shards](/upgrades/sharding/) and [stakers](/staking/). But it won't be like the [Ethereum Mainnet](/glossary/#mainnet) of today. It can't handle accounts or smart contracts. The Beacon Chain’s role will change over time but it’s a foundational component for [the secure, sustainable and scalable Ethereum we’re working towards](/upgrades/vision/). @@ -33,7 +33,7 @@ Staking and becoming a validator is easier than [mining](/developers/docs/mining If you're interested in becoming a validator and helping secure the Beacon Chain, learn more about staking. -This is also an important change for another upgrade: [shard chains](/upgrades/shard-chains/). +This is also an important change for another upgrade: [shard chains](/upgrades/sharding/). ### Setting up for shard chains {#setting-up-for-shard-chains} @@ -57,7 +57,7 @@ The Beacon Chain, at first, will exist separately to the Ethereum Mainnet we use Shard chains can only safely enter the Ethereum ecosystem with a proof-of-stake consensus mechanism in place. The Beacon Chain will introduce staking, paving the way for the shard chain upgrade to follow. - + Shard chains diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index e93a62e90b3..5499eef221c 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -59,7 +59,7 @@ Originally, the plan was to work on shard chains before The Merge – to address This will be an ongoing assessment from the community as to the need for potentially multiple rounds of shard chains to allow for endless scalability. - + Shard chains From 7ddf3904194a2af78d80b60feb3d42ca275fcb64 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 13 Jun 2022 15:44:26 +0100 Subject: [PATCH 051/244] add p2p/merge warning, rm ropsten --- .../tutorials/run-light-node-geth/index.md | 109 +++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/src/content/developers/tutorials/run-light-node-geth/index.md b/src/content/developers/tutorials/run-light-node-geth/index.md index 2281246cb6c..ed4023d6b62 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -9,6 +9,66 @@ sidebar: true published: 2022-03-04 --- + Please note that Geth light clients can be very slow to find peers. This is because they rely on full-node operators opting-in to be light servers that the light clients can request data from. There are usually only a small number of light servers available. + +Also note that after [The Merge]() a Geth node alone will not be sufficient - a consensus client must be connected to it in order to track the head of the chain. + + +You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running [Geth](https://geth.ethereum.org). With Geth, we can have a light node up and running in minutes. + +A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond in comparison to other sync modes. + +For an explanation of the differences between the different sync modes, read our [nodes and clients developer docs](/developers/docs/nodes-and-clients/#node-types). + +## Install and run {#install-and-run} + +First, [install Geth](https://geth.ethereum.org/docs/install-and-build/installing-geth). + +After installing Geth, you can run an Ethereum node in "light" mode by running the following command in a Terminal window: + +```bash +geth --syncmode light +``` + +Once launched, Geth will begin connecting to other nodes on Ethereum - known as "peers". The process of connecting to peers may take a while. + +When your Geth node has enough peers, it will import headers from new blocks on the chain. + +When new block headers no longer have an "age", Geth will be synced to the chain's head. + +## Stopping and restarting your node {#stopping-and-restarting-your-node} + +You can stop your node at any time by pressing CTRL+C. + +When restarting the node, Geth will take a few minutes to download block headers created since the node was last run. + +## Enable the HTTP-RPC server {#enable-the-http-rpc-server} + +Enabling the HTTP-RPC server lets you connect your Ethereum node to other software like wallets, browser extensions, or custom software libraries. + +You can enable the HTTP-RPC server by running the following command when launching Geth: + +```bash +geth --syncmode light --http +``` + +Once enabled, run `curl http://127.0.0.1:8545`. This should report no error. + +### Allow remote connections {#allow-remote-connections} + +## To allow remote hosts to connect to your node, launch Geth with the following command: + +title: How to run a light node with Geth +description: How to download, install and run a lightclient with Geth. +authors: "Brian Gu" +tags: ["clients", "geth", "nodes"] +skill: beginner +lang: en +sidebar: true +published: 2022-03-04 + +--- + You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running Geth. With Geth, we can have a light node up and running in minutes. A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond in comparison to other sync modes. @@ -80,7 +140,54 @@ Geth runs your node on [Ethereum Mainnet](/glossary/#mainnet) by default. It is also possible to use Geth to run a node on one of the [public test networks](/developers/docs/networks/#ethereum-testnets), by running one of the following commands in Terminal: ```bash -geth --syncmode light --ropsten +geth --syncmode light --rinkeby +geth --syncmode light --goerli +``` + +## Where is the blockchain and EVM data stored? {#where-is-the-blockchain-and-evm-data-stored} + +The directory which Geth uses to store raw blockchain data depends on your operating system. Upon running Geth, look for a message that looks like this: + +```bash +INFO [11-18|14:04:47] Allocated cache and file handles database=/Users/bgu/Library/Ethereum/testnet/geth/lightchaindata cache=768 handles=128 +``` + +The path following `“database=”` should tell you where the blockchain data is stored on your machine. If you’re running a full node, this directory will contain all of the data about every block that has ever been committed to the blockchain. Since we’re running a light node, this directory only contains the block headers. + +It’s worth emphasizing here that, at the lowest level, this is where the blockchain lives. The full contents of the blockchain and the EVM state are stored on every full node in the Ethereum network, in directories that look very much like the one on your computer. + +## Further reading {#further-reading} + +- [Learn more about different networks](/developers/docs/networks/). +- [Run a full node](/run-a-node/) + +``` +geth --syncmode light --http --http.addr 0.0.0.0 +``` + +Note: this assumes that there is no process blocking requests to your localhost, such as a firewall. + +## Geth JavaScript console {#geth-javascript-console} + +Geth has a built-in JavaScript console and a JavaScript API called [web3js](https://github.com/ethereum/web3.js/) that you can use to interact with your node. + +To use the JavaScript console run: + +```bash +geth attach +``` + +This console allows direct interaction with Ethereum. For example, running the `eth.blockNumber` command will print the latest known block number. + +[Full web3js documentation](http://web3js.readthedocs.io/) + +## Mainnet and testnets {#mainnet-and-testnets} + +Geth runs your node on [Ethereum Mainnet](/glossary/#mainnet) by default. + +It is also possible to use Geth to run a node on one of the [public test networks](/developers/docs/networks/#ethereum-testnets), by running one of the following commands in Terminal: + +```bash geth --syncmode light --rinkeby geth --syncmode light --goerli ``` From 16f5691fc23291c71e8cc3608eb226442a8daebd Mon Sep 17 00:00:00 2001 From: Seek4samurai Date: Mon, 13 Jun 2022 20:48:16 +0530 Subject: [PATCH 052/244] description about ERC-20 & ERC-721 and added further reading topic on EIPs --- src/content/developers/docs/standards/index.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/standards/index.md b/src/content/developers/docs/standards/index.md index db1aa31b4f2..31a80715ce7 100644 --- a/src/content/developers/docs/standards/index.md +++ b/src/content/developers/docs/standards/index.md @@ -29,8 +29,8 @@ Certain EIPs relate to application-level standards (e.g. a standard smart-contra ### Token standards {#token-standards} -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - A standard interface for fungible (interchangeable) tokens, like voting tokens, staking tokens or virtual currencies. -- [ERC-721](/developers/docs/standards/tokens/erc-721/) - A standard interface for non-fungible tokens, like a deed for artwork or a song. +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - A standard interface for fungible (interchangeable) tokens, like voting tokens, staking tokens or virtual currencies. Think of it as a set of rules or functions that a newly created token in the Ethereum network must respect or follow. +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - A standard interface for non-fungible tokens, like a deed for artwork or a song. Things or assets that use ERC-721 will record and assign the ownership to the account numbers. - [ERC-777](/developers/docs/standards/tokens/erc-777/) - A token standard improving over ERC-20. - [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - A token standard which can contain both fungible and non-fungible assets. - [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - A tokenized vault standard designed to optimize and unify the technical parameters of yield-bearing vaults. @@ -39,4 +39,6 @@ Learn more about [token standards](/developers/docs/standards/tokens/). ## Further reading {#further-reading} +- [Ethereum Improvement Proposals (EIPs)](https://ethereum.org/en/eips/) + _Know of a community resource that helped you? Edit this page and add it!_ From 66034f78b2095bbabfc7db6f2c3b955ba6f1fa18 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 13 Jun 2022 16:21:52 +0100 Subject: [PATCH 053/244] add local and public beacon chain info --- .../developers/docs/development-networks/index.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index 3e37e5b1e57..e18419a1a09 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -48,6 +48,21 @@ Hardhat Network comes built-in with Hardhat, an Ethereum development environment - [Website](https://hardhat.org/) - [GitHub](https://github.com/nomiclabs/hardhat) +### Local Beacon Chains + +Some consensus clients have built-in tools for spinning up local Beacon chains for testing purposes. Instructions for Lighthouse, Nimbus and Lodestar are available at: + +[Local testnet using Lodestar](https://chainsafe.github.io/lodestar/usage/local/) +[Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) +[Local testnet using Nimbus](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) + +### Public Beacon Test-chains + +There are also public test implementation of the Beacon Chain. The recommended testnet with long term support is Prater (which will eventually merge with the Goerli chain). The Ropsten Chain was rceently merged with its own Beacon Chain and is currently still available for testing consensus client implementations and post-merge application development. + +[Prater Staking Launchpad](https://prater.launchpad.ethereum.org/en/) +[Ropsten Staking Launchpad](https://ropsten.launchpad.ethereum.org/en/) + ## Further reading {#further-reading} _Know of a community resource that helped you? Edit this page and add it!_ From 994830d1b75b38ed48becaa802787fb1621a007e Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 13 Jun 2022 16:35:37 +0100 Subject: [PATCH 054/244] add execution-layer info --- .../docs/nodes-and-clients/client-diversity/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md index aebacbef902..c67efe0c4b2 100644 --- a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -51,6 +51,10 @@ The execution layer data were obtained from [Ethernodes](https://ethernodes.org) Up to date client diversity data for the consensus layer is now available at https://clientdiversity.org/. +## Execution Layer + +Up until now, the conversation around client diversity has focused mainly on the consensus layer. However, the execution client [Geth](https://geth.ethereum.org) currently accounts for around 85% of all nodes. This is problematic for the same reasons as for consensus clients. For example, a bug in Geth affecting transaction-handling or constructing execution payloads could lead to bugged information being finalized by the consensus clients. Therefore, Ethereum would be healthier with a more even distribution of execution clients, ideally with no client representing more than 33% of the network. + ## Use a minority client {#use-minority-client} Addressing client diversity requires more than individual users to choose minority clients - it requires mining/validator pools and institutions like the major dapps and exchanges to switch clients too. However, all users can do their part in redressing the current imbalance and normalizing the use of all the available Ethereum software. After The Merge, all node operators will be required to run an execution client and a consensus client. Choosing combinations of the clients suggested below will help increase client diversity. From 0c11b18e9af30bdb05ce0ec375d5b368a42af4ab Mon Sep 17 00:00:00 2001 From: Akim Benchiha Date: Mon, 13 Jun 2022 17:36:42 +0200 Subject: [PATCH 055/244] feat(beaconchainaction): add type for gatsbyImage Refs: #6392 --- src/components/BeaconChainActions.tsx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/components/BeaconChainActions.tsx b/src/components/BeaconChainActions.tsx index 7afce5ae1a4..58028ca4248 100644 --- a/src/components/BeaconChainActions.tsx +++ b/src/components/BeaconChainActions.tsx @@ -6,11 +6,12 @@ import { useIntl } from "gatsby-plugin-intl" import { translateMessageId } from "../utils/translations" -import CardList, { CardListItem } from "./CardList" +import CardList from "./CardList" import Card from "./Card" import ButtonLink from "./ButtonLink" import Translation from "./Translation" -import { GatsbyImageProps } from "gatsby-plugin-image" + +import type { CardListItem } from "./CardList" const Container = styled.div` margin-bottom: 4rem; @@ -70,6 +71,12 @@ export const DataLogo = graphql` } ` +type ChildImage = { + childImageSharp: { + gatsbyImageData: Record + } +} + const BeaconStaticQuery = graphql` query { beaconscan: file(relativePath: { eq: "upgrades/etherscan.png" }) { @@ -82,33 +89,33 @@ const BeaconStaticQuery = graphql` ` type BeaconQueryTypes = { - beaconscan: string - beaconchain: string + beaconscan: ChildImage + beaconchain: ChildImage } const BeaconChainActions: React.FC = () => { const intl = useIntl() const data = useStaticQuery(BeaconStaticQuery) - const datapoints: CardListItem[] = [ + const datapoints: Array = [ { title: "beaconscan", image: getImage(data.beaconscan), - alt: "test beaconscan", + alt: "", link: "https://beaconscan.com", description: translateMessageId("consensus-beaconscan-desc", intl), }, { title: "beaconcha.in", image: getImage(data.beaconchain), - alt: "beaconcha test", + alt: "", link: "https://beaconcha.in", description: translateMessageId("consensus-beaconcha-in-desc", intl), }, ] //TODO: we should refactor the naming here instead of using authors into the description field - const reads: CardListItem[] = [ + const reads: Array = [ { title: translateMessageId( "page-upgrade-article-title-two-point-oh", From 175662f008ea98f07a299c8d2424d1a34b57d2e2 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:49:36 +0100 Subject: [PATCH 056/244] Update src/content/developers/docs/development-networks/index.md --- src/content/developers/docs/development-networks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index e18419a1a09..981ba530e2d 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -48,7 +48,7 @@ Hardhat Network comes built-in with Hardhat, an Ethereum development environment - [Website](https://hardhat.org/) - [GitHub](https://github.com/nomiclabs/hardhat) -### Local Beacon Chains +### Local Beacon Chains {#local-beacon-chains} Some consensus clients have built-in tools for spinning up local Beacon chains for testing purposes. Instructions for Lighthouse, Nimbus and Lodestar are available at: From 2b53a7f981e4340d479e81b9811b16633f60d7cd Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:49:42 +0100 Subject: [PATCH 057/244] Update src/content/developers/docs/development-networks/index.md --- src/content/developers/docs/development-networks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index 981ba530e2d..b4f176e788b 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -50,7 +50,7 @@ Hardhat Network comes built-in with Hardhat, an Ethereum development environment ### Local Beacon Chains {#local-beacon-chains} -Some consensus clients have built-in tools for spinning up local Beacon chains for testing purposes. Instructions for Lighthouse, Nimbus and Lodestar are available at: +Some consensus clients have built-in tools for spinning up local Beacon chains for testing purposes. Instructions for Lighthouse, Nimbus and Lodestar are available: [Local testnet using Lodestar](https://chainsafe.github.io/lodestar/usage/local/) [Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) From 538422bea724c7ebb16ea3bd91e9ac8066e0e599 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:49:58 +0100 Subject: [PATCH 058/244] Update src/content/developers/docs/development-networks/index.md --- src/content/developers/docs/development-networks/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index b4f176e788b..6879df6d711 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -52,9 +52,9 @@ Hardhat Network comes built-in with Hardhat, an Ethereum development environment Some consensus clients have built-in tools for spinning up local Beacon chains for testing purposes. Instructions for Lighthouse, Nimbus and Lodestar are available: -[Local testnet using Lodestar](https://chainsafe.github.io/lodestar/usage/local/) -[Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) -[Local testnet using Nimbus](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) +- [Local testnet using Lodestar](https://chainsafe.github.io/lodestar/usage/local/) +- [Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) +- [Local testnet using Nimbus](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) ### Public Beacon Test-chains From 43f760230b3f6db96c3849e9dd556cd6044bb1d4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:51:18 +0100 Subject: [PATCH 059/244] Apply suggestions from code review --- src/content/developers/docs/development-networks/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index 6879df6d711..17e4890c3c9 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -56,12 +56,12 @@ Some consensus clients have built-in tools for spinning up local Beacon chains f - [Local testnet using Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) - [Local testnet using Nimbus](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) -### Public Beacon Test-chains +### Public Beacon Test-chains {#public-beacon-testchains} -There are also public test implementation of the Beacon Chain. The recommended testnet with long term support is Prater (which will eventually merge with the Goerli chain). The Ropsten Chain was rceently merged with its own Beacon Chain and is currently still available for testing consensus client implementations and post-merge application development. +There are also public test implementations of the Beacon Chain. The recommended testnet with long-term support is Prater (which will eventually merge with the Goerli chain). The Ropsten Chain was recently merged with its own Beacon Chain and is currently still available for testing consensus client implementations and post-merge application development. -[Prater Staking Launchpad](https://prater.launchpad.ethereum.org/en/) -[Ropsten Staking Launchpad](https://ropsten.launchpad.ethereum.org/en/) +- [Prater Staking Launchpad](https://prater.launchpad.ethereum.org/en/) +- [Ropsten Staking Launchpad](https://ropsten.launchpad.ethereum.org/en/) ## Further reading {#further-reading} From 8665663fdd32746b59fe5ae44272bc3a4cd5d346 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 13 Jun 2022 09:31:15 -0700 Subject: [PATCH 060/244] Update src/components/PreMergeBanner.tsx Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/components/PreMergeBanner.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx index e051862f357..d9c5c45adda 100644 --- a/src/components/PreMergeBanner.tsx +++ b/src/components/PreMergeBanner.tsx @@ -17,7 +17,7 @@ export interface IProps { const PreMergeBanner: React.FC = ({ className }) => ( - The Merge is approaching which comes with many changes to Ethereum. Some + The Merge is approaching, and with it comes many changes to Ethereum. Some content on this page may be out-of-date related to these changes, and updates are coming soon.{" "} Learn more about The Merge. From 473d8ce2ddfc93ef451fdba74440f6a82921301c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 13 Jun 2022 10:44:03 -0600 Subject: [PATCH 061/244] Update layer-2.js --- src/pages/layer-2.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index ea3564f85c5..d53e3b263a1 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -679,8 +679,9 @@ const Layer2Page = ({ data }) => {

      +

      A note on wallets

      - NOTE: When bridging over and using layer 2, it is important to note + When bridging over and using layer 2, it is important to note that you will control the address for your{" "} EOA account (an account where only a single private key controls the account) just like on Ethereum From ac8b575fe0e748266585820701b6593a30ea043b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 17:50:08 +0100 Subject: [PATCH 062/244] Add header id --- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md index c67efe0c4b2..7570c9b3a4f 100644 --- a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -51,7 +51,7 @@ The execution layer data were obtained from [Ethernodes](https://ethernodes.org) Up to date client diversity data for the consensus layer is now available at https://clientdiversity.org/. -## Execution Layer +## Execution layer {#execution-layer} Up until now, the conversation around client diversity has focused mainly on the consensus layer. However, the execution client [Geth](https://geth.ethereum.org) currently accounts for around 85% of all nodes. This is problematic for the same reasons as for consensus clients. For example, a bug in Geth affecting transaction-handling or constructing execution payloads could lead to bugged information being finalized by the consensus clients. Therefore, Ethereum would be healthier with a more even distribution of execution clients, ideally with no client representing more than 33% of the network. From a2aa24e46945806e808c348fe4b8e5965c2f187c Mon Sep 17 00:00:00 2001 From: Nuno Loureiro Date: Mon, 13 Jun 2022 18:02:49 +0100 Subject: [PATCH 063/244] changed back to a --- src/pages/layer-2.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index d53e3b263a1..b554adae75b 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -679,9 +679,8 @@ const Layer2Page = ({ data }) => {

      -

      A note on wallets

      - When bridging over and using layer 2, it is important to note + Note: When bridging over and using layer 2, it is important to note that you will control the address for your{" "} EOA account (an account where only a single private key controls the account) just like on Ethereum From 552358c1aa66cbbf9f99632b0476c393a27dfb05 Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 19:04:05 +0200 Subject: [PATCH 064/244] Convert FeedbackCard to TS --- src/components/{FeedbackCard.js => FeedbackCard.tsx} | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) rename src/components/{FeedbackCard.js => FeedbackCard.tsx} (95%) diff --git a/src/components/FeedbackCard.js b/src/components/FeedbackCard.tsx similarity index 95% rename from src/components/FeedbackCard.js rename to src/components/FeedbackCard.tsx index 655cdf6e48d..2671fdd2446 100644 --- a/src/components/FeedbackCard.js +++ b/src/components/FeedbackCard.tsx @@ -39,7 +39,12 @@ const ButtonContainer = styled.div` } ` -const FeedbackCard = ({ prompt, className }) => { +export interface IProps { + prompt?: string + className?: string +} + +const FeedbackCard: React.FC = ({ prompt, className }) => { const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) const [isHelpful, setIsHelpful] = useState(false) const location = typeof window !== "undefined" ? window.location.href : "" From 48f070a712c92f956216947d562a7a6b2e3ede67 Mon Sep 17 00:00:00 2001 From: Nuno Loureiro Date: Mon, 13 Jun 2022 18:06:01 +0100 Subject: [PATCH 065/244] Uppercase the word --- src/pages/layer-2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index b554adae75b..0b125aad953 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -680,7 +680,7 @@ const Layer2Page = ({ data }) => {

      - Note: When bridging over and using layer 2, it is important to note + NOTE: When bridging over and using layer 2, it is important to note that you will control the address for your{" "} EOA account (an account where only a single private key controls the account) just like on Ethereum From 5a5aee4dccb61bc66af3063d0021833696292b1c Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 19:20:02 +0200 Subject: [PATCH 066/244] Convert FeedbackWidget to TS --- .../{FeedbackWidget.js => FeedbackWidget.tsx} | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) rename src/components/{FeedbackWidget.js => FeedbackWidget.tsx} (95%) diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.tsx similarity index 95% rename from src/components/FeedbackWidget.js rename to src/components/FeedbackWidget.tsx index 1d933bbe6f8..95997f0f142 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.tsx @@ -51,7 +51,9 @@ const ModalBackground = styled.div` z-index: 1001; /* Above the nav bar */ ` -const Container = styled.div` +const Container = styled.div<{ + bottomOffset: number +}>` display: flex; box-sizing: border-box; width: 300px; @@ -141,9 +143,13 @@ const IconContainer = styled(NakedButton)` transition: transform 0.2s ease-in-out; ` -const FeedbackWidget = ({ className }) => { +export interface IProps { + className?: string +} + +const FeedbackWidget: React.FC = ({ className }) => { const intl = useIntl() - const containerRef = useRef() + const containerRef = useRef(null) useOnClickOutside(containerRef, () => handleClose(), [`mousedown`]) const [isOpen, setIsOpen] = useState(false) const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) @@ -197,7 +203,7 @@ const FeedbackWidget = ({ className }) => { trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, - label: `Closed feedback widget`, + eventName: `Closed feedback widget`, }) } const handleOpen = () => { @@ -205,14 +211,14 @@ const FeedbackWidget = ({ className }) => { trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, - label: `Opened feedback widget`, + eventName: `Opened feedback widget`, }) } const handleSubmit = (choice) => { trackCustomEvent({ eventCategory: `Page is helpful feedback`, eventAction: `Clicked`, - label: choice, + eventName: choice, }) setIsHelpful(choice) setFeedbackSubmitted(true) @@ -221,7 +227,7 @@ const FeedbackWidget = ({ className }) => { trackCustomEvent({ eventCategory: `Feedback survey opened`, eventAction: `Clicked`, - label: "Feedback survey opened", + eventName: "Feedback survey opened", }) window && surveyUrl && window.open(surveyUrl, "_blank") setIsOpen(false) // Close widget without triggering redundant tracker event From 74b9c8bdd2ebb2b3c2ae90eb74545999ad49f91c Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 19:20:24 +0200 Subject: [PATCH 067/244] Convert FileContributors to TS --- ...leContributors.js => FileContributors.tsx} | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) rename src/components/{FileContributors.js => FileContributors.tsx} (95%) diff --git a/src/components/FileContributors.js b/src/components/FileContributors.tsx similarity index 95% rename from src/components/FileContributors.js rename to src/components/FileContributors.tsx index a94d5758d0a..5d20c35762a 100644 --- a/src/components/FileContributors.js +++ b/src/components/FileContributors.tsx @@ -10,6 +10,7 @@ import Modal from "./Modal" import Translation from "./Translation" import { ButtonSecondary } from "./SharedStyledComponents" import { getLocaleTimestamp } from "../utils/time" +import { Lang } from "../utils/languages" const loadingStyles = css` font-size: 0; @@ -47,9 +48,11 @@ const Container = styled.div` } ` -const SkeletonContainer = styled(Container)` +const SkeletonContainer = styled(Container)<{ + loading: boolean +}>` justify-content: flex-start; - position: absolute; + position: absolute;é width: 100%; height: 100%; left: 0; @@ -224,7 +227,17 @@ const COMMIT_HISTORY = gql` } ` -const FileContributors = ({ relativePath, className, editPath }) => { +export interface IProps { + relativePath: string + className?: string + editPath?: string +} + +const FileContributors: React.FC = ({ + relativePath, + className, + editPath, +}) => { const [isModalOpen, setModalOpen] = useState(false) const intl = useIntl() @@ -300,7 +313,7 @@ const FileContributors = ({ relativePath, className, editPath }) => { )} {!lastContributor.user && {lastContributor.name}},{" "} - {getLocaleTimestamp(intl.locale, lastCommit.committedDate)} + {getLocaleTimestamp(intl.locale as Lang, lastCommit.committedDate)} From ebeeb9377385d6a5b57fafcdf51cb718e8260f95 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 13 Jun 2022 18:46:19 +0100 Subject: [PATCH 068/244] Update src/content/developers/docs/nodes-and-clients/client-diversity/index.md --- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md index 7570c9b3a4f..3a7b39b9c78 100644 --- a/src/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/src/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -53,7 +53,7 @@ Up to date client diversity data for the consensus layer is now available at htt ## Execution layer {#execution-layer} -Up until now, the conversation around client diversity has focused mainly on the consensus layer. However, the execution client [Geth](https://geth.ethereum.org) currently accounts for around 85% of all nodes. This is problematic for the same reasons as for consensus clients. For example, a bug in Geth affecting transaction-handling or constructing execution payloads could lead to bugged information being finalized by the consensus clients. Therefore, Ethereum would be healthier with a more even distribution of execution clients, ideally with no client representing more than 33% of the network. +Until now, the conversation around client diversity has focused mainly on the consensus layer. However, the execution client [Geth](https://geth.ethereum.org) currently accounts for around 85% of all nodes. This percentage is problematic for the same reasons as for consensus clients. For example, a bug in Geth affecting transaction handling or constructing execution payloads could lead to consensus clients finalizing problematic or bugged transactions. Therefore, Ethereum would be healthier with a more even distribution of execution clients, ideally with no client representing more than 33% of the network. ## Use a minority client {#use-minority-client} From bf8e26f375e090703b265ebe1b3b6f06dfdef1cb Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 23:24:43 +0200 Subject: [PATCH 069/244] Convert Footer file to TS --- src/components/{Footer.js => Footer.tsx} | 26 +++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) rename src/components/{Footer.js => Footer.tsx} (93%) diff --git a/src/components/Footer.js b/src/components/Footer.tsx similarity index 93% rename from src/components/Footer.js rename to src/components/Footer.tsx index 269f4bea87b..969bb0c78e8 100644 --- a/src/components/Footer.js +++ b/src/components/Footer.tsx @@ -7,7 +7,8 @@ import { getLocaleTimestamp } from "../utils/time" import Translation from "./Translation" import Link from "./Link" import Icon from "./Icon" -import { isLangRightToLeft } from "../utils/translations" +import { isLangRightToLeft, TranslationKey } from "../utils/translations" +import { Lang } from "../utils/languages" const StyledFooter = styled.footer` padding-top: 3rem; @@ -121,12 +122,23 @@ const socialLinks = [ }, ] -const Footer = () => { +export interface LinkSection { + title: TranslationKey + links: Array<{ + to: string + text: TranslationKey + isPartiallyActive?: boolean + }> +} + +export interface IProps {} + +const Footer: React.FC = () => { const intl = useIntl() - const isPageRightToLeft = isLangRightToLeft(intl.locale) + const isPageRightToLeft = isLangRightToLeft(intl.locale as Lang) - const linkSections = [ + const linkSections: Array = [ { title: "use-ethereum", links: [ @@ -355,7 +367,7 @@ const Footer = () => { :{" "} {getLocaleTimestamp( - intl.locale, + intl.locale as Lang, data.allSiteBuildMetadata.edges[0].node.buildTime )} @@ -375,7 +387,7 @@ const Footer = () => { - {linkSections.map((section, idx) => ( + {linkSections.map((section: LinkSection, idx) => ( @@ -384,7 +396,7 @@ const Footer = () => { {section.links.map((link, linkIdx) => ( From 01da6672fcd6c89ab289d11be21c4a3ad2c0e1f6 Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 23:33:41 +0200 Subject: [PATCH 070/244] Convert GhostCard file to TS --- src/components/{GhostCard.js => GhostCard.tsx} | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) rename src/components/{GhostCard.js => GhostCard.tsx} (88%) diff --git a/src/components/GhostCard.js b/src/components/GhostCard.tsx similarity index 88% rename from src/components/GhostCard.js rename to src/components/GhostCard.tsx index 79b4f9a2069..ce50aac9461 100644 --- a/src/components/GhostCard.js +++ b/src/components/GhostCard.tsx @@ -30,7 +30,11 @@ const Ghost = styled(BaseCard)` background-color: ${(props) => props.theme.colors.ghostCardGhost}; ` -const GhostCard = ({ children, className }) => ( +export interface IProps { + className?: string +} + +const GhostCard: React.FC = ({ children, className }) => ( {children} From 96c43c84f231b220f1ccbc111b32258c612ce67d Mon Sep 17 00:00:00 2001 From: vdusart Date: Mon, 13 Jun 2022 23:43:42 +0200 Subject: [PATCH 071/244] Convert GitStars file to TS --- src/components/{GitStars.js => GitStars.tsx} | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) rename src/components/{GitStars.js => GitStars.tsx} (87%) diff --git a/src/components/GitStars.js b/src/components/GitStars.tsx similarity index 87% rename from src/components/GitStars.js rename to src/components/GitStars.tsx index 92ee7d0e09e..5ba41a5a720 100644 --- a/src/components/GitStars.js +++ b/src/components/GitStars.tsx @@ -46,8 +46,18 @@ const Text = styled.div` font-size: 0.8125rem; background: ${(props) => props.theme.colors.searchBackgroundEmpty}; ` +export interface GitHubRepo { + stargazerCount: number + url: string +} + +export interface IProps { + gitHubRepo: GitHubRepo + className?: string + hideStars: string +} -const GitStars = ({ gitHubRepo, className, hideStars }) => { +const GitStars: React.FC = ({ gitHubRepo, className, hideStars }) => { // Stringify with commas let starsString = gitHubRepo.stargazerCount.toString() const rgx = /(\d+)(\d{3})/ From c6997633ec01815356b607aaa455b738d6246414 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 13 Jun 2022 18:19:04 -0700 Subject: [PATCH 072/244] Update /sharding pre-merge copy Adds "outdated" InfoBanner as a temporary communication measure while content updates are being planned, with link to external resource. --- src/content/upgrades/sharding/index.md | 27 +++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/content/upgrades/sharding/index.md b/src/content/upgrades/sharding/index.md index 9cb09c5ad3e..daf4e7a38ab 100644 --- a/src/content/upgrades/sharding/index.md +++ b/src/content/upgrades/sharding/index.md @@ -1,23 +1,23 @@ --- -title: Shard chains -description: Learn about shard chains - partitions of the network that give Ethereum more transaction capacity and make it easier to run. +title: Sharding +description: Learn about data sharding - breaking up and distributing the data load needed to give Ethereum more transaction capacity and make it easier to run. lang: en template: upgrade sidebar: true image: ../../../assets/upgrades/newrings.png summaryPoint1: Sharding is a multi-phase upgrade to improve Ethereum’s scalability and capacity. -summaryPoint2: Shard chains provide extra, cheaper, storage layers for applications and rollups to store data. +summaryPoint2: Sharding provides secure distribution of data storage requirements, enabling rollups to be even cheaper, and making nodes easier to operate. summaryPoint3: They enable layer 2 solutions to offer low transaction fees while leveraging the security of Ethereum. summaryPoint4: This upgrade is planned to follow The Merge of Mainnet with the Beacon Chain. --- - Shard chains should ship sometime in 2023, depending on how quickly work progresses after The Merge. These shards will give Ethereum more capacity to store and access data, but they won’t be used for executing code. + Sharding should ship sometime in 2023, depending on how quickly work progresses after The Merge. These shards will give Ethereum more capacity to store and access data, but they won’t be used for executing code. ## What is sharding? {#what-is-sharding} -Sharding is the process of splitting a database horizontally to spread the load – it’s a common concept in computer science. In an Ethereum context, sharding will reduce network congestion and increase transactions per second by creating new chains, known as “shards”. +Sharding is the process of splitting a database horizontally to spread the load – it’s a common concept in computer science. In an Ethereum context, sharding will work synergistically with [layer 2 rollups] by splitting up the burden of handling the large amount of data needed by rollups over the entire network. This will continue to reduce network congestion and increase transactions per second. This is important for reasons other than scalability. @@ -25,7 +25,7 @@ This is important for reasons other than scalability. ### Everyone can run a node {#everyone-can-run-a-node} -Sharding is a good way to scale if you want to keep things decentralized as the alternative is to scale by increasing the size of the existing database. This would make Ethereum less accessible for network validators because they'd need powerful and expensive computers. With shard chains, validators only need to store/run data for the shard they're validating, not the entire network (like what happens today). This speeds things up and drastically reduces hardware requirements. +Sharding is a good way to scale if you want to keep things decentralized as the alternative is to scale by increasing the size of the existing database. This would make Ethereum less accessible for network validators because they'd need powerful and expensive computers. With sharding, validators will no longer be required to store all of this data themselves, but instead can use data techniques to confirm that the data has been made available by the network as a whole. This drastically reduces the cost of storing data on layer 1 by reducing hardware requirements. ### More network participation {#more-network-participation} @@ -35,18 +35,23 @@ With lower hardware requirements, sharding will make it easier to run [clients](
      - - At first, you'll need to run a Mainnet client at the same time as your Beacon Chain client. The launchpad will walk you through the hardware requirements and process. Alternatively you can use a backend API. + + At first, you'll need to run a Mainnet (execution layer) client at the same time as your Beacon Chain (consensus later) client. The launchpad will walk you through the hardware requirements and process. ## Shard chains version 1: data availability {#data-availability} + + Note: The plans for sharding have been evolving as more efficient paths to scaling have been developed. "Danksharding" is a new approach to sharding, which does not utilize the concept of shard "chains" but instead uses shard "blobs" to split up the data, along with "data availability sampling" to confirm all data has been made available. This change in plan solves the same original problem.

      + Details below may be out of date with the latest development plans. While we update things, check out The Hitchhiker's Guide to the Ethereum for an excellent breakdown of Ethereum plans after The Merge. +
      + When the first shard chains are shipped they will just provide extra data to the network. They won’t handle transactions or smart contracts. But they’ll still offer incredible improvements to transactions per second when combined with rollups. Rollups are a "layer 2" technology that exists today. They allow dapps to bundle or “roll up” transactions into a single transaction off-chain, generate a cryptographic proof and then submit it to the chain. This reduces the data needed for a transaction. Combine this with all the extra data availability provided by shards and you get 100,000 transactions per second. - - Given recent progress in layer 2 scaling solution research and development, this has prompted the prioritization of The Merge upgrade ahead of shard chains. These will be the focus following Mainnet transition to proof-of-stake. + + Given recent progress in layer 2 scaling solution research and development, this has prompted the prioritization of transitioning to proof-of-stake ahead of sharding. Sharding will be the focus following The Merge. [More on rollups](/developers/docs/scaling/#rollups) @@ -69,7 +74,7 @@ This would mean we don’t give shards the capability to handle smart contracts #### 2. Have some execution shards {#some-execution-shards} -Perhaps there’s a compromise where we don’t need all shards (64 are planned right now) to be smarter. We could just add this functionality to a few and leave the rest. This could speed the delivery up. +Perhaps there’s a compromise where we don’t need all shards to be smarter. We could just add this functionality to a few and leave the rest. This could speed the delivery up. #### 3. Wait until we can do Zero Knowledge (ZK) snarks {#wait-for-zk-snarks} From 72768cbe227bf08d1c9e54a14dfa54619f4cd2b8 Mon Sep 17 00:00:00 2001 From: gichiba Date: Tue, 14 Jun 2022 12:10:56 +0700 Subject: [PATCH 073/244] Update Fellowship Program copy. --- src/content/foundation/index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/content/foundation/index.md b/src/content/foundation/index.md index b71fab63a3a..870cbee6126 100644 --- a/src/content/foundation/index.md +++ b/src/content/foundation/index.md @@ -31,11 +31,9 @@ Learn more at [devcon.org](https://devcon.org/), check out the [Devcon Blog](htt ### Fellowship Program {#fellowship-program} -The [Ethereum Foundation Fellowship Program](https://fellowship.ethereum.foundation/) is a pilot project that focuses on seeking opportunities in emerging economies. Developing countries today account for over 80% of the world’s population. Amongst about 400,000 babies born every day around the world, more than 360,000 are born in developing countries. People in developing nations represent not only our future as a people, but they may also represent the next billion active users of Ethereum. +The [Ethereum Foundation Fellowship Program](https://fellowship.ethereum.foundation/) is an initiative to help address gaps in representation across cultures, nationalities, and economic classes. The Fellowship Program is about bridging these gaps by identifying and supporting unique and talented individuals helping to enable Ethereum’s relevance and breaking down barriers to entry for those underrepresented people and communities who will become the future of web3. -The Fellowship Program provides the EF an opportunity to work with change-makers, whose projects have high potential to create impact in emerging economies by using Ethereum. The program features a unique experience that includes mentorship, expertise and access to leaders in the Ethereum ecosystem. - -Learn more at [fellowship.ethereum.foundation](https://fellowship.ethereum.foundation/) or check out the [recent blog post on the Fellowship Program](https://blog.ethereum.org/2021/05/07/ethereum-for-the-next-billion/). +Learn more at [fellowship.ethereum.foundation](https://fellowship.ethereum.foundation/).
      From 23f197d1a16663b79292d5ebac71ec5fbe167119 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:03 -0600 Subject: [PATCH 074/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index afc8de81617..86f1aa8f9f3 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -7,7 +7,7 @@ sidebar: true # Adding wallets {#adding-wallets} -We want to make sure we show a variety of wallets covering the feature rich landscape of wallets so that users can navigate Ethereum in a confident manner. +We want to make sure we show a variety of wallets covering the feature-rich landscape of wallets so that users can navigate Ethereum in a confident manner. Anyone is free to suggest adding a wallet on ethereum.org. If there's a wallet that we have missed, please suggest it! From 66b374341ff3d7fc68ee661f8822a87f7cf85a32 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:12 -0600 Subject: [PATCH 075/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index 86f1aa8f9f3..352e142f25e 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -22,7 +22,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework ### Criteria for inclusion: the must-haves {#the-must-haves} - **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallets security must be reliable. This reduces the risk to our users and shows us that you take security seriously. -- **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter our forks that are quickly abandoned as projects. +- **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter out forks that are quickly abandoned as projects. - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. - **Honest and accurate listing information** - it is expected that any suggesting listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. From ea7912d2117adfedb72451775533b5ed1f022522 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:23 -0600 Subject: [PATCH 076/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index 352e142f25e..fdd77cf8beb 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -24,7 +24,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallets security must be reliable. This reduces the risk to our users and shows us that you take security seriously. - **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter out forks that are quickly abandoned as projects. - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. -- **Honest and accurate listing information** - it is expected that any suggesting listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. +- **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. ### Other criteria: the nice-to-haves {#the-nice-to-haves} From 5989017031691854eec05fbc7cbdb0073dfe31f7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:28 -0600 Subject: [PATCH 077/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index fdd77cf8beb..8f017d8aba0 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -36,7 +36,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Hardware wallet support** - users can connect their hardware wallet to sign transactions. - **WalletConnect** - users can connect to dapps using WalletConnect. - **Importing Ethereum RPC endpoints** - users can import node RPC data, allowing them to connect to a node of their choice, or other EVM compatible networks. -- **NFTs** - users are able to view and interact with their NFT’s in the wallet. +- **NFTs** - users are able to view and interact with their NFTs in the wallet. - **Connect to Ethereum applications** - users are able to connect to and use Ethereum applications. - **Staking** - users are able to stake directly through the wallet. - **Swaps** - users are able to swap tokens through the wallet. From 4b04938e2acc32c6072ef3b3e258b67def50b57b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:34 -0600 Subject: [PATCH 078/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index 8f017d8aba0..b60af24a255 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -41,7 +41,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Staking** - users are able to stake directly through the wallet. - **Swaps** - users are able to swap tokens through the wallet. - **Multichain networks** - your wallet supports users accessing multiple blockchain networks by default. -- **Customize gas fees** - your wallet allows users to customize their transaction gas fees (base fee, priority fee, max fee) +- **Customize gas fees** - your wallet allows users to customize their transaction gas fees (base fee, priority fee, max fee). - **ENS support** - your wallet allows users to send transactions to ENS names. - **ERC-20 support** - your wallet allows users to import ERC-20 token contracts, or automatically queries and displays ERC-20 tokens. - **EIP-1559 (type 2) transactions** - your wallet supports EIP-1559 (type 2) transactions. From 3e4d71972e2c0641fd68e04239a78a39a160a37f Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 14 Jun 2022 00:02:41 -0600 Subject: [PATCH 079/244] Update src/content/contributing/adding-wallet/index.md Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index b60af24a255..58ab24bdcac 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -21,7 +21,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework ### Criteria for inclusion: the must-haves {#the-must-haves} -- **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallets security must be reliable. This reduces the risk to our users and shows us that you take security seriously. +- **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallet's security must be reliable. This reduces the risk to our users and shows us that you take security seriously. - **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter out forks that are quickly abandoned as projects. - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. - **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. From 101d600ba562fe945aa8ac275d4e7aeb9572b374 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 14 Jun 2022 09:21:37 +0100 Subject: [PATCH 080/244] Apply suggestions from code review --- src/content/foundation/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/foundation/index.md b/src/content/foundation/index.md index 870cbee6126..b9972bf331c 100644 --- a/src/content/foundation/index.md +++ b/src/content/foundation/index.md @@ -31,9 +31,9 @@ Learn more at [devcon.org](https://devcon.org/), check out the [Devcon Blog](htt ### Fellowship Program {#fellowship-program} -The [Ethereum Foundation Fellowship Program](https://fellowship.ethereum.foundation/) is an initiative to help address gaps in representation across cultures, nationalities, and economic classes. The Fellowship Program is about bridging these gaps by identifying and supporting unique and talented individuals helping to enable Ethereum’s relevance and breaking down barriers to entry for those underrepresented people and communities who will become the future of web3. +The [Ethereum Foundation Fellowship Program](https://fellowship.ethereum.foundation/) is an initiative to help address gaps in representation across cultures, nationalities, and economic classes. The Fellowship Program is about bridging these gaps by identifying and supporting unique and talented individuals helping to enable Ethereum’s relevance, and breaking down barriers to entry for those underrepresented people and communities who will become the future of Web3. -Learn more at [fellowship.ethereum.foundation](https://fellowship.ethereum.foundation/). +[Learn more at fellowship.ethereum.foundation](https://fellowship.ethereum.foundation/).
      From 2ca3d0e8219e3ec65a740d5a04be0a6d73219416 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:22:28 +0000 Subject: [PATCH 081/244] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4dc2c6dc7ee..d9f86921dc6 100644 --- a/README.md +++ b/README.md @@ -446,7 +446,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
      Steven Gilbert

      🖋
      Sacha Saint-Leger

      🖋 -
      Griffin Ichiba Hotchkiss

      🖋 +
      Griffin Ichiba Hotchkiss

      🖋 📖
      Scott Bigelow

      🖋
      Harikrishnan Mulackal

      🖋
      Matthieu Caneill

      🖋 From 0d7b31098b7bc09dee4f67b20ebd56cb4c40d994 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:22:28 +0000 Subject: [PATCH 082/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 22cabb193e2..36e18be32a8 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1920,7 +1920,8 @@ "avatar_url": "https://avatars3.githubusercontent.com/u/9886144?v=4", "profile": "https://github.com/gichiba", "contributions": [ - "content" + "content", + "doc" ] }, { From e55c2062f893aeb2912e4e9eeeeca973a4529a0a Mon Sep 17 00:00:00 2001 From: vicNerazim Date: Tue, 14 Jun 2022 10:23:03 +0200 Subject: [PATCH 083/244] Convert HorizontalCard file to TS --- .../{HorizontalCard.js => HorizontalCard.tsx} | 15 ++++++++++++--- src/pages-conditional/eth.tsx | 2 +- src/pages-conditional/wallets.tsx | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) rename src/components/{HorizontalCard.js => HorizontalCard.tsx} (72%) diff --git a/src/components/HorizontalCard.js b/src/components/HorizontalCard.tsx similarity index 72% rename from src/components/HorizontalCard.js rename to src/components/HorizontalCard.tsx index 1ca9facaf6e..34f7a93c6ef 100644 --- a/src/components/HorizontalCard.js +++ b/src/components/HorizontalCard.tsx @@ -1,6 +1,6 @@ import React from "react" import styled from "styled-components" -import Emoji from "../components/Emoji" +import Emoji from "./Emoji" const StyledCard = styled.div` border-radius: 4px; @@ -19,9 +19,18 @@ const Description = styled.p` ` const Title = styled.p` - font-size: 1.25rem;` + font-size: 1.25rem; +` + +export interface IProps { + emoji: string + title?: string | JSX.Element + description: string | JSX.Element + className?: string + emojiSize?: number +} -const HorizontalCard = ({ +const HorizontalCard: React.FC = ({ emoji, title, description, diff --git a/src/pages-conditional/eth.tsx b/src/pages-conditional/eth.tsx index ab7311973cb..fa8326e1a01 100644 --- a/src/pages-conditional/eth.tsx +++ b/src/pages-conditional/eth.tsx @@ -507,7 +507,7 @@ const EthPage = (props: PageProps) => { emoji={token.emoji} title={token.title} description={token.description} - size={5} + emojiSize={5} /> ))} diff --git a/src/pages-conditional/wallets.tsx b/src/pages-conditional/wallets.tsx index 8573cb4db92..094eabed5e3 100644 --- a/src/pages-conditional/wallets.tsx +++ b/src/pages-conditional/wallets.tsx @@ -375,7 +375,7 @@ const WalletsPage = ({ key={idx} emoji={type.emoji} description={type.description} - size={2.5} + emojiSize={2.5} /> ))}

      From 3ea8460e56083a3997f8af8e169033feab549b29 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:25:23 +0000 Subject: [PATCH 084/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d9f86921dc6..d7010c4a5aa 100644 --- a/README.md +++ b/README.md @@ -1259,6 +1259,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
      Ahmetbasli

      📖
      Jordi Pascual

      🌍 🐛 📖
      Amith KK

      📖 🐛 +
      Arpit Ingle

      🤔 From 536dc1c776acad7bfc4e08b5a1ecbcd128826179 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:25:24 +0000 Subject: [PATCH 085/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 36e18be32a8..8f0e41e1989 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7811,6 +7811,15 @@ "doc", "bug" ] + }, + { + "login": "ArpitIngle", + "name": "Arpit Ingle", + "avatar_url": "https://avatars.githubusercontent.com/u/37828045?v=4", + "profile": "https://github.com/ArpitIngle", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, From 170bfb45fe2376f73c6a90b8b863c411b34c844c Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 14 Jun 2022 09:29:19 +0100 Subject: [PATCH 086/244] Apply suggestions from code review --- src/content/developers/docs/standards/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/standards/index.md b/src/content/developers/docs/standards/index.md index 31a80715ce7..3c921ed7276 100644 --- a/src/content/developers/docs/standards/index.md +++ b/src/content/developers/docs/standards/index.md @@ -29,8 +29,8 @@ Certain EIPs relate to application-level standards (e.g. a standard smart-contra ### Token standards {#token-standards} -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - A standard interface for fungible (interchangeable) tokens, like voting tokens, staking tokens or virtual currencies. Think of it as a set of rules or functions that a newly created token in the Ethereum network must respect or follow. -- [ERC-721](/developers/docs/standards/tokens/erc-721/) - A standard interface for non-fungible tokens, like a deed for artwork or a song. Things or assets that use ERC-721 will record and assign the ownership to the account numbers. +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - A standard interface for fungible (interchangeable) tokens, like voting tokens, staking tokens or virtual currencies. +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - A standard interface for non-fungible tokens, like a deed for artwork or a song. - [ERC-777](/developers/docs/standards/tokens/erc-777/) - A token standard improving over ERC-20. - [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - A token standard which can contain both fungible and non-fungible assets. - [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - A tokenized vault standard designed to optimize and unify the technical parameters of yield-bearing vaults. @@ -39,6 +39,6 @@ Learn more about [token standards](/developers/docs/standards/tokens/). ## Further reading {#further-reading} -- [Ethereum Improvement Proposals (EIPs)](https://ethereum.org/en/eips/) +- [Ethereum Improvement Proposals (EIPs)](/eips/) _Know of a community resource that helped you? Edit this page and add it!_ From 84c8bb76ee9e1bb2c61f46f479fd3344909aa43a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:30:08 +0000 Subject: [PATCH 087/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d7010c4a5aa..5a5d080521c 100644 --- a/README.md +++ b/README.md @@ -1260,6 +1260,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
      Jordi Pascual

      🌍 🐛 📖
      Amith KK

      📖 🐛
      Arpit Ingle

      🤔 +
      Gourav Singh Rawat

      📖 🤔 From 45a7d4399e1207c60e15966be8c6c566c3773b81 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:30:10 +0000 Subject: [PATCH 088/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8f0e41e1989..71d88f72d5f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7820,6 +7820,16 @@ "contributions": [ "ideas" ] + }, + { + "login": "Seek4samurai", + "name": "Gourav Singh Rawat", + "avatar_url": "https://avatars.githubusercontent.com/u/69115613?v=4", + "profile": "https://seek4samurai.vercel.app/", + "contributions": [ + "doc", + "ideas" + ] } ], "contributorsPerLine": 7, From 506fe7ea3b9169a049624e5825af85c0a3de3882 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:31:54 +0000 Subject: [PATCH 089/244] docs: update README.md [skip ci] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5a5d080521c..a0e5db143e8 100644 --- a/README.md +++ b/README.md @@ -1262,6 +1262,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
      Arpit Ingle

      🤔
      Gourav Singh Rawat

      📖 🤔 + +
      mempirate

      📖 🐛 + From d9b48a90dbcdcc28198888f140b25d8926a387f9 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 08:31:54 +0000 Subject: [PATCH 090/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 71d88f72d5f..d07542085e7 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7830,6 +7830,16 @@ "doc", "ideas" ] + }, + { + "login": "jonasbostoen", + "name": "mempirate", + "avatar_url": "https://avatars.githubusercontent.com/u/32879610?v=4", + "profile": "https://netbound.io", + "contributions": [ + "doc", + "bug" + ] } ], "contributorsPerLine": 7, From f89cfedd923830b64ac844b44a329350c28fcad6 Mon Sep 17 00:00:00 2001 From: Joshua <30259508@cityofglacol.ac.uk> Date: Tue, 14 Jun 2022 09:42:26 +0100 Subject: [PATCH 091/244] Fix TurboGeth links --- .../developers/docs/programming-languages/golang/index.md | 4 ++-- .../de/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../fa/developers/docs/nodes-and-clients/index.md | 2 +- .../fr/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../id/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../it/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../ro/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../tr/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- .../developers/docs/programming-languages/golang/index.md | 8 ++++---- 18 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/content/developers/docs/programming-languages/golang/index.md b/src/content/developers/docs/programming-languages/golang/index.md index 645788dff34..e4a456d2401 100644 --- a/src/content/developers/docs/programming-languages/golang/index.md +++ b/src/content/developers/docs/programming-languages/golang/index.md @@ -35,8 +35,8 @@ Need a more basic primer first? Check out [ethereum.org/learn](/learn/) or [ethe - [Go Ethereum Documentation](https://geth.ethereum.org/docs/) - _The documentation for the official Ethereum Golang_ - [Erigon Programmer's Guide](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Illustrated guide including the state tree, multi-proofs, and transaction processing_ -- [Turbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Community Conference (EthCC 3)_ -- [Turbo-Geth: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Community Conference (EthCC 3)_ +- [Erigon: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Creating a Dapp in Go with Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Work with Ethereum Private Network with Golang and Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) diff --git a/src/content/translations/de/developers/docs/nodes-and-clients/index.md b/src/content/translations/de/developers/docs/nodes-and-clients/index.md index 5e8a1cd0107..064bc692c0e 100644 --- a/src/content/translations/de/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/de/developers/docs/nodes-and-clients/index.md @@ -162,7 +162,7 @@ Hyperledger Besu ist ein unternehmensorientierter Ethereum-Client für öffentli #### Erigon {#erigon} -Erigon, früher bekannt als Turbo-Geth, ist eine Abspaltung von Go Ethereum, die auf Geschwindigkeit und Speicherplatzeffizienz ausgerichtet ist. Erigon ist eine komplett neu entwickelte Implementierung von Ethereum, die derzeit in Go geschrieben ist, aber auch in anderen Sprachen implementiert werden soll. Das Ziel von Erigon ist es, eine schnellere, modularere und optimierte Implementierung von Ethereum anzubieten. Es kann eine vollständige Synchronisierung des Archiv-Nodes mit weniger als 2 Tb Speicherplatz in weniger als 3 Tagen durchführen +Erigon, früher bekannt als Erigon, ist eine Abspaltung von Go Ethereum, die auf Geschwindigkeit und Speicherplatzeffizienz ausgerichtet ist. Erigon ist eine komplett neu entwickelte Implementierung von Ethereum, die derzeit in Go geschrieben ist, aber auch in anderen Sprachen implementiert werden soll. Das Ziel von Erigon ist es, eine schnellere, modularere und optimierte Implementierung von Ethereum anzubieten. Es kann eine vollständige Synchronisierung des Archiv-Nodes mit weniger als 2 Tb Speicherplatz in weniger als 3 Tagen durchführen ### Synchronisationsmodi {#sync-modes} diff --git a/src/content/translations/es/developers/docs/programming-languages/golang/index.md b/src/content/translations/es/developers/docs/programming-languages/golang/index.md index f2dbfdbfae2..8cd37be2d65 100644 --- a/src/content/translations/es/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/es/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Usa Ethereum para crear aplicaciones descentralizadas (o "dapps"). Estas dapps p ## Artículos y documentos de nivel intermedio {#intermediate-articles-and-docs} - [Documentación Ethereum de Go](https://geth.ethereum.org/docs/): _La documentación oficial para Ethereum Golang_ -- [Guía del Programador Turbo-Geth](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md): _Guía ilustrada que incluye el árbol de estado, multi-pruebas y procesamiento de transacciones_ -- [Turbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394): _Conferencia de la Comunidad Ethereum (EthCC 3)_ -- [Turbo-Geth: Optimizando clientes de Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 2018 4_ +- [Guía del Programador Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md): _Guía ilustrada que incluye el árbol de estado, multi-pruebas y procesamiento de transacciones_ +- [Erigon and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394): _Conferencia de la Comunidad Ethereum (EthCC 3)_ +- [Erigon: Optimizando clientes de Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 2018 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Crear una dapp en Go con Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Trabajar con la red privada Ethereum con Golang y Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Usa Ethereum para crear aplicaciones descentralizadas (o "dapps"). Estas dapps p - [Geth/Go Ethereum](https://github.com/ethereum/go-ethereum): _Implementación oficial en Go del protocolo Ethereum_ - [Análisis de código Go de Ethereum](https://github.com/ZtesoftCS/go-ethereum-code-analysis): _Revisión y análisis del código fuente de Go para Ethereum_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth)_: Derivada más rápida de Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon)_: Derivada más rápida de Go Ethereum_ - [Golem](https://github.com/golemfactory/golem): _Golem está creando un mercado global orientado al poder de la informática_ - [Quorum](https://github.com/jpmorganchase/quorum): _Una implementación autorizada de Ethereum compatible con la privacidad de datos_ - [Prysm](https://github.com/prysmaticlabs/prysm): _Implementación de Go de Ethereum 'Serenity' 2.0_ diff --git a/src/content/translations/fa/developers/docs/nodes-and-clients/index.md b/src/content/translations/fa/developers/docs/nodes-and-clients/index.md index d094746089f..f9a302ea1c6 100644 --- a/src/content/translations/fa/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/fa/developers/docs/nodes-and-clients/index.md @@ -162,7 +162,7 @@ Nethermind همچنین [اسناد با جزییات](https://docs.nethermind.i #### Erigon {#erigon} -Erigon که قبلاً به عنوان Turbo-Geth شناخته می‌شد، یک فورک Go Ethereum است که هدفش سرعت و کارایی فضای دیسک است. Erigon یک پیاده‌سازی کاملاً بازسازی شده از Ethereum است که در حال حاضر به زبان Go نوشته شده است، اما پیاده‌سازی آن به زبان‌های دیگر برنامه‌ریزی شده است. هدف Erigon ارائه‌ی پیاده‌سازی سریع‌تر، ماژولارتر و بهینه‌تر اتریوم است. این کلاینت می‌تواند با بکارگیری کمتر از 2 ترابایت فضای دیسک، در کمتر از 3 روز، همگام‌سازی گره‌ی آرشیو کامل را انجام دهد +Erigon که قبلاً به عنوان Erigon شناخته می‌شد، یک فورک Go Ethereum است که هدفش سرعت و کارایی فضای دیسک است. Erigon یک پیاده‌سازی کاملاً بازسازی شده از Ethereum است که در حال حاضر به زبان Go نوشته شده است، اما پیاده‌سازی آن به زبان‌های دیگر برنامه‌ریزی شده است. هدف Erigon ارائه‌ی پیاده‌سازی سریع‌تر، ماژولارتر و بهینه‌تر اتریوم است. این کلاینت می‌تواند با بکارگیری کمتر از 2 ترابایت فضای دیسک، در کمتر از 3 روز، همگام‌سازی گره‌ی آرشیو کامل را انجام دهد ### حالات همگام‌سازی {#sync-modes} diff --git a/src/content/translations/fr/developers/docs/nodes-and-clients/index.md b/src/content/translations/fr/developers/docs/nodes-and-clients/index.md index f5218556289..74973b4cc3b 100644 --- a/src/content/translations/fr/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/fr/developers/docs/nodes-and-clients/index.md @@ -162,7 +162,7 @@ Hyperledger Besu est un client Ethereum de niveau entreprise pour les réseaux p #### Erigon {#erigon} -Erigon, anciennement connu sous le nom de Turbo-Geth, est une fourche de Go Ethereum axée sur la vitesse et l'efficacité de l'espace disque. Erigon est une implémentation entièrement repensée d'Ethereum, actuellement écrite en Go mais pour laquelle des implémentations dans d'autres langages sont prévues. L'objectif d'Erigon est de fournir une implémentation plus rapide, plus modulaire et plus optimisée d'Ethereum. Il peut effectuer une synchronisation complète des nœuds d'archive en utilisant moins de 2 To d'espace disque, et ce en moins de 3 jours. +Erigon, anciennement connu sous le nom de Erigon, est une fourche de Go Ethereum axée sur la vitesse et l'efficacité de l'espace disque. Erigon est une implémentation entièrement repensée d'Ethereum, actuellement écrite en Go mais pour laquelle des implémentations dans d'autres langages sont prévues. L'objectif d'Erigon est de fournir une implémentation plus rapide, plus modulaire et plus optimisée d'Ethereum. Il peut effectuer une synchronisation complète des nœuds d'archive en utilisant moins de 2 To d'espace disque, et ce en moins de 3 jours. ### Modes de synchronisation {#sync-modes} diff --git a/src/content/translations/fr/developers/docs/programming-languages/golang/index.md b/src/content/translations/fr/developers/docs/programming-languages/golang/index.md index 3337e1eadd1..d0a2727edf3 100644 --- a/src/content/translations/fr/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/fr/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Besoin d’une approche plus élémentaire ? Consultez [ethereum.org/learn](/le ## Articles et documentation de niveau intermédiaire {#intermediate-articles-and-docs} - [Documentation Go Ethereum](https://geth.ethereum.org/docs/) - _Documentation Ethereum officielle pour Go_ -- [Guide du programmeur Turbo-Geth](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _Guide illustré incluant l'arborescence d'état, les multipreuves et le traitement des transactions_ -- [Turbo-Geth et Ethereum sans état](https://youtu.be/3-Mn7OckSus?t=394) - _Conférence de la communauté Ethereum 2020 (EthCC 3)_ -- [Turbo-Geth: optimiser les clients Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 4 - 2018 _ +- [Guide du programmeur Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Guide illustré incluant l'arborescence d'état, les multipreuves et le traitement des transactions_ +- [Erigon et Ethereum sans état](https://youtu.be/3-Mn7OckSus?t=394) - _Conférence de la communauté Ethereum 2020 (EthCC 3)_ +- [Erigon: optimiser les clients Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 4 - 2018 _ - [GoDoc Go Ethereum](https://godoc.org/github.com/ethereum/go-ethereum) - [Créer un dApp avec Geth dans Go](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Travailler avec le réseau privé Ethereum avec Golang et Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Besoin d’une approche plus élémentaire ? Consultez [ethereum.org/learn](/le - [Geth/Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implémentation officielle du protocole Ethereum_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Revue et analyse du code source Go Ethereum_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Dérivé plus rapide de Go Thereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Dérivé plus rapide de Go Thereum_ - [Golem](https://github.com/golemfactory/golem) - _Golem crée un marché mondial de distribution de puissance informatique_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Implémentation d'Ethereum soumise à droit d'accès, prenant en charge la confidentialité des données_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implémentation d'Ethereum « Serenity » 2.0 Go _ diff --git a/src/content/translations/hu/developers/docs/programming-languages/golang/index.md b/src/content/translations/hu/developers/docs/programming-languages/golang/index.md index f8c279ee5ab..635e615477d 100644 --- a/src/content/translations/hu/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/hu/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Szükséged van egy méginkább kezdőknek szóló alapozóra? Tekintsd meg az [ ## Haladó cikkek és dokumentációk {#intermediate-articles-and-docs} - [Go Ethereum Documentation](https://geth.ethereum.org/docs/) - _A hivatalos Ethereum Golang dokumentáció_ -- [Turbo-Geth Programmer's Guide](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _Illusztrált útmutató, mely bemutatja az állapot fát, többszöri bizonyítékokat és a tranzakció feldolgozást_ -- [Turbo-Geth és az állapot nélküli Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Közösségi Konferenica (EthCC 3)_ -- [Turbo-Geth: Ethereum kliensek optimalizálása](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon Programmer's Guide](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Illusztrált útmutató, mely bemutatja az állapot fát, többszöri bizonyítékokat és a tranzakció feldolgozást_ +- [Erigon és az állapot nélküli Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Közösségi Konferenica (EthCC 3)_ +- [Erigon: Ethereum kliensek optimalizálása](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Egy dapp készítése Go-ban Geth-tel](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Munka Ethereum Privát Hálózaton Golang-gel és Geth-tel](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Szükséged van egy méginkább kezdőknek szóló alapozóra? Tekintsd meg az [ - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Az Ethereum protokoll hivatalos Go implementációja_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Go Ethereum forráskód áttekintése és elemzése_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _A Go Ethereum gyorsabb származéka_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _A Go Ethereum gyorsabb származéka_ - [Golem](https://github.com/golemfactory/golem) - _A Golem egy globális piacot teremt a számítási teljesítmény számára_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Egy engedélyköteles Ethereum implementáció, mely támogatja az adatvédelmet_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Ethereum 'Serenity' 2.0 Go implementáció_ diff --git a/src/content/translations/id/developers/docs/nodes-and-clients/index.md b/src/content/translations/id/developers/docs/nodes-and-clients/index.md index e38f8ecefba..d966f896369 100644 --- a/src/content/translations/id/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/id/developers/docs/nodes-and-clients/index.md @@ -160,7 +160,7 @@ Hyperledger Besu adalah klien Ethereum standar perusahaan untuk jaringan publik #### Erigon {#erigon} -Erigon, yang sebelumnya dikenal sebagai Turbo-Geth, adalah sebuah fork Go Ethereum yang diarahkan untuk efisiensi kecepatan dan pemakaian ruangan cakram. Erigon adalah sebuah implementasi yang sepenuhnya di buat kembali di Ethereum, yang saat ini ditulis dalam Go dengan implementasi dalam bahasa pemograman lain yang direncanakan. Tujuan Erigon adalah menyediakan implementasi Ethereum yang lebih cepat, lebih modular, dan lebih teroptimisasi. Ia dapat melakukan sinkronisasi node arsip penuh dengan menggunakan kurang dari 2 TB ruangan cakram, dalam waktu kurang dari 3 hari +Erigon, yang sebelumnya dikenal sebagai Erigon, adalah sebuah fork Go Ethereum yang diarahkan untuk efisiensi kecepatan dan pemakaian ruangan cakram. Erigon adalah sebuah implementasi yang sepenuhnya di buat kembali di Ethereum, yang saat ini ditulis dalam Go dengan implementasi dalam bahasa pemograman lain yang direncanakan. Tujuan Erigon adalah menyediakan implementasi Ethereum yang lebih cepat, lebih modular, dan lebih teroptimisasi. Ia dapat melakukan sinkronisasi node arsip penuh dengan menggunakan kurang dari 2 TB ruangan cakram, dalam waktu kurang dari 3 hari ### Mode sinkronisasi {#sync-modes} diff --git a/src/content/translations/id/developers/docs/programming-languages/golang/index.md b/src/content/translations/id/developers/docs/programming-languages/golang/index.md index 97af2f585b0..e41ee390308 100644 --- a/src/content/translations/id/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/id/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Perlu penjelasan yang lebih mendasar? Kunjungi [ethereum.org/learn](/learn/) ata ## Artikel dan dokumen tingkat menengah {#intermediate-articles-and-docs} - [Dokumentasi Go Ethereum](https://geth.ethereum.org/docs/) - _Dokumentasi untuk Golang Ethereum resmi_ -- [Panduan Programmer Turbo-Geth](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _Panduan bergambar yang mencakup pohon state, multibukti, dan pemrosesan transaksi_ -- [Turbo-Geth dan Ethereum Tanpa State](https://youtu.be/3-Mn7OckSus?t=394) - _Konferensi Komunitas Ethereum 2020 (EthCC 3)_ -- [Turbo-Geth: mengoptimalkan klien Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 4 2018_ +- [Panduan Programmer Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Panduan bergambar yang mencakup pohon state, multibukti, dan pemrosesan transaksi_ +- [Erigon dan Ethereum Tanpa State](https://youtu.be/3-Mn7OckSus?t=394) - _Konferensi Komunitas Ethereum 2020 (EthCC 3)_ +- [Erigon: mengoptimalkan klien Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 4 2018_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Membuat Dapp dalam Go dengan Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Bekerja dengan Jaringan Privat Ethereum dengan Golang dan Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Perlu penjelasan yang lebih mendasar? Kunjungi [ethereum.org/learn](/learn/) ata - [Geth/Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implementasi Go resmi untuk protokol Ethereum_ - [Analisis Kode Go Ethereum](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Ulasan dan analisa kode sumber Go Ethereum_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Turunan Go Ethereum yang lebih cepat_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Turunan Go Ethereum yang lebih cepat_ - [Golem](https://github.com/golemfactory/golem) - _Golem sedang menciptakan pasar global untuk daya komputasi_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Sebuah implementasi Ethereum berizin yang mendukung privasi data_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implementasi Go 'Serenity' 2.0 Ethereum_ diff --git a/src/content/translations/it/developers/docs/nodes-and-clients/index.md b/src/content/translations/it/developers/docs/nodes-and-clients/index.md index 0ee59603b9e..274e7e6f437 100644 --- a/src/content/translations/it/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/it/developers/docs/nodes-and-clients/index.md @@ -154,7 +154,7 @@ Hyperledger Besu è un client Ethereum di livello enterprise per reti pubbliche #### Erigon {#erigon} -Erigon, precedentemente noto come Turbo-Geth, è una diramazione di Go Ethereum orientata alla velocità e all'efficienza dello spazio su disco. Erigon è un'implementazione completamente riprogettata di Ethereum, correntemente scritta in Go ma con implementazioni pianificate in altri linguaggi. L'obiettivo di Erigon è fornire un'implementazione più veloce, modulare e ottimizzata di Ethereum. Può eseguire una sincronizzazione completa del nodo d'archivio usando meno di 2TB di spazio su disco, in meno di 3 giorni. +Erigon, precedentemente noto come Erigon, è una diramazione di Go Ethereum orientata alla velocità e all'efficienza dello spazio su disco. Erigon è un'implementazione completamente riprogettata di Ethereum, correntemente scritta in Go ma con implementazioni pianificate in altri linguaggi. L'obiettivo di Erigon è fornire un'implementazione più veloce, modulare e ottimizzata di Ethereum. Può eseguire una sincronizzazione completa del nodo d'archivio usando meno di 2TB di spazio su disco, in meno di 3 giorni. ### Modalità di sincronizzazione {#sync-modes} diff --git a/src/content/translations/it/developers/docs/programming-languages/golang/index.md b/src/content/translations/it/developers/docs/programming-languages/golang/index.md index 9987373ac0a..5dbee30f13c 100644 --- a/src/content/translations/it/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/it/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Hai prima bisogno di nozioni di base? Dai un'occhiata a [ethereum.org/learn](/le ## Articoli e documentazione di livello intermedio {#intermediate-articles-and-docs} - [Go Ethereum Documentation](https://geth.ethereum.org/docs/) - _La documentazione per il Golang ufficiale di Ethereum_ -- [Turbo-Geth Programmer's Guide](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _ Guida illustrata che tratta gli alberi di stato, prove multiple ed elaborazioni delle transazioni_ -- [Turbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _Conferenza della Community di Ethereum 2020 (EthCC 3)_ -- [Turbo-Geth: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon Programmer's Guide](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _ Guida illustrata che tratta gli alberi di stato, prove multiple ed elaborazioni delle transazioni_ +- [Erigon and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _Conferenza della Community di Ethereum 2020 (EthCC 3)_ +- [Erigon: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Creating a Dapp in Go with Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Work with Ethereum Private Network with Golang and Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Hai prima bisogno di nozioni di base? Dai un'occhiata a [ethereum.org/learn](/le - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implementazione ufficiale di Go del protocollo di Ethereum_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Controllo e analisi del codice sorgente di Go Ethereum_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Il più veloce derivato di Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Il più veloce derivato di Go Ethereum_ - [Golem](https://github.com/golemfactory/golem) - _Golem sta creando un mercato globale per la potenza di calcolo_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Implementazione con permessi di Ethereum a supporto della privacy dei dati_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implementazione Go di 'Serenity' 2.0 per Ethereum_ diff --git a/src/content/translations/pl/developers/docs/programming-languages/golang/index.md b/src/content/translations/pl/developers/docs/programming-languages/golang/index.md index ef2bd043160..361a73122f7 100644 --- a/src/content/translations/pl/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/pl/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Potrzebujesz bardziej podstawowych informacji? Sprawdź na stronach [ethereum.or ## Artykuły dla średniozaawansowanych {#intermediate-articles-and-docs} - [Go Ethereum Documentation](https://geth.ethereum.org/docs/) — dokumentacja oficjalnego Golang Ethereum -- [Turbo-Geth Programmer's Guide](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) — ilustrowany przewodnik uwzględniający drzewo stanowe, wiele dowodów i przetwarzanie transakcji -- [TTurbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) — _Konferencja Społeczności Ethereum 2020 (EthCC 3)_ -- [TTurbo-Geth: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) — _2018 Devcon 4_ +- [Erigon Programmer's Guide](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) — ilustrowany przewodnik uwzględniający drzewo stanowe, wiele dowodów i przetwarzanie transakcji +- [Turbo-Geth and Stateless Ethereum](https://youtu.be/3-Mn7OckSus?t=394) — _Konferencja Społeczności Ethereum 2020 (EthCC 3)_ +- [Turbo-Geth: optimising Ethereum clients](https://www.youtube.com/watch?v=CSpc1vZQW2Q) — _2018 Devcon 4_ - [Go Ethereum — dokumentacja Go](https://godoc.org/github.com/ethereum/go-ethereum) - [Tworzenie aplikacji zdecentralizowanych w Go z użyciem Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Praca z prywatną siecią Ethereum z Golang i Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Potrzebujesz bardziej podstawowych informacji? Sprawdź na stronach [ethereum.or - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) — oficjalna implementacja protokołu Ethereum - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) — przegląd i analiza kodu źródłowego Go Ethereum -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) — szybsza pochodna Go Ethereum +- [Erigon](https://github.com/ledgerwatch/erigon) — szybsza pochodna Go Ethereum - [Golem](https://github.com/golemfactory/golem) — _Golem tworzy globalny rynek mocy obliczeniowej_ - [Quorum](https://github.com/jpmorganchase/quorum) — uprawniona implementacja Ethereum wspierająca prywatność danych - Prysmimplementacja Ethereum „Serenity” 2.0 przy użyciu Go diff --git a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md index f54e62c2094..718b02cfaf3 100644 --- a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Precisa de uma introdução geral? Confira [ethereum.org/learn](/learn/) ou [eth ## Artigos e documentos de nível Intermediário {#intermediate-articles-and-docs} - [Documentação Ethereum em Go](https://geth.ethereum.org/docs/) - _A documentação da implementação oficial da Ethereum em Go_ -- [Guia do Programador Turbo-Geth](https://github. com/ledgerwatch/turbo-geth/blob/master/docs/programmers*guide/guide. md) - \_Guia ilustrado, incluindo a árvore de estado, múltiplas provas e processamento de transações* -- [Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _Conferência Comunitária da Ethereum da Turbo-Geth e sem estado, (EthCC 3)_ -- [Turbo-Geth: otimização de clientes Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Guia do Programador Erigon](https://github. com/ledgerwatch/erigon/blob/devel/docs/programmers*guide/guide. md) - \_Guia ilustrado, incluindo a árvore de estado, múltiplas provas e processamento de transações* +- [Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _Conferência Comunitária da Ethereum da Erigon e sem estado, (EthCC 3)_ +- [Erigon: otimização de clientes Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Criando um Dapp Go com o Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Trabalhe com uma rede privada Ethereum com Golang e Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Precisa de uma introdução geral? Confira [ethereum.org/learn](/learn/) ou [eth - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implementação Oficial do protocolo da Ethereum_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Revisão e analise do código-fonte do Go Ethereum_ -- [Turbo-Geth](https://github. com/ledgerwatch/turbo-geth) - _Mais rápido derivado da Go Ethereum_ +- [Erigon](https://github. com/ledgerwatch/turbo-geth) - _Mais rápido derivado da Go Ethereum_ - [Golem](https://github.com/golemfactory/golem) - _Golem está criando um mercado global para computação distribuída_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Uma implementação permissionada da Ethereum com suporte a privacidade de dados_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implementação em Go da Ethereum 'Serenity' 2.0_ diff --git a/src/content/translations/ro/developers/docs/nodes-and-clients/index.md b/src/content/translations/ro/developers/docs/nodes-and-clients/index.md index 25cccf6e34b..31a6fceafca 100644 --- a/src/content/translations/ro/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/ro/developers/docs/nodes-and-clients/index.md @@ -162,7 +162,7 @@ Hyperledger Besu este un client Ethereum de nivel de întreprindere pentru rețe #### Erigon {#erigon} -Erigon, cunoscut anterior sub denumirea de Turbo-Geth, este un fork Go Ethereum ce vizează creşterea vitezei şi a eficienţei spaţiului pe disc. Erigon este o implementare complet reproiectată a lui Ethereum, actualmente scrisă în Go, dar care urmează să fie implementată și în alte limbaje. Scopul Erigon este de a oferi o implementare mai rapidă, mai modulară și mai optimizată a lui Ethereum. It can perform a full archive node sync using less than 2TB of disk space, in under 3 days +Erigon, cunoscut anterior sub denumirea de Erigon, este un fork Go Ethereum ce vizează creşterea vitezei şi a eficienţei spaţiului pe disc. Erigon este o implementare complet reproiectată a lui Ethereum, actualmente scrisă în Go, dar care urmează să fie implementată și în alte limbaje. Scopul Erigon este de a oferi o implementare mai rapidă, mai modulară și mai optimizată a lui Ethereum. It can perform a full archive node sync using less than 2TB of disk space, in under 3 days ### Moduri de sincronizare {#sync-modes} diff --git a/src/content/translations/ro/developers/docs/programming-languages/golang/index.md b/src/content/translations/ro/developers/docs/programming-languages/golang/index.md index 5a0d80909d4..d8427434a41 100644 --- a/src/content/translations/ro/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/ro/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Aveţi nevoie de o scurtă introducere? Accesaţi [ethereum.org/learn](/learn/) ## Articole și documentații de nivel intermediar {#intermediate-articles-and-docs} - [Documentație Go Ethereum](https://geth.ethereum.org/docs/) - _Documentația oficială pentru Ethereum Golang_ -- [Ghidul programatorului Turbo-Geth](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) – _Ghid ilustrat ce cuprinde arborele de stare, dovezile multiple și procesarea tranzacțiilor_ -- [Turbo-Geth și Ethereum fără stare](https://youtu.be/3-Mn7OckSus?t=394) - _Conferința comunitară Ethereum din 2020 (EthCC 3)_ -- [Turbo-Geth: optimizarea clienților Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Ghidul programatorului Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) – _Ghid ilustrat ce cuprinde arborele de stare, dovezile multiple și procesarea tranzacțiilor_ +- [Erigon și Ethereum fără stare](https://youtu.be/3-Mn7OckSus?t=394) - _Conferința comunitară Ethereum din 2020 (EthCC 3)_ +- [Erigon: optimizarea clienților Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Crearea unei aplicații descentralizate în Go cu Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Utilizarea unei rețele private Ethereum cu Golang și Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Aveţi nevoie de o scurtă introducere? Accesaţi [ethereum.org/learn](/learn/) - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implementarea oficială Go a protocolului Ethereum_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Evaluarea și analiza codului sursă Go Ethereum_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Derivat mai rapid al Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Derivat mai rapid al Go Ethereum_ - [Golem](https://github.com/golemfactory/golem) - _Golem construiește o piață globală pentru puterea de calcul_ - [Quorum](https://github.com/jpmorganchase/quorum) - _O implementare Ethereum cu sistem de permisiuni și suport pentru confidențialitatea datelor_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implementare Go Ethereum „Serenity” 2.0_ diff --git a/src/content/translations/tr/developers/docs/nodes-and-clients/index.md b/src/content/translations/tr/developers/docs/nodes-and-clients/index.md index acf57a894c4..474e1b93e30 100644 --- a/src/content/translations/tr/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/tr/developers/docs/nodes-and-clients/index.md @@ -162,7 +162,7 @@ Hyperledger Besu, genel ve izin verilen ağlar için kurumsal düzeyde bir Ether #### Erigon {#erigon} -Eskiden Turbo-Geth olarak bilinen Erigon, hız ve disk alanı verimliliğine yönelik bir Go Ethereum çatalıdır. Erigon, şu anda Go'da yazılmış, ancak diğer dillerde uygulanması planlanan Ethereum'un tamamen yeniden tasarlanmış bir uygulamasıdır. Erigon'un amacı, Ethereum'un daha hızlı, daha modüler ve daha optimize edilmiş bir uygulamasını sağlamaktır. 3 günden kısa bir sürede 2 Tb'den daha az disk alanı kullanarak tam bir arşiv düğümü senkronizasyonu gerçekleştirebilir +Eskiden Erigon olarak bilinen Erigon, hız ve disk alanı verimliliğine yönelik bir Go Ethereum çatalıdır. Erigon, şu anda Go'da yazılmış, ancak diğer dillerde uygulanması planlanan Ethereum'un tamamen yeniden tasarlanmış bir uygulamasıdır. Erigon'un amacı, Ethereum'un daha hızlı, daha modüler ve daha optimize edilmiş bir uygulamasını sağlamaktır. 3 günden kısa bir sürede 2 Tb'den daha az disk alanı kullanarak tam bir arşiv düğümü senkronizasyonu gerçekleştirebilir ### Senkronizasyon modları {#sync-modes} diff --git a/src/content/translations/tr/developers/docs/programming-languages/golang/index.md b/src/content/translations/tr/developers/docs/programming-languages/golang/index.md index f9b2e588496..b01ac30d38d 100644 --- a/src/content/translations/tr/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/tr/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/le ## Orta Seviye Makaleler ve Belgeler {#intermediate-articles-and-docs} - [Go Ethereum Belgeleri](https://geth.ethereum.org/docs/) - _Resmi Ethereum Golang belgeleri_ -- [Turbo-Geth Programcı Kılavuzu](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _Durum ağacını, çoklu ispatları ve işlem sürecini içeren resimli bir rehber_ -- [Turbo-Geth ve Durumsuz Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Topluluk Konferansı(EthCC 3)_ -- [Turbo-Geth: Ethereum istemcilerinin optimizasyonu](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon Programcı Kılavuzu](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Durum ağacını, çoklu ispatları ve işlem sürecini içeren resimli bir rehber_ +- [Erigon ve Durumsuz Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Topluluk Konferansı(EthCC 3)_ +- [Erigon: Ethereum istemcilerinin optimizasyonu](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [Geth ile Go'da bir Dapp oluşturma](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [Golang ve Geth üzerinden Ethereum Private Network ile çalışın](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ Başlamadan önce temel bilgilere mi ihtiyacınız var? [ethereum.org/learn](/le - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Ethereum protokolünün resmi Go uygulaması_ - [Go Ethereum Kodu Analizi](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Go Ethereum kaynak kodunun incelenmesi ve analizi_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _Go Ethereum'un daha hızlı bir türevi_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Go Ethereum'un daha hızlı bir türevi_ - [Golem](https://github.com/golemfactory/golem) - _Golem, bilgi işlem gücü için küresel bir pazar oluşturuyor_ - [Quorum](https://github.com/jpmorganchase/quorum) - _İzin verilen veri gizliliğini destekleyen Ethereum uygulaması_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _ Ethereum "Serenity" 2.0 Go Uygulaması_ diff --git a/src/content/translations/zh/developers/docs/programming-languages/golang/index.md b/src/content/translations/zh/developers/docs/programming-languages/golang/index.md index cd340b93371..030b62479c1 100644 --- a/src/content/translations/zh/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/zh/developers/docs/programming-languages/golang/index.md @@ -34,9 +34,9 @@ incomplete: true ## 面向中等程度用户的文章和文档 {#intermediate-articles-and-docs} - [Go 以太坊相关文档](https://geth.ethereum.org/docs/) - _官方以太坊 Golang 相关文档_ -- [Turbo-Geth 编程者指南](https://github.com/ledgerwatch/turbo-geth/blob/master/docs/programmers_guide/guide.md) - _图文指南,内容涵盖状态树、多重认证和交易处理_ -- [Turbo-Geth 和无状态以太坊](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Community Conference (EthCC 3)_ -- [Turbo-Geth:优化以太坊客户端](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Erigon 编程者指南](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _图文指南,内容涵盖状态树、多重认证和交易处理_ +- [Erigon 和无状态以太坊](https://youtu.be/3-Mn7OckSus?t=394) - _2020 Ethereum Community Conference (EthCC 3)_ +- [Erigon:优化以太坊客户端](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go 以太坊 GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) - [在 Go 上使用 Geth 创建一个去中心化应用程序](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) - [用 Golang 和 Geth 使用以太坊专用网络](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) @@ -55,7 +55,7 @@ incomplete: true - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _以太坊协议的官方 Go 实现_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _审查和分析 Go 以太坊源代码_ -- [Turbo-Geth](https://github.com/ledgerwatch/turbo-geth) - _基于 Go Ethereum 的更快的实现_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _基于 Go Ethereum 的更快的实现_ - [Golem](https://github.com/golemfactory/golem) - _Golem 正在创建一个算力全球市场_ - [Quorum](https://github.com/jpmorganchase/quorum) - _支持数据隐私的许可型以太坊实现_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _以太坊 ‘Serenity’2.0 Go 实现_ From c158c07fe3cb2e66d85e3a294e798a0ba88cb7e7 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 14 Jun 2022 09:52:12 +0100 Subject: [PATCH 092/244] Apply suggestions from code review --- .../tutorials/run-light-node-geth/index.md | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/content/developers/tutorials/run-light-node-geth/index.md b/src/content/developers/tutorials/run-light-node-geth/index.md index ed4023d6b62..292dbd63db2 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -9,14 +9,13 @@ sidebar: true published: 2022-03-04 --- - Please note that Geth light clients can be very slow to find peers. This is because they rely on full-node operators opting-in to be light servers that the light clients can request data from. There are usually only a small number of light servers available. +**Please note that Geth light clients can be very slow to find peers. This is because they rely on full-node operators volunteering themselves as light servers from which the light clients can request data. There are usually only a small number of light servers available.** -Also note that after [The Merge]() a Geth node alone will not be sufficient - a consensus client must be connected to it in order to track the head of the chain. - +**Also, note that after [The Merge](/upgrades/merge/), a Geth node alone will not be sufficient - a consensus client must be connected to it to track the head of the chain.** You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running [Geth](https://geth.ethereum.org). With Geth, we can have a light node up and running in minutes. -A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond in comparison to other sync modes. +A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond to than other sync modes. For an explanation of the differences between the different sync modes, read our [nodes and clients developer docs](/developers/docs/nodes-and-clients/#node-types). @@ -58,17 +57,6 @@ Once enabled, run `curl http://127.0.0.1:8545`. This should report no error. ## To allow remote hosts to connect to your node, launch Geth with the following command: -title: How to run a light node with Geth -description: How to download, install and run a lightclient with Geth. -authors: "Brian Gu" -tags: ["clients", "geth", "nodes"] -skill: beginner -lang: en -sidebar: true -published: 2022-03-04 - ---- - You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running Geth. With Geth, we can have a light node up and running in minutes. A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond in comparison to other sync modes. From 0f82fe931a28bd950d76f5c54c583acec9c90704 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 09:55:32 +0100 Subject: [PATCH 093/244] add soulbound/QF/PoPP info to DID pg --- src/content/decentralized-identity/index.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/content/decentralized-identity/index.md b/src/content/decentralized-identity/index.md index 63f2021b2c4..2dcaeb77fb5 100644 --- a/src/content/decentralized-identity/index.md +++ b/src/content/decentralized-identity/index.md @@ -14,7 +14,7 @@ summaryPoint3: Thanks to crypto, users now have the tools to issue, hold and con Identity underpins virtually every aspect of your life today. Using online services, opening a bank account, voting in elections, buying property, securing employment—all of these things require proving your identity. -However, traditional identity management systems have long relied on centralized intermediaries who issue, hold, and control your identifiers and attestations. This means you cannot control your identity-related information, or decide who has access to personally identifiable information (PII) and how much access these parties have. +However, traditional identity management systems have long relied on centralized intermediaries who issue, hold, and control your identifiers and [attestations](#what-are-attestations). This means you cannot control your identity-related information, or decide who has access to personally identifiable information (PII) and how much access these parties have. To solve these problems, we have decentralized identity systems built on public blockchains like Ethereum. Decentralized identity allows individuals to manage their identity-related information. With decentralized identity solutions, _you_ can create identifiers and claim and hold your attestations without relying on central authorities, like service providers or governments. @@ -108,6 +108,10 @@ Here's an example to show how on-chain attestations might work in practice: 3. The smart contract selling shares can check the registry contract for the identities of screened buyers, making it possible for the smart contract to determine who is permitted to buy shares or not. +### Soulbound tokens and identity + +[Soulbound Tokens](https://vitalik.ca/general/2022/01/26/soulbound.html) (non-transferable NFTs) could be used to collect information unique to a specific wallet. This effectively creates a unique on-chain identity bound to a specific Ethereum address that could include tokens representing achievements (e.g. finishing some specific online course or a particular score in a game) or participation in communities. + ## Benefits of decentralized identity {#benefits-of-decentralized-identity} 1. Decentralized identity increases individual control of identifying information. Decentralized identifiers and attestations can be verified without relying on centralized authorities and third-party services. @@ -118,6 +122,10 @@ Here's an example to show how on-chain attestations might work in practice: 4. Decentralized identity makes identity data portable. Users store attestations and identifiers in mobile wallet and can share with any party of their choice. Decentralized identifiers and attestations are not locked into the database of the issuing organization. +5. Decentralized identity should work well with emerging zero-knowledge technologies that will enable individuals to prove they own or have done something without revealing what that thing is. This could become a powerful way to combine trust and privacy for applications such as voting. + +6. Decentralized identity enables anti-Sybil mechanisms that can identify when one individual human is pretending to be multiple humans in order to game or spam some system. + ## Decentralized identity use-cases {#decentralized-identity-use-cases} Decentralized identity has many potential use-cases: @@ -140,6 +148,10 @@ Online voting and social media are two novel applications for decentralized iden Decentralized identity can help create online communities that are free of fake accounts. For example, each user might have to authenticate their identity using an on-chain identity system, like the Ethereum Name Service, reducing the possibility of bots. +### 4. Anti-Sybil protection + +Sybil attacks refer to individual humans tricking a system into thinking they are multiple people in order to increase their influence. [Grant-giving applications](https://gitcoin.co/grants/) that use [quadratic voting](https://www.radicalxchange.org/concepts/plural-voting/) are vulnerable to these Sybil attacks because the value of a grant is increased when more individuals vote for it, incentivizing users to split their contributions across many identities. Decentralized identities help to prevent this by rasing the burden on each participant to prove that they are really human, although often without having to reveal specific private information. + ## Use decentralized identity {#use-decentralized-identity} There are many ambitious projects using Ethereum as a foundation for decentralized identity solutions: @@ -148,6 +160,7 @@ There are many ambitious projects using Ethereum as a foundation for decentraliz - **[SpruceID](https://www.spruceid.com/)** - _A decentralized identity project which allows users to control digital identity with Ethereum accounts and ENS profiles instead of relying on third-party services._ - **[Proof of Humanity](https://www.proofofhumanity.id)** - _Proof of Humanity (or PoH) is a social identity verification system built on Ethereum._ - **[BrightID](https://www.brightid.org/)** - _A decentralized, open-source social identity network seeking to reform identity verification through the creation and analysis of a social graph._ +- - **[Proof-of-personhood Passport](https://proofofpersonhood.com/)** - _A decentralized digital identity aggregator._ ## Further reading {#further-reading} From b61184fb25e2e69ab2002fd9bbee69d98d8b1f3f Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 14 Jun 2022 10:15:32 +0100 Subject: [PATCH 094/244] fix accidental ctrl-v --- .../tutorials/run-light-node-geth/index.md | 92 ------------------- 1 file changed, 92 deletions(-) diff --git a/src/content/developers/tutorials/run-light-node-geth/index.md b/src/content/developers/tutorials/run-light-node-geth/index.md index 292dbd63db2..93809f4c7e6 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -55,50 +55,6 @@ Once enabled, run `curl http://127.0.0.1:8545`. This should report no error. ### Allow remote connections {#allow-remote-connections} -## To allow remote hosts to connect to your node, launch Geth with the following command: - -You may be interested in running an [Ethereum node](/developers/docs/nodes-and-clients/). One of the easiest ways to do so is by downloading, installing, and running Geth. With Geth, we can have a light node up and running in minutes. - -A light client requires less than 400MB of storage whilst still allowing full interactivity with the Ethereum state. Light clients retrieve data from remote peers, so some queries may take longer to respond in comparison to other sync modes. - -For an explanation of the differences between the different sync modes, read our [nodes and clients developer docs](/developers/docs/nodes-and-clients/#node-types). - -## Install and run {#install-and-run} - -First, [install Geth](https://geth.ethereum.org/docs/install-and-build/installing-geth). - -After installing Geth, you can run an Ethereum node in "light" mode by running the following command in a Terminal window: - -```bash -geth --syncmode light -``` - -Once launched, Geth will begin connecting to other nodes on Ethereum - known as "peers". The process of connecting to peers may take a while. - -When your Geth node has enough peers, it will import headers from new blocks on the chain. - -When new block headers no longer have an "age", Geth will be synced to the chain's head. - -## Stopping and restarting your node {#stopping-and-restarting-your-node} - -You can stop your node at any time by pressing CTRL+C. - -When restarting the node, Geth will take a few minutes to download block headers created since the node was last run. - -## Enable the HTTP-RPC server {#enable-the-http-rpc-server} - -Enabling the HTTP-RPC server lets you connect your Ethereum node to other software like wallets, browser extensions, or custom software libraries. - -You can enable the HTTP-RPC server by running the following command when launching Geth: - -```bash -geth --syncmode light --http -``` - -Once enabled, run `curl http://127.0.0.1:8545`. This should report no error. - -### Allow remote connections {#allow-remote-connections} - To allow remote hosts to connect to your node, launch Geth with the following command: ``` @@ -148,51 +104,3 @@ It’s worth emphasizing here that, at the lowest level, this is where the block - [Learn more about different networks](/developers/docs/networks/). - [Run a full node](/run-a-node/) - -``` -geth --syncmode light --http --http.addr 0.0.0.0 -``` - -Note: this assumes that there is no process blocking requests to your localhost, such as a firewall. - -## Geth JavaScript console {#geth-javascript-console} - -Geth has a built-in JavaScript console and a JavaScript API called [web3js](https://github.com/ethereum/web3.js/) that you can use to interact with your node. - -To use the JavaScript console run: - -```bash -geth attach -``` - -This console allows direct interaction with Ethereum. For example, running the `eth.blockNumber` command will print the latest known block number. - -[Full web3js documentation](http://web3js.readthedocs.io/) - -## Mainnet and testnets {#mainnet-and-testnets} - -Geth runs your node on [Ethereum Mainnet](/glossary/#mainnet) by default. - -It is also possible to use Geth to run a node on one of the [public test networks](/developers/docs/networks/#ethereum-testnets), by running one of the following commands in Terminal: - -```bash -geth --syncmode light --rinkeby -geth --syncmode light --goerli -``` - -## Where is the blockchain and EVM data stored? {#where-is-the-blockchain-and-evm-data-stored} - -The directory which Geth uses to store raw blockchain data depends on your operating system. Upon running Geth, look for a message that looks like this: - -```bash -INFO [11-18|14:04:47] Allocated cache and file handles database=/Users/bgu/Library/Ethereum/testnet/geth/lightchaindata cache=768 handles=128 -``` - -The path following `“database=”` should tell you where the blockchain data is stored on your machine. If you’re running a full node, this directory will contain all of the data about every block that has ever been committed to the blockchain. Since we’re running a light node, this directory only contains the block headers. - -It’s worth emphasizing here that, at the lowest level, this is where the blockchain lives. The full contents of the blockchain and the EVM state are stored on every full node in the Ethereum network, in directories that look very much like the one on your computer. - -## Further reading {#further-reading} - -- [Learn more about different networks](/developers/docs/networks/). -- [Run a full node](/run-a-node/) From 210cb013a7d593af0ae99f760b3b382ae1eb794e Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 11:12:12 +0100 Subject: [PATCH 095/244] additional warning about merge changes to p2p --- src/content/developers/docs/networking-layer/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/content/developers/docs/networking-layer/index.md b/src/content/developers/docs/networking-layer/index.md index 425d2119ccc..abb3a965457 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -10,6 +10,8 @@ Ethereum is a peer-to-peer network with thousands of nodes that must be able to After [The Merge](/upgrades/merge/), there will be two parts of client software (execution clients and consensus clients), each with its own distinct networking stack. As well as communicating with other Ethereum nodes, the execution and consensus clients have to communicate with each other. This page gives an introductory explanation of the protocols that enable this communication. +**Note that after [The Merge](/upgrades/merge) execution clients will no longer be responsible for gossiping blocks, but they will still gossip transactions over the execution-layer peer-to-peer network. Transactions will be passed to consensus clients via a local RPC connection, where they will be packaged into Beacon blocks. Consensus clients will then gossip Beacon blocks across their p2p network.** + ## Prerequisites {#prerequisites} Some knowledge of Ethereum [nodes and clients](/src/content/developers/docs/nodes-and-clients/) will be helpful for understanding this page. From 5710bdfc5bb7536dd0839622a05ec9494a3ac43a Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 11:54:35 +0100 Subject: [PATCH 096/244] update banner position and content --- .../docs/consensus-mechanisms/pow/mining/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md index 427f86f6cf7..cf1c13597c8 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -5,6 +5,10 @@ lang: en sidebar: true --- + + Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake Ether. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking.) + + ## Prerequisites {#prerequisites} To better understand this page, we recommend you first read up on [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/) and [proof-of-work](/developers/docs/consensus-mechanisms/pow/). @@ -19,10 +23,6 @@ Mining ether = Securing the Network Ethereum, like Bitcoin, currently uses a [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow/) consensus mechanism. Mining is the lifeblood of proof-of-work. Ethereum miners - computers running software - using their time and computation power to process transactions and produce blocks. - - Proof-of-stake will replace mining and proof-of-work over the next year. You can start staking your ETH today. More on staking - - ## Why do miners exist? {#why-do-miners-exist} In decentralized systems like Ethereum, we need to ensure that everyone agrees on the order of transactions. Miners help this happen by solving computationally difficult puzzles to produce blocks, securing the network from attacks. From d007c38bd9526deee6453755038dcb4727c4a202 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 14 Jun 2022 12:24:33 +0100 Subject: [PATCH 097/244] Update src/content/developers/docs/consensus-mechanisms/pow/mining/index.md --- .../developers/docs/consensus-mechanisms/pow/mining/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md index cf1c13597c8..13a08e81228 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -6,7 +6,7 @@ sidebar: true --- - Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake Ether. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking.) + Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking.) ## Prerequisites {#prerequisites} From 63296b495d44278c73ab86b127953572e2219406 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 14 Jun 2022 12:29:44 +0100 Subject: [PATCH 098/244] Apply suggestions from code review --- src/content/decentralized-identity/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/decentralized-identity/index.md b/src/content/decentralized-identity/index.md index 2dcaeb77fb5..3524e9723bd 100644 --- a/src/content/decentralized-identity/index.md +++ b/src/content/decentralized-identity/index.md @@ -14,7 +14,7 @@ summaryPoint3: Thanks to crypto, users now have the tools to issue, hold and con Identity underpins virtually every aspect of your life today. Using online services, opening a bank account, voting in elections, buying property, securing employment—all of these things require proving your identity. -However, traditional identity management systems have long relied on centralized intermediaries who issue, hold, and control your identifiers and [attestations](#what-are-attestations). This means you cannot control your identity-related information, or decide who has access to personally identifiable information (PII) and how much access these parties have. +However, traditional identity management systems have long relied on centralized intermediaries who issue, hold, and control your identifiers and [attestations](#what-are-attestations). This means you cannot control your identity-related information or decide who has access to personally identifiable information (PII) and how much access these parties have. To solve these problems, we have decentralized identity systems built on public blockchains like Ethereum. Decentralized identity allows individuals to manage their identity-related information. With decentralized identity solutions, _you_ can create identifiers and claim and hold your attestations without relying on central authorities, like service providers or governments. @@ -108,9 +108,9 @@ Here's an example to show how on-chain attestations might work in practice: 3. The smart contract selling shares can check the registry contract for the identities of screened buyers, making it possible for the smart contract to determine who is permitted to buy shares or not. -### Soulbound tokens and identity +### Soulbound tokens and identity {#soulbound} -[Soulbound Tokens](https://vitalik.ca/general/2022/01/26/soulbound.html) (non-transferable NFTs) could be used to collect information unique to a specific wallet. This effectively creates a unique on-chain identity bound to a specific Ethereum address that could include tokens representing achievements (e.g. finishing some specific online course or a particular score in a game) or participation in communities. +[Soulbound tokens](https://vitalik.ca/general/2022/01/26/soulbound.html) (non-transferable NFTs) could be used to collect information unique to a specific wallet. This effectively creates a unique on-chain identity bound to a particular Ethereum address that could include tokens representing achievements (e.g. finishing some specific online course or passing a threshold score in a game) or community participation. ## Benefits of decentralized identity {#benefits-of-decentralized-identity} @@ -124,7 +124,7 @@ Here's an example to show how on-chain attestations might work in practice: 5. Decentralized identity should work well with emerging zero-knowledge technologies that will enable individuals to prove they own or have done something without revealing what that thing is. This could become a powerful way to combine trust and privacy for applications such as voting. -6. Decentralized identity enables anti-Sybil mechanisms that can identify when one individual human is pretending to be multiple humans in order to game or spam some system. +6. Decentralized identity enables anti-Sybil mechanisms to identify when one individual human is pretending to be multiple humans to game or spam some system. ## Decentralized identity use-cases {#decentralized-identity-use-cases} @@ -148,9 +148,9 @@ Online voting and social media are two novel applications for decentralized iden Decentralized identity can help create online communities that are free of fake accounts. For example, each user might have to authenticate their identity using an on-chain identity system, like the Ethereum Name Service, reducing the possibility of bots. -### 4. Anti-Sybil protection +### 4. Anti-Sybil protection {#sybil-protection} -Sybil attacks refer to individual humans tricking a system into thinking they are multiple people in order to increase their influence. [Grant-giving applications](https://gitcoin.co/grants/) that use [quadratic voting](https://www.radicalxchange.org/concepts/plural-voting/) are vulnerable to these Sybil attacks because the value of a grant is increased when more individuals vote for it, incentivizing users to split their contributions across many identities. Decentralized identities help to prevent this by rasing the burden on each participant to prove that they are really human, although often without having to reveal specific private information. +Sybil attacks refer to individual humans tricking a system into thinking they are multiple people to increase their influence. [Grant-giving applications](https://gitcoin.co/grants/) that use [quadratic voting](https://www.radicalxchange.org/concepts/plural-voting/) are vulnerable to these Sybil attacks because the value of a grant is increased when more individuals vote for it, incentivizing users to split their contributions across many identities. Decentralized identities help to prevent this by raising the burden on each participant to prove that they are really human, although often without having to reveal specific private information. ## Use decentralized identity {#use-decentralized-identity} @@ -160,7 +160,7 @@ There are many ambitious projects using Ethereum as a foundation for decentraliz - **[SpruceID](https://www.spruceid.com/)** - _A decentralized identity project which allows users to control digital identity with Ethereum accounts and ENS profiles instead of relying on third-party services._ - **[Proof of Humanity](https://www.proofofhumanity.id)** - _Proof of Humanity (or PoH) is a social identity verification system built on Ethereum._ - **[BrightID](https://www.brightid.org/)** - _A decentralized, open-source social identity network seeking to reform identity verification through the creation and analysis of a social graph._ -- - **[Proof-of-personhood Passport](https://proofofpersonhood.com/)** - _A decentralized digital identity aggregator._ +- **[Proof-of-personhood Passport](https://proofofpersonhood.com/)** - _A decentralized digital identity aggregator._ ## Further reading {#further-reading} From 3355358d97acedf8e9ca2b5c736463fdec51d80c Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 13:20:18 +0100 Subject: [PATCH 099/244] refine content for pre-merge --- src/content/developers/docs/intro-to-ether/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/intro-to-ether/index.md b/src/content/developers/docs/intro-to-ether/index.md index d3b4ae52413..cf05e322549 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -33,7 +33,7 @@ It is [common](https://www.reuters.com/article/us-crypto-currencies-lending-insi Minting is the process in which new ether gets created on the Ethereum ledger. The underlying Ethereum protocol creates the new ether, and it is not possible for a user to create ether. -Ether is minted when a miner creates a block on the Ethereum blockchain. As an incentive to miners, the protocol grants a reward in each block, incrementing the balance of an address set by the block's miner. The block reward has changed over time, and today it is 2 ETH per block. +Ether is minted when a new block is created on the Ethereum blockchain. As an incentive to build blocks, the protocol grants a reward in each block, incrementing the balance of an address set by the block producer. The block reward has changed over time, and today it is 2 ETH per block. After the merge issuance to each validator depends upon the amount of ether they have staked and their performance. ## Burning ether {#burning-ether} @@ -41,7 +41,7 @@ As well as creating ether through block rewards, ether can get destroyed by a pr Ether burn occurs in every transaction on Ethereum. When users pay for their transactions, a base gas fee, set by the network according to transactional demand, gets destroyed. This, coupled with variable block sizes and a maximum gas fee, simplifies transaction fee estimation on Ethereum. When network demand is high, [blocks](https://etherscan.io/block/12965263) can burn more ether than they mint, effectively offsetting ether issuance. -Burning the base fee prevents various ways the miners could manipulate it otherwise. For example, if miners got the base fee, they could include their own transactions for free and raise the base fee for everyone else. Alternatively, they could refund the base fee to some users off-chain, leading to a more opaque and complex transaction fee market. +Burning the base fee prevents various ways block producers could manipulate it otherwise. For example, if miners got the base fee, they could include their own transactions for free and raise the base fee for everyone else. Alternatively, they could refund the base fee to some users off-chain, leading to a more opaque and complex transaction fee market. ## Denominations of ether {#denominations} @@ -68,7 +68,7 @@ When the recipient address is a [smart contract](/developers/docs/smart-contract Users can query the ether balance of any [account](/developers/docs/accounts/) by inspecting the account's `balance` field, which shows ether holdings denominated in wei. -[Etherscan](https://etherscan.io) is a popular tool to inspect address balances via a web-based application. For example, [this Etherscan page](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) shows the balance for the Ethereum Foundation. +[Etherscan](https://etherscan.io) is a popular tool to inspect address balances via a web-based application. For example, [this Etherscan page](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) shows the balance for the Ethereum Foundation. Account balances can also be queried using wallets or directly by making requests to nodes. ## Further reading {#further-reading} From 0ca24094345cfe3264a3ed6c152c5c831e169978 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 13:22:18 +0100 Subject: [PATCH 100/244] rm "miner" --- src/content/developers/docs/intro-to-ether/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/intro-to-ether/index.md b/src/content/developers/docs/intro-to-ether/index.md index cf05e322549..3a806cba42d 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -41,7 +41,7 @@ As well as creating ether through block rewards, ether can get destroyed by a pr Ether burn occurs in every transaction on Ethereum. When users pay for their transactions, a base gas fee, set by the network according to transactional demand, gets destroyed. This, coupled with variable block sizes and a maximum gas fee, simplifies transaction fee estimation on Ethereum. When network demand is high, [blocks](https://etherscan.io/block/12965263) can burn more ether than they mint, effectively offsetting ether issuance. -Burning the base fee prevents various ways block producers could manipulate it otherwise. For example, if miners got the base fee, they could include their own transactions for free and raise the base fee for everyone else. Alternatively, they could refund the base fee to some users off-chain, leading to a more opaque and complex transaction fee market. +Burning the base fee prevents various ways block producers could manipulate it otherwise. For example, if block producers received the base fee, they could include their own transactions for free and raise the base fee for everyone else. Alternatively, they could refund the base fee to some users off-chain, leading to a more opaque and complex transaction fee market. ## Denominations of ether {#denominations} From 233b167b87d71f2aaf64c36b6fd78a183cfa5148 Mon Sep 17 00:00:00 2001 From: barukimang Date: Tue, 14 Jun 2022 15:57:41 +0300 Subject: [PATCH 101/244] added ethsafari to community events page --- src/data/community-events.json | 9 +++++++++ yarn.lock | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index c6a5822d825..72fdba5a56c 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -430,5 +430,14 @@ "description": "Join Warsaw Web3 community in the first in-person conference and hackathon!", "startDate": "2022-09-01", "endDate": "2022-09-04" + }, + { + "title": "ETHSafari", + "to": "https://ethsafari.xyz/", + "sponsor": null, + "location": "Nairobi & Kilifi, Kenya", + "description": "Welcome to the latest greatest ETH event happening in Africa!", + "startDate": "2022-09-18", + "endDate": "2022-09-25" } ] diff --git a/yarn.lock b/yarn.lock index 8ffc8f2b3b1..f1e199cf220 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11592,7 +11592,7 @@ minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== From 21ecaaa3083e70a36a8793119dc60d89e165e0d0 Mon Sep 17 00:00:00 2001 From: vdusart Date: Tue, 14 Jun 2022 16:01:23 +0200 Subject: [PATCH 102/244] Fix comments --- src/components/FeedbackCard.tsx | 12 ++++++++---- src/components/FeedbackWidget.tsx | 16 ++++++++-------- src/components/FileContributors.tsx | 24 +++++++++++++++++++----- src/components/Footer.tsx | 2 +- src/components/Link.tsx | 3 +-- 5 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.tsx index 2671fdd2446..b47fcd139a9 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react" +import React, { ReactNode, useState } from "react" import styled from "styled-components" import { ButtonSecondary } from "./SharedStyledComponents" import { trackCustomEvent } from "../utils/matomo" @@ -50,7 +50,11 @@ const FeedbackCard: React.FC = ({ prompt, className }) => { const location = typeof window !== "undefined" ? window.location.href : "" const isStaking = location.includes("staking") - const getTitle = (feedbackSubmitted, isStaking, isHelpful) => { + const getTitle = ( + feedbackSubmitted: boolean, + isStaking: boolean, + isHelpful: boolean + ): ReactNode => { if (!feedbackSubmitted) return prompt || if (isStaking) @@ -77,11 +81,11 @@ const FeedbackCard: React.FC = ({ prompt, className }) => { ) } - const handleClick = (isHelpful) => { + const handleClick = (isHelpful: boolean): void => { trackCustomEvent({ eventCategory: `Page is helpful feedback`, eventAction: `Clicked`, - eventName: isHelpful, + eventName: String(isHelpful), }) setIsHelpful(isHelpful) setFeedbackSubmitted(true) diff --git a/src/components/FeedbackWidget.tsx b/src/components/FeedbackWidget.tsx index 95997f0f142..678a28811f6 100644 --- a/src/components/FeedbackWidget.tsx +++ b/src/components/FeedbackWidget.tsx @@ -151,9 +151,9 @@ const FeedbackWidget: React.FC = ({ className }) => { const intl = useIntl() const containerRef = useRef(null) useOnClickOutside(containerRef, () => handleClose(), [`mousedown`]) - const [isOpen, setIsOpen] = useState(false) - const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) - const [isHelpful, setIsHelpful] = useState(null) + const [isOpen, setIsOpen] = useState(false) + const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) + const [isHelpful, setIsHelpful] = useState(null) const location = typeof window !== "undefined" ? window.location.href : "" @@ -198,7 +198,7 @@ const FeedbackWidget: React.FC = ({ className }) => { return offset }, [location]) - const handleClose = () => { + const handleClose = (): void => { setIsOpen(false) trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, @@ -206,7 +206,7 @@ const FeedbackWidget: React.FC = ({ className }) => { eventName: `Closed feedback widget`, }) } - const handleOpen = () => { + const handleOpen = (): void => { setIsOpen(true) trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, @@ -214,16 +214,16 @@ const FeedbackWidget: React.FC = ({ className }) => { eventName: `Opened feedback widget`, }) } - const handleSubmit = (choice) => { + const handleSubmit = (choice: boolean): void => { trackCustomEvent({ eventCategory: `Page is helpful feedback`, eventAction: `Clicked`, - eventName: choice, + eventName: String(choice), }) setIsHelpful(choice) setFeedbackSubmitted(true) } - const handleSurveyOpen = () => { + const handleSurveyOpen = (): void => { trackCustomEvent({ eventCategory: `Feedback survey opened`, eventAction: `Clicked`, diff --git a/src/components/FileContributors.tsx b/src/components/FileContributors.tsx index 5d20c35762a..4e2cedac073 100644 --- a/src/components/FileContributors.tsx +++ b/src/components/FileContributors.tsx @@ -52,7 +52,7 @@ const SkeletonContainer = styled(Container)<{ loading: boolean }>` justify-content: flex-start; - position: absolute;é + position: absolute; width: 100%; height: 100%; left: 0; @@ -227,6 +227,21 @@ const COMMIT_HISTORY = gql` } ` +interface Author { + name: string + email: string + avatarUrl: string + user: { + login: string + url: string + } +} + +interface Commit { + author: Author + committedDate: string +} + export interface IProps { relativePath: string className?: string @@ -247,15 +262,14 @@ const FileContributors: React.FC = ({ if (error) return null - const commits = data?.repository?.ref?.target?.history?.edges?.map( - (commit) => commit.node - ) + const commits: Array = + data?.repository?.ref?.target?.history?.edges?.map((commit) => commit.node) const lastCommit = commits?.[0] || {} const lastContributor = lastCommit?.author || {} const uniqueContributors = commits?.reduce( - (res, cur) => { + (res: Array, cur: Commit) => { if (cur.author.user === null) { return res } diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 969bb0c78e8..f16d41b9e75 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -396,7 +396,7 @@ const Footer: React.FC = () => { {section.links.map((link, linkIdx) => ( diff --git a/src/components/Link.tsx b/src/components/Link.tsx index 460619d4e8f..f6f3d68a7bd 100644 --- a/src/components/Link.tsx +++ b/src/components/Link.tsx @@ -7,7 +7,6 @@ import Icon from "./Icon" import { languageMetadata } from "../utils/languages" import { trackCustomEvent, EventOptions } from "../utils/matomo" -import { StringValueNode } from "graphql" const HASH_PATTERN = /^#.*/ // const DOMAIN_PATTERN = /^(?:https?:)?[/]{2,}([^/]+)/ @@ -67,7 +66,7 @@ const GlossaryIcon = styled(Icon)` export interface IProps { to?: string href?: string - dir?: "ltr" | "rtl" + dir?: "ltr" | "rtl" | "auto" hideArrow?: boolean className?: string isPartiallyActive?: boolean From 9e9e98092ee7b8d87501d3ac3c1cb08f80f6c358 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 14 Jun 2022 15:08:06 +0100 Subject: [PATCH 103/244] update nodes page to include ex/cons client info --- .../docs/nodes-and-clients/eth1eth2client.png | Bin 0 -> 272874 bytes .../developers/docs/nodes-and-clients/index.md | 14 ++++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 src/content/developers/docs/nodes-and-clients/eth1eth2client.png diff --git a/src/content/developers/docs/nodes-and-clients/eth1eth2client.png b/src/content/developers/docs/nodes-and-clients/eth1eth2client.png new file mode 100644 index 0000000000000000000000000000000000000000..c84b1edcae051c16c38c17a99f0678ebdd58fcec GIT binary patch literal 272874 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 F{|EgyctijI literal 0 HcmV?d00001 diff --git a/src/content/developers/docs/nodes-and-clients/index.md b/src/content/developers/docs/nodes-and-clients/index.md index e8d45a51b70..db3ca528d87 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -6,7 +6,9 @@ sidebar: true sidebarDepth: 2 --- -Ethereum is a distributed network of computers running software (known as nodes) that can verify blocks and transaction data. You need an application, known as a client, on your computer to "run" a node. +Ethereum is a distributed network of computers (known as nodes) running software that can verify blocks and transaction data. The software application, known as a client, must be run on your computer to turn it into an Ethereum node. + +**Note: it is still possible to run an execution client on its own. However, this will no longer be possible after [The Merge](/upgrades/merge). After The Merge, both execution and consensus clients must be run together in order for a user to gain access to the Ethereum network. Some testnets (e.g. Kiln, Ropsten) have already been through their versions of The Merge, meaning execution clients alone are already insufficient for accessing those networks unless they are coupled to a consensus client that can keep track of the head of the chain.** ## Prerequisites {#prerequisites} @@ -16,14 +18,14 @@ If you're new to the topic of nodes, we recommend first checking out our user-fr ## What are nodes and clients? {#what-are-nodes-and-clients} -"Node" refers to a running piece of client software. A client is an implementation of Ethereum that verifies all transactions in each block, keeping the network secure and the data accurate. +A "node" is a computer running Ethereum client software. A client is an implementation of Ethereum that verifies all transactions in each block, keeping the network secure and the data accurate. Up until The Merge, a single piece of software is required to run a full node (or two to run a mining node). After The Merge, two pieces of client software are required to run a full node (three to run a validator node), one to handle and gossip transactions (execution client), one to handle block gossip and fork choice (consensus client) and an optional validator client that handles block production and "voting" on blocks received from its peers. You can see a real-time view of the Ethereum network by looking at this [map of nodes](https://etherscan.io/nodetracker). -Many [Ethereum clients](/developers/docs/nodes-and-clients/#execution-clients) exist, in a variety of programming languages such as Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim and Java. What these implementations have in common is they all follow a formal specification (originally the [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf)). This specification dictates how the Ethereum network and blockchain functions. +Many [Ethereum execution clients](/developers/docs/nodes-and-clients/#execution-clients) and [consensus clients](/developers/docs/nodes-and-clients/#execution-clients) exist, in a variety of programming languages such as Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim and Java. What these implementations have in common is they all follow a formal specification. These specifications dictate how the Ethereum network and blockchain functions. -![Execution client](./client-diagram.png) -Simplified diagram of what Ethereum client features. +![Coupled execution and consensus clients](./eth1eth2client.png) +Simplified diagram of a coupled execution and consensus client. ## Node types {#node-types} @@ -74,7 +76,7 @@ Running your own node enables you to use Ethereum in a truly private, self-suffi A diverse set of nodes is important for Ethereum’s health, security and operational resiliency. - They provide access to blockchain data for lightweight clients that depend on it. In high peaks of usage, there need to be enough full nodes to help light nodes sync. Light nodes don't store the whole blockchain, instead they verify data via the [state roots in block headers](/developers/docs/blocks/#block-anatomy). They can request more information from blocks if they need it. -- Full nodes enforce the proof-of-work consensus rules so they can’t be tricked into accepting blocks that don't follow them. This provides extra security in the network because if all the nodes were light nodes, which don't do full verification, miners could attack the network and, for example, create blocks with higher rewards. +- Full nodes enforce the proof-of-work consensus rules so they can’t be tricked into accepting blocks that don't follow them. This provides extra security in the network because if all the nodes were light nodes, which don't do full verification, block producers could attack the network and, for example, create blocks with higher rewards. If you run a full node, the whole Ethereum network benefits from it. From 42ad70f4039de9bdb866360cbe1dbdbf7bbd45d9 Mon Sep 17 00:00:00 2001 From: vdusart <dusartvictor@gmail.com> Date: Tue, 14 Jun 2022 16:12:43 +0200 Subject: [PATCH 104/244] Fix comments --- src/components/{FeedbackCard.tsx => FeedbackCard.js} | 7 +------ src/components/GitStars.tsx | 2 +- src/components/HorizontalCard.tsx | 6 +++--- 3 files changed, 5 insertions(+), 10 deletions(-) rename src/components/{FeedbackCard.tsx => FeedbackCard.js} (95%) diff --git a/src/components/FeedbackCard.tsx b/src/components/FeedbackCard.js similarity index 95% rename from src/components/FeedbackCard.tsx rename to src/components/FeedbackCard.js index 2671fdd2446..655cdf6e48d 100644 --- a/src/components/FeedbackCard.tsx +++ b/src/components/FeedbackCard.js @@ -39,12 +39,7 @@ const ButtonContainer = styled.div` } ` -export interface IProps { - prompt?: string - className?: string -} - -const FeedbackCard: React.FC<IProps> = ({ prompt, className }) => { +const FeedbackCard = ({ prompt, className }) => { const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) const [isHelpful, setIsHelpful] = useState(false) const location = typeof window !== "undefined" ? window.location.href : "" diff --git a/src/components/GitStars.tsx b/src/components/GitStars.tsx index 5ba41a5a720..20ac57eaec7 100644 --- a/src/components/GitStars.tsx +++ b/src/components/GitStars.tsx @@ -54,7 +54,7 @@ export interface GitHubRepo { export interface IProps { gitHubRepo: GitHubRepo className?: string - hideStars: string + hideStars: boolean } const GitStars: React.FC<IProps> = ({ gitHubRepo, className, hideStars }) => { diff --git a/src/components/HorizontalCard.tsx b/src/components/HorizontalCard.tsx index 34f7a93c6ef..84c1900ae86 100644 --- a/src/components/HorizontalCard.tsx +++ b/src/components/HorizontalCard.tsx @@ -1,4 +1,4 @@ -import React from "react" +import React, { ReactNode } from "react" import styled from "styled-components" import Emoji from "./Emoji" @@ -24,8 +24,8 @@ const Title = styled.p` export interface IProps { emoji: string - title?: string | JSX.Element - description: string | JSX.Element + title?: ReactNode + description: ReactNode className?: string emojiSize?: number } From b235578e8dffb4fbe9aa79f4e523fd3d313a5fb0 Mon Sep 17 00:00:00 2001 From: Stephen Fluin <stephen.fluin@gmail.com> Date: Tue, 14 Jun 2022 07:18:41 -0700 Subject: [PATCH 105/244] add Chainlink to grants list --- src/content/community/grants/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/community/grants/index.md b/src/content/community/grants/index.md index 7f0787f1ca4..85944eafb9d 100644 --- a/src/content/community/grants/index.md +++ b/src/content/community/grants/index.md @@ -29,6 +29,7 @@ These projects have created their own grants for projects aimed at developing an - [Aave Grants Program](https://aavegrants.org/) – _[Aave](https://aave.com/) grants DAO_ - [Balancer](https://forms.gle/c68e4fM7JHCQkPkN7) – _[Balancer](https://balancer.fi/) ecosystem fund_ +- [Chainlink Grants Program](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) community grants - [Compound Grants Program](https://compoundgrants.org/) – _[Compound](https://compound.finance/) finance ecosystem_ - [Consensys Grants Program](https://consensys.net/grants/) – _[Consensys](https://consensys.net/) blockchain funding & Ethereum grants_ - [dYdX Grants Program](https://dydxgrants.com/) – _[dYdX](https://dydx.exchange/) decentralized exchange_ From b38f3537effb6c6263f6ea8458b689380f22847a Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Tue, 14 Jun 2022 15:36:50 +0100 Subject: [PATCH 106/244] update resources links --- src/content/developers/docs/nodes-and-clients/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/nodes-and-clients/index.md b/src/content/developers/docs/nodes-and-clients/index.md index db3ca528d87..7c47736da89 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -102,10 +102,11 @@ If you're more of a technical user, learn how to [spin up your own node](/develo ### Resources {#resources} -- [Running Ethereum Full Nodes: A Complete Guide](https://medium.com/coinmonks/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _Nov 7, 2019 - Justin Leroux_ -- [Node Configuration Cheat Sheet](https://dev.to/5chdn/ethereum-node-configuration-modes-cheat-sheet-25l8) _Jan 5, 2019 - Afri Schoeden_ -- [How To Install & Run a Geth Node](https://www.quiknode.io/guides/infrastructure/how-to-install-and-run-a-geth-node) _Oct 4, 2020 - Sahil Sen_ -- [How To Install & Run a OpenEthereum (fka. Parity) Node](https://www.quiknode.io/guides/infrastructure/how-to-run-a-openethereum-ex-parity-client-node) _Sept 22, 2020 - Sahil Sen_ +- [Running Ethereum Full Nodes: A Complete Guide](https://www.coindesk.com/learn/ethereum-nodes-and-clients-a-complete-guide/) +- [Running your own Ethereum node](/developers/docs/nodes-and-clients/run-a-node) +- [Geth documentation](https://geth.ethereum.org/) +- [How To Install & Run a Lighthouse Node](https://hackernoon.com/how-to-run-an-eth-20-beacon-node-using-the-lighthouse-macos-client-7t2u3wtv) +- [Nimbus node quick-start guide](https://nimbus.guide/quick-start.html) ## Alternatives {#alternatives} From 0247f52ad8cfecffe45ed47652369c0b7424a919 Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Tue, 14 Jun 2022 15:49:06 +0100 Subject: [PATCH 107/244] add warning about NaaS executiuon clients at merge --- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index c3672a2aa4b..d11d52a03cc 100644 --- a/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -10,6 +10,8 @@ sidebarDepth: 2 Running your own [Ethereum node](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) can be challenging, especially when getting started or while scaling fast. There are a [number of services](#popular-node-services) that run optimized node infrastructures for you, so you can focus on developing your application or product instead. We'll explain how node services work, the pros and cons for using them and list providers if you are interested in getting started. +**Note: it has been common for users to run consensus clients locally and use a node-as-a-service provider in place of a local execution client. This will not be possible at The Merge - users will be required to run BOTH clients locally. Users relying on node-as-a-service providers for their consensus clients will not merge correctly and will not be able to follow the Ethereum chain. Now is the time to install a local execution client!** + ## Prerequisites {#prerequisites} If you don't already have an understanding of what nodes and clients are, check out [Nodes and clients](/developers/docs/nodes-and-clients/). From b3e81fd75c158d2ef10b5b3ff0a962d5c99c4cb9 Mon Sep 17 00:00:00 2001 From: zjiekai <zjiekai@users.noreply.github.com> Date: Tue, 14 Jun 2022 22:49:36 +0800 Subject: [PATCH 108/244] fix frontier-thawing blog post links --- src/content/history/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/history/index.md b/src/content/history/index.md index 5830d9618f8..c981cadf6f5 100644 --- a/src/content/history/index.md +++ b/src/content/history/index.md @@ -395,6 +395,7 @@ The Homestead fork that looked to the future. It included several protocol chang The frontier thawing fork lifted the 5,000 [gas](/glossary/#gas) limit per [block](/glossary/#block) and set the default gas price to 51 [gwei](/glossary/#gwei). This allowed for transactions – transactions require 21,000 gas. The [difficulty bomb](/glossary/#difficulty-bomb) was introduced to ensure a future hard-fork to [proof-of-stake](/glossary/#pos). [Read the Ethereum Foundation announcement](https://blog.ethereum.org/2015/08/04/the-thawing-frontier/) + [Read the Ethereum Protocol Update 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1/) --- From d363eae0922122e75f8ca06479fdd3f7a60f86e4 Mon Sep 17 00:00:00 2001 From: Akim Benchiha <akim.benchiha@gmail.com> Date: Tue, 14 Jun 2022 17:03:22 +0200 Subject: [PATCH 109/244] refactor(boxgrid): simplify interfaces and export only IBoxItem and IProps --- src/components/BoxGrid.tsx | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/src/components/BoxGrid.tsx b/src/components/BoxGrid.tsx index bb6605f11dc..8c8bb329ecc 100644 --- a/src/components/BoxGrid.tsx +++ b/src/components/BoxGrid.tsx @@ -1,37 +1,28 @@ import React, { useState } from "react" import styled from "styled-components" - import Emoji from "./Emoji" -export interface IOpener { - isOpen: boolean +export interface IBoxItem { + emoji: string + title: string + description: string } -export interface IGridStyle { - columnNumber: number +export interface IProps { + items: Array<IBoxItem> } -export interface IColor { +interface IBoxStyle { + isOpen: boolean + columnNumber: number color: string } -export interface IBaseItem { - emoji: string - title: string - description: string -} - -export interface IBoxStyle extends IOpener, IGridStyle, IColor {} - -export interface IGridItemProps extends IBaseItem, IBoxStyle { +interface IGridItemProps extends IBoxItem, IBoxStyle { index: number callback: (idx: number) => void } -export interface IBoxProps { - items: Array<IBaseItem> -} - const Title = styled.h3` font-size: 2.5rem; font-weight: 400; @@ -99,7 +90,7 @@ const Box = styled.div<IBoxStyle>` ` // Represent string as 32-bit integer -const hashCode = (stringPhrase: string) => { +const hashCode = (stringPhrase: string): number => { let hash = 0 for (const char of stringPhrase) { const code = char.charCodeAt(0) @@ -153,7 +144,7 @@ const GridItem: React.FC<IGridItemProps> = ({ ) } -const BoxGrid: React.FC<IBoxProps> = ({ items }) => { +const BoxGrid: React.FC<IProps> = ({ items }) => { const [indexOpen, setOpenIndex] = useState(0) return ( From dbf0e5264a64880c682cc31bf6bedc31f840da1d Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Tue, 14 Jun 2022 13:16:05 -0600 Subject: [PATCH 110/244] setup l2 wallet note for translation --- src/intl/en/page-layer-2.json | 1 + src/pages/layer-2.js | 13 +------------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index dd3e9224482..99b09227409 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -58,6 +58,7 @@ "layer-2-dyor-3": "Go to L2BEAT", "layer-2-use-layer-2-title": "Use layer 2", "layer-2-use-layer-2-1": "Now that you understand why layer 2 exists and how it works, let's get you up and running!", + "layer-2-use-layer-2-note": "<strong>NOTE:</strong> When bridging over and using layer 2, it is important to note that you will control the address for your <a href=\"/glossary/#eoa\">EOA account</a> (an account where only a single private key controls the account) just like on Ethereum Mainnet. However, if you are using a <a href=\"/glossary/#contract-account\">contract account</a>, such as <a href=\"https://gnosis-safe.io/\" target=”_blank”>Gnosis Safe</a> or <a href=\"https://www.argent.xyz/\" target=”_blank”>Argent</a>, you will not have control over this address on a layer 2 until you redeploy your contract account to that address on the layer 2. If you are bridging or sending funds to a contract account, and you do not control this address for the contract account, your funds may be lost.", "layer-2-use-layer-2-generalized-title": "Generalized layer 2s", "layer-2-use-layer-2-generalized-1": "Generalized layer 2s behave just like Ethereum — but cheaper. Anything that you can do on Ethereum layer 1, you can also do on layer 2. Many dapps have already begun to migrate to these networks or have skipped Mainnet altogether to deploy straight on a layer 2.", "layer-2-use-layer-2-application-specific-title": "Application specific layer 2s", diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 0b125aad953..0f47821657c 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -680,18 +680,7 @@ const Layer2Page = ({ data }) => { <Translation id="layer-2-use-layer-2-1" /> </p> <p> - <strong>NOTE:</strong> When bridging over and using layer 2, it is important to note - that you will control the address for your{" "} - <Link to="/glossary/#eoa">EOA account</Link> (an account where only a - single private key controls the account) just like on Ethereum - Mainnet. However, if you are using a{" "} - <Link to="/glossary/#contract-account">contract account</Link>, such - as <Link to="https://gnosis-safe.io/">Gnosis Safe</Link> or{" "} - <Link to="https://www.argent.xyz/">Argent</Link>, you will not have - control over this address on a layer 2 until you redeploy your - contract account to that address on the layer 2. If you are bridging - or sending funds to a contract account, and you do not control this - address for the contract account, your funds may be lost. + <Translation id="layer-2-use-layer-2-note" /> </p> <h3> <Translation id="layer-2-use-layer-2-generalized-title" /> From c829132e8d12347e316c14c6685691ca6c7d63f5 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Tue, 14 Jun 2022 14:13:14 -0600 Subject: [PATCH 111/244] change requests --- src/content/contributing/adding-wallet/index.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index 58ab24bdcac..a05ab8c7ec9 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -13,7 +13,9 @@ Anyone is free to suggest adding a wallet on ethereum.org. If there's a wallet t Anyone is free to suggest a new wallet. Wallets are currently listed on: -- [ethereum.org/wallets/find-wallet](/wallets/find-wallet/) +- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) +- [ethereum.org/wallets/](/wallets/) +- [ethereum.org/get-eth/](/get-eth/) Wallets are rapidly changing in Ethereum. We've tried to create a fair framework for consideration on ethereum.org but the listing criteria will change and evolve over time. @@ -56,7 +58,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework If you want to add a wallet to ethereum.org, create an issue on GitHub. -<ButtonLink to="https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml&title=Suggest+a+wallet"> +<ButtonLink to="https://github.com/ethereum/ethereum-org-website/blob/dev/.github/ISSUE_TEMPLATE/suggest_wallet.yaml"> Create an issue </ButtonLink> @@ -67,6 +69,8 @@ As is the fluid nature of Ethereum, teams and products come and go and innovatio - ensure that all wallets and dapps listed still fulfil our criteria - verify there aren't products that have been suggested that meet more of our criteria than the ones currently listed +Ethereum.org is maintained by the open source community & we rely on the community to help keep this up to date. If you notice any information wallets that needs to be updated, please [open an issue](https://github.com/ethereum/ethereum-org-website/blob/dev/.github/ISSUE_TEMPLATE/suggest_wallet.yaml) or [pull request](https://github.com/ethereum/ethereum-org-website/pulls)! + ## Terms of use {#terms-of-use} Please also refer to our [terms of use](/terms-of-use/). Information on ethereum.org is provided solely for general information purposes. From 3dc8ac747c63b8dd2b4c196d95d113a9d2eb2e0c Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Tue, 14 Jun 2022 14:33:55 -0600 Subject: [PATCH 112/244] fix sentence --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index a05ab8c7ec9..48e156a5880 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -69,7 +69,7 @@ As is the fluid nature of Ethereum, teams and products come and go and innovatio - ensure that all wallets and dapps listed still fulfil our criteria - verify there aren't products that have been suggested that meet more of our criteria than the ones currently listed -Ethereum.org is maintained by the open source community & we rely on the community to help keep this up to date. If you notice any information wallets that needs to be updated, please [open an issue](https://github.com/ethereum/ethereum-org-website/blob/dev/.github/ISSUE_TEMPLATE/suggest_wallet.yaml) or [pull request](https://github.com/ethereum/ethereum-org-website/pulls)! +Ethereum.org is maintained by the open source community & we rely on the community to help keep this up to date. If you notice any information about listed wallets that needs to be updated, please [open an issue](https://github.com/ethereum/ethereum-org-website/blob/dev/.github/ISSUE_TEMPLATE/suggest_wallet.yaml) or [pull request](https://github.com/ethereum/ethereum-org-website/pulls)! ## Terms of use {#terms-of-use} From 8e5a4667e72fc6b4bf8e153832c8a3580c65a8b5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 14:03:35 -0700 Subject: [PATCH 113/244] Apply suggestions from code review Co-authored-by: Luka Kropec <37338979+lukassim@users.noreply.github.com> Co-authored-by: Sam Richards <sbrichards@gmail.com> Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../upgrades/merge/eth-issuance/index.md | 4 +-- src/content/upgrades/merge/index.md | 34 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/eth-issuance/index.md index 4f8ce460ce4..736a2454939 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/eth-issuance/index.md @@ -71,7 +71,7 @@ Will continue as it was, with small rewards for attesting-to and proposing block When validator withdrawals are enabled, stakers will be incentivized to remove their _earnings/rewards (balance over 32)_ as these funds are otherwise not contributing to their stake weight (which maxes as 32). -Stakers may also choose to exit and withdrawal their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. +Stakers may also choose to exit and withdraw their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. ### Post-merge inflation breakdown {#post-merge-inflation-breakdown} @@ -93,7 +93,7 @@ This flip side of ETH issuance is the rate at which ETH is burned. To execute a Fee burning went live with the <a href="/history/#london">London upgrade</a> in August 2021, and will not change after the Merge. </InfoBanner> -On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validators balance, which is not directly rewarded to any other account, effectively burning it from circulation. +On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validator's balance, which is not directly rewarded to any other account, effectively burning it from circulation. ## Further reading {#further-reading} diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index a1d78201f33..3ad576e9d55 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -8,34 +8,34 @@ image: ../../../assets/upgrades/merge.png summaryPoint1: Soon the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. summaryPoint3: This sets the stage for future scaling upgrades including data sharding. -summaryPoint4: With The Merge, Ethereum's energy consumption drops by 99.95%. Welcome to a new greener Ethereum. +summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. Welcome to a new greener Ethereum. --- <UpgradeStatus dateKey="page-upgrades-merge-date"> -The Merge is the most significant and high-stakes upgrade in the history of Ethereum. Extensive testing and bug bounties were undertaken to ensure a safe transition to proof-of-stake. +The Merge is the most significant upgrade in the history of Ethereum. Extensive testing and bug bounties were undertaken to ensure a safe transition to proof-of-stake. -This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you’re as excited about The Merge as we are, follow the [EF Blog](https://blog.ethereum.org) or the client communication channels for the latest official word on _When Merge?_ +This process is in its final stages, with plans to undergo The Merge on a few public testnets before finally moving forward with Mainnet. If you're excited about The Merge, follow the [EF Blog](https://blog.ethereum.org) or the client communication channels for the latest official word on _When Merge?_ </UpgradeStatus> -## What is The Merge? {#what-is-the-docking} +## What is The Merge? {#what-is-the-merge} -The Merge represents the merger of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. +The Merge represents the merger of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. This eliminates the need for energy-intensive mining, and instead secures the network using staked ether. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. -It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) (the new "consensus layer") shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet (the "execution layer") continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. +It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) (the new "consensus layer") shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet (the "execution layer") - with all it's accounts, balances, smart contracts, and blockchain state - continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. -Let's consider an example. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. +Let's consider an analogy. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -Since genesis, Mainnet has been secured by proof-of-work. This is the main Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. +Since [genesis](/history/#frontier), Mainnet has been secured by proof-of-work. This is the Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. -During this growing history, developers have been hard at work preparing for an eventual transition away from proof-of-work to proof-of-stake instead. On December 1, 2020, the Beacon Chain was created, which has since existed as a separate blockchain to Mainnet, running in parallel. +Throughout Ethereum's history, developers have been hard at work preparing for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created, which has since existed as a separate blockchain to Mainnet, running in parallel. The Beacon Chain has not been processing Mainnet transactions, and for all intents and purposed has simply been coming to consensus on the state of itself... which is great and all, but after extensive testing, the time for it to come to consensus on more than just itself is rapidly approaching. -The Merge itself represents the official switch to using the Beacon Chain as the official means of block production. Mining will no longer be the means of producing valid blocks, and instead this role will land with the proof-of-stake validators who will then be responsible for processing the validity of all transactions, and proposing blocks. +The Merge represents the official switch to using the Beacon Chain as the engine of block production. Mining will no longer be the means of producing valid blocks. Instead, the proof-of-stake validators assume this role and will be responsible for processing the validity of all transactions and proposing blocks. -No history is lost. As Mainnet is merged with the Beacon Chain, the entire transactional history of Ethereum comes with it. You don't need to do anything. Your funds are safe. +No history is lost. As Mainnet gets merged with the Beacon Chain, it will also merge the entire transactional history of Ethereum. You don't need to do anything. Your funds are safe. <InfoBanner> This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about <a href="/upgrades/merge/eth-issuance/">ether issuance before and after The Merge</a>. @@ -146,7 +146,7 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri </ExpandableCard> <ExpandableCard -title="Misconception: &quot;Transactions will be noticeably faster after The Merge&quot;" +title="Misconception: &quot;Transactions will be noticeably faster after The Merge.&quot;" contentPreview="False. Though some slight changes exist, transaction speed will mostly remain the same on layer 1."> The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. @@ -178,9 +178,9 @@ ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately <ExpandableCard title="Misconception: &quot;When withdrawals are enabled, stakers will all exit at once.&quot;" contentPreview="False. Validator exits are rate limited for security reasons."> -After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds to not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds do not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. -An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottle neck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. +An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottleneck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again. </ExpandableCard> @@ -192,7 +192,7 @@ The APR for stakers is expected to increase post-merge. To understand by how muc This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. -Looking at recent blockchain activity, approximately 10% of all gas fees being paid are currently going to miners in the form of a tip, while the rest is burnt. Outdated predictions estimated this percentage to be much higher, and was calculated when network usage was at all time highs. Extrapolating the 10% number to average recent network activity, it is estimated that the APR for staking will increase to ~7%, approximately 50% higher than the base issuance APR at time of writing. +Looking at recent blockchain activity, approximately 10% of all gas fees being paid are currently going to miners in the form of a tip, while the rest is burnt. Outdated predictions estimated this percentage to be much higher, and was calculated when network usage was at all time highs. Extrapolating the 10% number to average recent network activity, it is estimated that the APR for staking will increase to ~7%, approximately 50% higher than the base issuance APR (as of June 2022). </ExpandableCard> <ExpandableCard @@ -221,13 +221,13 @@ Blocks will instead be proposed by validating nodes that have ether staked for t ### The Merge and the Shanghai upgrade {#merge-and-shanghai} -In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, in which the ability to withdraw is slotted as a top priority. +In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade will not include certain anticipated features such as the ability to withdraw staked ETH. The Shanghai upgrade is planned to follow The Merge, which will enable the ability for stakers to withdraw. Stay up-to-date with the [Shanghai upgrade planning issue on GitHub](https://github.com/ethereum/pm/issues/450), or the [EF Research and Development Blog](https://blog.ethereum.org/category/research-and-development/). For those curious, learn more about [What Happens After The Merge](https://youtu.be/7ggwLccuN5s?t=101), presented by Vitalik at the April 2021 ETHGlobal event. ### The Merge and data sharding {#merge-and-data-sharding} -Originally, the plan was to work on shard chains before The Merge—to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. +Originally, the plan was to work on shard chains before The Merge in order to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. Plans for sharding are rapidly evolving, but given the rise and success of layer 2 technologies to scale transaction execution, sharding plans have shifted to finding the most optimal way to distribute the burden of storing compressed calldata from rollup contracts, allowing for exponential growth in network capacity. This would not be possible without first transitioning to proof-of-stake. From 374f8a2ea4fbd03f8fc51ae029711f6b74605864 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 14:08:05 -0700 Subject: [PATCH 114/244] no abbreviations --- src/content/upgrades/merge/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 3ad576e9d55..097532d7ce9 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -53,8 +53,8 @@ contentPreview="If you are a staker running your own node setup, or a node infra id="staking-node-operators"> Key action items include: -- Running _both_ a consensus layer (CL) client as well as an execution layer (EL) client. Third-party endpoints to obtain execution data will be unavailable after The Merge. -- Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. +- Running _both_ a consensus layer client as well as an execution layer client. Third-party endpoints to obtain execution data will be unavailable after The Merge. +- Authenticating both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. @@ -69,16 +69,16 @@ Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/ <ExpandableCard title="Non-validating node operators and infrastructure providers" -contentPreview="If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for BOTH the execution layer (EL) AND the consensus layer (CL)." +contentPreview="If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for BOTH the execution layer AND the consensus layer." id="node-operators"> -You probably are already running an EL client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an EL client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. +You probably are already running an execution layer client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an execution layer client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. -This means that a full Ethereum node after The Merge requires both an EL client as well as a CL client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. +This means that a full Ethereum node after The Merge requires both an execution layer client as well as a consensus layer client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. Key action items include: -- Installing a CL client in addition to an EL client -- Authenticating both EL and CL clients with a shared JWT secret so they can securely communicate with one another. +- Installing a consensus layer client in addition to an execution layer client +- Authenticating both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. From c4c720102e137cb80e8f0419364a25ae0c50d599 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 14:21:51 -0700 Subject: [PATCH 115/244] updates from code suggestion --- src/content/upgrades/merge/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 097532d7ce9..fdf0949cd6a 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -142,7 +142,7 @@ title="Misconception: &quot;The Merge will reduce gas fees.&quot;" contentPreview="False. The Merge is a change of consensus mechanism, not an expansion of network capacity, and will not result in lower gas fees."> Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecates the use of proof-of-work, transitioning to proof-of-stake for consensus, but does not significantly change any parameters that directly influence network capacity or throughput. -With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at layer 2, while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. +With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698), efforts are being focused on scaling user activity at [layer 2](/layer-2/), while enabling layer 1 Mainnet as a secure decentralized settlement layer optimized for rollup data storage to help make rollup transactions exponentially cheaper. The transition to proof-of-stake is a critical precursor to realizing this. [More on gas and fees.](/developers/docs/gas/) </ExpandableCard> <ExpandableCard From 40d276eb9ba5b8f801daf56b6ec4c7e5aadd8f6f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 14:23:32 -0700 Subject: [PATCH 116/244] Update src/content/energy-consumption/index.md Co-authored-by: Sam Richards <sbrichards@gmail.com> --- src/content/energy-consumption/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index 7e0dc44ae1c..246794be88a 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,7 +7,7 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum's energy consumption will be reduced by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/) following [The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos). After The Merge Ethereum will use dramatically less carbon to be more secure. +Ethereum's energy consumption will be reduced by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/) following [The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos). After The Merge, Ethereum will use dramatically less carbon to be more secure. Since its inception, Ethereum has aimed to implement a proof-of-stake consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using proof-of-work consensus. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle. The solution to the puzzle proves that some energy has been expended by the miner, demonstrating that they have invested real-world value for the right to add to the blockchain. Proof-of-work is just a mechanism to decide who gets to add the next block, as is proof-of-stake. Swapping proof-of-work for proof-of-stake, where the real world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. From d443e2e1291359872ab52ebe2b0ae7d1f8e4efb2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 15:10:14 -0700 Subject: [PATCH 117/244] emphasize users/holders persona --- src/content/upgrades/merge/index.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index fdf0949cd6a..f1c097bbacf 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -45,7 +45,19 @@ This transition to proof-of-stake will come with some changes to the way ether i The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term some folks will need to take action to be fully prepared. -For everyday users, holders, or non-node-operating stakers there is **nothing you need to do**, but a few things you should be aware of heading into The Merge. [More on this below.](#users-holders) +### Users and holders {#users-holders} + +**You do not need to anything to protect your funds entering The Merge.** + +_This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, as well as non-node-operating stakers, **you do not need to do anything with your funds or wallet before The Merge.** + +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. + +As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. + +[More on Ethereum security](/security/#eth2-token-scam) + +### Node operators and dapp developers {#node-operators-dapp-developers} <ExpandableCard title="Staking node operators and providers" @@ -100,18 +112,6 @@ These changes relate to <br/><br/> For more information, check out this blog post by Tim Beiko on [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer/). </ExpandableCard> -### Users and holders {#users-holders} - -<strong>You do not need to anything to protect your funds entering The Merge.</strong><br/><br/> - -<em>This bears repeating</em>: As a user or holder of ETH or any other digital asset on Ethereum, <strong>you do not need to do anything with your funds or wallet before The Merge.</strong> - -Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. - -As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. - -[More on Ethereum security](/security/#eth2-token-scam) - ## After The Merge {#after-the-merge} This will signal the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Learn more about [Ethereum energy consumption](/energy-consumption/). From d66799847db6d33db85a237331d7c5349ccb124d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:39:01 -0700 Subject: [PATCH 118/244] Create MergeInfographic.tsx --- src/assets/upgrades/merge-infographic-bg.svg | 21 ++++ src/components/MergeInfographic.tsx | 123 +++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 src/assets/upgrades/merge-infographic-bg.svg create mode 100644 src/components/MergeInfographic.tsx diff --git a/src/assets/upgrades/merge-infographic-bg.svg b/src/assets/upgrades/merge-infographic-bg.svg new file mode 100644 index 00000000000..3d7cc365f54 --- /dev/null +++ b/src/assets/upgrades/merge-infographic-bg.svg @@ -0,0 +1,21 @@ +<svg width="250" height="110" viewBox="0 0 250 110" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_10_161)"> +<path d="M-108 26.5H-108.5V27V65V65.5H-108H108H108.5V65V27V26.5H108H-108Z" fill="#BF4040" fill-opacity="0.5" stroke="#BF4040"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M7.3954 61.0689C7.26524 61.0419 7.13345 61.0158 7 60.9905L7.19325 60C7.33239 60.0264 7.46995 60.0537 7.60595 60.0818C7.88248 60.1392 8.05952 60.4066 8.00138 60.6791C7.94324 60.9517 7.67193 61.1262 7.3954 61.0689ZM9.3608 61.0397C9.45214 60.7761 9.74296 60.6355 10.0104 60.7255C10.2799 60.8162 10.5419 60.9116 10.7965 61.0115C11.0591 61.1145 11.1872 61.4077 11.0827 61.6665C10.9783 61.9253 10.6807 62.0516 10.4182 61.9486C10.1797 61.8551 9.93358 61.7655 9.67961 61.68C9.4122 61.59 9.26946 61.3033 9.3608 61.0397ZM12.3468 62.2862C12.4962 62.0498 12.8117 61.9774 13.0516 62.1247C13.2946 62.2738 13.5286 62.4286 13.754 62.5891C13.9831 62.7521 14.0348 63.0673 13.8693 63.2932C13.7039 63.519 13.3841 63.5699 13.155 63.4068C12.9487 63.2601 12.7341 63.118 12.5107 62.9809C12.2709 62.8337 12.1975 62.5227 12.3468 62.2862ZM14.9177 64.2246C15.129 64.0396 15.4524 64.0584 15.6401 64.2666C15.8288 64.476 16.0086 64.6911 16.1801 64.9116C16.352 65.1326 16.3096 65.4492 16.0854 65.6187C15.8611 65.7881 15.5399 65.7463 15.368 65.5253C15.2112 65.3237 15.0471 65.1274 14.875 64.9366C14.6874 64.7283 14.7065 64.4096 14.9177 64.2246ZM16.8248 66.8039C17.0778 66.68 17.3849 66.7817 17.5107 67.0311C17.6346 67.2769 17.752 67.527 17.8634 67.7813C17.9755 68.037 17.8561 68.3338 17.5967 68.4443C17.3373 68.5547 17.0361 68.437 16.9241 68.1813C16.8195 67.9427 16.7097 67.7089 16.5943 67.48C16.4685 67.2306 16.5717 66.9279 16.8248 66.8039ZM18.065 69.7578C18.3364 69.6801 18.6203 69.8339 18.6991 70.1014C18.7754 70.3605 18.848 70.6227 18.9172 70.8878C18.9876 71.1576 18.8228 71.4325 18.5491 71.5019C18.2754 71.5713 17.9965 71.4088 17.9261 71.1391C17.8594 70.8833 17.7896 70.6312 17.7164 70.3828C17.6376 70.1153 17.7937 69.8355 18.065 69.7578ZM18.8478 72.8614C19.1255 72.8101 19.3928 72.9905 19.4449 73.2643C19.4948 73.527 19.5429 73.7919 19.5895 74.0591C19.6375 74.3336 19.4506 74.5944 19.1721 74.6416C18.8936 74.6889 18.629 74.5046 18.5811 74.2301C18.5352 73.9674 18.488 73.7073 18.4391 73.45C18.387 73.1762 18.57 72.9127 18.8478 72.8614ZM19.3881 76.0165C19.6678 75.9765 19.9274 76.1675 19.9679 76.4432C20.0066 76.706 20.0449 76.9705 20.083 77.2365C20.1225 77.5123 19.9278 77.7675 19.648 77.8065C19.3682 77.8454 19.1093 77.6534 19.0698 77.3776C19.0318 77.1124 18.9937 76.8492 18.9552 76.588C18.9147 76.3123 19.1085 76.0565 19.3881 76.0165ZM19.8428 79.1836C20.1226 79.1442 20.3818 79.3358 20.4217 79.6115C20.4409 79.7433 20.4601 79.8754 20.4796 80.0078C20.4996 80.1442 20.521 80.2793 20.5436 80.4132C20.5901 80.688 20.4018 80.9478 20.123 80.9936C19.8443 81.0394 19.5807 80.8537 19.5342 80.579C19.5104 80.438 19.4879 80.2958 19.4669 80.1524C19.4473 80.0193 19.4279 79.8866 19.4087 79.7543C19.3687 79.4785 19.5631 79.223 19.8428 79.1836ZM20.4766 82.4657C20.7458 82.381 21.0337 82.5274 21.1196 82.7928C21.2047 83.0555 21.2954 83.311 21.3916 83.5591C21.4925 83.8193 21.3603 84.1108 21.0964 84.2102C20.8324 84.3097 20.5367 84.1794 20.4358 83.9192C20.3325 83.653 20.2355 83.3797 20.1447 83.0994C20.0588 82.8341 20.2074 82.5503 20.4766 82.4657ZM21.7759 85.5658C22.0138 85.4155 22.3302 85.4837 22.4828 85.7182C22.6317 85.9472 22.7866 86.165 22.9472 86.3712C23.1191 86.5922 23.0768 86.9088 22.8526 87.0784C22.6284 87.2479 22.3072 87.2062 22.1352 86.9852C21.9565 86.7556 21.7851 86.5145 21.6213 86.2626C21.4688 86.0281 21.538 85.7161 21.7759 85.5658ZM23.9541 88.135C24.1133 87.9048 24.4316 87.8454 24.6651 88.0023C24.885 88.15 25.1105 88.2816 25.341 88.3969C25.5931 88.5228 25.6938 88.8263 25.566 89.0748C25.4382 89.3232 25.1303 89.4225 24.8783 89.2965C24.6073 89.1611 24.3439 89.0072 24.0887 88.8357C23.8552 88.6789 23.795 88.3651 23.9541 88.135ZM27.0516 89.465C27.065 89.1868 27.3047 88.9719 27.5869 88.9851C27.7161 88.9911 27.8466 88.9928 27.9782 88.99L28 89.9985C27.8451 90.0017 27.6913 89.9998 27.5385 89.9926C27.2562 89.9794 27.0383 89.7432 27.0516 89.465Z" fill="#7BD578"/> +<path d="M113 26.5H112.5V27V68C112.5 76.6607 105.673 83.5 97 83.5H29C27.1226 83.5 25.6736 84.1747 24.6966 85.224C23.7264 86.266 23.25 87.6464 23.25 89.0179C23.25 90.3895 23.7263 91.7768 24.6934 92.8352C25.667 93.9008 27.1125 94.6048 28.9898 94.6433L28.9898 94.6434H29H108.139C114.508 94.6434 120.314 90.9984 123.074 85.2662C126.831 77.4635 134.734 72.5009 143.406 72.5009H203.461V93.0987C203.461 96.3137 207.516 97.7264 209.52 95.2144L242.391 54.0026L242.63 53.7028L242.403 53.3941L209.599 8.88815C207.654 6.2492 203.461 7.62088 203.461 10.9011V26.5H113Z" fill="#7BD578" fill-opacity="0.5" stroke="#7BD578"/> +<line x1="110.36" y1="42.5" x2="110.36" y2="19.5" stroke="currentColor" stroke-linecap="round"/> +<line x1="163.47" y1="94.5" x2="163.47" y2="63.5" stroke="currentColor" stroke-linecap="round"/> +<line x1="30.75" y1="88.5" x2="30.75" y2="81.5" stroke="currentColor" stroke-linecap="round"/> +<path d="M230.364 53.7463L213.736 31.2792C213.342 30.7467 212.5 31.0268 212.5 31.6905V76.3095C212.5 76.9708 213.337 77.2525 213.733 76.7246L230.362 54.5727C230.545 54.3284 230.546 53.9919 230.364 53.7463Z" fill="currentColor"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M122.455 72.1868C122.286 73.0136 122.106 73.8934 121.896 74.8125C120.382 81.4541 114.313 90 102.393 90H31.5V88.118H102.393C113.226 88.118 118.703 80.4102 120.076 74.3911C120.28 73.4934 120.457 72.6327 120.627 71.8025L120.657 71.6569C120.835 70.7864 121.009 69.9456 121.2 69.1535C121.579 67.5779 122.044 66.115 122.818 64.8811C123.61 63.6203 124.706 62.6296 126.282 61.9679C127.834 61.3168 129.813 61 132.363 61H216.5V62.882H132.363C129.946 62.882 128.239 63.1854 127 63.7052C125.787 64.2144 124.988 64.9453 124.397 65.8873C123.788 66.8563 123.381 68.0774 123.015 69.5974C122.833 70.3532 122.665 71.1631 122.486 72.0376L122.455 72.1868Z" fill="currentColor"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M216.5 62H-96.5V43H216.5V62Z" fill="currentColor"/> +<path d="M28.3615 89.8695C27.9623 89.4702 27.9623 88.823 28.3615 88.4237L30.0482 86.737C30.4475 86.3378 31.0948 86.3378 31.494 86.737L33.1807 88.4237C33.5799 88.823 33.5799 89.4702 33.1807 89.8695L31.494 91.5562C31.0947 91.9554 30.4475 91.9554 30.0482 91.5562L28.3615 89.8695Z" fill="currentColor"/> +<path d="M165.908 63.801C166.308 63.4018 166.308 62.7545 165.908 62.3553L164.222 60.6686C163.823 60.2693 163.175 60.2693 162.776 60.6686L161.089 62.3553C160.69 62.7545 160.69 63.4018 161.089 63.801L162.776 65.4877C163.175 65.8869 163.823 65.8869 164.222 65.4877L165.908 63.801Z" fill="currentColor"/> +<path d="M105.545 43.971C105.145 43.5718 105.145 42.9245 105.545 42.5253L109.641 38.429C110.04 38.0298 110.687 38.0298 111.087 38.429L115.183 42.5253C115.582 42.9245 115.582 43.5718 115.183 43.971L111.087 48.0673C110.687 48.4665 110.04 48.4665 109.641 48.0673L105.545 43.971Z" fill="currentColor"/> +</g> +<defs> +<clipPath id="clip0_10_161"> +<rect width="250" height="110" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/src/components/MergeInfographic.tsx b/src/components/MergeInfographic.tsx new file mode 100644 index 00000000000..f183c2f02a0 --- /dev/null +++ b/src/components/MergeInfographic.tsx @@ -0,0 +1,123 @@ +// Library imports +import React from "react" +import styled from "styled-components" +import { useIntl } from "gatsby-plugin-intl" +// Component imports +import Translation from "./Translation" +// Utility imports +import { translateMessageId, TranslationKey } from "../utils/translations" +// SVG imports +import InfographicBg from "../assets/upgrades/merge-infographic-bg.svg" + +const Container = styled.div` + position: relative; + width: 100%; + aspect-ratio: 25 / 11; + isolation: isolate; +` + +const ExecutionLayer = styled.div` + position: absolute; + top: 40%; + left: 2%; + width: 81%; + height: 18%; + margin: 0; + padding: 0; + z-index: 2; + + display: flex; + justify-content: center; + text-align: center; + align-items: center; + + line-height: 1em; + max-height: 2em; + color: ${({ theme }) => theme.colors.background}; + + font-size: 1.375em; + @media (max-width: ${({ theme }) => theme.breakpoints.l}) { + font-size: 1.125em; + } + @media (max-width: ${({ theme }) => theme.breakpoints.m}) { + font-size: 0.875em; + } + @media (max-width: ${({ theme }) => theme.breakpoints.s}) { + font-size: 0.625em; + } +` + +const Background = styled(InfographicBg)` + position: absolute; + width: 100%; + height: 100%; + z-index: 0; +` + +const StyledSvg = styled.svg` + position: absolute; + z-index: 1; +` + +const Text = styled.text` + text-anchor: start; + fill: currentColor; +` + +export type StringGetter = (key: TranslationKey) => string + +export interface SvgProps { + getString: StringGetter +} + +const SvgText: React.FC<SvgProps> = ({ getString }) => { + const [sm, lg] = ["7px", "8px"] + return ( + <StyledSvg + width="100%" + height="100%" + viewBox="0 0 250 110" + version="1.1" + xmlns="http://www.w3.org/2000/svg" + xmlnsXlink="http://www.w3.org/1999/xlink" + > + <Text x="2%" y="35%" fontSize={lg}> + ⛏ {getString("docs-nav-proof-of-work")} + </Text> + <Text x="47%" y="35%" fontSize={lg}> + 🌱 {getString("docs-nav-proof-of-stake")} + </Text> + <Text x="11%" y="70%" fontSize={sm}> + 🚀 {getString("beacon-chain")} + </Text> + <Text x="43%" y="12.5%" fontSize={sm}> + 🐼 {getString("page-upgrades-get-involved-ethresearch-2")} + </Text> + <Text x="63%" y="95%" fontSize={sm}> + 🌳 {getString("page-upgrades-get-involved-ethresearch-1")} + </Text> + </StyledSvg> + ) +} + +export interface IProps { + className?: string +} + +const MergeInfographic: React.FC<IProps> = ({ className }) => { + const intl = useIntl() + const getString: StringGetter = (id: TranslationKey) => + translateMessageId(id, intl) + + return ( + <Container className={className}> + <ExecutionLayer> + Ethereum State: transactions, apps, contracts, balances + </ExecutionLayer> + <SvgText getString={getString} /> + <Background /> + </Container> + ) +} + +export default MergeInfographic From 02984be8443e6bcd043b38e898d8a71bf2e0f3d3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 17:39:41 -0700 Subject: [PATCH 119/244] implement MergeInfographic for testing English and French `/merge/` page to demonstrate intl capabilities --- src/content/translations/fr/upgrades/merge/index.md | 2 ++ src/content/upgrades/merge/index.md | 2 ++ src/templates/upgrade.tsx | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/content/translations/fr/upgrades/merge/index.md b/src/content/translations/fr/upgrades/merge/index.md index 527623f5e74..ab01013ae32 100644 --- a/src/content/translations/fr/upgrades/merge/index.md +++ b/src/content/translations/fr/upgrades/merge/index.md @@ -17,6 +17,8 @@ summaryPoint4: Précédemment, cette étape était appelée « le docking ». ## Qu'est-ce que la fusion ? {#what-is-the-docking} +<MergeInfographic /> + Il est important de se rappeler que, dans un premier temps, la [chaîne phare](/upgrades/beacon-chain/) sortira séparément du [réseau principal](/glossary/#mainnet) - la chaîne que nous utilisons aujourd'hui. Le réseau principal Ethereum continuera d'être sécurisé par [la preuve de travail](/developers/docs/consensus-mechanisms/pow/), même lorsque la chaîne phare fonctionnera en parallèle en utilisant [la preuve de mise à enjeu](/developers/docs/consensus-mechanisms/pos/). La fusion se fera au moment où ces deux systèmes se réuniront enfin. Imaginez qu'Ethereum est un vaisseau spatial qui n’est pas tout à fait prêt pour un voyage interstellaire. Avec la chaîne phare, la communauté a construit un nouveau moteur et une coque renforcée. Quand il sera temps, le vaisseau actuel s'arrimera à ce nouveau système, fusionnant en un seul vaisseau, prêt à parcourir des années lumières et à s'emparer de l'univers. diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index e93a62e90b3..dcca5168128 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -17,6 +17,8 @@ summaryPoint4: We formerly referred to this as "the docking." ## What is The Merge? {#what-is-the-docking} +<MergeInfographic /> + It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet) - the chain we use today. Ethereum Mainnet continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge is when these two systems finally come together. Imagine Ethereum is a space ship that isn’t quite ready for an interstellar voyage. With the Beacon Chain the community has built a new engine and a hardened hull. When it’s time, the current ship will dock with this new system, merging into one ship, ready to put in some serious lightyears and take on the universe. diff --git a/src/templates/upgrade.tsx b/src/templates/upgrade.tsx index 2ec66190f45..294ab6f9d41 100644 --- a/src/templates/upgrade.tsx +++ b/src/templates/upgrade.tsx @@ -38,6 +38,7 @@ import { } from "../components/SharedStyledComponents" import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" +import MergeInfographic from "../components/MergeInfographic" import { getLocaleTimestamp } from "../utils/time" import { isLangRightToLeft } from "../utils/translations" @@ -176,6 +177,7 @@ const components = { ShardChainsList, MergeArticleList, YouTube, + MergeInfographic, } const Title = styled.h1` From 56460de011c6e2341c6969a8c979bda348f2e0d3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 20:02:36 -0700 Subject: [PATCH 120/244] Update /upgrades/vision with premerge copy Calls out The Merge, basic updates to sharding content --- src/intl/en/page-upgrades-vision.json | 28 ++++++++++--------- src/pages/upgrades/vision.js | 40 +++++++++++++++++---------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index 39a2459413f..f5ecd12c52b 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -1,18 +1,20 @@ { "page-upgrades-vision-2014": "View a 2014 blog post detailing proof of stake", "page-upgrades-vision-2021": "View a 2021 blog post on the Ethereum roadmap evolution", + "page-upgrades-vision-2022": "View a 2022 blog post: The Hitchhikers Guide to Ethereum", "page-upgrades-vision-2021-updates": "View a 2021 blog post on the Ethereum Protocol Updates", "page-upgrades-vision-beacon-chain": "The beacon chain", "page-upgrades-vision-beacon-chain-btn": "More on the Beacon Chain", + "page-upgrades-vision-merge-btn": "More on The Merge", "page-upgrades-vision-beacon-chain-date": "The Beacon Chain is live", "page-upgrades-vision-beacon-chain-desc": "The Beacon Chain brought staking to Ethereum, laid the groundwork for future upgrades, and will eventually coordinate the new system.", "page-upgrades-vision-beacon-chain-upper": "Beacon Chain", "page-upgrades-vision-desc-1": "Ethereum needs to reduce network congestion and improve speeds to better service a global user base.", - "page-upgrades-vision-desc-2": "Running a node is getting harder as the network grows. This will only get harder with efforts to scale the network.", - "page-upgrades-vision-desc-3": "Ethereum uses too much electricity. The technology that keeps the network secure needs to be more sustainable.", + "page-upgrades-vision-desc-2": "Requirements to run a node are increasing as the network grows. This will only get worse without efforts to properly scale the network.", + "page-upgrades-vision-desc-3": "Ethereum uses too much electricity. The technology that keeps the network secure is soon to be upgraded to a more sustainable solution.", "page-upgrades-vision-merge-date": "Estimate: 2022", "page-upgrades-vision-merge-desc": "Mainnet Ethereum will need to \"merge\" with the Beacon Chain at some point. This will enable staking for the entire network and signal the end of energy-intensive mining.", - "page-upgrades-vision-ethereum-node": "More on nodes", + "page-upgrades-vision-ethereum-node": "More on running a node", "page-upgrades-vision-explore-upgrades": "Explore the upgrades", "page-upgrades-vision-future": "A digital future on a global scale", "page-upgrades-vision-meta-desc": "An overview of the impact upgrades will have on Ethereum, and the challenges they must overcome.", @@ -21,34 +23,34 @@ "page-upgrades-vision-problems": "Today's problems", "page-upgrades-vision-scalability": "Scalability", "page-upgrades-vision-scalability-desc": "Ethereum needs to be able to handle more transactions per second without increasing the size of the nodes in the network. Nodes are vital network participants who store and run the blockchain. Increasing node size isn't practical because only those with powerful and expensive computers could do it. To scale, Ethereum needs more transactions per second, coupled with more nodes. More nodes means more security.", - "page-upgrades-vision-scalability-desc-3": "The shard chains upgrade will spread the load of the network into 64 new chains. This will give Ethereum room to breathe by reducing congestion and improving speeds beyond the current 15-45 transactions per second limit.", - "page-upgrades-vision-scalability-desc-4": "And even though there will be more chains, this will actually require less work from validators - the maintainers of the network. Validators will only need to 'run' their shard and not the entire Ethereum chain. This makes nodes more lightweight, allowing Ethereum to scale and remain decentralized.", + "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by layer 2 rollup solutions.", + "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Data sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit. Validators will only need to sample the data to make sure it all has been made available.", "page-upgrades-vision-security": "Security", "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks, like a 51% attack. This is a type of attack where if someone controls the majority of the network they can force through fraudulent changes.", "page-upgrades-vision-security-desc-3": "The transition to proof-of-stake means that the Ethereum protocol has greater disincentives against attack. This is because in proof-of-stake, the validators who secure the network must stake significant amounts of ETH into the protocol. If they try and attack the network, the protocol can automatically destroy their ETH.", "page-upgrades-vision-security-desc-5": "This isn't possible in proof-of-work, where the best a protocol can do is force entities who secure the network (the miners) to lose mining rewards they would have otherwise earned. To achieve the equivalent effect in proof-of-work, the protocol would have to be able to destroy all of a miner's equipment if they try and cheat.", "page-upgrades-vision-security-desc-5-link": "More on proof of work", - "page-upgrades-vision-security-desc-8": "Ethereum's security model also needs to change because of the introduction of shard chains. The Beacon Chain will randomly assign validators to different shards - this makes it virtually impossible for validators to ever collude by attacking a specific shard. Sharding isn't as secure on a proof-of-work blockchain, because miners can't be controlled by the protocol in this way.", - "page-upgrades-vision-security-desc-10": "Staking also means you don't need to invest in elite hardware to 'run' an Ethereum node. This should encourage more people to become a validator, increasing the network's decentralization and decreasing the attack surface area.", + "page-upgrades-vision-security-desc-8": "Ethereum's security model also needs to change because of the introduction of sharding. The Beacon Chain will coordinate all of the validators who will be responsible for asserting that all data has been made available, but every node will no longer be required to hold the entire history of the chain. A new role is also anticipated, known as a dedicated block builder, who will work alongside block proposers (validators) for efficient and safe block production. Proof-of-stake is a prerequisite to sharding.", + "page-upgrades-vision-security-desc-10": "Staking also means you don't need to invest in elite hardware to participate directly in consensus. This should encourage more people to become a validator, increasing the network's decentralization and decreasing the attack surface area.", "page-upgrades-vision-security-staking": "Stake ETH", - "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH.", + "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH, but remember, you don't need any ETH to run your own node.", "page-upgrades-vision-shard-chains": "shard chains", "page-upgrades-vision-shard-date": "Estimate: 2021", "page-upgrades-vision-shard-desc-4": "Shard chains will spread the load of the network into 64 new blockchains. Shards have the potential to drastically improve transaction speed - up to 100,000 per second.", - "page-upgrades-vision-shard-upgrade": "More on shard chains", + "page-upgrades-vision-shard-upgrade": "More on sharding", "page-upgrades-vision-staking-lower": "More on staking", "page-upgrades-vision-subtitle": "Grow Ethereum until it's powerful enough to help all of humanity.", "page-upgrades-vision-sustainability": "Sustainability", "page-upgrades-vision-sustainability-desc-1": "It's no secret that Ethereum and other blockchains like Bitcoin are energy intensive because of mining.", - "page-upgrades-vision-sustainability-desc-2": "But Ethereum is moving towards being secured by ETH, not computing power - via staking.", - "page-upgrades-vision-sustainability-desc-3": "Although staking has already been introduced by the Beacon Chain, the Ethereum we use today will run in parallel for a period of time. One system secured by ETH, the other by computing power. This is until The Merge.", - "page-upgrades-vision-sustainability-desc-8": "With the Beacon Chain up and running, work has begun on merging Mainnet with the new consensus layer. Mainnet will then be secured by staked ETH and far less energy intensive.", + "page-upgrades-vision-sustainability-desc-2": "But Ethereum is moving towards being secured by ETH via staking, not computing power.", + "page-upgrades-vision-sustainability-desc-3": "Although staking has already been introduced by the Beacon Chain, the Ethereum we use today is still running in parallel until The Merge. One system secured by ETH, the other by computing power.", + "page-upgrades-vision-sustainability-desc-8": "After significant testing, work is nearing completion on merging Mainnet with the new consensus layer. Mainnet will soon be secured by staked ETH and far less energy intensive.", "page-upgrades-vision-sustainability-subtitle": "Ethereum needs to be greener.", "page-upgrades-vision-title": "The Ethereum Vision", "page-upgrades-vision-title-1": "Clogged network", "page-upgrades-vision-title-2": "Disk space", "page-upgrades-vision-title-3": "Too much energy", - "page-upgrades-vision-trilemma-cardtext-1": "Ethereum upgrades will make Ethereum scalable, secure, and decentralized. Sharding will make Ethereum more scalable by increasing transactions per second while decreasing the power needed to run a node and validate the chain. The beacon chain will make Ethereum secure by coordinating validators across shards. And staking will lower the barrier to participation, creating a larger - more decentralized - network.", + "page-upgrades-vision-trilemma-cardtext-1": "Ethereum upgrades will make Ethereum scalable, secure, and decentralized. Sharding will make Ethereum more scalable by increasing transactions per second while decreasing the power needed to run a node and validate the chain. The Beacon Chain will make Ethereum secure by coordinating validators across a sharded set of data. And staking will lower the barrier to participation and limit economies-of-scale, creating a larger - more decentralized - network.", "page-upgrades-vision-trilemma-cardtext-2": "Secure and decentralized blockchain networks require every node to verify every transaction processed by the chain. This amount of work limits the number of transactions that can happen at any one given time. Decentralized and secure reflects the Ethereum chain today.", "page-upgrades-vision-trilemma-cardtext-3": "Decentralized networks work by sending information about transactions across nodes - the whole network needs to know about any state change. Scaling transactions per second across a decentralized network poses security risks because the more transactions, the longer the delay, the higher the probability of attack while information is in flight.", "page-upgrades-vision-trilemma-cardtext-4": "Increasing the size and power of Ethereum's nodes could increase transactions per second in a secure way, but the hardware requirement would restrict who could do it - this threatens decentralization. It's hoped that sharding and proof-of-stake will allow Ethereum to scale by increasing the amount of nodes, not node size.", diff --git a/src/pages/upgrades/vision.js b/src/pages/upgrades/vision.js index e2a2c9ff113..d079e0677ba 100644 --- a/src/pages/upgrades/vision.js +++ b/src/pages/upgrades/vision.js @@ -15,6 +15,7 @@ import PageHero from "../../components/PageHero" import Breadcrumbs from "../../components/Breadcrumbs" import ButtonLink from "../../components/ButtonLink" import PageMetadata from "../../components/PageMetadata" +import InfoBanner from "../../components/InfoBanner" import { CardContainer, Content, @@ -97,6 +98,7 @@ const VisionPage = ({ data, location }) => { } const upgrades = [ + // TODO: Check/update string keys after affiliates pre-merge content changes are pulled in { image: getImage(data.beaconchain), title: <Translation id="page-upgrades-beacon-chain-title" />, @@ -144,6 +146,11 @@ const VisionPage = ({ data, location }) => { <Translation id="page-upgrades-vision-upgrade-needs-desc-3" />{" "} </p> <ul> + <li> + <Link to="https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum"> + <Translation id="page-upgrades-vision-2022" /> + </Link> + </li> <li> <Link to="https://trent.mirror.xyz/82eyq_NXZzzqFmCNXiKJgSdayf6omCW7BgDQIneyPoA"> <Translation id="page-upgrades-vision-2021-updates" /> @@ -206,14 +213,14 @@ const VisionPage = ({ data, location }) => { <Translation id="page-upgrades-vision-scalability-desc" /> </p> <p> - <Translation id="page-upgrades-vision-scalability-desc-3" />{" "} + <Translation id="page-upgrades-vision-scalability-desc-3" /> + </p> + <p> + <Translation id="page-upgrades-vision-scalability-desc-4" />{" "} <Link to="/upgrades/shard-chains/"> <Translation id="page-upgrades-vision-shard-upgrade" /> </Link>{" "} </p> - <p> - <Translation id="page-upgrades-vision-scalability-desc-4" /> - </p> <h3> <Translation id="page-upgrades-vision-security" />{" "} <Emoji text=":shield:" /> @@ -237,13 +244,13 @@ const VisionPage = ({ data, location }) => { <Translation id="page-upgrades-vision-security-desc-8" /> </p> <p> - <Translation id="page-upgrades-vision-security-desc-10" />{" "} - <Link to="/developers/docs/nodes-and-clients/"> - <Translation id="page-upgrades-vision-ethereum-node" /> - </Link> + <Translation id="page-upgrades-vision-security-desc-10" /> </p> <p> - <Translation id="page-upgrades-vision-security-validator" /> + <Translation id="page-upgrades-vision-security-validator" />{" "} + <Link to="/run-a-node/"> + <Translation id="page-upgrades-vision-ethereum-node" /> + </Link> </p> <ButtonLink to="/staking/"> <Translation id="page-upgrades-vision-security-staking" /> @@ -268,11 +275,16 @@ const VisionPage = ({ data, location }) => { </Link> </p> <p> - <Translation id="page-upgrades-vision-sustainability-desc-3" />{" "} - </p> - <p> - <Translation id="page-upgrades-vision-sustainability-desc-8" />{" "} + <Translation id="page-upgrades-vision-sustainability-desc-3" /> </p> + <InfoBanner> + <p> + <Translation id="page-upgrades-vision-sustainability-desc-8" /> + </p> + <ButtonLink to="/upgrades/merge/"> + <Translation id="page-upgrades-vision-merge-btn" /> + </ButtonLink> + </InfoBanner> </CentralContent> </Content> <Divider /> @@ -284,7 +296,7 @@ const VisionPage = ({ data, location }) => { {upgrades.map((upgrade, idx) => ( <ActionCard isRight - key={idx} + key={upgrade.title} image={upgrade.image} title={upgrade.title} description={upgrade.description} From be9dd8a8768ccbcf907874b9444174fe78b2ec33 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 20:31:19 -0700 Subject: [PATCH 121/244] Add merge-readiness callout to /staking/solo --- src/content/staking/solo/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index d039f1217bd..c5704bb46e6 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -89,6 +89,10 @@ The Staking Launchpad is an open source application that will help you become a <StakingLaunchpadWidget /> +<InfoBanner emoji=":panda:" isWarning> +<strong>Note for existing stakers:</strong> The Merge is approaching which brings a few changes since staking was launched. Make sure you're prepared with the <a href="https://launchpad.ethereum.org/en/merge-readiness">Merge readiness checklist</a> over on the Staking Launchpad. +</InfoBanner> + ## What to consider with node and client setup tools {#node-tool-considerations} There are a growing number of tools and services to help you solo stake your ETH, but each come with different risks and benefits. From 68b6f6e9fcc7af71cddeeacc0156492401ef73cd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 21:18:20 -0700 Subject: [PATCH 122/244] Update /staking for pre-merge Relocates general "Is staking live?" FAQ out of /solo page and into /staking landing page. Includes button link to /merge --- src/content/staking/solo/index.md | 6 ------ src/intl/en/page-staking.json | 5 ++++- src/pages/staking/index.js | 13 +++++++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index c5704bb46e6..affb3135e3c 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -162,12 +162,6 @@ Equivalent bugs in a <em>minority client would never finalize</em> and thus woul <p><a href="https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50">Learn more about slashing prevention</a></p> </ExpandableCard> -<ExpandableCard title="Is staking already live?"> -Yes and no. Staking has been live since December 1, 2020, but until the Merge happens, the proof-of-stake consensus remains isolated on its own chain, while the existing Ethereum network as we know it continues to operate using proof-of-work. These two chains start separate, but with the Merge, proof-of-work will be fully deprecated, and proof-of-stake will become the sole means of consensus from here-on-out. - -This means that staking is currently live for users to deposit their ETH, run a validator client, and start earning rewards. After the Merge, stakers will earn higher rewards as validators begin to process transactions and earn fee tips on top of protocol rewards. After the Shanghai update (planned to follow the Merge by a few months), stakers will then be able to withdraw rewards and funds from their validator balance. -</ExpandableCard> - <ExpandableCard title="Which client is best?"> Individual clients may vary slightly in terms of performance and user interface, as each are developed by different teams using a variety of programming languages. That being said, none of them are "best." All production clients are excellent pieces of software, that all perform the same core functions to sync and interact with the blockchain. diff --git a/src/intl/en/page-staking.json b/src/intl/en/page-staking.json index 727574a7ed9..e638e305b48 100644 --- a/src/intl/en/page-staking.json +++ b/src/intl/en/page-staking.json @@ -167,8 +167,11 @@ "page-staking-faq-2-question": "Why do I need to have funds at stake?", "page-staking-faq-2-answer": "A validator has the ability to propose and attest to blocks for the network. To prevent dishonest behavior, users must have their funds at stake. This allows the protocol to penalize malicious actors. Staking is a means to keep you honest, as your actions will have financial consequences.", "page-staking-faq-3-question": "Can I buy 'Eth2'?", - "page-staking-faq-3-answer-p1": "There is no 'Eth2' token native to the protocol, as the native token ether (ETH) will not change with the transition to proof-of-stake.", + "page-staking-faq-3-answer-p1": "There is no 'Eth2' token native to the protocol, as the native token ether (ETH) will not change with the transition to proof-of-stake. Learn more about <a href=\"/upgrades/merge/\">The Merge</a>", "page-staking-faq-3-answer-p2": "There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase). Learn more about <a href=\"/staking/pools/\">staking pools</a>", + "page-staking-faq-4-question": "Is staking already live?", + "page-staking-faq-4-answer-p1": "Yes and no. Staking has been live since December 1, 2020, but until the Merge happens, the proof-of-stake consensus remains isolated on its own chain, while the existing Ethereum network as we know it continues to operate using proof-of-work. These two chains start separate, but with the Merge, proof-of-work will be fully deprecated, and proof-of-stake will become the sole means of consensus from here-on-out.", + "page-staking-faq-4-answer-p2": "This means that staking is currently live for users to deposit their ETH, run a validator client, and start earning rewards. After the Merge, stakers will earn higher rewards as validators begin to process transactions and earn fee tips on top of protocol rewards. After the Shanghai update (planned to follow the Merge by a few months), stakers will then be able to withdraw rewards and funds from their validator balance.", "page-staking-toc-how-to-stake-your-eth": "How to stake your ETH", "page-staking-toc-comparison-of-options": "Comparison of staking options", "page-staking-toc-faq": "FAQ", diff --git a/src/pages/staking/index.js b/src/pages/staking/index.js index f77af0b4048..8451327f4ab 100644 --- a/src/pages/staking/index.js +++ b/src/pages/staking/index.js @@ -596,6 +596,19 @@ const StakingPage = ({ data }) => { <StakingCommunityCallout id={tocItems.joinTheCommunity.id} /> <Content> <h2 id={tocItems.faq.id}>{tocItems.faq.title}</h2> + <ExpandableCard + title={translateMessageId("page-staking-faq-4-question", intl)} + > + <p> + <Translation id="page-staking-faq-4-answer-p1" /> + </p> + <p> + <Translation id="page-staking-faq-4-answer-p2" /> + </p> + <ButtonLink to="/upgrades/merge/"> + <Translation id="page-upgrades-merge-btn" /> + </ButtonLink> + </ExpandableCard> <ExpandableCard title={translateMessageId("page-staking-faq-1-question", intl)} > From c166291c5a847dd6500b20c9726aa6968cef53f6 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 21:38:39 -0700 Subject: [PATCH 123/244] Add pre-merge FAQ for pooled staking --- src/content/staking/pools/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index 2b4734ca0c9..a8a91c4dfa5 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -72,6 +72,14 @@ Currently, withdrawing funds from a validator on the Beacon Chain is not possibl Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, effectively allowing you to "withdraw" without actually removing ETH from the Beacon Chain. </ExpandableCard> +<ExpandableCard title="I am a pooled staker, do I need to do anything for The Merge?"> +ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. + +As The Merge approaches, be on high alert for scammers. You do not need to do anything to "upgrade" your ETH or staked ETH tokens for the transition to proof-of-stake. + +Learn more about [The Merge](/upgrades/merge/) +</ExpandableCard> + <ExpandableCard title="Is this different from staking with my exchange?"> There are many similarities between these pooled staking options and centralized exchanges, such as the ability to stake small amounts of ETH and have them bundled together to activate validators. From adff574652efec2de1428a8124be5cdd528585dc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 21:38:49 -0700 Subject: [PATCH 124/244] Add pre-merge FAQ for SaaS staking --- src/content/staking/saas/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index f7f127c5cee..82e00860e7b 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -85,6 +85,14 @@ All of these keys can always be regenerated in a reproducible manner using your The Merge will <em>not</em> enable the ability to withdraw your stake or protocol rewards; this feature is planned for the Shanghai upgrade, which will follow the Merge by an estimated six months to a year. </ExpandableCard> +<ExpandableCard title="I use an SaaS, do I need to do anything for The Merge?"> +ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. + +There are a few things node operators must attend to for this upgrade. Check with your individual staking provider for assurance their systems are ready to go. + +Learn more about [The Merge](/upgrades/merge/) +</ExpandableCard> + <ExpandableCard title="What happens if I get slashed?" eventCategory="SaasStaking" eventName="clicked what happens if I get slashed"> By using an SaaS provider, you are entrusting the operation of your node to someone else. This comes with the risk of poor node performance, which is not in your control. In the event your validator is slashed, your validator balance will be penalized and forcibly removed from the validator pool. These funds will be locked until withdrawals are enabled at the protocol level. From 064fb06e4ed959cd6380b1c3a25ac418abf14edc Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 21:39:22 -0700 Subject: [PATCH 125/244] Update pre-merge FAQ on solo staking page Adds additional link to Merge readiness checklist on Launchpad --- src/content/staking/solo/index.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index affb3135e3c..7f258711c59 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -181,9 +181,15 @@ Offline penalties are proportional to how many others are offline at the same ti </ExpandableCard> <ExpandableCard title="Do I need to do anything before The Merge?"> -Anyone currently running a CL (Beacon Chain) client will be required to also run an EL client after The Merge. This is a result of the new Engine API that will be used to interface between the two layers. Anyone currently running a Beacon Chain without an execution layer client will need to sync the execution layer before The Merge to continue being in sync with the network. +Anyone currently running a CL (Beacon Chain) client will be required to also run an EL client after The Merge. This is a result of the new Engine API that will be used to interface between the two layers, requiring a JWT secret. Anyone currently running a Beacon Chain without an execution layer client will need to sync the execution layer before The Merge to continue being in sync with the network. -The Merge will also bring unburnt transaction fees to validators. These fees do not accumulate in the balance associated with the validator keys, but instead can be directed to a regular Ethereum address of your choice. In order to properly receive the priority fees/tips from proposed blocks, stakers must update their client settings with the address they would like to receive tips at. See individual client documentation for details. +The Merge will also bring unburnt transaction fees to validators. These fees do not accumulate in the balance associated with the validator keys, but instead can be directed to a regular Ethereum address of your choice. In order to properly receive the priority fees/tips from proposed blocks, stakers must update their client settings with the address they would like to receive tips at. + +Links to individual client documentation and additional information can be found on the Merge readiness checklist over on the Launchpad. + +<ButtonLink to="https://launchpad.ethereum.org/merge-readiness/"> +Merge readiness checklist +</ButtonLink> </ExpandableCard> ## Further reading {#further-reading} From 155ae7b4aaf8a639555e3d5a32fd7ca025717c82 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 14 Jun 2022 21:53:52 -0700 Subject: [PATCH 126/244] Update /eth page pre-merge copy --- src/intl/en/page-eth.json | 8 +++++--- src/pages-conditional/eth.tsx | 6 ++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 9bd249998ff..7e8c1538a71 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -15,11 +15,13 @@ "page-eth-flexible-amounts": "Available in flexible amounts", "page-eth-flexible-amounts-desc": "ETH is divisible up to 18 decimal places so you don't have to buy 1 whole ETH. You can buy fractions at a time – as little as 0.000000000000000001 ETH if you want.", "page-eth-fuels": "ETH fuels and secures Ethereum", - "page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a small fee in ETH to use the Ethereum network. This fee is an incentive for a miner to process and verify what you're trying to do.", - "page-eth-fuels-desc-2": "Miners are like the record-keepers of Ethereum – they check and prove that no one is cheating. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", + "page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. Part of the fee is required by the network, and part is an incentive for a block producer to process and include what you're trying to do.", + "page-eth-fuels-desc-2": "Currently, miners are like the record-keepers of Ethereum—they check and prove that no one is cheating, and perform work for the right to propose a block of transactions. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", + "page-eth-fuels-desc-4": "Anyone is free to run Ethereum client software to verify and hold the state of the chain themselves. Node operators are not required to perform the same work as miners, and can quickly verify blocks that are proposed by others to ensure their validity, and to ensure they always have permissionless and private access to the network.", + "page-eth-fuels-desc-4-link": "More on running a node", + "page-eth-fuels-staking": "Soon, ETH will become even more important with staking. When you stake your ETH you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing your ETH deters attacks.", "page-eth-fuels-more-staking": "More on staking", - "page-eth-fuels-staking": "ETH will become even more important with staking. When you stake your ETH you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing your ETH disincentivises attacks.", "page-eth-get-eth-btn": "Get ETH", "page-eth-gov-tokens": "Governance tokens", "page-eth-gov-tokens-desc": "Tokens that represent voting power in decentralized organisations.", diff --git a/src/pages-conditional/eth.tsx b/src/pages-conditional/eth.tsx index fa8326e1a01..713bc47638c 100644 --- a/src/pages-conditional/eth.tsx +++ b/src/pages-conditional/eth.tsx @@ -364,6 +364,12 @@ const EthPage = (props: PageProps<Queries.EthPageQuery, Context>) => { <Translation id="page-eth-mining-link" /> </Link> </p> + <p> + <Translation id="page-eth-fuels-desc-4" />{" "} + <Link to="/run-a-node/"> + <Translation id="page-eth-fuels-desc-4-link" /> + </Link> + </p> <p> <Translation id="page-eth-fuels-staking" />{" "} <Link to="/staking/"> From 8988645f6e941b1f13033ea0cbf923df0d739763 Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Wed, 15 Jun 2022 15:12:05 +0100 Subject: [PATCH 127/244] add merge infro to testnets --- src/content/developers/docs/networks/index.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index 9b5c1d8292d..df5ac6080df 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -31,11 +31,13 @@ It’s generally important to test any contract code you write on a testnet befo Most testnets use a proof-of-authority consensus mechanism. This means a small number of nodes are chosen to validate transactions and create new blocks – staking their identity in the process. It's hard to incentivise mining on a proof-of-work testnet which can leave it vulnerable. +As [The Merge](/upgrades/merge) get closer more of the public proof-of-work and proof-of-authority testnets are becoming proof-of-stake. Swapping their consensus mechanisms acts as rehearsals for the Ethereum Mainnet merge. Ropsten, Sepolia and Goerli are all expected to be proof-of-stake networks by the end of summer 2022, with Goerli being maintained long term. + ETH on testnets has no real value; therefore, there are no markets for testnet ETH. Since you need ETH to actually interact with Ethereum, most people get testnet ETH from faucets. Most faucets are webapps where you can input an address which you request ETH to be sent to. #### Sepolia {#sepolia} -A proof-of-work testnet; this means it's the best like-for-like representation of Ethereum. +A proof-of-work testnet; this means it's the best like-for-like representation of Ethereum. Sepolia is expected to undergo The Merge to proof-of-stake in summer 2022. It is not yet certain whether it will then be maintained long term. - [Website](https://sepolia.dev/) - [Github](https://github.com/goerli/sepolia) @@ -49,7 +51,7 @@ A proof-of-work testnet; this means it's the best like-for-like representation o #### Görli {#goerli} -A proof-of-authority testnet that works across clients; an ideal testnet for application developers. +A proof-of-authority testnet that works across clients; an ideal testnet for application developers. Goerli will be the final testnet merged to proof-of-stake before Ethereum Mainnet is merged. This is expected to happen in summer 2022. Goerlia is expected to be maintained long term as a proof-of-stake testnet. - [Website](https://goerli.net/) - [Github](https://github.com/goerli/testnet) @@ -65,7 +67,7 @@ A proof-of-authority testnet that works across clients; an ideal testnet for app _Note, [the Ropsten testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Görli._ -A proof-of-work testnet. It only serves historical relevance and is mainly used by core developers for testing protocol upgrades. +Ropsten was a proof-of-work testnet that went through The Merge to proof-of-stake in May 2022. It can be used to test applications on a merged network, but it is not expected to be maintained long term and is likely to deprecated before summer 2023. ##### Ropsten faucets From 07531b706fe5dbcf1cf9130770dd8432e80bbb2a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 15 Jun 2022 10:31:31 -0700 Subject: [PATCH 128/244] Update /issuance page Rename path to /issuance instead of /eth-issuance. Small styling updates --- src/content/upgrades/merge/index.md | 4 +-- .../merge/{eth-issuance => issuance}/index.md | 31 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) rename src/content/upgrades/merge/{eth-issuance => issuance}/index.md (90%) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index f1c097bbacf..88ecbca661b 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -38,7 +38,7 @@ The Merge represents the official switch to using the Beacon Chain as the engine No history is lost. As Mainnet gets merged with the Beacon Chain, it will also merge the entire transactional history of Ethereum. You don't need to do anything. Your funds are safe. <InfoBanner> -This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about <a href="/upgrades/merge/eth-issuance/">ether issuance before and after The Merge</a>. +This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about <a href="/upgrades/merge/issuance/">ether issuance before and after The Merge</a>. </InfoBanner> ## What to I need to do to get ready? {#preparing-for-the-merge} @@ -188,7 +188,7 @@ The APR is intentionally dynamic, allowing a market of stakers to find a balance <ExpandableCard title="Misconception: &quot;Staking APR is expected to triple after The Merge.&quot;" contentPreview="False. More up-to-date estimations predict closer to a 50% increase in APR post-merge, not a 200% increase."> -The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (<a href="/upgrades/merge/eth-issuance/">ETH issuance after The Merge</a> is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. +The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (<a href="/upgrades/merge/issuance/">ETH issuance after The Merge</a> is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. diff --git a/src/content/upgrades/merge/eth-issuance/index.md b/src/content/upgrades/merge/issuance/index.md similarity index 90% rename from src/content/upgrades/merge/eth-issuance/index.md rename to src/content/upgrades/merge/issuance/index.md index 736a2454939..40a4ad76fc4 100644 --- a/src/content/upgrades/merge/eth-issuance/index.md +++ b/src/content/upgrades/merge/issuance/index.md @@ -1,28 +1,31 @@ --- -title: How The Merge impacts ether supply -description: Breakdown on how The Merge will impact ether supply +title: How The Merge impacts ETH supply +description: Breakdown on how The Merge will impact ETH supply lang: en sidebar: true --- -# How The Merge impacts ether supply {#how-the-merge-impacts-ether-supply} +# How The Merge impacts ETH supply {#how-the-merge-impacts-ETH-supply} + +We can break the supply of ETH into two primary forces: issuance, and burn. + +The **issuance** of ETH is the process of creating ETH that did not previously exist on the balance sheet, while the **burning** of ETH refers to when existing ETH is permanently removed from circulation. The rate of each of these fluctuates based on a number of parameters, and the balance between them determines the resulting inflation/deflation rate of ETH. <Card -emoji=":chart_decreasing:"> +emoji=":chart_decreasing:" +title="ETH issuance tldr"> - Mining rewards ~13,000 ETH/day pre-merge - Staking rewards ~1,600 ETH/day pre-merge - **After The Merge, only the ~1,600 ETH per day will remain, dropping total new ETH issuance by ~90%** -- <Emoji text=":fire:" size="1" /> The burn: At an average gas price of at least 16 gwei, at least 1,600 ETH is burned every day, which effectively brings net ETH inflation to zero or less post-merge. +- The burn: At an average gas price of at least 16 gwei, at least 1,600 ETH is burned every day, which effectively brings net ETH inflation to zero or less post-merge. </Card> -We can break the supply of ETH into two primary forces: issuance, and burn. - -The **issuance** of ETH is the process of creating ETH that did not previously exist on the balance sheet, while the **burning** of ETH refers to when existing ETH is permanently removed from circulation. The rate of each of these fluctuates based on a number of parameters, and the balance between them determines the resulting inflation/deflation rate of ether. - The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (i.e. Mainnet) and the consensus layer (i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. +[More on The Merge](/upgrades/merge/) + ## Pre-merge {#pre-merge} ### Execution layer issuance {#el-issuance-pre-merge} @@ -39,7 +42,7 @@ Issuance of new ETH on this chain is rewarded to validators for properly attesti Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) -**Execution layer issuance:** <br/> +**Execution layer issuance:** - Estimating at 2.08 ETH per 13.3 seconds\*: **~4,930,000** ETH issued in a year - Currently inflating at **~4.13%** (4.93M per year / 119.3M total) @@ -52,11 +55,9 @@ Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) - Currently inflating at **~0.49%** (584K per year / 119.3M total) <InfoBanner> -<strong>Total annual issuance rate: ~4.62%</strong> (4.13% + 0.49%) - -**~89.4%** of the issuance is going to miners on the execution layer (4.13 / 4.62 \* 100) - -**~10.6%** is being issued to stakers on the consensus layer (0.49 / 4.62 \* 100) +<strong>Total annual issuance rate: ~4.62%</strong> (4.13% + 0.49%)<br/><br/> +<strong>~89.4%</strong> of the issuance is going to miners on the execution layer (4.13 / 4.62 \* 100)<br/><br/> +<strong>~10.6%</strong> is being issued to stakers on the consensus layer (0.49 / 4.62 \* 100) </InfoBanner> ## Post-merge {#post-merge} From 5d5857c394338a3f6c71416bf4ff4d3d3f342433 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 15 Jun 2022 11:44:30 -0600 Subject: [PATCH 129/244] Update src/intl/en/page-layer-2.json Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/intl/en/page-layer-2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index 99b09227409..26daa720b2f 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -58,7 +58,7 @@ "layer-2-dyor-3": "Go to L2BEAT", "layer-2-use-layer-2-title": "Use layer 2", "layer-2-use-layer-2-1": "Now that you understand why layer 2 exists and how it works, let's get you up and running!", - "layer-2-use-layer-2-note": "<strong>NOTE:</strong> When bridging over and using layer 2, it is important to note that you will control the address for your <a href=\"/glossary/#eoa\">EOA account</a> (an account where only a single private key controls the account) just like on Ethereum Mainnet. However, if you are using a <a href=\"/glossary/#contract-account\">contract account</a>, such as <a href=\"https://gnosis-safe.io/\" target=”_blank”>Gnosis Safe</a> or <a href=\"https://www.argent.xyz/\" target=”_blank”>Argent</a>, you will not have control over this address on a layer 2 until you redeploy your contract account to that address on the layer 2. If you are bridging or sending funds to a contract account, and you do not control this address for the contract account, your funds may be lost.", + "layer-2-contract-accounts": "<strong>NOTE:</strong> When bridging over and using layer 2, it is important to note that you will control the address for your <a href=\"/glossary/#eoa\">EOA account</a> (an account where only a single private key controls the account) just like on Ethereum Mainnet. However, if you are using a <a href=\"/glossary/#contract-account\">contract account</a>, such as <a href=\"https://gnosis-safe.io/\" target=”_blank”>Gnosis Safe</a> or <a href=\"https://www.argent.xyz/\" target=”_blank”>Argent</a>, you will not have control over this address on a layer 2 until you redeploy your contract account to that address on the layer 2. If you are bridging or sending funds to a contract account, and you do not control this address for the contract account, your funds may be lost.", "layer-2-use-layer-2-generalized-title": "Generalized layer 2s", "layer-2-use-layer-2-generalized-1": "Generalized layer 2s behave just like Ethereum — but cheaper. Anything that you can do on Ethereum layer 1, you can also do on layer 2. Many dapps have already begun to migrate to these networks or have skipped Mainnet altogether to deploy straight on a layer 2.", "layer-2-use-layer-2-application-specific-title": "Application specific layer 2s", From 35a6eb51d4854ae2e760d614de08b54a70d65f7d Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 15 Jun 2022 11:44:34 -0600 Subject: [PATCH 130/244] Update src/pages/layer-2.js Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/pages/layer-2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 0f47821657c..00bc951e0c4 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -680,7 +680,7 @@ const Layer2Page = ({ data }) => { <Translation id="layer-2-use-layer-2-1" /> </p> <p> - <Translation id="layer-2-use-layer-2-note" /> + <Translation id="layer-2-contract-accounts" /> </p> <h3> <Translation id="layer-2-use-layer-2-generalized-title" /> From ded9b92f2bb7616ee6bdc36a960f50260719244c Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:07:25 -0700 Subject: [PATCH 131/244] Issuance copy updates Co-Authored-By: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/merge/issuance/index.md | 27 ++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/content/upgrades/merge/issuance/index.md b/src/content/upgrades/merge/issuance/index.md index 40a4ad76fc4..e51e36dd0d7 100644 --- a/src/content/upgrades/merge/issuance/index.md +++ b/src/content/upgrades/merge/issuance/index.md @@ -9,7 +9,7 @@ sidebar: true We can break the supply of ETH into two primary forces: issuance, and burn. -The **issuance** of ETH is the process of creating ETH that did not previously exist on the balance sheet, while the **burning** of ETH refers to when existing ETH is permanently removed from circulation. The rate of each of these fluctuates based on a number of parameters, and the balance between them determines the resulting inflation/deflation rate of ETH. +The **issuance** of ETH is the process of creating ETH that did not previously exist. The **burning** of ETH is when existing ETH gets destroyed, removing it from circulation. The rate of issuance and burning gets calculated on several parameters, and the balance between them determines the resulting inflation/deflation rate of ether. <Card emoji=":chart_decreasing:" @@ -22,7 +22,7 @@ title="ETH issuance tldr"> </Card> -The way ETH is issued will undergo some changes at time of The Merge. Currently, new ETH is issued from two main sources: the execution layer (i.e. Mainnet) and the consensus layer (i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. +How ETH gets issued will change at the time of The Merge. Currently, new ETH is issued from two sources: the execution layer (i.e. Mainnet) and the consensus layer (i.e. Beacon Chain). After The Merge, issuance from the execution layer will go to zero. Let's break this down. [More on The Merge](/upgrades/merge/) @@ -30,13 +30,13 @@ The way ETH is issued will undergo some changes at time of The Merge. Currently, ### Execution layer issuance {#el-issuance-pre-merge} -Under proof-of-work, miners only interact with the execution layer, and are rewarded in the form of block rewards being the first to solve blocks. Since the [Constantinople upgrade](/history/#constantinople) in 2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, which requires high levels of ETH issuance to sustain. +Under proof-of-work, miners only interact with the execution layer and are rewarded with block rewards if they are the first miner to solve the next block. Since the [Constantinople upgrade](/history/#constantinople) in 2019 this reward has been 2 ETH per block. Miners are also rewarded for publishing [ommer](/glossary/#ommer) blocks, which are valid blocks that don't end up in the longest/canonical chain. These rewards max out at 1.75 ETH per ommer, and are _in addition to_ the reward issued from the canonical block. Mining is an economically intensive activity, requiring high levels of ETH issuance to sustain. ### Consensus layer issuance {#cl-issuance-pre-merge} -The [Beacon Chain](/history/#beacon-chain-genesis) has been live since 2020, which is secured by proof-of-stake validators, not miners. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Right now these validators are not processing transactions, and are essentially coming to consensus on the state of the validator pool itself. +The [Beacon Chain](/history/#beacon-chain-genesis) went live in 2020. Instead of miners, it is secured by validators using proof-of-stake. This chain was bootstrapped by Ethereum users depositing ETH one-way into a smart contract on Mainnet, which the Beacon Chain listens to, crediting the user with an equal amount on the new chain. Until The Merge happens, the Beacon Chain's validators are not processing transactions and are essentially coming to consensus on the state of the validator pool itself. -Issuance of new ETH on this chain is rewarded to validators for properly attesting to the state of the chain, and is also rewarded when a validator proposes a block. Rewards (or penalties) are calculated and distributed every epoch (6.4 minutes) based on validator performance for that time period. These rewards are _significantly_ lower than the 2 ETH being issued under proof-of-work today every ~13.5 seconds, as operating a validating node is not an economically intense activity, thus does not require or warrant as high a reward. +Validators on the Beacon Chain are rewarded with ETH for attesting to the state of the chain and proposing blocks. Rewards (or penalties) are calculated and distributed at each epoch (every 6.4 minutes) based on validator performance. The validator rewards are **significantly** less than the miner rewards issued on proof-of-work (2 ETH every ~13.5 seconds), as operating a validating node is not an economically intense activity and thus does not require or warrant as high a reward. ### Pre-merge issuance breakdown {#pre-merge-issuance-breakdown} @@ -46,7 +46,7 @@ Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) - Estimating at 2.08 ETH per 13.3 seconds\*: **~4,930,000** ETH issued in a year - Currently inflating at **~4.13%** (4.93M per year / 119.3M total) -- \*This includes the 2 ETH per canonical block, plus an average of 0.08 ETH over time from ommer blocks. Also uses 13.3 second, the baseline block time target without any influence from a [difficulty bomb](/glossary/#difficulty-bomb). ([See source](https://bitinfocharts.com/ethereum/)) +- \*This includes the 2 ETH per canonical block, plus an average of 0.08 ETH over time from ommer blocks. Also uses 13.3 seconds, the baseline block time target without any influence from a [difficulty bomb](/glossary/#difficulty-bomb). ([See source](https://bitinfocharts.com/ethereum/)) **Consensus layer issuance:** @@ -64,13 +64,13 @@ Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) ### Execution layer issuance {#el-issuance-post-merge} -Will be zero. Proof-of-work will no longer be valid under the rules of consensus, and all execution layer activity will be included in "beacon blocks" which are published and attested to by proof-of-stake validators. +Execution layer issuance after The Merge will be zero. Proof-of-work will no longer be valid under the rules of consensus. All execution layer activity will be included in "beacon blocks", which are published and attested to by proof-of-stake validators. ### Consensus layer issuance {#cl-issuance-post-merge} -Will continue as it was, with small rewards for attesting-to and proposing blocks. These rewards will continue to accrue to _validator balances_ that are managed within the consensus layer. These are separate Ethereum accounts to the accounts we're used to on Mainnet, and until the Shanghai upgrade funds from validator accounts will not be withdrawable/transferrable. This means that although new ETH is still being issued, 100% of it will be locked from the market until this upgrade occurs. When the Shanghai upgrade is rolled out, this ETH will become available. +Consensus layer issuance will continue as before The Merge, with small rewards for validators who attest to and propose blocks. Validator rewards will continue to accrue to _validator balances_ that are managed within the consensus layer. These are separate Ethereum accounts to the accounts we're used to on Mainnet, and until the Shanghai upgrade funds from validator accounts will not be withdrawable/transferrable. This means that although new ETH is still being issued, 100% of it will be locked from the market until this upgrade occurs. When the Shanghai upgrade is rolled out, this ETH will become available. -When validator withdrawals are enabled, stakers will be incentivized to remove their _earnings/rewards (balance over 32)_ as these funds are otherwise not contributing to their stake weight (which maxes as 32). +When validator withdrawals are enabled, stakers will be incentivized to remove their _earnings/rewards (balance over 32 ETH)_ as these funds are otherwise not contributing to their stake weight (which maxes as 32). Stakers may also choose to exit and withdraw their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. @@ -88,14 +88,15 @@ Net reduction in annual ETH issuance: <strong>~89.4%</strong> (0.49% / 4.62% * 1 ## <Emoji text=":fire:" size="1" /> The burn {#the-burn} -This flip side of ETH issuance is the rate at which ETH is burned. To execute a transaction on Ethereum, a minimum fee (known as a `base fee`) must be paid, which fluctuates depending on network activity in the moment. This fee is paid in ETH, is _required_ for the transaction to be considered valid, and is _burned_ in the process, removing it from circulation. +The opposite force to ETH issuance is the rate at which ETH is burned. For a transaction to execute on Ethereum, a minimum fee (known as a `base fee`) must be paid, which fluctuates continuously depending on network activity. The fee is paid in ETH and is _required_ for the transaction to be considered valid. This fee gets _burned_ during the transaction process, removing it from circulation. <InfoBanner> -Fee burning went live with the <a href="/history/#london">London upgrade</a> in August 2021, and will not change after the Merge. +Fee burning went live with <a href="/history/#london">the London upgrade</a> in August 2021, and will continue after the Merge. </InfoBanner> -On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validator's balance, which is not directly rewarded to any other account, effectively burning it from circulation. +On top of the fee burn implemented by the London upgrade, validators can also incur penalties for being offline, or worse, they can be slashed for breaking specific rules that threaten network security. These penalties result in a reduction of ETH from that validator's balance, which is not directly rewarded to any other account, effectively burning it from circulation. ## Further reading {#further-reading} -- [Ultrasound.money](https://ultrasound.money/) - Dashboards available to visualize ETH issuance and burn in real time +- [Ultrasound.money](https://ultrasound.money/) - _Dashboards available to visualize ETH issuance and burn in real-time_ +- [Charting Ethereum Issuance](https://www.attestant.io/posts/charting-ethereum-issuance/) - _Jim McDonald 2020_ From 756a8a8e14203d58ccd909bfeb51ad8b4f34d5e7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:35:36 -0700 Subject: [PATCH 132/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 88ecbca661b..bf12c75aa14 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -5,7 +5,7 @@ lang: en template: upgrade sidebar: true image: ../../../assets/upgrades/merge.png -summaryPoint1: Soon the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. +summaryPoint1: Soon, the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. summaryPoint3: This sets the stage for future scaling upgrades including data sharding. summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. Welcome to a new greener Ethereum. @@ -19,19 +19,19 @@ This process is in its final stages, with plans to undergo The Merge on a few pu ## What is The Merge? {#what-is-the-merge} -The Merge represents the merger of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. This eliminates the need for energy-intensive mining, and instead secures the network using staked ether. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. +The Merge represents the joining of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminates the need for energy-intensive mining and instead secures the network using staked ETH. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. -It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) (the new "consensus layer") shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet (the "execution layer") - with all it's accounts, balances, smart contracts, and blockchain state - continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. +It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet - with all it's accounts, balances, smart contracts, and blockchain state - continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. Let's consider an analogy. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -Since [genesis](/history/#frontier), Mainnet has been secured by proof-of-work. This is the Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. +Since [genesis](/history/#frontier), proof-of-work has secured Mainnet. This is the Ethereum blockchain we're all used to—it contains every transaction, smart contract, and balance since it began in July 2015. Throughout Ethereum's history, developers have been hard at work preparing for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created, which has since existed as a separate blockchain to Mainnet, running in parallel. -The Beacon Chain has not been processing Mainnet transactions, and for all intents and purposed has simply been coming to consensus on the state of itself... which is great and all, but after extensive testing, the time for it to come to consensus on more than just itself is rapidly approaching. +The Beacon Chain has not been processing Mainnet transactions. Instead, it has been reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, the Beacon Chain's time to reach consensus on more is rapidly approaching. After The Merge, the Beacon Chain will be the consensus engine for all network data, including execution layer transactions and account balances. The Merge represents the official switch to using the Beacon Chain as the engine of block production. Mining will no longer be the means of producing valid blocks. Instead, the proof-of-stake validators assume this role and will be responsible for processing the validity of all transactions and proposing blocks. @@ -47,13 +47,13 @@ The Merge is one of the most significant and anticipated upgrades in the history ### Users and holders {#users-holders} -**You do not need to anything to protect your funds entering The Merge.** +**You do not need to do anything to protect your funds entering The Merge.** _This bears repeating_: As a user or holder of ETH or any other digital asset on Ethereum, as well as non-node-operating stakers, **you do not need to do anything with your funds or wallet before The Merge.** -Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds being protected by your own wallet before The Merge will still be accessible in the same manner after The Merge. No action is required to "upgrade" on your part. +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remains intact and unaltered after the transition to proof-of-stake. Any funds held in your wallet before The Merge will still be accessible after The Merge. **No action is required to upgrade on your part.** -As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. +As we approach The Merge of Ethereum Mainnet, **you should be on high alert for scams trying to take advantage of users during this transition.** Do not send your ETH anywhere in an attempt to "upgrade to ETH2." There is no "ETH2" token, and there is nothing more you need to do for your funds to remain safe. [More on Ethereum security](/security/#eth2-token-scam) @@ -61,7 +61,7 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for <ExpandableCard title="Staking node operators and providers" -contentPreview="If you are a staker running your own node setup, or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge." +contentPreview="If you are a staker running your own node setup or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge." id="staking-node-operators"> Key action items include: @@ -74,7 +74,7 @@ Not completing the above items will result in your node being seen as "offline" Not setting a `fee recipient` will still allow your validator to behave as usual, but you will miss out on unburnt fee tips and any MEV you would have otherwise earned in blocks your validator proposes. -For more detailed information and summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. +For more detailed information and a summary of links to client resources, stakers are encouraged to check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) over on the Staking Launchpad to make sure you're fully prepared for The Merge. Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/): There is nothing you need to do to prepare for The Merge. [More below on staying safe.](#users-holders) </ExpandableCard> @@ -94,7 +94,7 @@ Key action items include: Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. -Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as much of the details apply to all node operators. +Node operators can also check out the [Merge Readiness Checklist](https://launchpad.ethereum.org/en/merge-readiness/) on the Staking Launchpad for more information, as many of the details apply to all node operators. </ExpandableCard> <ExpandableCard From cfcdf9f37b7a2ed3a8b37ba37c19232bd50e91a2 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 15 Jun 2022 12:57:07 -0600 Subject: [PATCH 133/244] Update src/content/developers/docs/nodes-and-clients/index.md --- src/content/developers/docs/nodes-and-clients/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/nodes-and-clients/index.md b/src/content/developers/docs/nodes-and-clients/index.md index 7c47736da89..b0119f306f8 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -22,7 +22,7 @@ A "node" is a computer running Ethereum client software. A client is an implemen You can see a real-time view of the Ethereum network by looking at this [map of nodes](https://etherscan.io/nodetracker). -Many [Ethereum execution clients](/developers/docs/nodes-and-clients/#execution-clients) and [consensus clients](/developers/docs/nodes-and-clients/#execution-clients) exist, in a variety of programming languages such as Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim and Java. What these implementations have in common is they all follow a formal specification. These specifications dictate how the Ethereum network and blockchain functions. +Many [Ethereum execution clients](/developers/docs/nodes-and-clients/#execution-clients) and [consensus clients](/developers/docs/nodes-and-clients/#consensus-clients) exist, in a variety of programming languages such as Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim and Java. What these implementations have in common is they all follow a formal specification. These specifications dictate how the Ethereum network and blockchain functions. ![Coupled execution and consensus clients](./eth1eth2client.png) Simplified diagram of a coupled execution and consensus client. From 8ed9184b0df467f1c4d2aa5267190932821b3dd3 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 15 Jun 2022 13:04:20 -0600 Subject: [PATCH 134/244] Update src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md --- .../pt-br/developers/docs/programming-languages/golang/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md index 718b02cfaf3..2604b0ab4a4 100644 --- a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md @@ -34,7 +34,7 @@ Precisa de uma introdução geral? Confira [ethereum.org/learn](/learn/) ou [eth ## Artigos e documentos de nível Intermediário {#intermediate-articles-and-docs} - [Documentação Ethereum em Go](https://geth.ethereum.org/docs/) - _A documentação da implementação oficial da Ethereum em Go_ -- [Guia do Programador Erigon](https://github. com/ledgerwatch/erigon/blob/devel/docs/programmers*guide/guide. md) - \_Guia ilustrado, incluindo a árvore de estado, múltiplas provas e processamento de transações* +- [Guia do Programador Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - \_Guia ilustrado, incluindo a árvore de estado, múltiplas provas e processamento de transações* - [Ethereum](https://youtu.be/3-Mn7OckSus?t=394) - _Conferência Comunitária da Ethereum da Erigon e sem estado, (EthCC 3)_ - [Erigon: otimização de clientes Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ - [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) From 8b9e72f89136ee3bd953a70010fda14e28d066f0 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 15 Jun 2022 13:04:25 -0600 Subject: [PATCH 135/244] Update src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md --- .../pt-br/developers/docs/programming-languages/golang/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md index 2604b0ab4a4..ed0d44d629e 100644 --- a/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md +++ b/src/content/translations/pt-br/developers/docs/programming-languages/golang/index.md @@ -55,7 +55,7 @@ Precisa de uma introdução geral? Confira [ethereum.org/learn](/learn/) ou [eth - [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Implementação Oficial do protocolo da Ethereum_ - [Go Ethereum Code Analysis](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Revisão e analise do código-fonte do Go Ethereum_ -- [Erigon](https://github. com/ledgerwatch/turbo-geth) - _Mais rápido derivado da Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Mais rápido derivado da Go Ethereum_ - [Golem](https://github.com/golemfactory/golem) - _Golem está criando um mercado global para computação distribuída_ - [Quorum](https://github.com/jpmorganchase/quorum) - _Uma implementação permissionada da Ethereum com suporte a privacidade de dados_ - [Prysm](https://github.com/prysmaticlabs/prysm) - _Implementação em Go da Ethereum 'Serenity' 2.0_ From c5ed98680af2a3db8b10787e73fd7c08db857dcf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 15 Jun 2022 18:24:05 -0700 Subject: [PATCH 136/244] expand PreMergeBanner component functionality Extends functionality to homepage and developers/docs landing pages, with contextual messages --- src/components/PreMergeBanner.tsx | 27 +++++++++++++++++++++------ src/pages/developers/index.js | 6 +++++- src/pages/index.tsx | 2 ++ src/templates/docs.tsx | 12 +++++++++--- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx index d9c5c45adda..82bb42cf666 100644 --- a/src/components/PreMergeBanner.tsx +++ b/src/components/PreMergeBanner.tsx @@ -2,25 +2,40 @@ import React from "react" import styled from "styled-components" import BannerNotification from "./BannerNotification" import Link from "./Link" +import Translations from "../Translations" const StyledBannerNotification = styled(BannerNotification)` - display: block; + display: flex; z-index: 1; + justify-content: center; + p { + max-width: 100ch; + margin: 0; + padding: 0; + } a { text-decoration: underline; } + text-align: center; ` export interface IProps { + announcementOnly?: boolean className?: string } -const PreMergeBanner: React.FC<IProps> = ({ className }) => ( +const PreMergeBanner: React.FC<IProps> = ({ + announcementOnly = false, + className, + children, +}) => ( <StyledBannerNotification shouldShow className={className}> - The Merge is approaching, and with it comes many changes to Ethereum. Some - content on this page may be out-of-date related to these changes, and - updates are coming soon.{" "} - <Link to="/upgrades/merge/">Learn more about The Merge.</Link> + <p> + The Merge is approaching, and comes with changes to Ethereum.{" "} + {!announcementOnly && + "Some content on this page may be out-of-date related to these changes, and updates are coming soon. "} + {children} <Link to="/upgrades/merge/">Learn more about The Merge</Link> + </p> </StyledBannerNotification> ) diff --git a/src/pages/developers/index.js b/src/pages/developers/index.js index 9722fd07fa6..27d8caf72a6 100644 --- a/src/pages/developers/index.js +++ b/src/pages/developers/index.js @@ -9,7 +9,7 @@ import Card from "../../components/Card" import Callout from "../../components/Callout" import Link from "../../components/Link" import Translation from "../../components/Translation" - +import PreMergeBanner from "../../components/PreMergeBanner" import ButtonLink from "../../components/ButtonLink" import PageMetadata from "../../components/PageMetadata" import { @@ -237,6 +237,10 @@ const DevelopersPage = ({ data }) => { title={translateMessageId("page-developer-meta-title", intl)} description={translateMessageId("page-developers-meta-desc", intl)} /> + <PreMergeBanner announcementOnly> + Some docs may be out-of-date related to these changes and have been + marked with a banner similar to this. Updates coming soon. + </PreMergeBanner> <Content> <HeroContainer> <HeroCopyContainer> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 8c7a0c37b80..5ed81474d96 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -24,6 +24,7 @@ import { LeftColumn, } from "../components/SharedStyledComponents" import { translateMessageId, isLangRightToLeft } from "../utils/translations" +import PreMergeBanner from "../components/PreMergeBanner" const Hero = styled(GatsbyImage)` width: 100%; @@ -704,6 +705,7 @@ contract SimpleDomainRegistry { title={translateMessageId("page-index-meta-title", intl)} description={translateMessageId("page-index-meta-description", intl)} /> + <PreMergeBanner announcementOnly /> <Hero image={getImage(data.hero)!} alt={translateMessageId("page-index-hero-image-alt", intl)} diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index a78eb12a5b8..c8d19039ba3 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -180,11 +180,12 @@ const DocsPage = ({ const tocItems = mdx.tableOfContents?.items const isPageIncomplete = !!mdx.frontmatter.incomplete - const showMergeBanner = !!mdx.frontmatter.preMergeBanner const { editContentUrl } = siteData.siteMetadata || {} const { relativePath, slug } = pageContext const absoluteEditPath = `${editContentUrl}${relativePath}` + const isDevelopersHome = relativePath.endsWith("/developers/docs/index.md") + const showMergeBanner = !!mdx.frontmatter.preMergeBanner || isDevelopersHome return ( <Page dir={isRightToLeft ? "rtl" : "ltr"}> @@ -194,11 +195,16 @@ const DocsPage = ({ /> {isPageIncomplete && ( <BannerNotification shouldShow={isPageIncomplete}> - {/* TODO move to common.json */} <Translation id="banner-page-incomplete" /> </BannerNotification> )} - {showMergeBanner && <PreMergeBanner />} + {showMergeBanner && ( + <PreMergeBanner announcementOnly> + {isDevelopersHome && + "Some docs may be out-of-date related to these changes and have been \ + marked with a banner similar to this. Updates coming soon."} + </PreMergeBanner> + )} <ContentContainer isZenMode={isZenMode}> <Content> <H1 id="top">{mdx.frontmatter.title}</H1> From 94ac04cf609ffc0ca3ccdcf2aec84bfa4ccc77ea Mon Sep 17 00:00:00 2001 From: XOF <57596934+TimGrey998@users.noreply.github.com> Date: Thu, 16 Jun 2022 10:24:17 +0800 Subject: [PATCH 137/244] fix: correct translation mistake Don't need to translate 'Go' to Chinese --- .../translations/zh/developers/docs/nodes-and-clients/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/translations/zh/developers/docs/nodes-and-clients/index.md b/src/content/translations/zh/developers/docs/nodes-and-clients/index.md index c7a76160728..6d8dd5dd222 100644 --- a/src/content/translations/zh/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/zh/developers/docs/nodes-and-clients/index.md @@ -115,7 +115,7 @@ sidebarDepth: 2 | [OpenEthereum](https://github.com/openethereum/openethereum) | Rust | Linux,Windows,macOS | Mainnet、Kovan、Ropsten 及更多 | Warp,完整 | Archive, Pruned | | [Nethermind](http://nethermind.io/) | C#, .NET | Linux,Windows,macOS | Mainnet、Gounderster、Ropsten、Rinkeby 及更多 | 快速,完整 | Archive, Pruned | | [Besu](https://pegasys.tech/solutions/hyperledger-besu/) | Java | Linux,Windows,macOS | Mainnet、Rinkeby、Ropsten 和 Görli | 快速,完整 | Archive, Pruned | -| [Erigon](https://github.com/ledgerwatch/erigon) | 出发 | Linux、Windows、macOS | Mainnet、Görli、Rinkeby、Ropsten | 快速、完整 | Archive、Pruned | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux、Windows、macOS | Mainnet、Görli、Rinkeby、Ropsten | 快速、完整 | Archive、Pruned | 更多关于支持网络的信息,请在[以太坊网络中查阅](/developers/docs/networks/)。 From 7ac9a0df12a99a2a8319cc4298ec185dc88f9bdd Mon Sep 17 00:00:00 2001 From: Colin Kennedy <NiloCK@users.noreply.github.com> Date: Thu, 16 Jun 2022 10:54:18 -0300 Subject: [PATCH 138/244] fix: grammar / clarity --- src/content/developers/docs/standards/tokens/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/standards/tokens/index.md b/src/content/developers/docs/standards/tokens/index.md index 20c4f6feb04..3bcd46009bd 100644 --- a/src/content/developers/docs/standards/tokens/index.md +++ b/src/content/developers/docs/standards/tokens/index.md @@ -8,7 +8,7 @@ incomplete: true ## Introduction {#introduction} -One of the many Ethereum development standards focus on token interfaces. These standards help ensure smart contracts remain composable, so for instance when a new project issues a token, that it remains compatible with existing decentralized exchanges. +Many Ethereum development standards focus on token interfaces. These standards help ensure smart contracts remain composable, so for instance when a new project issues a token, that it remains compatible with existing decentralized exchanges. ## Prerequisites {#prerequisites} From 5c9ce66e334cc2d724fa87bb38915d839a9efbef Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 11:22:24 -0700 Subject: [PATCH 139/244] fix logic --- src/templates/docs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index c8d19039ba3..5bee46c0348 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -199,7 +199,7 @@ const DocsPage = ({ </BannerNotification> )} {showMergeBanner && ( - <PreMergeBanner announcementOnly> + <PreMergeBanner announcementOnly={isDevelopersHome}> {isDevelopersHome && "Some docs may be out-of-date related to these changes and have been \ marked with a banner similar to this. Updates coming soon."} From 2d5ba5a9689fbf9345bfe7fe0a5cdee5bba368d8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 11:22:40 -0700 Subject: [PATCH 140/244] Add preMergeBanner to missed docs --- src/content/developers/docs/blocks/index.md | 1 + src/content/developers/docs/dapps/index.md | 1 + .../developers/docs/data-and-analytics/block-explorers/index.md | 1 + src/content/developers/docs/gas/index.md | 1 + src/content/developers/docs/intro-to-ethereum/index.md | 1 + src/content/developers/docs/transactions/index.md | 1 + 6 files changed, 6 insertions(+) diff --git a/src/content/developers/docs/blocks/index.md b/src/content/developers/docs/blocks/index.md index 707b1f30cff..473138a3eed 100644 --- a/src/content/developers/docs/blocks/index.md +++ b/src/content/developers/docs/blocks/index.md @@ -3,6 +3,7 @@ title: Blocks description: An overview of blocks in the Ethereum blockchain – their data structure, why they're needed, and how they're made. lang: en sidebar: true +preMergeBanner: true --- Blocks are batches of transactions with a hash of the previous block in the chain. This links blocks together (in a chain) because hashes are cryptographically derived from the block data. This prevents fraud, because one change in any block in history would invalidate all the following blocks as all subsequent hashes would change and everyone running the blockchain would notice. diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index 065d6eac7bc..dbe336e3137 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -3,6 +3,7 @@ title: Introduction to dapps description: lang: en sidebar: true +preMergeBanner: true --- A decentralized application (dapp) is an application built on a decentralized network that combines a [smart contract](/developers/docs/smart-contracts/) and a frontend user interface. On Ethereum, smart contracts are accessible and transparent – like open APIs – so your dapp can even include a smart contract that someone else has written. diff --git a/src/content/developers/docs/data-and-analytics/block-explorers/index.md b/src/content/developers/docs/data-and-analytics/block-explorers/index.md index 2506f4dd60c..20149a2568b 100644 --- a/src/content/developers/docs/data-and-analytics/block-explorers/index.md +++ b/src/content/developers/docs/data-and-analytics/block-explorers/index.md @@ -4,6 +4,7 @@ description: An introduction to block explorers, your portal into the world of b lang: en sidebar: true sidebarDepth: 3 +preMergeBanner: true --- Block explorers are your portal to Ethereum's data. You can use them to see real-time data on blocks, transactions, miners, accounts, and other on-chain activity. diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 56777037293..280ea4a65af 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -3,6 +3,7 @@ title: Gas and fees description: lang: en sidebar: true +preMergeBanner: true --- Gas is essential to the Ethereum network. It is the fuel that allows it to operate, in the same way that a car needs gasoline to run. diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index 6996d4fdcc4..c53ca51325f 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -3,6 +3,7 @@ title: Intro to Ethereum description: A dapp developer's introduction to the core concepts of Ethereum. lang: en sidebar: true +preMergeBanner: true --- ## What is a blockchain? {#what-is-a-blockchain} diff --git a/src/content/developers/docs/transactions/index.md b/src/content/developers/docs/transactions/index.md index f7350c3c516..25e4eea67d3 100644 --- a/src/content/developers/docs/transactions/index.md +++ b/src/content/developers/docs/transactions/index.md @@ -3,6 +3,7 @@ title: Transactions description: An overview of Ethereum transactions – how they work, their data structure, and how to send them via an application. lang: en sidebar: true +preMergeBanner: true --- Transactions are cryptographically signed instructions from accounts. An account will initiate a transaction to update the state of the Ethereum network. The simplest transaction is transferring ETH from one account to another. From 89b95021589fca8abaf45a386409a277a2e748fa Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 14:38:03 -0700 Subject: [PATCH 141/244] Update src/content/upgrades/merge/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index bf12c75aa14..d1e28240301 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -122,7 +122,7 @@ This will also set the stage for further scalability upgrades not possible under <ExpandableCard title="Misconception: &quot;Running a node requires staking 32 ETH.&quot;" -contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum, aka run a node. No ETH required—not before The Merge, not after The Merge, not ever."> +contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum (i.e. run a node). No ETH is required. Not before The Merge, not after The Merge, not ever."> There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. From a34469fb3e2fc011d1ed1dd9633f8a326ec5cb1f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 14:38:10 -0700 Subject: [PATCH 142/244] Update src/content/upgrades/merge/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index d1e28240301..f739cfba6e2 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -125,7 +125,7 @@ title="Misconception: &quot;Running a node requires staking 32 ETH.&quot;" contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum (i.e. run a node). No ETH is required. Not before The Merge, not after The Merge, not ever."> There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. -Nodes that can propose blocks are only a _subset_ of the total nodes on the network. This category includes mining nodes under proof-of-work (PoW), and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in PoW, or staked ETH in PoS), in exchange for the ability to occasionally propose the next block and earn protocol rewards. +Nodes that propose blocks are only a small number of the total nodes on Ethereum. This category includes mining nodes under proof-of-work (PoW) and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in proof-of-work or staked ETH in proof-of-stake) in exchange for the ability to occasionally propose the next block and earn protocol rewards. The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid, and stop its propagation. From 053fc59d7736db5a91d7db564aa0100f67bb4586 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 14:41:54 -0700 Subject: [PATCH 143/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../consensus-mechanisms/pow/mining/index.md | 2 +- src/content/energy-consumption/index.md | 26 ++++++------ src/content/upgrades/merge/index.md | 40 +++++++++---------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md index 13a08e81228..d902a072291 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -6,7 +6,7 @@ sidebar: true --- <InfoBanner emoji=":wave:"> - Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake ETH. You can start staking your ETH today. Read more on <a href="/upgrades/merge/">The Merge</a>, <a href="/developers/docs/consensus-mechanisms/pos/">proof-of-stake</a> and <a href = "/staking/">staking</a>.) + Proof-of-stake will soon replace proof-of-work as Ethereum's consensus mechanism, meaning mining will be switched off. Instead, Ethereum will be secured by validators who stake ETH. You can start staking your ETH today. Read more on <a href="/upgrades/merge/">The Merge</a>, <a href="/developers/docs/consensus-mechanisms/pos/">proof-of-stake</a> and <a href="/staking/">staking</a>.) </InfoBanner> ## Prerequisites {#prerequisites} diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index 246794be88a..9d3f2d7a6c9 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,36 +7,36 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum's energy consumption will be reduced by [~99.95%](https://blog.ethereum.org/2021/05/18/country-power-no-more/) following [The Merge](/upgrades/merge/index.md) from [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/#proof-of-work) to [proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos). After The Merge, Ethereum will use dramatically less carbon to be more secure. +Ethereum's energy consumption will be reduced by ~99.95% following [The Merge](/upgrades/merge/index.md) from proof-of-work (PoW) to proof-of-stake (PoS). After The Merge, Ethereum will use dramatically less carbon to be more secure. -Since its inception, Ethereum has aimed to implement a proof-of-stake consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using proof-of-work consensus. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle. The solution to the puzzle proves that some energy has been expended by the miner, demonstrating that they have invested real-world value for the right to add to the blockchain. Proof-of-work is just a mechanism to decide who gets to add the next block, as is proof-of-stake. Swapping proof-of-work for proof-of-stake, where the real world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. +Since its inception, Ethereum has aimed to implement a proof-of-stake consensus mechanism, but doing this without sacrificing security and decentralization has taken years of focused research and development. Therefore, the network started by using proof-of-work consensus. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle. The solution to the puzzle proves that energy has been expended by the miner, demonstrating that they invested real-world value for the right to add to the blockchain. Both proof-of-work and proof-of-stake are just mechanisms to decide who gets to add the next block. Swapping proof-of-work for proof-of-stake, where the real-world value invested comes from ETH staked directly in a smart contract, removes the need for miners to burn energy to add to the blockchain. Therefore, the environmental cost of securing the network is drastically reduced. ## The Merge {#the-merge} -A blockchain known as the "Beacon Chain" has been running the consensus algorithm since November 2020 alongside the PoW Ethereum Mainnet. In 2022, several proof-of-work devnets were launched and transitioned to proof-of-stake by merging with their own Beacon Chains. These helped client teams test software before moving to longer-lived networks. After these devnets, Ethereum developers launched new testnets for the community to use (Kiln & Kintsugi) and ran multiple shadow forks of existing testnets and mainnet. Now that these have stabilized, teams are moving to the final stages of testing: transitioning long-lived testnets (Ropsten, Goerli, Sepolia) to proof-of-stake. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's PoW mining will be switched off, PoS consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. +[The Beacon Chain](/upgrades/beacon-chain/) has been running the proof-of-stake since November 2020 alongside the proof-of-work Ethereum Mainnet. In 2022, Ethereum developers transitioned several **testing networks (testnets)** running proof-of-stake to proof-of-stake by merging with their own Beacon Chains. These helped client teams test the software before moving to longer-lived networks. After these testnets, Ethereum developers launched new testnets for the community to use (Kiln & Kintsugi) and ran multiple shadow forks of existing testnets and Mainnet. Now that these have stabilized, teams are moving to the final stages of testing: transitioning long-lived testnets (Ropsten, Goerli, Sepolia) to proof-of-stake. Merging Ethereum Mainnet with the Beacon Chain is expected to happen in the second half of 2022. At the moment of the merge, Ethereum's proof-of-work mining will be switched off, proof-of-stake consensus will take over, and the energy consumed by the network will drop to <0.05% of its pre-merge amount. ## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} -PoW is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. -The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing PoW. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the PoW race by investing in sufficient hardware and energy to outperform the majority of other miners. +Proof-of-work is a robust way to secure the network. Transactions on the Ethereum blockchain are validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundle together transactions into ordered blocks and add them to the Ethereum blockchain. The new blocks get broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty shows up as an inconsistency between different nodes. Honest blocks are added to the blockchain and become an immutable part of history. +The ability for any miner to add new blocks only works if there is a cost associated with mining and unpredictability about which specific node submits the next block. These conditions are met by imposing proof-of-work. To be eligible to submit a block of transactions, a miner must be the first to submit the solution to a computationally expensive puzzle. To successfully take control of the blockchain, a dishonest miner would have to consistently win the proof-of-work race by investing in sufficient hardware and energy to outperform the majority of other miners. -This mechanism of securing the network is problematic for several reasons. Miners can increase their odds of success by investing in more and more powerful hardware, creating conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Ethereum's PoW protocol currently has a total annualized power consumption approximately equal to that of Finland <sup>[^1]</sup> and carbon footprint similar to Switzerland<sup>[^1]</sup>. +This mechanism of securing the network is problematic for several reasons. First, miners can increase their odds of success by investing in more powerful hardware, creating conditions for an arms race with miners acquiring increasingly power-hungry mining equipment. This increases the network's energy consumption and generates hardware waste. Second, Ethereum's proof-of-work protocol currently has a total annualized power consumption approximately equal to that of Finland <sup>[^1]</sup> and a carbon footprint similar to Switzerland<sup>[^1]</sup>. -PoS uses validators instead of miners. Validators perform the same function as miners except that instead of expending their assets up-front in the form of energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ether can be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the PoW network comes from the mining algorithm, switching to PoS reduces the energy expenditure dramatically. There is also no benefit to be had by investing in more powerful hardware under PoS, so there is no arms-race condition and less electronic waste. Ethereum validators can run on normal laptops or even low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). +Proof-of-stake uses validators instead of miners. Validators perform the same function as miners, except that instead of expending their assets up-front as energy expenditure, they stake ETH as collateral against dishonest behavior. This staked ETH can be destroyed if the validator misbehaves, with more severe penalties for more nefarious actions. This strongly incentivizes active and honest participation in securing the network without requiring large energy expenditure. Since almost all of the energy expended securing the proof-of-work network comes from the mining algorithm, switching to proof-of-stake dramatically reduces energy expenditure. There is also no benefit to be had by investing in more powerful hardware under proof-of-stake, so there is no arms-race condition and less electronic waste. Ethereum validators can run on typical laptops or low-power devices such as [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). -Read more detailed information about [how PoS is implemented in Ethereum](/developers/docs/consensus-mechanisms/pos) and how it compares to PoW. +Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. ## Proof-of-stake energy expenditure {#proof-of-stake-energy} -Estimates based on the current Beacon Chain suggest that the merge to PoS could result in a 99.95% reduction in total energy use, with PoS being ~2000x more energy-efficient than PoW. The energy expenditure of Ethereum will be roughly equal to the cost of running a modest laptop for each node on the network. +Estimates based on the current Beacon Chain suggest that The Merge to proof-of-stake could result in a 99.95% reduction in total energy use, with proof-of-stake being ~2000x more energy-efficient than proof-of-work. The energy expenditure of Ethereum will be roughly equal to the cost of running a modest laptop for each node on the network. -Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand, but the energy required to mine a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure, and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. +Many articles estimate "per-transaction" energy expenditure to compare blockchains to other industries. The benefit of this is that it is easy to understand, but the energy required to mine a block is independent of the number of transactions within it. A per transaction unit of energy expenditure implies that fewer transactions would lead to smaller energy expenditure and vice-versa, which is not the case. A per-transaction estimate is highly dependent upon how a blockchain's transaction throughput is defined, and tweaking this definition can be gamed to make the value seem larger or smaller. -For example, for Ethereum the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its “[layer 2](/layer-2/)” rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. +For example, on Ethereum, the transaction throughput is not only that of the base layer - it is also the sum of the transaction throughput of all of its "[layer 2](/layer-2/)" rollups, which are not generally included in calculations and would drastically reduce them. This is why tools that compare energy consumption per transaction across platforms are misleading. -More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values one can examine what that network offers to its users and to society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibit an honest cost-benefit analysis. +More relevant is the overall energy consumption and carbon footprint of the network as a whole. From those values, we can examine what that network offers to its users and society at large and make a more holistic evaluation of whether that energy expenditure is justified or not. Per transaction measurements, on the other hand, imply the value of the network only comes from its role in transferring crypto between accounts and prohibits an honest cost-benefit analysis. -Whole-network energy consumption and carbon footprints for Bitcoin and Ethereum are estimated at [Digiconomist](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article Ethereum’s total energy consumption is ~112 TWh/yr, equivalent to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr energy and emits about 100 MT/yr C, while also generating about 32,000 T of electrical waste from obsolete hardware per year. Switching off Ethereum’s PoW in favor of PoS will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is expected to be closer to **0.01 TWh/yr**. +[Digiconomist provides whole-network energy consumption and carbon footprints for Bitcoin and Ethereum](https://digiconomist.net/ethereum-energy-consumption). At the time of writing this article, Ethereum's total energy consumption is ~112 TWh/yr, comparable to that of the Netherlands, with a Carbon emission equivalent to that of Singapore (53 MT/yr). For comparison, Bitcoin currently expends about 200 TWh/yr of energy and emits about 100 MT/yr C, while generating about 32,000 T of electrical waste from obsolete hardware annually. Switching off Ethereum's proof-of-work in favor of proof-of-stake will reduce this energy expenditure by more than 99.95%, implying that the total energy expenditure for securing Ethereum is closer to **0.01 TWh/yr**. To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. If we take Ethereum to be a platform for securely holding digital assets as investments, perhaps we can compare to mining gold, which has been estimated to expend about [240 TWh/yr](https://www.kitco.com/news/2021-05-17/Gold-s-energy-consumption-doubles-that-of-bitcoin-Galaxy-Digital.html). As a digital payments platform we could perhaps compare to PayPal (about [0.26 TWh/yr](https://app.impaakt.com/analyses/paypal-consumed-264100-mwh-of-energy-in-2020-24-from-non-renewable-sources-27261)). As an entertainment platform we could perhaps compare to the gaming industry which has been estimated to expend about [34 TW/yr](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential), or Netflix which expends about [94 TWh/yr](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix), or Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/). Estimates of Youtube's energy expenditure have been broken down by channel and individual videos. [Those estimates](https://thefactsource.com/how-much-electricity-does-youtube-use/) imply that people consumed 45 times more energy watching Gangnam Style in 2019 than proof-of-stake Ethereum will use in a year. diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index f739cfba6e2..981d53dadd0 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -89,7 +89,7 @@ This means that a full Ethereum node after The Merge requires both an execution Key action items include: -- Installing a consensus layer client in addition to an execution layer client +- Install a consensus layer client in addition to an execution layer client - Authenticating both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. @@ -123,13 +123,13 @@ This will also set the stage for further scalability upgrades not possible under <ExpandableCard title="Misconception: &quot;Running a node requires staking 32 ETH.&quot;" contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum (i.e. run a node). No ETH is required. Not before The Merge, not after The Merge, not ever."> -There are two general types of Ethereum nodes: nodes that can propose blocks, and nodes that don't. +There are two types of Ethereum nodes: nodes that can propose blocks and nodes that don't. Nodes that propose blocks are only a small number of the total nodes on Ethereum. This category includes mining nodes under proof-of-work (PoW) and validator nodes under proof-of-stake (PoS). This category requires committing economic resources (such as GPU hash power in proof-of-work or staked ETH in proof-of-stake) in exchange for the ability to occasionally propose the next block and earn protocol rewards. -The _rest_ of the nodes on the network are not required to commit _any_ economic resources, beyond simply needing a consumer grade computer with 1-2 TB free storage and an internet connection. These nodes do not propose blocks, but still serve a _critical_ role in securing the network, by holding all block proposers accountable. These nodes listen for new blocks, and verify their validity on arrival according to the chosen rules of network consensus. If the block is valid, the node will continue propagating it through the network, but importantly, if the block is _invalid_ for whatever reason, the node software will simply disregard it as invalid, and stop its propagation. +The other nodes on the network (i.e. the majority) are not required to commit any economic resources beyond a consumer-grade computer with 1-2 TB of available storage and an internet connection. These nodes do not propose blocks, but they still serve a critical role in securing the network by holding all block proposers accountable by listening for new blocks and verifying their validity on arrival according to the network consensus rules. If the block is valid, the node continues propagating it through the network. If the block is invalid for whatever reason, the node software will disregard it as invalid and stop its propagation. -Running a "non block-producing" node is not only _possible_ for anyone under either consensus mechanism (PoW _or_ PoS), it is _strongly encouraged_ for all users to run their own node if possible. This is _immensely valuable_ for the network, and also gives added benefits to any individual running their own software, such as improved security, privacy and censorship resistance. +Running a non-block-producing node is possible for anyone under either consensus mechanism (proof-of-work or proof-of-stake); it is _strongly encouraged_ for all users if they have the means. Running a node is immensely valuable for Ethereum and gives added benefits to any individual running one, such as improved security, privacy and censorship resistance. The ability for anyone to run their own node is _absolutely essential_ to maintaining the decentralization of the Ethereum network. @@ -148,21 +148,21 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri <ExpandableCard title="Misconception: &quot;Transactions will be noticeably faster after The Merge.&quot;" contentPreview="False. Though some slight changes exist, transaction speed will mostly remain the same on layer 1."> -The "speed" of a transaction can be measured a few ways, including time to be included in a block, and also time to "finalization." Both of these change slightly, but not in a way that will be felt significantly by users. +A transaction's "speed" can be measured in a few ways, including time to be included in a block and time to finalization. Both of these changes slightly, but not in a way that users will notice. -Historically with proof-of-work (PoW) block times target ~13.3 seconds. On the Beacon Chain, slots occur every 12 seconds exactly, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (ie. a validator is offline). In most cases, blocks will be produced ~10% more frequently under PoS than under PoW, but this is a fairly insignificant change in the scaling game, and unlikely to be noticed by users. +Historically, on proof-of-work, the target was to have a new block every ~13.3 seconds. On the Beacon Chain, slots occur precisely every 12 seconds, each of which is an opportunity for a validator to publish a block. Most slots have blocks, but not necessarily all (i.e. a validator is offline). On proof-of-stake blocks will be produced ~10% more frequently than on proof-of-work. This is a fairly insignificant change and is unlikely to be noticed by users. -PoS does introduce the concept of transaction "finality" which did not previously exist. Under PoW, the ability to reverse a block gets exponentially more difficult with every passing block that is mined on top of your transaction, but it never quite reaches zero. Under PoS, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which are voted on by validators. After an epoch ends, it can be voted on as "justified," and then one more epoch later results in a "finalized" state. To undo these transactions would require obtaining and burning over 1/3 the total ETH staked. +Proof-of-stake introduces the transaction finality concept that did not previously exist. On proof-of-work, the ability to reverse a block gets exponentially more difficult with every passing block mined on top of a transaction, but it never quite reaches zero. Under proof-of-stake, blocks are bundled into epochs (6.4 minute spans of time containing 32 chances for blocks) which validators vote on. When an epoch ends, validators vote on whether to consider the epoch 'justified'. If validators agree to justify the epoch, it gets finalized in the next epoch. Undoing finalized transactions is economically unviable as it would require obtaining and burning over one-third of the total staked ETH. -Many dapps require a number of PoW block confirmations that take a period of time on par with how long PoS finality takes. Finality can offer additional security guarantees, but will not significantly speed up transactions. +Many dapps require a number of proof-of-work block confirmations that take a period of time on par with how long proof-of-stake finality takes. Finality can offer additional security guarantees, but will not significantly speed up transactions. </ExpandableCard> <ExpandableCard title="Misconception: &quot;You can withdraw staked ETH once The Merge occurs.&quot;" -contentPreview="False. Staking withdrawals are not yet enabled with The Merge. These will have to wait until the Shanghai upgrade to follow."> +contentPreview="False. Staking withdrawals are not yet enabled with The Merge. The following Shanghai upgrade will enable staking withdrawals."> Staked ETH, staking rewards to date, and newly issued ETH immediately after The Merge will still be locked on the Beacon Chain without the ability to withdraw. -Withdrawal functionality is planned for the **Shanghai upgrade** to follow The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. +Withdrawals are planned for the Shanghai upgrade, the next major upgrade following The Merge. This means that newly issued ETH, though accumulating on the Beacon Chain, will remain locked and illiquid for at least 6-12 months following The Merge. </ExpandableCard> <ExpandableCard @@ -170,25 +170,25 @@ title="Misconception: &quot;Validators will not receive any liquid ETH rewards t contentPreview="False. Fee tips/MEV will be credited to a Mainnet account controlled by the validator, available immediately."> This may seem counterintuitive to the above note that withdrawals are not enabled til the Shanghai upgrade, but validators WILL have immediate access to the fee rewards/MEV earned during block proposals. -ETH is issued by the protocol as a reward to validators for contributing to consensus. This _newly issued_ ETH is accounted for on the Beacon Chain (consensus layer), where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. +The protocol issues ETH as a reward to validators for contributing to consensus. This Beacon Chain accounts for the newly issued ETH, where a validator has a unique address that holds its staked ETH and protocol rewards. This ETH is locked until Shanghai. -ETH on the _execution layer_ (Mainnet as we know it) is accounted for separately from the consensus layer. When users execute transactions that involve Mainnet, ETH must be paid to cover the gas which includes a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). +ETH on the execution layer (Ethereum Mainnet as we know it today) is accounted for separately from the consensus layer. When users execute transactions on Ethereum Mainnet, ETH must be paid to cover the gas, including a tip to the validator. This ETH is already on the execution layer, is NOT being newly issued by the protocol, and is available to the validator immediately (given a proper `fee recipient` address is provided to the client software). </ExpandableCard> <ExpandableCard title="Misconception: &quot;When withdrawals are enabled, stakers will all exit at once.&quot;" contentPreview="False. Validator exits are rate limited for security reasons."> -After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds do not add to yield, and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance, or potentially to stake even more using their rewards to earn more yield. +After the Shanghai upgrade enabled withdrawals, all validators will be incentivized to withdraw their staking balance above 32 ETH, as these funds do not add to yield and are otherwise locked. Depending on the APR (determined by total ETH staked), they may be incentivized to exit their validator(s) to reclaim their entire balance or potentially stake even more using their rewards to earn more yield. -An important caveat here, full validator exits are rate limited by the protocol, so only 6 validators may exit per epoch (every 6.4 minutes, so 1350/day, or only ~43,200 ETH/day, out of >10 million ETH staked). This rate limit adjusts depending on total ETH staked, and acts as a bottleneck to prevent a mass exodus of funds, and also prevents a potential attacker from using their stake to commit a slashable offense and then exiting their entire staking balance in the same epoch before the slashing penalty can be enforced. +An important caveat here, full validator exits are rate limited by the protocol, so only six validators may exit per epoch (every 6.4 minutes, so 1350 per day, or only ~43,200 ETH per day out of over 10 million ETH staked). This rate limit adjusts depending on the total ETH staked and prevents a mass exodus of funds. Furthermore, it prevents a potential attacker from using their stake to commit a slashable offense and exiting their entire staking balance in the same epoch before the protocol can enforce the slashing penalty. -The APR is intentionally dynamic, allowing a market of stakers to find a balance of how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit, at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, slowly attracting new or returning stakers yet again. +The APR is intentionally dynamic, allowing a market of stakers to balance how much they're willing to be paid to help secure the network. When withdrawals are enabled, if the rate is too low, then validators will exit at a rate limited by the protocol. Gradually this will raise the APR for everyone who remains, attracting new or returning stakers yet again. </ExpandableCard> <ExpandableCard title="Misconception: &quot;Staking APR is expected to triple after The Merge.&quot;" contentPreview="False. More up-to-date estimations predict closer to a 50% increase in APR post-merge, not a 200% increase."> -The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (<a href="/upgrades/merge/issuance/">ETH issuance after The Merge</a> is in fact decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. +The APR for stakers is expected to increase post-merge. To understand by how much, it is important to recognize where this increase in APR is coming from. This does not come from an increase in protocol ETH issuance (<a href="/upgrades/merge/issuance/">ETH issuance after The Merge</a> is decreasing by ~90%), but is instead a reallocation of transaction fees that will start going to validators instead of miners. This will be a new separate source of revenue for validators when they propose blocks. As you can imagine, the amount of fees a validator receives is proportional to network activity at the time of their proposed block. The more fees being paid by users, the more fees validators will receive. @@ -200,7 +200,7 @@ title="Misconception: &quot;The Merge will result in downtime of the chain.&quot contentPreview="False. The Merge upgrade is designed to transition to proof-of-stake with zero downtime."> An immense amount of work has been put into making sure the transition to proof-of-stake does not disrupt the network or its users. -The Merge is akin to changing an engine on a rocketship mid-flight, and is designed to be performed without any need to pause anything during the switch. The Merge will be triggered by what is known as a TTD, or [terminal total difficulty](/glossary/#terminal-total-difficult), which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criteria is met, blocks will go from being produced using proof-of-work in one block, to being produced by proof-of-stake in the next. +The Merge is like changing an engine on a rocketship mid-flight and is designed to be performed without needing to pause anything during the switch. The Merge will be triggered by **[terminal total difficulty (TTD)](/glossary/#terminal-total-difficult)**, which is a cumulative measure of the total mining power that has gone into building the chain. When the time comes, and this criterion is met, blocks will go from being built using proof-of-work in one block to being built by proof-of-stake in the next. Ethereum does not have downtime. </ExpandableCard> @@ -211,9 +211,9 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Me ### The Merge and the Beacon Chain {#merge-and-beacon-chain} -The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the current Mainnet execution layer. Once The Merge happens, validators will be assigned to secure Ethereum Mainnet and mining [proof-of-work](/developers/docs/consensus-mechanisms/pow/) will no longer be a valid means of block production. +The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the current Mainnet execution layer. Once The Merge happens, validators will be assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) will no longer be a valid means of block production. -Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades including data sharding. +Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including data sharding. <ButtonLink to="/upgrades/beacon-chain/"> The Beacon Chain @@ -227,7 +227,7 @@ Stay up-to-date with the [Shanghai upgrade planning issue on GitHub](https://git ### The Merge and data sharding {#merge-and-data-sharding} -Originally, the plan was to work on shard chains before The Merge in order to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. +Originally, the plan was to work on shard chains before The Merge to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority has shifted to swapping proof-of-work to proof-of-stake via The Merge. Plans for sharding are rapidly evolving, but given the rise and success of layer 2 technologies to scale transaction execution, sharding plans have shifted to finding the most optimal way to distribute the burden of storing compressed calldata from rollup contracts, allowing for exponential growth in network capacity. This would not be possible without first transitioning to proof-of-stake. From c9c3f9223eed6da77885ef8048dc24f5b5fb61ae Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 14:42:49 -0700 Subject: [PATCH 144/244] code suggestions Co-Authored-By: Joshua <62268199+minimalsm@users.noreply.github.com> Co-Authored-By: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 22 +++++++++++--------- src/content/upgrades/merge/issuance/index.md | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 981d53dadd0..2ea88c6d50a 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -8,7 +8,7 @@ image: ../../../assets/upgrades/merge.png summaryPoint1: Soon, the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. summaryPoint3: This sets the stage for future scaling upgrades including data sharding. -summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. Welcome to a new greener Ethereum. +summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. --- <UpgradeStatus dateKey="page-upgrades-merge-date"> @@ -41,7 +41,7 @@ No history is lost. As Mainnet gets merged with the Beacon Chain, it will also m This transition to proof-of-stake will come with some changes to the way ether is supplied. Learn more about <a href="/upgrades/merge/issuance/">ether issuance before and after The Merge</a>. </InfoBanner> -## What to I need to do to get ready? {#preparing-for-the-merge} +## What do I need to do to get ready? {#preparing-for-the-merge} The Merge is one of the most significant and anticipated upgrades in the history of Ethereum, and although in the long-term its impact will be felt by everyone, in the near-term some folks will need to take action to be fully prepared. @@ -63,14 +63,14 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for title="Staking node operators and providers" contentPreview="If you are a staker running your own node setup or a node infrastructure provider, there are a few things you need to be aware of to be prepared for The Merge." id="staking-node-operators"> -Key action items include: -- Running _both_ a consensus layer client as well as an execution layer client. Third-party endpoints to obtain execution data will be unavailable after The Merge. -- Authenticating both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +Key action items include: -Not completing the above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. +1. Run _both_ a consensus layer client and an execution layer client; third-party endpoints to obtain execution data will be unavailable after The Merge. +1. Authenticate both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate. +1. Set a `fee recipient` address to receive your earned transaction fee tips/MEV. -- Setting a `fee recipient` address to direct your earned transaction fee tips/MEV to. +Not completing the first two items above items will result in your node being seen as "offline" after The Merge until both layers are synced and authenticated. Not setting a `fee recipient` will still allow your validator to behave as usual, but you will miss out on unburnt fee tips and any MEV you would have otherwise earned in blocks your validator proposes. @@ -83,14 +83,15 @@ Note for stakers using [SaaS](/staking/saas/) or [staking pools](/staking/pools/ title="Non-validating node operators and infrastructure providers" contentPreview="If you're operating a non-validating Ethereum node, the most significant change that comes with The Merge is the requirement to run clients for BOTH the execution layer AND the consensus layer." id="node-operators"> + You probably are already running an execution layer client, such as Geth, Erigon, Besu or Nethermind. Up until The Merge, an execution layer client was enough to receive, properly validate, and propagate blocks being gossiped by the network. _After The Merge_, the validity of transactions contained within an execution payload will also depend on the validity of the "consensus block" it is contained within. -This means that a full Ethereum node after The Merge requires both an execution layer client as well as a consensus layer client. These two clients work tightly together using a new Engine API to properly determine the latest state of the network. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. +As a result, a full Ethereum node after The Merge requires both an execution layer client and a consensus layer client. These two clients work together using a new Engine API. The Engine API requires authentication using a JWT secret, which is provided to both clients allowing secure communication. Key action items include: - Install a consensus layer client in addition to an execution layer client -- Authenticating both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate with one another. +- Authenticate execution and consensus clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items in time for The Merge will result in your node appearing to be "offline" until both layers are synced and authenticated. @@ -101,7 +102,8 @@ Node operators can also check out the [Merge Readiness Checklist](https://launch title="Dapp and smart contract developers" contentPreview="The Merge has been designed to have minimal impact on smart contract and dapp developers, but there are a few small things devs may want to be aware of heading into The Merge." id="developers"> -These changes relate to <br/><br/> + +The Merge comes with changes to consensus, which also includes changes related to: - block structure - slot/block timing diff --git a/src/content/upgrades/merge/issuance/index.md b/src/content/upgrades/merge/issuance/index.md index e51e36dd0d7..f6f2077e81a 100644 --- a/src/content/upgrades/merge/issuance/index.md +++ b/src/content/upgrades/merge/issuance/index.md @@ -72,7 +72,7 @@ Consensus layer issuance will continue as before The Merge, with small rewards f When validator withdrawals are enabled, stakers will be incentivized to remove their _earnings/rewards (balance over 32 ETH)_ as these funds are otherwise not contributing to their stake weight (which maxes as 32). -Stakers may also choose to exit and withdraw their entire validator balance, but it is important to remember that full validator exits are rate limited. Depending on the total ETH staked at the time, only 6 validators may exit in a given epoch (6.4 minute period). This decreases to as low as 4 as more validators leave, to intentionally prevent the ability for large amounts of staked ETH to leave at once. +Stakers may also choose to exit and withdraw their entire validator balance. To ensure Ethereum is stable, the number of validators leaving simultaneously is capped. Only six validators may exit in a given epoch (6.4 minute period) depending on the total ETH staked at the time. This decreases to as low as four as more validators withdraw to intentionally prevent large destabilizing amounts of staked ETH from leaving at once. ### Post-merge inflation breakdown {#post-merge-inflation-breakdown} From 62311509899f55b28ba20145026fe1d1beeb6575 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:08:16 -0700 Subject: [PATCH 145/244] syntax fix --- src/content/upgrades/merge/issuance/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/upgrades/merge/issuance/index.md b/src/content/upgrades/merge/issuance/index.md index f6f2077e81a..a5bf5c5ae36 100644 --- a/src/content/upgrades/merge/issuance/index.md +++ b/src/content/upgrades/merge/issuance/index.md @@ -56,8 +56,8 @@ Total ETH supply: **~119,300,000 ETH** (as of Q2 2022) <InfoBanner> <strong>Total annual issuance rate: ~4.62%</strong> (4.13% + 0.49%)<br/><br/> -<strong>~89.4%</strong> of the issuance is going to miners on the execution layer (4.13 / 4.62 \* 100)<br/><br/> -<strong>~10.6%</strong> is being issued to stakers on the consensus layer (0.49 / 4.62 \* 100) +<strong>~89.4%</strong> of the issuance is going to miners on the execution layer (4.13 / 4.62 * 100)<br/><br/> +<strong>~10.6%</strong> is being issued to stakers on the consensus layer (0.49 / 4.62 * 100) </InfoBanner> ## Post-merge {#post-merge} From e7db0e106ae82f844a269a5abcf910e4b63e46ef Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:11:25 -0700 Subject: [PATCH 146/244] another layout bug fix --- src/content/upgrades/merge/issuance/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/merge/issuance/index.md b/src/content/upgrades/merge/issuance/index.md index a5bf5c5ae36..c6c290dec46 100644 --- a/src/content/upgrades/merge/issuance/index.md +++ b/src/content/upgrades/merge/issuance/index.md @@ -82,7 +82,7 @@ Stakers may also choose to exit and withdraw their entire validator balance. To - Total annual issuance rate: **~0.49%** <InfoBanner> -Total annual issuance rate: <strong>~0.49%</strong> +Total annual issuance rate: <strong>~0.49%</strong><br/><br/> Net reduction in annual ETH issuance: <strong>~89.4%</strong> (0.49% / 4.62% * 100) </InfoBanner> From 5c1b840a6935cde45bbde2137c846704346d4bbf Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:23:22 -0700 Subject: [PATCH 147/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/intl/en/page-upgrades-index.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index 2386b02283d..67114f1a302 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -6,7 +6,7 @@ "consensus-client-teku-logo-alt": "Teku logo", "consensus-client-under-review": "Review and audit in progress", "page-upgrades-answer-1": "Think of the changes being rolled out as a set of upgrades being added to improve the Ethereum we use today. These upgrades included the creation of a new chain called the Beacon Chain, which will soon act as the consensus engine for the entire network.", - "page-upgrades-answer-2": "Despite the Beacon Chain starting as a separate chain, soon the existing Mainnet will be 'merged' with this new proof-of-stake consensus layer.", + "page-upgrades-answer-2": "Despite the Beacon Chain starting as a separate chain, the existing Mainnet will be 'merged' with this new proof-of-stake consensus layer.", "page-upgrades-answer-4": "In other words the Ethereum we use today will eventually embody all the features that we're aiming towards in the Ethereum vision.", "page-upgrade-article-title-two-point-oh": "Two Point Oh: The Beacon Chain", "page-upgrade-article-title-beacon-chain-explainer": "The Beacon Chain Ethereum 2.0 explainer you need to read first", @@ -27,7 +27,7 @@ "page-upgrades-docking": "The Merge", "page-upgrades-merge-answer-1": "The Merge is when Mainnet begins using the Beacon Chain for consensus, and proof-of-work is turned off, coming soon.", "page-upgrades-merge-btn": "More on The Merge", - "page-upgrades-merge-desc": "Mainnet Ethereum will soon 'merge' with the proof-of-stake Beacon Chain. This will signal the end of energy-intensive mining.", + "page-upgrades-merge-desc": "Mainnet Ethereum will soon 'merge' with the proof-of-stake Beacon Chain, marking the end of energy-intensive mining.", "page-upgrades-merge-estimate": "Estimate: 2022", "page-upgrades-merge-mainnet": "What's Mainnet?", "page-upgrades-merge-mainnet-eth2": "Merging Mainnet and the Beacon Chain", @@ -41,7 +41,7 @@ "page-upgrades-index-staking": "Staking is here", "page-upgrades-index-staking-desc": "Key to the Ethereum upgrades is the introduction of staking. If you want to use your ETH to help secure the Ethereum network, make sure you follow these steps.", "page-upgrades-index-staking-learn": "Learn about staking", - "page-upgrades-index-staking-learn-desc": "The Beacon Chain brought staking to Ethereum. This means if you have ETH, you can do a public good by securing the network and earn more ETH in the process.", + "page-upgrades-index-staking-learn-desc": "The Beacon Chain brought staking to Ethereum. If you have ETH, you can do a public good by securing the network and earn more ETH in the process.", "page-upgrades-index-staking-step-1": "1. Set up with the launchpad", "page-upgrades-index-staking-step-1-btn": "Visit staking launchpad", "page-upgrades-index-staking-step-1-desc": "To stake on Ethereum you'll need to use the launchpad - this will walk you through the process.", @@ -82,9 +82,9 @@ "page-upgrades-question-6-answer-5": "You can also join the discussion on Ethereum research and development at ethresear.ch.", "page-upgrades-question-6-title": "What do I need to do with my dapp?", "page-upgrades-question-6-desc": "The Merge has been designed with the goal of minimizing impact on dapp developers, though there are a couple things work noting.", - "page-upgrades-question-6-answer-1": "A few changes are coming with The Merge that can impact certain types of applications. This includes block structure and timing, a few opcode changes, sources of on-chain randomness and the concept of epoch finalization.", + "page-upgrades-question-6-answer-1": "A few changes with The Merge can impact certain types of applications. These changes include block structure and timing, a few opcode changes, sources of on-chain randomness and the concept of epoch finalization.", "page-upgrades-question-6-answer-1-link": "How The Merge Impacts Ethereum's Application Layer", - "page-upgrades-question-6-answer-2": "Most applications will be unaffected, but developers are recommended to stay up to date on the latest with The Merge.", + "page-upgrades-question-6-answer-2": "Most applications will be unaffected, but we recommend that developers stay up to date on the latest with The Merge.", "page-upgrades-question-7-desc": "Many different teams from all over the community are working on the various Ethereum upgrades.", "page-upgrades-question-7-lighthouse": "Lighthouse", "page-upgrades-question-7-lighthouse-lang": "(Rust implementation)", @@ -122,8 +122,8 @@ "page-upgrades-question-10-answer-2": "But if you've followed the discussions, here's how the upgrades fit into technical roadmaps, and a bit on how they're changing.", "page-upgrades-question-10-answer-3": "Phase 0 described the work to get the Beacon Chain live.", "page-upgrades-question-10-answer-5": "Phase 1 originally focused on implementing the shard chains, but prioritization has shifted to 'The Merge' which is the next planned upgrade.", - "page-upgrades-question-10-answer-6": "Phase 1.5 was originally planned to follow shard implementations, when Mainnet would be added as the last shard to the Beacon Chain. With rollup technology progressing, the transition away from proof-of-work was expedited. Mainnet will instead be 'merged' into the Beacon Chain and remain as the execution layer of Ethereum. This will be a significant step towards a greener Ethereum.", - "page-upgrades-question-10-answer-7": "The plans around Phase 2 have been a point of intense research and discussion. With The Merge planned before sharding, and the advancements in layer 2 solutions, plans have shifted to provide a more simplified form of data sharding to maximize rollup efficiency. Current layer 2s are enabling the ability to scale transaction execution, and data sharding will help make storing the proofs for this data on layer 1 in a cheap and scalable manner. This will continue to undergo reassessment and research as progress is made.", + "page-upgrades-question-10-answer-6": "Phase 1.5 was originally planned to follow shard implementations when Mainnet would be added as the last shard to the Beacon Chain. However, as rollup technology progressed, the Ethereum community expedited the transition away from proof-of-work. Mainnet will instead be 'merged' into the Beacon Chain and remain as the execution layer of Ethereum. This will be a significant step towards a greener Ethereum.", + "page-upgrades-question-10-answer-7": "The plans around Phase 2 have been a point of intense research and discussion. With The Merge planned before sharding, and the advancements in layer 2 solutions, goals have shifted to provide a more simplified form of data sharding to maximize rollup efficiency. Current layer 2s enable the ability to scale transaction execution, and data sharding will allow for storage of proofs for this data on layer 1 in a cheap and scalable manner.", "page-upgrades-question-10-answer-8": "More on a rollup-centric roadmap", "page-upgrades-question-11-title": "Can I buy Eth2?", "page-upgrades-question-11-desc": "No. There is no Eth2 token and your ETH will not change after The Merge.", From c549a6107cbed4efe64895afa6d841222e525ec1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:26:22 -0700 Subject: [PATCH 148/244] Update src/content/upgrades/sharding/index.md Co-authored-by: Corwin Smith <cssmittys@gmail.com> --- src/content/upgrades/sharding/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/sharding/index.md b/src/content/upgrades/sharding/index.md index daf4e7a38ab..76c20c79630 100644 --- a/src/content/upgrades/sharding/index.md +++ b/src/content/upgrades/sharding/index.md @@ -17,7 +17,7 @@ summaryPoint4: This upgrade is planned to follow The Merge of Mainnet with the B ## What is sharding? {#what-is-sharding} -Sharding is the process of splitting a database horizontally to spread the load – it’s a common concept in computer science. In an Ethereum context, sharding will work synergistically with [layer 2 rollups] by splitting up the burden of handling the large amount of data needed by rollups over the entire network. This will continue to reduce network congestion and increase transactions per second. +Sharding is the process of splitting a database horizontally to spread the load – it’s a common concept in computer science. In an Ethereum context, sharding will work synergistically with [layer 2 rollups](/layer-2/) by splitting up the burden of handling the large amount of data needed by rollups over the entire network. This will continue to reduce network congestion and increase transactions per second. This is important for reasons other than scalability. From b0e616b46749837fe2507ba21c3604c146401cfa Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:42:58 -0700 Subject: [PATCH 149/244] link updates --- src/content/upgrades/beacon-chain/index.md | 2 +- src/content/upgrades/merge/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 7d56e5e1ea1..a73092cda83 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -57,7 +57,7 @@ Proof-of-stake has the advantage of having a registry of all approved block prod This responsibility is in contrast to proof-of-work, where miners have no obligation to the network and could stop mining and turn their node software off permanently in an instant without repercussion. There is also no registry of known block proposers and no reliable way to split network responsibilities safely. -[More on sharding](/upgrades/shard-chains/) +[More on sharding](/upgrades/sharding/) ## Relationship between upgrades {#relationship-between-upgrades} diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index c7178454523..7ad8b3ba8de 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -233,7 +233,7 @@ Originally, the plan was to work on sharding before The Merge to address scalabi Plans for sharding are rapidly evolving, but given the rise and success of layer 2 technologies to scale transaction execution, sharding plans have shifted to finding the most optimal way to distribute the burden of storing compressed calldata from rollup contracts, allowing for exponential growth in network capacity. This would not be possible without first transitioning to proof-of-stake. -<ButtonLink to="/upgrades/shard-chains/"> +<ButtonLink to="/upgrades/sharding/"> Sharding </ButtonLink> From a0a2fbb022de849ce058f816d92fb19bdcfa0796 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:45:36 -0700 Subject: [PATCH 150/244] Update src/intl/en/page-upgrades-vision.json --- src/intl/en/page-upgrades-vision.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index f5ecd12c52b..bee321cc951 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -33,7 +33,7 @@ "page-upgrades-vision-security-desc-8": "Ethereum's security model also needs to change because of the introduction of sharding. The Beacon Chain will coordinate all of the validators who will be responsible for asserting that all data has been made available, but every node will no longer be required to hold the entire history of the chain. A new role is also anticipated, known as a dedicated block builder, who will work alongside block proposers (validators) for efficient and safe block production. Proof-of-stake is a prerequisite to sharding.", "page-upgrades-vision-security-desc-10": "Staking also means you don't need to invest in elite hardware to participate directly in consensus. This should encourage more people to become a validator, increasing the network's decentralization and decreasing the attack surface area.", "page-upgrades-vision-security-staking": "Stake ETH", - "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH, but remember, you don't need any ETH to run your own node.", + "page-upgrades-vision-security-validator": "You can become a validator by staking your ETH.", "page-upgrades-vision-shard-chains": "shard chains", "page-upgrades-vision-shard-date": "Estimate: 2021", "page-upgrades-vision-shard-desc-4": "Shard chains will spread the load of the network into 64 new blockchains. Shards have the potential to drastically improve transaction speed - up to 100,000 per second.", From 059fbe4906d91291311a65ded3b88b339d3ba3a5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:46:57 -0700 Subject: [PATCH 151/244] Update src/intl/en/page-upgrades-vision.json --- src/intl/en/page-upgrades-vision.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index bee321cc951..8508976f991 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -24,7 +24,7 @@ "page-upgrades-vision-scalability": "Scalability", "page-upgrades-vision-scalability-desc": "Ethereum needs to be able to handle more transactions per second without increasing the size of the nodes in the network. Nodes are vital network participants who store and run the blockchain. Increasing node size isn't practical because only those with powerful and expensive computers could do it. To scale, Ethereum needs more transactions per second, coupled with more nodes. More nodes means more security.", "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by layer 2 rollup solutions.", - "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Data sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit. Validators will only need to sample the data to make sure it all has been made available.", + "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Data sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit.", "page-upgrades-vision-security": "Security", "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks, like a 51% attack. This is a type of attack where if someone controls the majority of the network they can force through fraudulent changes.", "page-upgrades-vision-security-desc-3": "The transition to proof-of-stake means that the Ethereum protocol has greater disincentives against attack. This is because in proof-of-stake, the validators who secure the network must stake significant amounts of ETH into the protocol. If they try and attack the network, the protocol can automatically destroy their ETH.", From d743b1b8c61766e0bd8b50587d0aeab7c70ee0e3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 15:47:05 -0700 Subject: [PATCH 152/244] Update src/intl/en/page-upgrades-vision.json Co-authored-by: Corwin Smith <cssmittys@gmail.com> --- src/intl/en/page-upgrades-vision.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index 8508976f991..22fb9deaed2 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -23,7 +23,7 @@ "page-upgrades-vision-problems": "Today's problems", "page-upgrades-vision-scalability": "Scalability", "page-upgrades-vision-scalability-desc": "Ethereum needs to be able to handle more transactions per second without increasing the size of the nodes in the network. Nodes are vital network participants who store and run the blockchain. Increasing node size isn't practical because only those with powerful and expensive computers could do it. To scale, Ethereum needs more transactions per second, coupled with more nodes. More nodes means more security.", - "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by layer 2 rollup solutions.", + "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by <a href=\"/layer-2/\">layer 2</a> rollup solutions.", "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Data sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit.", "page-upgrades-vision-security": "Security", "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks, like a 51% attack. This is a type of attack where if someone controls the majority of the network they can force through fraudulent changes.", From 0f9975ff04e8fa16d5f21c843be3f5ea9c5faaa0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:00:22 -0700 Subject: [PATCH 153/244] remove redundant ref to ethresear.ch --- src/intl/en/page-upgrades-index.json | 1 - src/pages/upgrades/index.js | 6 ------ 2 files changed, 7 deletions(-) diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index 67114f1a302..f1eac817a29 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -62,7 +62,6 @@ "page-upgrades-question-3-answer-2a-link": "The Merge and dapp developers", "page-upgrades-question-3-answer-2b": "Sharding plans are still being developed, but will be designed with layer 2 rollups in mind.", "page-upgrades-layer-2-rollups": "More on layer 2 rollups", - "page-upgrades-question-3-answer-3": "Talk to the Ethereum research and development team over at ethresear.ch.", "page-upgrades-question-3-answer-3-link": "Visit ethresear.ch", "page-upgrades-question-3-desc": "You don't have to do anything right now to prepare for the upgrades.", "page-upgrades-question-3-title": "How do I prepare for the upgrades?", diff --git a/src/pages/upgrades/index.js b/src/pages/upgrades/index.js index 486e2b4c82c..21f09333a96 100644 --- a/src/pages/upgrades/index.js +++ b/src/pages/upgrades/index.js @@ -576,12 +576,6 @@ const Eth2IndexPage = ({ data }) => { </Link> </li> </ul> - <p> - <Translation id="page-upgrades-question-3-answer-3" /> - </p> - <Link to="https://ethresear.ch"> - <Translation id="page-upgrades-question-3-answer-3-link" /> - </Link> </ExpandableCard> <ExpandableCard contentPreview={translateMessageId( From e0fa869757507b1da6b1b9066ae4702efe0fac18 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:13:35 -0700 Subject: [PATCH 154/244] Extract strings for intl --- src/components/PreMergeBanner.tsx | 14 +++++++++----- src/intl/en/page-upgrades.json | 5 ++++- src/pages/developers/index.js | 3 +-- src/templates/docs.tsx | 6 +++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx index 82bb42cf666..ce712c9645f 100644 --- a/src/components/PreMergeBanner.tsx +++ b/src/components/PreMergeBanner.tsx @@ -2,7 +2,7 @@ import React from "react" import styled from "styled-components" import BannerNotification from "./BannerNotification" import Link from "./Link" -import Translations from "../Translations" +import Translation from "../Translation" const StyledBannerNotification = styled(BannerNotification)` display: flex; @@ -31,10 +31,14 @@ const PreMergeBanner: React.FC<IProps> = ({ }) => ( <StyledBannerNotification shouldShow className={className}> <p> - The Merge is approaching, and comes with changes to Ethereum.{" "} - {!announcementOnly && - "Some content on this page may be out-of-date related to these changes, and updates are coming soon. "} - {children} <Link to="/upgrades/merge/">Learn more about The Merge</Link> + <Translation id="page-upgrades-merge-banner-intro" />{" "} + {!announcementOnly && ( + <Translation id="page-upgrades-merge-banner-content-outdated" /> + )}{" "} + {children}{" "} + <Link to="/upgrades/merge/"> + <Translation id="page-upgrades-merge-btn" /> + </Link> </p> </StyledBannerNotification> ) diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index 14cc5fbac8e..add6b827e9e 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -1,5 +1,8 @@ { "page-upgrades-beacon-date": "Shipped!", "page-upgrades-merge-date": "~Q3/Q4 2022", - "page-upgrades-shards-date": "~2023" + "page-upgrades-shards-date": "~2023", + "page-upgrades-merge-banner-intro": "The Merge is approaching, and comes with changes to Ethereum.", + "page-upgrades-merge-banner-content-outdated": "Some content on this page may be out-of-date related to these changes, and updates are coming soon.", + "page-upgrades-merge-banner-developers-landing": "Some docs may be out-of-date related to these changes and have been marked with a banner similar to this. Updates coming soon." } diff --git a/src/pages/developers/index.js b/src/pages/developers/index.js index 27d8caf72a6..24218d9ee25 100644 --- a/src/pages/developers/index.js +++ b/src/pages/developers/index.js @@ -238,8 +238,7 @@ const DevelopersPage = ({ data }) => { description={translateMessageId("page-developers-meta-desc", intl)} /> <PreMergeBanner announcementOnly> - Some docs may be out-of-date related to these changes and have been - marked with a banner similar to this. Updates coming soon. + <Translation id="page-upgrades-merge-banner-developers-landing" /> </PreMergeBanner> <Content> <HeroContainer> diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index 5bee46c0348..565867e31f8 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -200,9 +200,9 @@ const DocsPage = ({ )} {showMergeBanner && ( <PreMergeBanner announcementOnly={isDevelopersHome}> - {isDevelopersHome && - "Some docs may be out-of-date related to these changes and have been \ - marked with a banner similar to this. Updates coming soon."} + {isDevelopersHome && ( + <Translation id="page-upgrades-merge-banner-developers-landing" /> + )} </PreMergeBanner> )} <ContentContainer isZenMode={isZenMode}> From add4b80f1f13678792d1f97ba58fe043fcaf66b2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:15:24 -0700 Subject: [PATCH 155/244] Update src/content/staking/pools/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/staking/pools/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index a8a91c4dfa5..c5cf721e6df 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -75,7 +75,7 @@ Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade <ExpandableCard title="I am a pooled staker, do I need to do anything for The Merge?"> ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. -As The Merge approaches, be on high alert for scammers. You do not need to do anything to "upgrade" your ETH or staked ETH tokens for the transition to proof-of-stake. +However, as The Merge approaches, be on high alert for scammers. **You do not need to upgrade your ETH or staked ETH tokens** for the transition to proof-of-stake. Learn more about [The Merge](/upgrades/merge/) </ExpandableCard> From 7aaf70b3aa7c1e0176c5e07007e199e6208e0dab Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:16:50 -0700 Subject: [PATCH 156/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/staking/pools/index.md | 2 +- src/content/staking/saas/index.md | 6 +++--- src/content/staking/solo/index.md | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index c5cf721e6df..45f8a5d0f8d 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -72,7 +72,7 @@ Currently, withdrawing funds from a validator on the Beacon Chain is not possibl Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, effectively allowing you to "withdraw" without actually removing ETH from the Beacon Chain. </ExpandableCard> -<ExpandableCard title="I am a pooled staker, do I need to do anything for The Merge?"> +<ExpandableCard title="Do pooled stakers need to do anything for The Merge?"> ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. However, as The Merge approaches, be on high alert for scammers. **You do not need to upgrade your ETH or staked ETH tokens** for the transition to proof-of-stake. diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index 82e00860e7b..fc99b84725f 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -85,10 +85,10 @@ All of these keys can always be regenerated in a reproducible manner using your The Merge will <em>not</em> enable the ability to withdraw your stake or protocol rewards; this feature is planned for the Shanghai upgrade, which will follow the Merge by an estimated six months to a year. </ExpandableCard> -<ExpandableCard title="I use an SaaS, do I need to do anything for The Merge?"> -ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. +<ExpandableCard title="Do SaaS stakers need to do anything for The Merge?"> +SaaS stakers <strong>do not need to do anything to prepare for The Merge</strong>. -There are a few things node operators must attend to for this upgrade. Check with your individual staking provider for assurance their systems are ready to go. +There are a few things node operators must attend to for this upgrade. Check with your staking provider for assurance their systems are ready to go. Learn more about [The Merge](/upgrades/merge/) </ExpandableCard> diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 7f258711c59..230c35466b7 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -90,7 +90,7 @@ The Staking Launchpad is an open source application that will help you become a <StakingLaunchpadWidget /> <InfoBanner emoji=":panda:" isWarning> -<strong>Note for existing stakers:</strong> The Merge is approaching which brings a few changes since staking was launched. Make sure you're prepared with the <a href="https://launchpad.ethereum.org/en/merge-readiness">Merge readiness checklist</a> over on the Staking Launchpad. +<strong>Note for existing stakers:</strong> The Merge is approaching, which brings a few changes since staking was launched. Make sure you're prepared with the <a href="https://launchpad.ethereum.org/en/merge-readiness">Merge readiness checklist</a> over on the Staking Launchpad. </InfoBanner> ## What to consider with node and client setup tools {#node-tool-considerations} @@ -181,9 +181,9 @@ Offline penalties are proportional to how many others are offline at the same ti </ExpandableCard> <ExpandableCard title="Do I need to do anything before The Merge?"> -Anyone currently running a CL (Beacon Chain) client will be required to also run an EL client after The Merge. This is a result of the new Engine API that will be used to interface between the two layers, requiring a JWT secret. Anyone currently running a Beacon Chain without an execution layer client will need to sync the execution layer before The Merge to continue being in sync with the network. +Stakers currently running a consensus layer client (Beacon Chain) will also be required to run an execution layer client after The Merge. The new Engine API will be used to interface between the two layers, requiring a JWT secret. If you currently run a Beacon Chain without an execution layer client, you will need to sync the execution layer before The Merge to stay in sync with the network. -The Merge will also bring unburnt transaction fees to validators. These fees do not accumulate in the balance associated with the validator keys, but instead can be directed to a regular Ethereum address of your choice. In order to properly receive the priority fees/tips from proposed blocks, stakers must update their client settings with the address they would like to receive tips at. +The Merge will also bring unburnt transaction fees to validators. These fees do not accumulate in the balance associated with the validator keys but instead can be directed to a regular Ethereum address of your choice. To receive your tips (priority fees) from proposed blocks, you should update your client settings with the address you want your tips sent to. Links to individual client documentation and additional information can be found on the Merge readiness checklist over on the Launchpad. From 24e6cff030ef9f1c161eb7647ede0c8710571b7d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:17:01 -0700 Subject: [PATCH 157/244] Update src/content/staking/pools/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/staking/pools/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index 45f8a5d0f8d..c7d0327a606 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -73,7 +73,7 @@ Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade </ExpandableCard> <ExpandableCard title="Do pooled stakers need to do anything for The Merge?"> -ETH/token holders, pooled/SaaS stakers and general Ethereum users <strong>do not need to do anything to prepare for The Merge</strong>. +Pooled stakers <strong>do not need to do anything to prepare for The Merge</strong>. However, as The Merge approaches, be on high alert for scammers. **You do not need to upgrade your ETH or staked ETH tokens** for the transition to proof-of-stake. From 316690ced19d372349f6eb4cb29386bab10a401b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:20:10 -0700 Subject: [PATCH 158/244] Update src/intl/en/page-eth.json --- src/intl/en/page-eth.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 7e8c1538a71..190eb0a39a1 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -15,7 +15,7 @@ "page-eth-flexible-amounts": "Available in flexible amounts", "page-eth-flexible-amounts-desc": "ETH is divisible up to 18 decimal places so you don't have to buy 1 whole ETH. You can buy fractions at a time – as little as 0.000000000000000001 ETH if you want.", "page-eth-fuels": "ETH fuels and secures Ethereum", - "page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. Part of the fee is required by the network, and part is an incentive for a block producer to process and include what you're trying to do.", +"page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. Part of the fee is required by the network (<a to=\"/glossary/#base-fee\">base fee</a>), and part is an incentive for a block producer (priority fee) to process and include what you're trying to do.", "page-eth-fuels-desc-2": "Currently, miners are like the record-keepers of Ethereum—they check and prove that no one is cheating, and perform work for the right to propose a block of transactions. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", "page-eth-fuels-desc-4": "Anyone is free to run Ethereum client software to verify and hold the state of the chain themselves. Node operators are not required to perform the same work as miners, and can quickly verify blocks that are proposed by others to ensure their validity, and to ensure they always have permissionless and private access to the network.", From 78f0fe8388310d3f864f87ed67d6bbfffd2d031e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:30:35 -0700 Subject: [PATCH 159/244] extract intl, remove from `fr` --- src/components/MergeInfographic.tsx | 2 +- src/content/translations/fr/upgrades/merge/index.md | 2 -- src/intl/en/page-upgrades.json | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/MergeInfographic.tsx b/src/components/MergeInfographic.tsx index f183c2f02a0..bb686123c6f 100644 --- a/src/components/MergeInfographic.tsx +++ b/src/components/MergeInfographic.tsx @@ -112,7 +112,7 @@ const MergeInfographic: React.FC<IProps> = ({ className }) => { return ( <Container className={className}> <ExecutionLayer> - Ethereum State: transactions, apps, contracts, balances + <Translation id="page-upgrades-merge-infographic-el" /> </ExecutionLayer> <SvgText getString={getString} /> <Background /> diff --git a/src/content/translations/fr/upgrades/merge/index.md b/src/content/translations/fr/upgrades/merge/index.md index 45eef95dc7c..23b1f1298f8 100644 --- a/src/content/translations/fr/upgrades/merge/index.md +++ b/src/content/translations/fr/upgrades/merge/index.md @@ -17,8 +17,6 @@ summaryPoint4: Précédemment, cette étape était appelée « le docking ». ## Qu'est-ce que la fusion ? {#what-is-the-docking} -<MergeInfographic /> - Il est important de se rappeler que, dans un premier temps, la [chaîne phare](/upgrades/beacon-chain/) sortira séparément du [réseau principal](/glossary/#mainnet) - la chaîne que nous utilisons aujourd'hui. Le réseau principal Ethereum continuera d'être sécurisé par [la preuve de travail](/developers/docs/consensus-mechanisms/pow/), même lorsque la chaîne phare fonctionnera en parallèle en utilisant [la preuve de mise à enjeu](/developers/docs/consensus-mechanisms/pos/). La fusion se fera au moment où ces deux systèmes se réuniront enfin. Imaginez qu'Ethereum est un vaisseau spatial qui n’est pas tout à fait prêt pour un voyage interstellaire. Avec la chaîne phare, la communauté a construit un nouveau moteur et une coque renforcée. Quand il sera temps, le vaisseau actuel s'arrimera à ce nouveau système, fusionnant en un seul vaisseau, prêt à parcourir des années lumières et à s'emparer de l'univers. diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index 14cc5fbac8e..ae6a9f00c70 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -1,4 +1,5 @@ { + "page-upgrades-merge-infographic-el": "Ethereum State: transactions, apps, contracts, balances", "page-upgrades-beacon-date": "Shipped!", "page-upgrades-merge-date": "~Q3/Q4 2022", "page-upgrades-shards-date": "~2023" From 4472bc0906418a215b7a9a0868ad38ea67d99788 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:33:07 -0700 Subject: [PATCH 160/244] Update index.md --- src/content/upgrades/merge/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index f141d2e2448..4703c6cffa6 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -19,11 +19,10 @@ This process is in its final stages, with plans to undergo The Merge on a few pu ## What is The Merge? {#what-is-the-merge} -<MergeInfographic /> - -It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet) - the chain we use today. Ethereum Mainnet continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge is when these two systems finally come together. The Merge represents the joining of the existing execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminates the need for energy-intensive mining and instead secures the network using staked ETH. A truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. +<MergeInfographic /> + It's important to remember that initially, the [Beacon Chain](/upgrades/beacon-chain/) shipped separately from [Mainnet](/glossary/#mainnet). Ethereum Mainnet - with all it's accounts, balances, smart contracts, and blockchain state - continues to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain runs in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The approaching Merge is when these two systems finally come together, and proof-of-work is replaced permanently by proof-of-stake. Let's consider an analogy. Imagine Ethereum is a spaceship that isn't quite ready for an interstellar voyage. With the Beacon Chain, the community has built a new engine and a hardened hull. After significant testing, it's almost time to hot-swap the new engine for the old mid-flight. This will merge the new, more efficient engine into the existing ship, ready to put in some serious lightyears and take on the universe. From aa71489ff9aff97d6dd7c4e2af336b09c9ddcb32 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:38:57 -0700 Subject: [PATCH 161/244] import bug fix --- src/components/PreMergeBanner.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/PreMergeBanner.tsx b/src/components/PreMergeBanner.tsx index ce712c9645f..41afc6b0021 100644 --- a/src/components/PreMergeBanner.tsx +++ b/src/components/PreMergeBanner.tsx @@ -2,7 +2,7 @@ import React from "react" import styled from "styled-components" import BannerNotification from "./BannerNotification" import Link from "./Link" -import Translation from "../Translation" +import Translation from "./Translation" const StyledBannerNotification = styled(BannerNotification)` display: flex; From 712199416768659098c5d462bdf501c325099ddb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 17:16:06 -0700 Subject: [PATCH 162/244] Update src/content/contributing/adding-wallet/index.md --- src/content/contributing/adding-wallet/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallet/index.md index 48e156a5880..bdc21e965d6 100644 --- a/src/content/contributing/adding-wallet/index.md +++ b/src/content/contributing/adding-wallet/index.md @@ -24,7 +24,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework ### Criteria for inclusion: the must-haves {#the-must-haves} - **A security-tested product** - whether through audit, an internal security team, open sourced coded, or some other method, your wallet's security must be reliable. This reduces the risk to our users and shows us that you take security seriously. -- **A wallet that has been “live” for over 6 months OR released by a group with a reputable track record** - this is another indication of security. 6 months is a good time frame for critical bugs and exploitations to have been found. We ask 6 months to help filter out forks that are quickly abandoned as projects. +- **A wallet that has been “live” for over six months OR released by a group with a reputable track record** - this is another indication of security. Six months is a good time frame for critical bugs and exploitations to have been found. We ask six months to help filter out forks that are quickly abandoned as projects. - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. - **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. From 770c5290d25955f89cf38bf967a4cda2b7e5715a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 18:18:02 -0700 Subject: [PATCH 163/244] Revert string removal --- src/intl/en/page-upgrades-index.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index bf1b5d8f829..cdd23d944c8 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -157,6 +157,7 @@ "page-upgrades-upgrades": "The Ethereum upgrades", "page-upgrades-upgrades-aria-label": "Ethereum upgrades menu", "page-upgrades-upgrades-beacon-chain": "The Beacon Chain", + "page-upgrades-upgrades-guide": "Guide to Ethereum upgrades", "page-upgrades-upgrades-docking": "The Merge", "page-upgrades-energy-consumption": "More on Ethereum energy consumption", "page-upgrades-upgrades-shard-chains": "The shard chains", From 0a7f6308dd468abdc95207cb3113e4f0953e7d6f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 16 Jun 2022 18:41:40 -0700 Subject: [PATCH 164/244] remove general use of "data sharding" Replace with "sharding" --- src/content/upgrades/beacon-chain/index.md | 2 +- src/content/upgrades/merge/index.md | 4 ++-- src/content/upgrades/sharding/index.md | 2 +- src/intl/en/page-upgrades-index.json | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index a73092cda83..463d0d40881 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -51,7 +51,7 @@ The Merge will have an immediate and profound impact on the carbon footprint of ### Setting up for sharding {#setting-up-for-sharding} -After Mainnet merges with the Beacon Chain, the next major upgrade will introduce data sharding to the network. +After Mainnet merges with the Beacon Chain, the next major upgrade will introduce sharding to the network. Proof-of-stake has the advantage of having a registry of all approved block producers at any given time, each with ETH at stake. This registry sets the stage for the ability to divide and conquer but reliably split up specific network responsibilities. diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 7ad8b3ba8de..eab273f077c 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -7,7 +7,7 @@ sidebar: true image: ../../../assets/upgrades/merge.png summaryPoint1: Soon, the current Ethereum Mainnet will merge with the Beacon Chain proof-of-stake system. summaryPoint2: This will mark the end of proof-of-work for Ethereum, and the full transition to proof-of-stake. -summaryPoint3: This sets the stage for future scaling upgrades including data sharding. +summaryPoint3: This sets the stage for future scaling upgrades including sharding. summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. --- @@ -215,7 +215,7 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Me The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the current Mainnet execution layer. Once The Merge happens, validators will be assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) will no longer be a valid means of block production. -Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including data sharding. +Blocks will instead be proposed by validating nodes that have ether staked for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including sharding. <ButtonLink to="/upgrades/beacon-chain/"> The Beacon Chain diff --git a/src/content/upgrades/sharding/index.md b/src/content/upgrades/sharding/index.md index 76c20c79630..6279c07bc65 100644 --- a/src/content/upgrades/sharding/index.md +++ b/src/content/upgrades/sharding/index.md @@ -1,6 +1,6 @@ --- title: Sharding -description: Learn about data sharding - breaking up and distributing the data load needed to give Ethereum more transaction capacity and make it easier to run. +description: Learn about sharding - breaking up and distributing the data load needed to give Ethereum more transaction capacity and make it easier to run. lang: en template: upgrade sidebar: true diff --git a/src/intl/en/page-upgrades-index.json b/src/intl/en/page-upgrades-index.json index 708d1e4157b..8d7a1205989 100644 --- a/src/intl/en/page-upgrades-index.json +++ b/src/intl/en/page-upgrades-index.json @@ -126,7 +126,7 @@ "page-upgrades-question-10-answer-3": "Phase 0 described the work to get the Beacon Chain live.", "page-upgrades-question-10-answer-5": "Phase 1 originally focused on implementing the shard chains, but prioritization has shifted to 'The Merge' which is the next planned upgrade.", "page-upgrades-question-10-answer-6": "Phase 1.5 was originally planned to follow shard implementations when Mainnet would be added as the last shard to the Beacon Chain. However, as rollup technology progressed, the Ethereum community expedited the transition away from proof-of-work. Mainnet will instead be 'merged' into the Beacon Chain and remain as the execution layer of Ethereum. This will be a significant step towards a greener Ethereum.", - "page-upgrades-question-10-answer-7": "The plans around Phase 2 have been a point of intense research and discussion. With The Merge planned before sharding, and the advancements in layer 2 solutions, goals have shifted to provide a more simplified form of data sharding to maximize rollup efficiency. Current layer 2s enable the ability to scale transaction execution, and data sharding will allow for storage of proofs for this data on layer 1 in a cheap and scalable manner.", + "page-upgrades-question-10-answer-7": "The plans around Phase 2 have been a point of intense research and discussion. With The Merge planned before sharding, and the advancements in layer 2 solutions, goals have shifted to provide a more simplified form of data sharding to maximize rollup efficiency. Current layer 2s enable the ability to scale transaction execution, and sharding will allow for storage of proofs for this data on layer 1 in a cheap and scalable manner.", "page-upgrades-question-10-answer-8": "More on a rollup-centric roadmap", "page-upgrades-question-11-title": "Can I buy Eth2?", "page-upgrades-question-11-desc": "No. There is no Eth2 token and your ETH will not change after The Merge.", @@ -139,11 +139,11 @@ "page-upgrades-secure": "More secure", "page-upgrades-secure-desc": "Ethereum needs to be more secure. As the adoption of Ethereum grows, the protocol needs to become more secure against all forms of attack.", "page-upgrades-shard-button": "More on the shard chains", - "page-upgrades-shard-date": "Data sharding will follow The Merge in multiple phases, sometime in 2023-2024.", - "page-upgrades-shard-desc": "Data sharding will expand Ethereum's capacity to store data, and work harmoniously with L2s to scale throughput and reduce network fees. Sharding will be rolled out in multiple stages.", + "page-upgrades-shard-date": "Sharding will follow The Merge in multiple phases, sometime in 2023-2024.", + "page-upgrades-shard-desc": "Sharding will expand Ethereum's capacity to store data, and work harmoniously with L2s to scale throughput and reduce network fees. Sharding will be rolled out in multiple stages.", "page-upgrades-shard-estimate": "Estimate: 2023-2024", - "page-upgrades-shard-lower": "More on data sharding", - "page-upgrades-shard-title": "Data sharding", + "page-upgrades-shard-lower": "More on sharding", + "page-upgrades-shard-title": "Sharding", "page-upgrades-stay-up-to-date": "Stay up to date", "page-upgrades-stay-up-to-date-desc": "Get the latest from the researchers and developers working on the Ethereum upgrades.", "page-upgrades-sustainable-desc": "Ethereum needs to be better for the environment. The technology today requires too much computing power and energy.", From 9afdf2d44eff3acb2ece4ccb1fd6be509234ce43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaan=20Uzdo=C4=9Fan?= <kaanuzdogan@hotmail.com> Date: Fri, 17 Jun 2022 11:48:54 +0300 Subject: [PATCH 165/244] =?UTF-8?q?Added=20ETHBerlin=C2=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/community-events.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index c6a5822d825..f0219e4193d 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -430,5 +430,14 @@ "description": "Join Warsaw Web3 community in the first in-person conference and hackathon!", "startDate": "2022-09-01", "endDate": "2022-09-04" - } + }, + { + "title": "ETHBerlin³", + "to": "https://ethberlin.ooo/", + "sponsor": null, + "location": "Berlin, Germany", + "description": "ETHBerlin, to the power of 3", + "startDate": "2022-09-16", + "endDate": "2022-09-18" + }, ] From 2857665f2670eebfb1a01e409210fef48dfe36b7 Mon Sep 17 00:00:00 2001 From: vdusart <43795504+vdusart@users.noreply.github.com> Date: Fri, 17 Jun 2022 11:30:02 +0200 Subject: [PATCH 166/244] Update channel emoji Update the emoji of the poaps channel --- src/content/contributing/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/contributing/index.md b/src/content/contributing/index.md index 21d8c999e05..02f2f5de9da 100644 --- a/src/content/contributing/index.md +++ b/src/content/contributing/index.md @@ -85,7 +85,7 @@ If your contribution gets merged into ethereum.org, we'll mint you a unique cont ### How to claim {#how-to-claim} 1. Join our [Discord server](https://discord.gg/E8dET2ux8y). -2. Paste a link to your contribution in the `#🏆 | poaps` channel. +2. Paste a link to your contribution in the `#🥇 | poaps` channel. 3. Wait for a member of our team to send you a link to your POAP. 4. Claim your POAP! From 2e602f8e50c9e3254c8527874ae40e140009c22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaan=20Uzdo=C4=9Fan?= <kaanuzdogan@hotmail.com> Date: Fri, 17 Jun 2022 14:54:10 +0300 Subject: [PATCH 167/244] Add explicit decimal representations in RLP page --- .../docs/data-structures-and-encoding/rlp/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md index c44b03a3b9c..c0e2ae6e0c5 100644 --- a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md +++ b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md @@ -33,11 +33,11 @@ Note that in the context of the rest of this page, 'string' means "a certain num RLP encoding is defined as follows: -- For a single byte whose value is in the `[0x00, 0x7f]` range, that byte is its own RLP encoding. -- Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with value **0x80** plus the length of the string followed by the string. The range of the first byte is thus `[0x80, 0xb7]`. -- If a string is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xb7** plus the length in bytes of the length of the string in binary form, followed by the length of the string, followed by the string. For example, a length-1024 string would be encoded as `\xb9\x04\x00` followed by the string. The range of the first byte is thus `[0xb8, 0xbf]`. -- If the total payload of a list (i.e. the combined length of all its items being RLP encoded) is 0-55 bytes long, the RLP encoding consists of a single byte with value **0xc0** plus the length of the list followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xc0, 0xf7]`. -- If the total payload of a list is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xf7** plus the length in bytes of the length of the payload in binary form, followed by the length of the payload, followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xf8, 0xff]`. +- For a single byte whose value is in the `[0x00, 0x7f]` (decimal `[0, 127]`) range, that byte is its own RLP encoding. +- Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with value **0x80** (dec. **128**) plus the length of the string followed by the string. The range of the first byte is thus `[0x80, 0xb7]` (dec. `[128, 183]`). +- If a string is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xb7** (dec. 183) plus the length in bytes of the length of the string in binary form, followed by the length of the string, followed by the string. For example, 1024 byte long string would be encoded as `\xb9\x04\x00` (dec. `185, 4, 0`) followed by the string. Here, `0xb9` (183 + 2 = 185) as the first byte, followed by the 2 bytes `0x0400` (dec. 1024) that denote the length if the acutal string. The range of the first byte is thus `[0xb8, 0xbf]` (dec. `[184, 191]`). +- If the total payload of a list (i.e. the combined length of all its items being RLP encoded) is 0-55 bytes long, the RLP encoding consists of a single byte with value **0xc0** plus the length of the list followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xc0, 0xf7]` (dec. `[192, 247]`). +- If the total payload of a list is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xf7** plus the length in bytes of the length of the payload in binary form, followed by the length of the payload, followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xf8, 0xff]` (dec. `[248, 255]`). In code, this is: @@ -155,7 +155,7 @@ def to_integer(b): - [RLP in Ethereum](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) - [Ethereum under the hood: RLP](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) - +- [Coglio, A. (2020). Ethereum's Recursive Length Prefix in ACL2. arXiv preprint arXiv:2009.13769.](https://arxiv.org/abs/2009.13769) ## Related topics {#related-topics} - [Patricia merkle trie](/developers/docs/data-structures-and-encoding/patricia-merkle-tries) From 520171a14b42f67172b65f54a9669f8373844037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaan=20Uzdo=C4=9Fan?= <kaanuzdogan@hotmail.com> Date: Fri, 17 Jun 2022 15:08:44 +0300 Subject: [PATCH 168/244] Remove trailing comma in community-events.json --- src/data/community-events.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index f0219e4193d..d16c969c1a2 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -439,5 +439,5 @@ "description": "ETHBerlin, to the power of 3", "startDate": "2022-09-16", "endDate": "2022-09-18" - }, + } ] From 59331c6957cabeed960b607c56b192cfbfb55712 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:19:16 +0100 Subject: [PATCH 169/244] Update yarn.lock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index f1e199cf220..8ffc8f2b3b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11592,7 +11592,7 @@ minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== From 7c60bd225b4f099a01e26ca0834fd93b73a3b9a8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:20:37 +0000 Subject: [PATCH 170/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a0e5db143e8..dde6e1bb651 100644 --- a/README.md +++ b/README.md @@ -1264,6 +1264,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d </tr> <tr> <td align="center"><a href="https://netbound.io"><img src="https://avatars.githubusercontent.com/u/32879610?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mempirate</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=jonasbostoen" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Ajonasbostoen" title="Bug reports">🐛</a></td> + <td align="center"><a href="https://github.com/Barukimang"><img src="https://avatars.githubusercontent.com/u/16764792?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Barukimang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=Barukimang" title="Documentation">📖</a></td> </tr> </table> From f0d974fbea280669b8af34ad384d2e8c7794839c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:20:38 +0000 Subject: [PATCH 171/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index d07542085e7..54d75a20976 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7840,6 +7840,15 @@ "doc", "bug" ] + }, + { + "login": "Barukimang", + "name": "Barukimang", + "avatar_url": "https://avatars.githubusercontent.com/u/16764792?v=4", + "profile": "https://github.com/Barukimang", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From a3bace272f0c4b31bc46dfc6dbadb56ef6482424 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:49:52 +0100 Subject: [PATCH 172/244] Update src/data/community-events.json --- src/data/community-events.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/community-events.json b/src/data/community-events.json index a282984b9f3..7b28ab9d9a4 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -440,6 +440,7 @@ "startDate": "2022-09-16", "endDate": "2022-09-18" }, + { "title": "ETHSafari", "to": "https://ethsafari.xyz/", "sponsor": null, From 538170a2e8b97fe09ab41bc78247648f2b477063 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:51:18 +0000 Subject: [PATCH 173/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dde6e1bb651..e76f63fbb12 100644 --- a/README.md +++ b/README.md @@ -1265,6 +1265,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <tr> <td align="center"><a href="https://netbound.io"><img src="https://avatars.githubusercontent.com/u/32879610?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mempirate</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=jonasbostoen" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Ajonasbostoen" title="Bug reports">🐛</a></td> <td align="center"><a href="https://github.com/Barukimang"><img src="https://avatars.githubusercontent.com/u/16764792?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Barukimang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=Barukimang" title="Documentation">📖</a></td> + <td align="center"><a href="http://kaanuzdogan.com"><img src="https://avatars.githubusercontent.com/u/13069972?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kaan Uzdoğan</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=kuzdogan" title="Documentation">📖</a></td> </tr> </table> From 31f8e2a5c586ff4d29f05cf69b9d98943bb7dbd7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:51:19 +0000 Subject: [PATCH 174/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 54d75a20976..0a52dbabb81 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7849,6 +7849,15 @@ "contributions": [ "doc" ] + }, + { + "login": "kuzdogan", + "name": "Kaan Uzdoğan", + "avatar_url": "https://avatars.githubusercontent.com/u/13069972?v=4", + "profile": "http://kaanuzdogan.com", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 20e7be622daa7992af0cd6c785d81c064c1d2045 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:52:30 +0000 Subject: [PATCH 175/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e76f63fbb12..88cc6aa0c94 100644 --- a/README.md +++ b/README.md @@ -1266,6 +1266,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="https://netbound.io"><img src="https://avatars.githubusercontent.com/u/32879610?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mempirate</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=jonasbostoen" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Ajonasbostoen" title="Bug reports">🐛</a></td> <td align="center"><a href="https://github.com/Barukimang"><img src="https://avatars.githubusercontent.com/u/16764792?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Barukimang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=Barukimang" title="Documentation">📖</a></td> <td align="center"><a href="http://kaanuzdogan.com"><img src="https://avatars.githubusercontent.com/u/13069972?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kaan Uzdoğan</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=kuzdogan" title="Documentation">📖</a></td> + <td align="center"><a href="https://github.com/NiloCK"><img src="https://avatars.githubusercontent.com/u/10780590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Colin Kennedy</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=NiloCK" title="Documentation">📖</a></td> </tr> </table> From 12b5fd7520118a1984b5ada578adc34c3b22572e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 12:52:31 +0000 Subject: [PATCH 176/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0a52dbabb81..d0d26757257 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7858,6 +7858,15 @@ "contributions": [ "doc" ] + }, + { + "login": "NiloCK", + "name": "Colin Kennedy", + "avatar_url": "https://avatars.githubusercontent.com/u/10780590?v=4", + "profile": "https://github.com/NiloCK", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 2f4d6ada108d8c49c2522619eb43a0fa8f3566e7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:05:34 +0000 Subject: [PATCH 177/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 88cc6aa0c94..95e24887945 100644 --- a/README.md +++ b/README.md @@ -1267,6 +1267,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="https://github.com/Barukimang"><img src="https://avatars.githubusercontent.com/u/16764792?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Barukimang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=Barukimang" title="Documentation">📖</a></td> <td align="center"><a href="http://kaanuzdogan.com"><img src="https://avatars.githubusercontent.com/u/13069972?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kaan Uzdoğan</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=kuzdogan" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/NiloCK"><img src="https://avatars.githubusercontent.com/u/10780590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Colin Kennedy</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=NiloCK" title="Documentation">📖</a></td> + <td align="center"><a href="https://github.com/TimGrey998"><img src="https://avatars.githubusercontent.com/u/57596934?v=4?s=100" width="100px;" alt=""/><br /><sub><b>XOF</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TimGrey998" title="Documentation">📖</a> <a href="#translation-TimGrey998" title="Translation">🌍</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3ATimGrey998" title="Bug reports">🐛</a></td> </tr> </table> From ef14644de31a5812311e4285de1f45bd55795812 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:05:35 +0000 Subject: [PATCH 178/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index d0d26757257..7cc2d626123 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7867,6 +7867,17 @@ "contributions": [ "doc" ] + }, + { + "login": "TimGrey998", + "name": "XOF", + "avatar_url": "https://avatars.githubusercontent.com/u/57596934?v=4", + "profile": "https://github.com/TimGrey998", + "contributions": [ + "doc", + "translation", + "bug" + ] } ], "contributorsPerLine": 7, From eb438fb51872272c1b999a625178ec4b6fd7775f Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 17 Jun 2022 14:14:11 +0100 Subject: [PATCH 179/244] Update src/intl/en/page-upgrades-vision.json --- src/intl/en/page-upgrades-vision.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index b438b5464bd..33a5125a005 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -16,7 +16,7 @@ "page-upgrades-vision-scalability": "Scalability", "page-upgrades-vision-scalability-desc": "Ethereum needs to be able to handle more transactions per second without increasing the size of the nodes in the network. Nodes are vital network participants who store and run the blockchain. Increasing node size isn't practical because only those with powerful and expensive computers could do it. To scale, Ethereum needs more transactions per second, coupled with more nodes. More nodes means more security.", "page-upgrades-vision-scalability-desc-3": "Sharding upgrades will spread the data storage requirements across the entire network, no longer requiring every node to hold 100% of the data. Although this doesn't directly address scaling the execution of transactions, this problem is being addressed directly by <a href=\"/layer-2/\">layer 2</a> rollup solutions.", - "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Data sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit.", + "page-upgrades-vision-scalability-desc-4": "Rollups need cheap storage on layer 1 though to be most effective. Sharding will give Ethereum room to breathe by maximizing the efficiency on rollups, enabling exponential improvements beyond the current 15-45 transactions per second limit.", "page-upgrades-vision-security": "Security", "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks, like a 51% attack. This is a type of attack where if someone controls the majority of the network they can force through fraudulent changes.", "page-upgrades-vision-security-desc-3": "The transition to proof-of-stake means that the Ethereum protocol has greater disincentives against attack. This is because in proof-of-stake, the validators who secure the network must stake significant amounts of ETH into the protocol. If they try and attack the network, the protocol can automatically destroy their ETH.", From b4cf6a4d3040dee4938a9c91e824e8138f6515eb Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 17 Jun 2022 14:15:37 +0100 Subject: [PATCH 180/244] Update src/content/history/index.md --- src/content/history/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/history/index.md b/src/content/history/index.md index c981cadf6f5..fb1c0b9136e 100644 --- a/src/content/history/index.md +++ b/src/content/history/index.md @@ -394,9 +394,8 @@ The Homestead fork that looked to the future. It included several protocol chang The frontier thawing fork lifted the 5,000 [gas](/glossary/#gas) limit per [block](/glossary/#block) and set the default gas price to 51 [gwei](/glossary/#gwei). This allowed for transactions – transactions require 21,000 gas. The [difficulty bomb](/glossary/#difficulty-bomb) was introduced to ensure a future hard-fork to [proof-of-stake](/glossary/#pos). -[Read the Ethereum Foundation announcement](https://blog.ethereum.org/2015/08/04/the-thawing-frontier/) - -[Read the Ethereum Protocol Update 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1/) +- [Read the Ethereum Foundation announcement](https://blog.ethereum.org/2015/08/04/the-thawing-frontier/) +- [Read the Ethereum Protocol Update 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1/) --- From b8f5f3e0f4117b14435aca3446b73078dc4e1402 Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 09:36:51 -0400 Subject: [PATCH 181/244] Move editing-markdown to main /docs/ --- docs/{contributing => }/editing-markdown.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{contributing => }/editing-markdown.md (100%) diff --git a/docs/contributing/editing-markdown.md b/docs/editing-markdown.md similarity index 100% rename from docs/contributing/editing-markdown.md rename to docs/editing-markdown.md From 09759107b5969b0a056fc55fadae23894e8e6530 Mon Sep 17 00:00:00 2001 From: Joshua <30259508@cityofglacol.ac.uk> Date: Fri, 17 Jun 2022 14:40:50 +0100 Subject: [PATCH 182/244] Update link to editing-markdown gh doc --- src/content/developers/docs/index.md | 2 +- src/content/translations/de/developers/docs/index.md | 2 +- src/content/translations/es/developers/docs/index.md | 2 +- src/content/translations/fa/developers/docs/index.md | 2 +- src/content/translations/fr/developers/docs/index.md | 2 +- src/content/translations/id/developers/docs/index.md | 2 +- src/content/translations/it/developers/docs/index.md | 2 +- src/content/translations/pt-br/developers/docs/index.md | 2 +- src/content/translations/ro/developers/docs/index.md | 2 +- src/content/translations/tr/developers/docs/index.md | 2 +- src/content/translations/zh/developers/docs/index.md | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/content/developers/docs/index.md b/src/content/developers/docs/index.md index 182a7c98bb2..6f967eed495 100644 --- a/src/content/developers/docs/index.md +++ b/src/content/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true This documentation is designed to help you build with Ethereum. It covers Ethereum as a concept, explains the Ethereum tech stack, and documents advanced topics for more complex applications and use cases. -This is an open-source community effort, so feel free to suggest new topics, add new content, and provide examples wherever you think it might be helpful. All documentation can be edited via GitHub – if you're unsure how, [follow these instructions](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/contributing/editing-markdown.md). +This is an open-source community effort, so feel free to suggest new topics, add new content, and provide examples wherever you think it might be helpful. All documentation can be edited via GitHub – if you're unsure how, [follow these instructions](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). ## Development modules {#development-modules} diff --git a/src/content/translations/de/developers/docs/index.md b/src/content/translations/de/developers/docs/index.md index f15bea6d8af..ecaa546520f 100644 --- a/src/content/translations/de/developers/docs/index.md +++ b/src/content/translations/de/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Diese Dokumentation soll dir helfen, mit Ethereum zu entwickeln. Es umfasst Ethereum als Konzept, erklärt den Ethereum-Technologie-Stack, dokumentiert fortgeschrittene Themen für komplexere Anwendungen und Anwendungsfälle. -Dies ist eine Open-Source-Community-Anstrengung, also zögere nicht, neue Themen vorzuschlagen oder neue Inhalte hinzuzufügen, und gib Beispiele an, wo immer du denkst, dass dies hilfreich sein könnte. Alle Entwicklerdokumentationen können auf GitHub editiert werden. Falls du dir nicht sicher bist wie, [folge einfach dieser Anleitung](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/contributing/editing-markdown.md). +Dies ist eine Open-Source-Community-Anstrengung, also zögere nicht, neue Themen vorzuschlagen oder neue Inhalte hinzuzufügen, und gib Beispiele an, wo immer du denkst, dass dies hilfreich sein könnte. Alle Entwicklerdokumentationen können auf GitHub editiert werden. Falls du dir nicht sicher bist wie, [folge einfach dieser Anleitung](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). ## Entwicklungsmodule {#development-modules} diff --git a/src/content/translations/es/developers/docs/index.md b/src/content/translations/es/developers/docs/index.md index 477d546ceec..28c4c89f0c0 100644 --- a/src/content/translations/es/developers/docs/index.md +++ b/src/content/translations/es/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Esta documentación está diseñada para ayudarte a construir con Ethereum. Cubre Ethereum como un concepto, explica la pila de tecnología de Ethereum, y documenta temas avanzados para aplicaciones y casos de uso más complejos. -Este es un esfuerzo comunitario de código abierto, así que siéntete libre de sugerir nuevos temas, agregue nuevo contenido y proporcione ejemplos dondequiera que crea que puede ser útil. Toda la documentación puede editarse a través de GitHub - si no esta seguro/a de cómo hacerlo, [ siga estas instrucciones](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +Este es un esfuerzo comunitario de código abierto, así que siéntete libre de sugerir nuevos temas, agregue nuevo contenido y proporcione ejemplos dondequiera que crea que puede ser útil. Toda la documentación puede editarse a través de GitHub - si no esta seguro/a de cómo hacerlo, [ siga estas instrucciones](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Módulos de desarrollo {#development-modules} diff --git a/src/content/translations/fa/developers/docs/index.md b/src/content/translations/fa/developers/docs/index.md index 4329633367d..22a7d296565 100644 --- a/src/content/translations/fa/developers/docs/index.md +++ b/src/content/translations/fa/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true مستندات برای کمک به شما برای ساختن با اتریوم طراحی شده‌اند. این مستندات اتریوم را در مقام یک مفهوم شرح می‌دهد، فناوری پشته‌ی اتریوم را توضیح می‌دهد و موضوعات پیشرفته را برای برنامه‌های کاربردی و موارد استفاده‌ی پیچیده‌تر مستند می‌کند. -مستندات به کوشش جامعه‌ی متن‌باز تهیه می‌شود، پس برای پیشنهاد دادن موضوعات جدید، افزودن محتوای جدید، ساخت مثال و هرچیزی که فکر می‌کنید مفید است راحت باشید. تمام مستندات می‌توانند در گیت‌هاب ویرایش شوند - اگر مطمئن نیستید چگونه می‌توان این کار را انجام دارد، [ این دستورالعمل‌ها را دنبال کنید](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +مستندات به کوشش جامعه‌ی متن‌باز تهیه می‌شود، پس برای پیشنهاد دادن موضوعات جدید، افزودن محتوای جدید، ساخت مثال و هرچیزی که فکر می‌کنید مفید است راحت باشید. تمام مستندات می‌توانند در گیت‌هاب ویرایش شوند - اگر مطمئن نیستید چگونه می‌توان این کار را انجام دارد، [ این دستورالعمل‌ها را دنبال کنید](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## ماژول‌های توسعه {#development-modules} diff --git a/src/content/translations/fr/developers/docs/index.md b/src/content/translations/fr/developers/docs/index.md index bc4cf3d6066..8c74a19c5bb 100644 --- a/src/content/translations/fr/developers/docs/index.md +++ b/src/content/translations/fr/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Cette documentation est conçue pour vous aider à construire avec Ethereum. Elle couvre Ethereum en tant que concept, explique la pile de technologie Ethereum et documente les sujets avancés pour les applications et les cas d'utilisation plus complexes. -Il s'agit d'un effort communautaire open source, alors n'hésitez pas à suggérer de nouveaux sujets, à ajouter un nouveau contenu et à fournir des exemples là où vous pensez que cela pourrait être utile. Toute la documentation peut être modifiée via GitHub. Si vous ne savez pas comment faire, [suivez ces instructions](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/contributing/editing-markdown.md). +Il s'agit d'un effort communautaire open source, alors n'hésitez pas à suggérer de nouveaux sujets, à ajouter un nouveau contenu et à fournir des exemples là où vous pensez que cela pourrait être utile. Toute la documentation peut être modifiée via GitHub. Si vous ne savez pas comment faire, [suivez ces instructions](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). ## Modules de développement {#development-modules} diff --git a/src/content/translations/id/developers/docs/index.md b/src/content/translations/id/developers/docs/index.md index d0846cbc004..037841c0313 100644 --- a/src/content/translations/id/developers/docs/index.md +++ b/src/content/translations/id/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Dokumentasi ini didesain untuk menolong Anda membangun dengan Ethereum. Dokumen ini membahas Ethereum sebagai sebuah konsep, menjelaskan tumpukan teknologi Ethereum, dan mendokumentasikan topik tingkat lanjut untuk aplikasi dan kasus penggunaan yang lebih rumit. -Ini adalah upaya komunitas sumber terbuka, jadi jangan sungkan untuk mengusulkan topik baru, menambahkan konten, dan menyediakan contoh kapan pun Anda anggap akan membantu. Semua dokumentasi dapat diedit melalui GitHub – jika Anda tidak yakin caranya, [ikuti instruksi ini](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +Ini adalah upaya komunitas sumber terbuka, jadi jangan sungkan untuk mengusulkan topik baru, menambahkan konten, dan menyediakan contoh kapan pun Anda anggap akan membantu. Semua dokumentasi dapat diedit melalui GitHub – jika Anda tidak yakin caranya, [ikuti instruksi ini](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Modul pengembangan {#development-modules} diff --git a/src/content/translations/it/developers/docs/index.md b/src/content/translations/it/developers/docs/index.md index 67c0e420bde..c98e6311d5d 100644 --- a/src/content/translations/it/developers/docs/index.md +++ b/src/content/translations/it/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Questa documentazione è stata creata per supportare nello sviluppo per Ethereum. Tratta il concetto che sta alla base di Ethereum, spiega lo stack e propone documentazione su argomenti avanzati per utilizzi e casi d'uso più complessi. -È stata creata congiuntamente dalla community ed è open source, quindi suggerisci pure nuovi argomenti, aggiungi contenuti o inserisci esempi dove credi che possano essere utili. Tutta la documentazione è modificabile tramite GitHub – se non sai come fare, [segui queste istruzioni](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +È stata creata congiuntamente dalla community ed è open source, quindi suggerisci pure nuovi argomenti, aggiungi contenuti o inserisci esempi dove credi che possano essere utili. Tutta la documentazione è modificabile tramite GitHub – se non sai come fare, [segui queste istruzioni](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Moduli di sviluppo {#development-modules} diff --git a/src/content/translations/pt-br/developers/docs/index.md b/src/content/translations/pt-br/developers/docs/index.md index 6fb7c21889f..a8b44ccf2e5 100644 --- a/src/content/translations/pt-br/developers/docs/index.md +++ b/src/content/translations/pt-br/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true O objetivo dessa documentação é ajudá-lo a criar utilizando o Ethereum. Ela cobre o Ethereum como um conceito, explica a tecnologia de pilha do Ethereum e documenta tópicos avançados para aplicativos e casos de uso mais complexos. -Este é um empenho da comunidade open-source, então sinta-se à vontade para sugerir novos tópicos, adicionar novo conteúdo e fornecer exemplos onde você achar que pode ser útil. Toda a documentação é editável através do GitHub. Se não souber como, [siga estas instruções](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +Este é um empenho da comunidade open-source, então sinta-se à vontade para sugerir novos tópicos, adicionar novo conteúdo e fornecer exemplos onde você achar que pode ser útil. Toda a documentação é editável através do GitHub. Se não souber como, [siga estas instruções](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Módulos de desenvolvimento {#development-modules} diff --git a/src/content/translations/ro/developers/docs/index.md b/src/content/translations/ro/developers/docs/index.md index 74ceaf61210..775e6edc37a 100644 --- a/src/content/translations/ro/developers/docs/index.md +++ b/src/content/translations/ro/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Această documentație este concepută pentru a vă ajuta să construiţi cu Ethereum. Tratează Ethereum ca un concept, explică stiva tehnică Ethereum și documentează subiecte avansate pentru aplicații și cazuri de utilizare mai complexe. -Modul în care lucrăm este open-source, în colaborare cu comunitatea, așa că nu ezitaţi să sugeraţi subiecte noi, să adăugaţi conținut nou și să oferiţi exemple oriunde credeţi că ar fi util. Toată documentația se poate edita prin GitHub – dacă nu sunteţi sigur cum, [urmaţi aceste instrucțiuni](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md). +Modul în care lucrăm este open-source, în colaborare cu comunitatea, așa că nu ezitaţi să sugeraţi subiecte noi, să adăugaţi conținut nou și să oferiţi exemple oriunde credeţi că ar fi util. Toată documentația se poate edita prin GitHub – dacă nu sunteţi sigur cum, [urmaţi aceste instrucțiuni](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Module de dezvoltare {#development-modules} diff --git a/src/content/translations/tr/developers/docs/index.md b/src/content/translations/tr/developers/docs/index.md index 45968999713..ef9e48b80b7 100644 --- a/src/content/translations/tr/developers/docs/index.md +++ b/src/content/translations/tr/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Bu belge, Ethereum ile geliştirmenize yardımcı olmak için tasarlanmıştır. Ethereum'un kavramsal yönünü kapsar, Ethereum teknoloji yığınını açıklar ve daha karmaşık uygulamalar ve kullanım alanları için gelişmiş konuları belgeler. -Bu, açık kaynaklı bir topluluk çalışması olduğu için yararlı olabileceğini düşündüğünüz yeni konuları önermekten, yeni içerik eklemekten ve örnekler vermekten çekinmeyin. Tüm dökümanlar GitHub üzerinden düzenlenebilir. – Eğer nasıl yapılacağından emin değilseniz [şu talimatları izleyin](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/contributing/editing-markdown.md). +Bu, açık kaynaklı bir topluluk çalışması olduğu için yararlı olabileceğini düşündüğünüz yeni konuları önermekten, yeni içerik eklemekten ve örnekler vermekten çekinmeyin. Tüm dökümanlar GitHub üzerinden düzenlenebilir. – Eğer nasıl yapılacağından emin değilseniz [şu talimatları izleyin](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). ## Geliştirme modülleri {#development-modules} diff --git a/src/content/translations/zh/developers/docs/index.md b/src/content/translations/zh/developers/docs/index.md index f2e67c0a4ec..f2bbb87e5df 100644 --- a/src/content/translations/zh/developers/docs/index.md +++ b/src/content/translations/zh/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true 本文档旨在帮助您构建以太坊。 它从概念层面,解释了以太坊的技术堆栈,并记录了以太坊更复杂的应用和使用案例。 -基于开源社区的努力,您可以随时提出新的主题,添加新内容,并在您认为可能有用的地方提供示例。 所有文档都可通过 GitHub 编辑 — 如果您不了解如何使用,[请遵循这些说明](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/contributing/editing-markdown.md)。 +基于开源社区的努力,您可以随时提出新的主题,添加新内容,并在您认为可能有用的地方提供示例。 所有文档都可通过 GitHub 编辑 — 如果您不了解如何使用,[请遵循这些说明](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md)。 ## 开发单元 {#development-modules} From c00bcab774bad98d20d39241f9ae7d4a3fda37ab Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 17 Jun 2022 14:41:57 +0100 Subject: [PATCH 183/244] Fix link spacing --- src/content/translations/es/developers/docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/translations/es/developers/docs/index.md b/src/content/translations/es/developers/docs/index.md index 28c4c89f0c0..2ca699da6dd 100644 --- a/src/content/translations/es/developers/docs/index.md +++ b/src/content/translations/es/developers/docs/index.md @@ -7,7 +7,7 @@ sidebar: true Esta documentación está diseñada para ayudarte a construir con Ethereum. Cubre Ethereum como un concepto, explica la pila de tecnología de Ethereum, y documenta temas avanzados para aplicaciones y casos de uso más complejos. -Este es un esfuerzo comunitario de código abierto, así que siéntete libre de sugerir nuevos temas, agregue nuevo contenido y proporcione ejemplos dondequiera que crea que puede ser útil. Toda la documentación puede editarse a través de GitHub - si no esta seguro/a de cómo hacerlo, [ siga estas instrucciones](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). +Este es un esfuerzo comunitario de código abierto, así que siéntete libre de sugerir nuevos temas, agregue nuevo contenido y proporcione ejemplos dondequiera que crea que puede ser útil. Toda la documentación puede editarse a través de GitHub - si no esta seguro/a de cómo hacerlo, [siga estas instrucciones](https://github.com/ethereum/ethereum-org-website/tree/dev/docs/editing-markdown.md). ## Módulos de desarrollo {#development-modules} From 0e7f950aab9fe8504775407b53d19bd09ce56849 Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:10:22 -0400 Subject: [PATCH 184/244] Update listing policy link --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index ed051c406c4..bc64c1f335f 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. + Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-wallet/). Only continue with the issue if the wallet meets the criteria listed there. - type: markdown id: project_info attributes: From 787880d863387be84fec740f04121ec9f7c4d2dd Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:15:24 -0400 Subject: [PATCH 185/244] Pluralize /adding-staking-products --- .github/ISSUE_TEMPLATE/suggest_staking_product.md | 2 +- .../index.md | 0 src/content/contributing/index.md | 4 ++-- .../contributing/translation-program/content-buckets/index.md | 2 +- src/content/staking/pools/index.md | 2 +- src/content/staking/saas/index.md | 2 +- src/content/staking/solo/index.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename src/content/contributing/{adding-staking-product => adding-staking-products}/index.md (100%) diff --git a/.github/ISSUE_TEMPLATE/suggest_staking_product.md b/.github/ISSUE_TEMPLATE/suggest_staking_product.md index 6538479a9fb..8609e1931ab 100644 --- a/.github/ISSUE_TEMPLATE/suggest_staking_product.md +++ b/.github/ISSUE_TEMPLATE/suggest_staking_product.md @@ -6,7 +6,7 @@ labels: "feature :sparkles:, content :fountain_pen:" assignees: "" --- -Before suggesting a staking product or service, make sure you've read [our listing policy](/contributing/adding-staking-product/). +Before suggesting a staking product or service, make sure you've read [our listing policy](/contributing/adding-staking-products/). Only continue with the issue if the staking product meets the criteria listed there. diff --git a/src/content/contributing/adding-staking-product/index.md b/src/content/contributing/adding-staking-products/index.md similarity index 100% rename from src/content/contributing/adding-staking-product/index.md rename to src/content/contributing/adding-staking-products/index.md diff --git a/src/content/contributing/index.md b/src/content/contributing/index.md index 02f2f5de9da..595337c6d8a 100644 --- a/src/content/contributing/index.md +++ b/src/content/contributing/index.md @@ -36,9 +36,9 @@ The ethereum.org website, like Ethereum more broadly, is an open-source project. _– Help us continue to expand the Ethereum [glossary](/glossary/)_ - [Create/edit content](/contributing/#how-to-update-content) _– Suggest new pages or makes tweaks to what's here already_ -- [Add a layer 2](/contributing/adding-layer-2) +- [Add a layer 2](/contributing/adding-layer-2/) _- Add a layer 2 to a relevant page_ -- [Add a staking product or service](/contributing/adding-staking-product/) - _Add a project that helps facilitate solo staking, pooled staking, or staking as a service_ +- [Add a staking product or service](/contributing/adding-staking-products/) - _Add a project that helps facilitate solo staking, pooled staking, or staking as a service_ - [Add a wallet](/contributing/adding-wallet/) _- Add a wallet for the [find wallets page](/wallets/find-wallet/)._ _Any questions?_ 🤔 Reach out on our [Discord server](https://discord.gg/CetY6Y4) diff --git a/src/content/contributing/translation-program/content-buckets/index.md b/src/content/contributing/translation-program/content-buckets/index.md index dcbc9544936..c4a17bbba74 100644 --- a/src/content/contributing/translation-program/content-buckets/index.md +++ b/src/content/contributing/translation-program/content-buckets/index.md @@ -159,7 +159,7 @@ Below is a breakdown of the website pages each content bucket contains. - [Adding glossary terms](/contributing/adding-glossary-terms/) - [Adding layer 2s](/contributing/adding-layer-2/) - [Adding products](/contributing/adding-products/) -- [Adding staking products](/contributing/adding-staking-product/) +- [Adding staking products](/contributing/adding-staking-products/) - [Adding content resources](/contributing/content-resources/) - [Translation Program](/contributing/translation-program/) - [Translation guide](/contributing/translation-program/translation-guide/) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index c7d0327a606..2a8a61e2950 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -58,7 +58,7 @@ Please note the importance of choosing a service that takes <a href="/developers <StakingProductsCardGrid category="pools" /> -Have a suggestion for a staking tool we missed? Check out our [product listing policy](/contributing/adding-staking-product/) to see if it would be a good fit, and to submit it for review. +Have a suggestion for a staking tool we missed? Check out our [product listing policy](/contributing/adding-staking-products/) to see if it would be a good fit, and to submit it for review. ## FAQ {#faq} diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index fc99b84725f..a1cbfb54500 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -61,7 +61,7 @@ Please note the importance of supporting <a href="/developers/docs/nodes-and-cli <StakingProductsCardGrid category="keyGen" /> -Have a suggestion for a staking-as-a-service provider we missed? Check out our [product listing policy](/contributing/adding-staking-product/) to see if it would be a good fit, and to submit it for review. +Have a suggestion for a staking-as-a-service provider we missed? Check out our [product listing policy](/contributing/adding-staking-products/) to see if it would be a good fit, and to submit it for review. ## FAQ {#faq} diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 230c35466b7..4f64ba0b2e0 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -119,7 +119,7 @@ These tools can be used as an alternative to the [Staking Deposit CLI](https://g <StakingProductsCardGrid category="keyGen" /> -Have a suggestion for a staking tool we missed? Check out our [product listing policy](/contributing/adding-staking-product/) to see if it would be a good fit, and to submit it for review. +Have a suggestion for a staking tool we missed? Check out our [product listing policy](/contributing/adding-staking-products/) to see if it would be a good fit, and to submit it for review. ## Explore solo staking guides {#staking-guides} From 3a9b1281b8a1911b2df530fb96feee3456f07e11 Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:16:31 -0400 Subject: [PATCH 186/244] Pluralize /adding-layer-2s --- .github/ISSUE_TEMPLATE/suggest_layer2.md | 2 +- .../contributing/{adding-layer-2 => adding-layer-2s}/index.md | 0 src/content/contributing/index.md | 2 +- .../contributing/translation-program/content-buckets/index.md | 2 +- src/content/translations/tr/contributing/index.md | 4 ++-- src/intl/en/page-layer-2.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/content/contributing/{adding-layer-2 => adding-layer-2s}/index.md (100%) diff --git a/.github/ISSUE_TEMPLATE/suggest_layer2.md b/.github/ISSUE_TEMPLATE/suggest_layer2.md index 46d32a37702..c94ade05c93 100644 --- a/.github/ISSUE_TEMPLATE/suggest_layer2.md +++ b/.github/ISSUE_TEMPLATE/suggest_layer2.md @@ -6,7 +6,7 @@ labels: "feature :sparkles:, content :fountain_pen:" assignees: "" --- -Before suggesting a layer 2, make sure you've read [our listing policy](/contributing/adding-layer-2/). +Before suggesting a layer 2, make sure you've read [our listing policy](/contributing/adding-layer-2s/). Only continue with the issue if your layer 2 meets the criteria listed there. diff --git a/src/content/contributing/adding-layer-2/index.md b/src/content/contributing/adding-layer-2s/index.md similarity index 100% rename from src/content/contributing/adding-layer-2/index.md rename to src/content/contributing/adding-layer-2s/index.md diff --git a/src/content/contributing/index.md b/src/content/contributing/index.md index 595337c6d8a..396ee6c6744 100644 --- a/src/content/contributing/index.md +++ b/src/content/contributing/index.md @@ -36,7 +36,7 @@ The ethereum.org website, like Ethereum more broadly, is an open-source project. _– Help us continue to expand the Ethereum [glossary](/glossary/)_ - [Create/edit content](/contributing/#how-to-update-content) _– Suggest new pages or makes tweaks to what's here already_ -- [Add a layer 2](/contributing/adding-layer-2/) +- [Add a layer 2](/contributing/adding-layer-2s/) _- Add a layer 2 to a relevant page_ - [Add a staking product or service](/contributing/adding-staking-products/) - _Add a project that helps facilitate solo staking, pooled staking, or staking as a service_ - [Add a wallet](/contributing/adding-wallet/) _- Add a wallet for the [find wallets page](/wallets/find-wallet/)._ diff --git a/src/content/contributing/translation-program/content-buckets/index.md b/src/content/contributing/translation-program/content-buckets/index.md index c4a17bbba74..791646b3a3f 100644 --- a/src/content/contributing/translation-program/content-buckets/index.md +++ b/src/content/contributing/translation-program/content-buckets/index.md @@ -157,7 +157,7 @@ Below is a breakdown of the website pages each content bucket contains. - [Adding developer tools](/contributing/adding-developer-tools/) - [Adding exchanges](/contributing/adding-exchanges/) - [Adding glossary terms](/contributing/adding-glossary-terms/) -- [Adding layer 2s](/contributing/adding-layer-2/) +- [Adding layer 2s](/contributing/adding-layer-2s/) - [Adding products](/contributing/adding-products/) - [Adding staking products](/contributing/adding-staking-products/) - [Adding content resources](/contributing/content-resources/) diff --git a/src/content/translations/tr/contributing/index.md b/src/content/translations/tr/contributing/index.md index ac8950c7616..28ea27902ce 100644 --- a/src/content/translations/tr/contributing/index.md +++ b/src/content/translations/tr/contributing/index.md @@ -25,8 +25,8 @@ Ethereum.org web sitesi, daha geniş anlamda Ethereum gibi açık kaynaklı bir - [Bir özellik isteyin](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.md&title=) _– Yeni bir özellik veya tasarım hakkında herhangi bir fikrinizi bize bildirin_ - [Bir sözlük terimi ekleyin](/contributing/adding-glossary-terms) _– Ethereum [sözlüğünü](/glossary/) genişletmeye devam etmemize yardımcı olun_ - [İçerik oluşturun/düzenleyin](/contributing/#how-to-update-content) _– Yeni sayfalar önerin veya zaten burada olanlar üzerinde değişiklikler yapın_ -- [Bir katman 2 ekleyin](/contributing/adding-layer-2) _- İlgili bir sayfaya bir katman 2 ekleyin_ -- [Bir stake etme ürünü veya hizmeti ekleyin](/contributing/adding-staking-product/) - _Tekli stake etme, havuzlu stake etme veya bir hizmet olarak stake etme_ +- [Bir katman 2 ekleyin](/contributing/adding-layer-2s/) _- İlgili bir sayfaya bir katman 2 ekleyin_ +- [Bir stake etme ürünü veya hizmeti ekleyin](/contributing/adding-staking-products/) - _Tekli stake etme, havuzlu stake etme veya bir hizmet olarak stake etme_ _Herhangi bir sorunuz mu var?_ 🤔 [Discord sunucumuzdan](https://discord.gg/CetY6Y4) bize ulaşın diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index 17791cf5bce..33c8ec18fb9 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -106,7 +106,7 @@ "layer-2-faq-question-4-description-2": "We encourage you to do your own research before transferring significant funds to a layer 2. For more information on the technology, risks, and trust assumptions of layer 2s, we recommend checking out <a href=\"https://l2beat.com/?view=risk\">L2BEAT</a>, which provides a comprehensive risk assessment framework of each project.", "layer-2-faq-question-4-description-3": "Blockchain bridges, which facilitate asset transfers to layer 2, are in their early stages of development and it is likely that the optimal bridge design has not been discovered yet. There have been <a href=\"https://rekt.news/wormhole-rekt/\">recent hacks of bridges</a>. <a href=\"/bridges/\">More information on bridges</a>.", "layer-2-faq-question-5-title": "Why aren't some layer 2 projects listed here?", - "layer-2-faq-question-5-description-1": "We want to make sure we list the best resources possible so users can navigate the layer 2 space in a safe and confident manner. We maintain a framework of criteria for how projects are evaluated for inclusion. <a href=\"/contributing/adding-layer-2/\">View our layer 2 listing policy here</a>.", + "layer-2-faq-question-5-description-1": "We want to make sure we list the best resources possible so users can navigate the layer 2 space in a safe and confident manner. We maintain a framework of criteria for how projects are evaluated for inclusion. <a href=\"/contributing/adding-layer-2s/\">View our layer 2 listing policy here</a>.", "layer-2-faq-question-5-description-2": "Anyone is free to suggest adding a layer 2 on ethereum.org. If there's a layer 2 that we have missed, <a href=\"https://github.com/ethereum/ethereum-org-website/issues/new?&template=suggest_layer2.md\">please suggest it</a>.", "layer-2-further-reading-title": "Further reading", "a-rollup-centric-ethereum-roadmap": "A rollup-centric ethereum roadmap", From 77123278e3dec0051a254fee8aed9860b26b51b2 Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:17:13 -0400 Subject: [PATCH 187/244] Pluralize /adding-wallets --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 2 +- .../contributing/{adding-wallet => adding-wallets}/index.md | 0 src/content/contributing/index.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/content/contributing/{adding-wallet => adding-wallets}/index.md (100%) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index bc64c1f335f..95ead035b89 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-wallet/). Only continue with the issue if the wallet meets the criteria listed there. + Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-wallets/). Only continue with the issue if the wallet meets the criteria listed there. - type: markdown id: project_info attributes: diff --git a/src/content/contributing/adding-wallet/index.md b/src/content/contributing/adding-wallets/index.md similarity index 100% rename from src/content/contributing/adding-wallet/index.md rename to src/content/contributing/adding-wallets/index.md diff --git a/src/content/contributing/index.md b/src/content/contributing/index.md index 396ee6c6744..b3c262f3ec4 100644 --- a/src/content/contributing/index.md +++ b/src/content/contributing/index.md @@ -39,7 +39,7 @@ The ethereum.org website, like Ethereum more broadly, is an open-source project. - [Add a layer 2](/contributing/adding-layer-2s/) _- Add a layer 2 to a relevant page_ - [Add a staking product or service](/contributing/adding-staking-products/) - _Add a project that helps facilitate solo staking, pooled staking, or staking as a service_ -- [Add a wallet](/contributing/adding-wallet/) _- Add a wallet for the [find wallets page](/wallets/find-wallet/)._ +- [Add a wallet](/contributing/adding-wallets/) _- Add a wallet for the [find wallets page](/wallets/find-wallet/)._ _Any questions?_ 🤔 Reach out on our [Discord server](https://discord.gg/CetY6Y4) From 06ca42913150a33a43a01acf1617dac240b98107 Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:53:08 -0400 Subject: [PATCH 188/244] Remove dismissable Eth2 card --- src/intl/ar/common.json | 2 -- src/intl/az/common.json | 2 -- src/intl/bg/common.json | 2 -- src/intl/ca/common.json | 2 -- src/intl/cs/common.json | 2 -- src/intl/da/common.json | 2 -- src/intl/de/common.json | 2 -- src/intl/el/common.json | 2 -- src/intl/en/common.json | 2 -- src/intl/es/common.json | 2 -- src/intl/fa/common.json | 2 -- src/intl/fi/common.json | 2 -- src/intl/fr/common.json | 2 -- src/intl/gl/common.json | 2 -- src/intl/hi/common.json | 2 -- src/intl/hu/common.json | 2 -- src/intl/id/common.json | 2 -- src/intl/it/common.json | 2 -- src/intl/ja/common.json | 2 -- src/intl/ka/common.json | 2 -- src/intl/ko/common.json | 2 -- src/intl/lt/common.json | 2 -- src/intl/ml/common.json | 2 -- src/intl/ms/common.json | 2 -- src/intl/nl/common.json | 2 -- src/intl/pt-br/common.json | 2 -- src/intl/ro/common.json | 2 -- src/intl/ru/common.json | 2 -- src/intl/sk/common.json | 2 -- src/intl/sl/common.json | 2 -- src/intl/sw/common.json | 2 -- src/intl/th/common.json | 2 -- src/intl/tr/common.json | 2 -- src/intl/vi/common.json | 2 -- src/intl/zh-tw/common.json | 2 -- src/intl/zh/common.json | 2 -- src/templates/upgrade.tsx | 12 ------------ 37 files changed, 84 deletions(-) diff --git a/src/intl/ar/common.json b/src/intl/ar/common.json index 00beb12ccf5..cbaf3ad1aa3 100644 --- a/src/intl/ar/common.json +++ b/src/intl/ar/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "تشغيل عميل إجماع آراء", "consensus-run-beacon-chain-desc": "يحتاج إثيريوم إلى أكبر عدد ممكن من العملاء. ساعد إثيريوم للمصلحة العامة!", "consensus-when-shipping": "متى يتم الشحن؟", - "eth-upgrade-what-happened": "ماذا حدث لـ 'Eth2؟'", - "eth-upgrade-what-happened-description": "لقد تم التخلي عن مصطلح \"Eth2\" ونحن نقترب من الدمج. \"طبقة إجماع الآراء\" تلخص ما كان يعرف سابقاً باسم \"Eth2\".", "ethereum": "إثيريوم", "ethereum-upgrades": "ترقية إثيريوم", "ethereum-brand-assets": "أصول العلامة التجارية لإيثريوم", diff --git a/src/intl/az/common.json b/src/intl/az/common.json index cc065645a4e..92cddff30bb 100644 --- a/src/intl/az/common.json +++ b/src/intl/az/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Konsensus müştərisini başlat", "consensus-run-beacon-chain-desc": "Ethereum mümkün qədər çox müştəriyə ehtiyac duyur. Ethereum ictimai xeyrinə dəstək olun!", "consensus-when-shipping": "Nə vaxt göndərilir?", - "eth-upgrade-what-happened": "Eth2-ə nə oldu?", - "eth-upgrade-what-happened-description": "Birləşmə-yə yaxınlaşdıqca \"Eth2\" termini köhnəldi. “Konsensus təbəqəsi” əvvəllər “Eth2” kimi bilinən anlayışı əhatə edir.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum yenilənmələri", "ethereum-brand-assets": "Ethereum brend aktivləri", diff --git a/src/intl/bg/common.json b/src/intl/bg/common.json index f7bce272d42..142d77b13d2 100644 --- a/src/intl/bg/common.json +++ b/src/intl/bg/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Активирайте клиент за консенсус", "consensus-run-beacon-chain-desc": "Етереум има нужда от колкото може повече клиенти. Помогнете за общественото благо на Етереум!", "consensus-when-shipping": "Кога излиза?", - "eth-upgrade-what-happened": "Какво се случи с „Eth2“?", - "eth-upgrade-what-happened-description": "С наближаването на сливането (The Merge) терминът „Eth2“ бива отхвърлен. Това, което преди беше известно като „Eth2“, сега е „консенсусен слой“ (consensus layer).", "ethereum": "Етереум", "ethereum-upgrades": "Подобрения на Етереум", "ethereum-brand-assets": "Характеристики на марката Етереум", diff --git a/src/intl/ca/common.json b/src/intl/ca/common.json index dc723a5db0f..52e5eddc650 100644 --- a/src/intl/ca/common.json +++ b/src/intl/ca/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "Executar un client de consens", "consensus-run-beacon-chain-desc": "Ethereum necessita el màxim possible de clients actius. Ajudeu amb aquest bé públic d’Ethereum!", "consensus-when-shipping": "Quan es llençarà?", - "eth-upgrade-what-happened": "Què va passar amb «Eth2»?", - "eth-upgrade-what-happened-description": "El terme «Eth2» ha quedat obsolet a mida que ens aproximem a la fusió. La «capa de consens» encapsula el que abans era conegut com a «Eth2».", "ethereum": "Ethereum", "ethereum-upgrades": "Millores d'Ethereum", "ethereum-brand-assets": "Actius de la marca Ethereum", diff --git a/src/intl/cs/common.json b/src/intl/cs/common.json index 2f8ca4436dc..87c6303d4be 100644 --- a/src/intl/cs/common.json +++ b/src/intl/cs/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Spustit konsensuálního klienta", "consensus-run-beacon-chain-desc": "Ethereum potřebuje co nejvíce klientů. Pomozte nám dostat Ethereum do povědomí lidí.", "consensus-when-shipping": "Kdy dojde k nasazení?", - "eth-upgrade-what-happened": "Co se stalo s „Eth2“?", - "eth-upgrade-what-happened-description": "Termín „Eth2“ byl s blížícím se sloučením zastaralý. „Konsensuální vrstva“ zahrnuje to, co se dříve označovalo jako „Eth2“.", "ethereum": "Ethereum", "ethereum-upgrades": "Vylepšení Etherea", "ethereum-brand-assets": "Aktiva značky Ethereum", diff --git a/src/intl/da/common.json b/src/intl/da/common.json index c579efa901e..cd7dbe2ae98 100644 --- a/src/intl/da/common.json +++ b/src/intl/da/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Kør en konsensusklient", "consensus-run-beacon-chain-desc": "Ethereum har brug for så mange kunder, der kører som muligt. Hjælp med dette fælles gode for Ethereum!", "consensus-when-shipping": "Hvornår sendes det?", - "eth-upgrade-what-happened": "Hvad skete der med 'Eth2?'", - "eth-upgrade-what-happened-description": "Begrebet 'Eth2' er blevet udfaset, da vi nærmer os The Merge. 'Konsensuslaget' indkapsler det der tidligere var kendt som 'Eth2.'", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum-opgraderinger", "ethereum-brand-assets": "Ethereum-mærkeaktiver", diff --git a/src/intl/de/common.json b/src/intl/de/common.json index 0558f7906ed..b39c45b9f73 100644 --- a/src/intl/de/common.json +++ b/src/intl/de/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Einen Consensus-Client ausführen", "consensus-run-beacon-chain-desc": "Ethereum braucht so viele Clients wie möglich. Hilf mit diesem öffentlichen Gut!", "consensus-when-shipping": "Wann wird es veröffentlicht?", - "eth-upgrade-what-happened": "Was ist mit „Eth2“ passiert?", - "eth-upgrade-what-happened-description": "Der Begriff „Eth2“ wird schrittweise veralten und wegfallen. Was heute noch als „Eth2“ bekannt ist, wird zukünftig den Namen „Consensus Layer“ tragen.", "ethereum": "Ethereum", "ethereum-upgrades": "Die Ethereum Upgrades", "ethereum-brand-assets": "Ethereum – Marken-Assets", diff --git a/src/intl/el/common.json b/src/intl/el/common.json index 1c5b03db377..f1eeb1c5915 100644 --- a/src/intl/el/common.json +++ b/src/intl/el/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "Εκτέλεση συναινετικής εφαρμογής πελάτη", "consensus-run-beacon-chain-desc": "Το Ethereum χρειάζεται όσο το δυνατόν περισσότερους πελάτες. Βοηθήστε με αυτό το δημόσιο αγαθό του Ethereum!", "consensus-when-shipping": "Πότε καταφτάνει;", - "eth-upgrade-what-happened": "Τι συνέβη στο «Eth2»;", - "eth-upgrade-what-happened-description": "Ο όρος «Eth2» έχει υποβαθμιστεί, καθώς πλησιάζουμε στη συγχώνευση. Ο όρος «συναινετικό επίπεδο» αντιπροσωπεύει πλέον αυτό που ήταν γνωστό ως «Eth2».", "ethereum": "Ethereum", "ethereum-upgrades": "Αναβαθμίσεις Ethereum", "ethereum-brand-assets": "Ψηφιακά στοιχεία επωνυμίας Ethereum", diff --git a/src/intl/en/common.json b/src/intl/en/common.json index f351bffa51e..416963240c2 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -61,8 +61,6 @@ "consensus-run-beacon-chain": "Run a consensus client", "consensus-run-beacon-chain-desc": "Ethereum needs as many clients running as possible. Help with this Ethereum public good!", "consensus-when-shipping": "When's it shipping?", - "eth-upgrade-what-happened": "What happened to 'Eth2?'", - "eth-upgrade-what-happened-description": "The term 'Eth2' has been deprecated as we approach The Merge. The 'consensus layer' encapsulates what was formerly known as 'Eth2.'", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum upgrades", "ethereum-brand-assets": "Ethereum brand assets", diff --git a/src/intl/es/common.json b/src/intl/es/common.json index 17a4f48001e..3982af5d2a3 100644 --- a/src/intl/es/common.json +++ b/src/intl/es/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Ejecutar un cliente de consenso", "consensus-run-beacon-chain-desc": "Ethereum necesita tantos clientes participando como sea posible. ¡Ayude con este bien público de Ethereum!", "consensus-when-shipping": "¿Cuándo se lanza?", - "eth-upgrade-what-happened": "¿Qué sucedió con «Eth2»?", - "eth-upgrade-what-happened-description": "El término «Eth2» ha quedado obsoleto a medida que nos acercamos a la fusión. La «capa de consenso» engloba lo que en el pasado era más conocido como «Eth2».", "ethereum": "Ethereum", "ethereum-upgrades": "Actualizaciones de Ethereum", "ethereum-brand-assets": "Activos de marca de Ethereum", diff --git a/src/intl/fa/common.json b/src/intl/fa/common.json index 746712c83d7..9a85cea0bef 100644 --- a/src/intl/fa/common.json +++ b/src/intl/fa/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "راه‌اندازی یک کلاینت وفاق", "consensus-run-beacon-chain-desc": "اتریوم هر چه بیشتر به کلاینت نیاز دارد. به این کار عام‌المنفعه اتریوم کمک کنید!", "consensus-when-shipping": "چه زمانی راه‌اندازی می‌شود؟", - "eth-upgrade-what-happened": "چه بر سر «اتر۲» آمد؟", - "eth-upgrade-what-happened-description": "اصطلاح «اتر۲» با نزدیک‌شدن ما به ادغام منسوخ شده است. «لایه وفاق» در بر‌گیرنده همان چیزی است که پیشتر با نام «اتر۲» شناخته می‌شد.", "ethereum": "اتریوم", "ethereum-upgrades": "ارتقاهای اتریوم", "ethereum-brand-assets": "دارایی های نام تجاری اتریوم", diff --git a/src/intl/fi/common.json b/src/intl/fi/common.json index 41fc9ade776..1631ab69dfa 100644 --- a/src/intl/fi/common.json +++ b/src/intl/fi/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Suorita konsensusohjelma", "consensus-run-beacon-chain-desc": "Ethereum tarvitsee niin monta käynnissä olevaa asiakasohjelmaa kuin vain mahdollista. Auta Ethereumia tällä yleisellä hyvällä!", "consensus-when-shipping": "Milloin se julkaistaan?", - "eth-upgrade-what-happened": "Mitä tapahtui Eth2:lle?", - "eth-upgrade-what-happened-description": "Termi Eth2 on vanhentunut, kun lähestymme yhdistämistä. Konsensuskerros tiivistää sen, minkä ennen käsitti Eth2.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereumin päivitykset", "ethereum-brand-assets": "Ethereum-mediapankki", diff --git a/src/intl/fr/common.json b/src/intl/fr/common.json index 980d4bbcf29..c824ca6b086 100644 --- a/src/intl/fr/common.json +++ b/src/intl/fr/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Exécuter un client de consensus", "consensus-run-beacon-chain-desc": "Ethereum a besoin qu'un maximum de clients s'exécutent. Aidez ce bien public Ethereum !", "consensus-when-shipping": "C'est pour quand ?", - "eth-upgrade-what-happened": "Qu'est-il arrivé à « Eth2 » ?", - "eth-upgrade-what-happened-description": "Le terme « Eth2 » a été déprécié à l'approche de la fusion. La « couche de consensus » comprend ce qui était auparavant appelé « Eth2 ».", "ethereum": "Ethereum", "ethereum-upgrades": "Mises à niveau d'Ethereum", "ethereum-brand-assets": "Éléments de la marque Ethereum", diff --git a/src/intl/gl/common.json b/src/intl/gl/common.json index a7c6602cdca..434d93f86c9 100644 --- a/src/intl/gl/common.json +++ b/src/intl/gl/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Executar un cliente de consenso", "consensus-run-beacon-chain-desc": "Ethereum precisa tantos clientes participando coma sexa posible. Axude con este ben público de Ethereum!", "consensus-when-shipping": "Cando se envía?", - "eth-upgrade-what-happened": "Que aconteceu con 'Eth2'?", - "eth-upgrade-what-happened-description": "O termo \"Eth\" foi quedando obsoleto a medida que nos aproximamos á Fusión. A \"capa de consenso\" engloba o que era anteriormente coñecido como \"Eth2\"", "ethereum": "Ethereum", "ethereum-upgrades": "Melloras de Ethereum", "ethereum-brand-assets": "Activos de marca de Ethereum", diff --git a/src/intl/hi/common.json b/src/intl/hi/common.json index e336f9b39da..3826e390369 100644 --- a/src/intl/hi/common.json +++ b/src/intl/hi/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "सहमति ग्राहक चलाएँ", "consensus-run-beacon-chain-desc": "एथेरियम को ज़्यादा से ज़्यादा क्लाइंट चलाने की ज़रूरत होती है। इस एथेरियम सार्वजनिक हित में मदद करें!", "consensus-when-shipping": "यह कब शिप हो रहा है?", - "eth-upgrade-what-happened": "'Eth2' का क्या हुआ?", - "eth-upgrade-what-happened-description": "जैसे-जैसे हम मर्ज के करीब पहुँच रहे हैं, 'Eth2' शब्द का उपयोग बंद किया जा रहा है। 'सहमति परत' में वह चीज़ शामिल है, जिसे पहले 'Eth2' के नाम से जाना जाता था।", "ethereum": "Ethereum", "ethereum-upgrades": "एथेरियम के अपग्रेड", "ethereum-brand-assets": "इथेरियम ब्रांड संपत्ति", diff --git a/src/intl/hu/common.json b/src/intl/hu/common.json index 2a4796e5583..0dfe7c037ee 100644 --- a/src/intl/hu/common.json +++ b/src/intl/hu/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Konszenzus kliens futtatása", "consensus-run-beacon-chain-desc": "Az Ethereum annyi futó klienst igényel, amennyi lehetséges. Segítsd ezzel az Ethereum közjavat!", "consensus-when-shipping": "Mikor lesz kész?", - "eth-upgrade-what-happened": "Mi történt az „Eth2”-vel?", - "eth-upgrade-what-happened-description": "Az „Eth2” kifejezés elavulttá vált, ahogy közeledünk az egyesítéshez. A „konszenzusos réteg” magában foglalja azt, amit korábban „Eth2” néven ismertünk", "ethereum": "Ethereum", "ethereum-upgrades": "Az Ethereum fejlesztései", "ethereum-brand-assets": "Ethereum márkanév", diff --git a/src/intl/id/common.json b/src/intl/id/common.json index 73804d0fe5c..1364243a0bd 100644 --- a/src/intl/id/common.json +++ b/src/intl/id/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Jalankan klien konsensus", "consensus-run-beacon-chain-desc": "Ethereum membutuhkan klien yang aktif sebanyak mungkin. Bantu terkait barang publik Ethereum ini!", "consensus-when-shipping": "Kapan pengirimannya?", - "eth-upgrade-what-happened": "Apa yang terjadi dengan 'Eth2?'", - "eth-upgrade-what-happened-description": "Istilah 'Eth2' telah tidak digunakan lagi selagi kita mendekati penggabungan. 'Lapisan konsensus' merangkum apa yang sebelumnya dikenal sebagai 'Eth2.'", "ethereum": "Ethereum", "ethereum-upgrades": "Peningkatan Ethereum", "ethereum-brand-assets": "Aset Merek Ethereum", diff --git a/src/intl/it/common.json b/src/intl/it/common.json index 5b3f33264ed..2646605c91d 100644 --- a/src/intl/it/common.json +++ b/src/intl/it/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Esegui un client di consenso", "consensus-run-beacon-chain-desc": "Ethereum ha bisogno del maggior numero possibile di client in esecuzione. Contribuisci con questo bene pubblico di Ethereum!", "consensus-when-shipping": "Quando verrà rilasciato?", - "eth-upgrade-what-happened": "Cos'è successo a \"Eth2\"?", - "eth-upgrade-what-happened-description": "Il termine \"Eth2\" è stato abbandonato mentre ci avvicinavamo alla fusione. Il termine \"consensus layer\" ingloba ciò che prima era noto come \"Eth2\".", "ethereum": "Ethereum", "ethereum-upgrades": "Aggiornamenti di Ethereum", "ethereum-brand-assets": "Risorse del marchio Ethereum", diff --git a/src/intl/ja/common.json b/src/intl/ja/common.json index 7377e9d5306..1a678d3fda0 100644 --- a/src/intl/ja/common.json +++ b/src/intl/ja/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "コンセンサスクライアントの実行", "consensus-run-beacon-chain-desc": "イーサリアムではできるだけ多くのクライアントが稼働している必要があります。イーサリアムの公益的な活動にご協力ください。", "consensus-when-shipping": "導入のタイミング", - "eth-upgrade-what-happened": "Eth2の名称廃止", - "eth-upgrade-what-happened-description": "「マージ」が近づくにつれて、「Eth2」という用語を廃止しました。旧称「Eth2」として知られていたものは「コンセンサスレイヤ」に含まれます。", "ethereum": "イーサリアム", "ethereum-upgrades": "イーサリアムのアップグレード", "ethereum-brand-assets": "イーサリアムブランドアセット", diff --git a/src/intl/ka/common.json b/src/intl/ka/common.json index edc0cf64964..98f9e9c20c4 100644 --- a/src/intl/ka/common.json +++ b/src/intl/ka/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "გაუშვი კონსენსუსის კლიენტი", "consensus-run-beacon-chain-desc": "ეთერეუმს სჭირდება რაც შეიძლება მეტი კლიენტი. დაეხმარე ეთერეუმის საზოგადოების საკეთილდღეოდ!", "consensus-when-shipping": "როდის არის მიწოდება?", - "eth-upgrade-what-happened": "რა დაემართა 'Eth2-ს?'", - "eth-upgrade-what-happened-description": "ტერმინი 'Eth2' მოძველებულია, როდესაც ჩვენ ვსაუბრობთ შერწყმაზე. 'კონსენსუსის ფენა' მოიცავს იმას, რაც ადრე ცნობილი იყო როგორც 'Eth2.'", "ethereum": "ეთერეუმი", "ethereum-upgrades": "ეთერეუმის განახლებები", "ethereum-brand-assets": "ეთერეუმის ბრენდის აქტივები", diff --git a/src/intl/ko/common.json b/src/intl/ko/common.json index b5d461dd14c..cdfb4df6d76 100644 --- a/src/intl/ko/common.json +++ b/src/intl/ko/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "합의 클라이언트 실행하기", "consensus-run-beacon-chain-desc": "이더리움은 최대한 많은 클라이언트를 실행해야 합니다. 이더리움의 공익을 위해 이를 도와 주세요!", "consensus-when-shipping": "언제 런칭하나요?", - "eth-upgrade-what-happened": "'이더2(Eth2)'에게 무슨 일이 있어났나요?", - "eth-upgrade-what-happened-description": "'이더2(Eth2)'란 용어는 합병이 진행됨에 따라 더 이상 사용하지 않기로 했습니다. 대신 '합의 레이어(consensus layer)'라는, '이더2'의 의미를 내포하는 용어를 사용합니다.", "ethereum": "이더리움", "ethereum-upgrades": "이더리움 업그레이드", "ethereum-brand-assets": "이더리움 브랜드 자산", diff --git a/src/intl/lt/common.json b/src/intl/lt/common.json index 9669471b799..e5b92f6f3bf 100644 --- a/src/intl/lt/common.json +++ b/src/intl/lt/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Paleisti konsensuso klientą", "consensus-run-beacon-chain-desc": "Ethereum reikia kuo daugiau veikiančių klientų. Padėkite su šiuo Ethereum visuomeniniu sieku!", "consensus-when-shipping": "Kada bus išsiųstas?", - "eth-upgrade-what-happened": "Kas nutiko „Eth2“?", - "eth-upgrade-what-happened-description": "Artėjant susijungimui, terminas „Eth2“ buvo panaikintas. Konsensuso klientų tinklas apima tai, kas anksčiau buvo vadinama „Eth2“.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum atnaujinimai", "ethereum-brand-assets": "Ethereum prekių ženklo turtas", diff --git a/src/intl/ml/common.json b/src/intl/ml/common.json index 41c7df641d1..658267da6c1 100644 --- a/src/intl/ml/common.json +++ b/src/intl/ml/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "ഒരു പൊതു കക്ഷി റൺ ചെയ്യുക", "consensus-run-beacon-chain-desc": "Ethereum-ന് കഴിയുന്നത്ര കക്ഷികൾ റൺ ചെയ്യേണ്ടത് ആവശ്യമാണ്. പൊതുനന്മയ്ക്കായി ഈ Ethereum-നെ സഹായിക്കൂ!", "consensus-when-shipping": "ഇത് ഷിപ്പ് ചെയ്യുന്നത് എപ്പോഴാണ്?", - "eth-upgrade-what-happened": "'Eth2' എന്നതിന് എന്ത് സംഭവിച്ചു?", - "eth-upgrade-what-happened-description": "ദി മെർജിനെ സമീപിക്കുന്നതിനാൽ 'Eth2' എന്ന പദം ഒഴിവാക്കിയിരിക്കുന്നു. മുമ്പ് 'Eth2' എന്നറിയപ്പെട്ടിരുന്നതിനെ 'പൊതു വരി' എന്ന പദം ഉൾക്കൊള്ളുന്നു.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum അപ്‌ഗ്രേഡുകൾ", "ethereum-brand-assets": "Ethereum ബ്രാന്‍ഡ് ആസ്തികള്‍", diff --git a/src/intl/ms/common.json b/src/intl/ms/common.json index 8bf732f6004..089408a465d 100644 --- a/src/intl/ms/common.json +++ b/src/intl/ms/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Jalankan klien sepersetujuan", "consensus-run-beacon-chain-desc": "Ethereum memerlukan klien berjalan dengan sebanyak mungkin. Bantu Ethereum ini bagi tujuan kebaikan awam!", "consensus-when-shipping": "Bilakah ia dihantar?", - "eth-upgrade-what-happened": "Apakah yang terjadi dengan 'Eth2?'", - "eth-upgrade-what-happened-description": "Terma 'Eth2' telah diisih ketika kita mendekati Penggabungan. 'Lapisan sepersetujuan' mengurung apa yang dahulunya dikenali sebagai 'Eth2.'", "ethereum": "Ethereum", "ethereum-upgrades": "Naik taraf Ethereum", "ethereum-brand-assets": "Aset Jenama Ethereum", diff --git a/src/intl/nl/common.json b/src/intl/nl/common.json index 029c197b85e..78b190e09a1 100644 --- a/src/intl/nl/common.json +++ b/src/intl/nl/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "Voer een consensusclient uit", "consensus-run-beacon-chain-desc": "Ethereum heeft zoveel mogelijk clients nodig die werken. Help met dit publieke Ethereum goed!", "consensus-when-shipping": "Wanneer wordt het verstuurd?", - "eth-upgrade-what-happened": "Wat is er met 'Eth2' gebeurd?", - "eth-upgrade-what-happened-description": "In de aanloop naar de samenvoeging is de term 'Eth2' verouderd: de 'consensuslaag' omschrijft wat vroeger 'eth2.' werd genoemd.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum-upgrades", "ethereum-brand-assets": "Ethereum-merkcontent", diff --git a/src/intl/pt-br/common.json b/src/intl/pt-br/common.json index 4b2094cf05d..213add1d73f 100644 --- a/src/intl/pt-br/common.json +++ b/src/intl/pt-br/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "Executar um cliente de consenso", "consensus-run-beacon-chain-desc": "Ethereum precisa da maior quantidade possível de clientes sendo executados. Ajude com este bem público do Ethereum!", "consensus-when-shipping": "Quando estará disponível?", - "eth-upgrade-what-happened": "O que aconteceu com \"Eth2?\"", - "eth-upgrade-what-happened-description": "O termo \"Eth2\" está sendo descontinuado conforme o processo de integração se aproxima. A \"camada de consenso\" representa o que anteriormente era conhecido como \"Eth2\".", "ethereum": "Ethereum", "ethereum-upgrades": "Melhorias na Ethereum", "ethereum-brand-assets": "Ativos da marca Ethereum", diff --git a/src/intl/ro/common.json b/src/intl/ro/common.json index 1ac0522d878..1d7a88ff1cc 100644 --- a/src/intl/ro/common.json +++ b/src/intl/ro/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "Rulați un client de consens", "consensus-run-beacon-chain-desc": "Ethereum necesită rularea a cât mai multor clienți. Contribuiți în favoarea acestui bun public Ethereum!", "consensus-when-shipping": "Când va fi lansat?", - "eth-upgrade-what-happened": "Ce s-a întâmplat cu „Eth2”?", - "eth-upgrade-what-happened-description": "Termenul „Eth2” a fost abandonat pe măsură ce ne apropiem de fuziune. Termenul „nivelul consensului” încorporează ceea ce era cunoscut anterior ca „Eth2\".", "ethereum": "Ethereum", "ethereum-upgrades": "Actualizările Ethereum", "ethereum-brand-assets": "Materialele de branding Ethereum", diff --git a/src/intl/ru/common.json b/src/intl/ru/common.json index 106824985c3..70e8fe76e8a 100644 --- a/src/intl/ru/common.json +++ b/src/intl/ru/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Запуск клиента с консенсусом", "consensus-run-beacon-chain-desc": "Ethereum нужно как можно больше запущенных клиентов. Помогите Ethereum принести обществу пользу!", "consensus-when-shipping": "Когда это запустится?", - "eth-upgrade-what-happened": "Что случилось с Eth2?", - "eth-upgrade-what-happened-description": "Термин Eth2 вышел из употребления по мере нашего приближения к слиянию. «Уровень консенсуса» включает в себя то, что ранее было известно как Eth2.", "ethereum": "Ethereum", "ethereum-upgrades": "Обновления Ethereum", "ethereum-brand-assets": "Активы бренда Ethereum", diff --git a/src/intl/sk/common.json b/src/intl/sk/common.json index 83513681b3f..50a4f0b737d 100644 --- a/src/intl/sk/common.json +++ b/src/intl/sk/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Spustiť konsenzuálneho klienta", "consensus-run-beacon-chain-desc": "Ethereum potrebuje čo najviac funkčných klientov. Pomôžte pre verejné dobro Etherea!", "consensus-when-shipping": "Kedy vychádza?", - "eth-upgrade-what-happened": "Čo sa stalo s „Eth2?“", - "eth-upgrade-what-happened-description": "Termín „Eth2“ bol zrušený, pretože sa blíži zlúčenie. \n„Vrstva konsenzu\" zahŕňa to, čo bolo predtým známe ako „Eth2“", "ethereum": "Ethereum", "ethereum-upgrades": "Vylepšenia Etherea", "ethereum-brand-assets": "Zdroje značky Ethereum", diff --git a/src/intl/sl/common.json b/src/intl/sl/common.json index ed09e066867..cf350e59d31 100644 --- a/src/intl/sl/common.json +++ b/src/intl/sl/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Zaženite soglasje stranke", "consensus-run-beacon-chain-desc": "Ethereum potrebuje čim več aktivnih odjemalcev. Pomagajte v javno dobro Ethereuma.", "consensus-when-shipping": "Kdaj bo na voljo?", - "eth-upgrade-what-happened": "Kaj se je zgodilo z \"Eth2?\"", - "eth-upgrade-what-happened-description": "Izraz \"Eth2\" je z bližajočo se spojitvijo postal zastarel. \"Plast soglasja\" povzema, kar je bilo prej znano kot \"Eth2.\"", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum nadgradnje", "ethereum-brand-assets": "Gradivo blagovne znamke Ethereum", diff --git a/src/intl/sw/common.json b/src/intl/sw/common.json index 1d4578bc7d9..c2eb57490ab 100644 --- a/src/intl/sw/common.json +++ b/src/intl/sw/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Endesha programu ya makubaliano", "consensus-run-beacon-chain-desc": "Ethereum inahitaji wateja wengi iwezekanavyo. Saidia Ethereum iliyo nzuri kwa umma!", "consensus-when-shipping": "Inasfirishwa lini?", - "eth-upgrade-what-happened": "Nini kimeipata 'Eth2?'", - "eth-upgrade-what-happened-description": "Neno 'Eth2' liumekua likiachwa taratibu tunvyokaribia muungano. 'safu ya makubaliano' hufunuka kile kilichojulikana kama 'Eth2.'", "ethereum": "Ethereum", "ethereum-upgrades": "Visasisho vya Ethereum", "ethereum-brand-assets": "Rasimali zenye chapa ya Ethereum", diff --git a/src/intl/th/common.json b/src/intl/th/common.json index 823876b2f5b..db2a4783ebf 100644 --- a/src/intl/th/common.json +++ b/src/intl/th/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "ร่วมเป็น Consensus Client", "consensus-run-beacon-chain-desc": "Ethereum ต้องการ Client ที่รันอยู่มากที่สุด ร่วมช่วยอีกแรงเพื่อประโยชน์ของส่วนรวมใน Ethereum!", "consensus-when-shipping": "จะส่งมอบเมื่อใด", - "eth-upgrade-what-happened": "เกิดอะไรขึ้นกับ \"Eth2\"", - "eth-upgrade-what-happened-description": "เลิกใช้คำว่า \"Eth2\" เพราะเมื่อมี The Merge แล้ว จะใช้คำว่า \"Consensus Layer\" แทน", "ethereum": "อีเธอเรียม", "ethereum-upgrades": "การอัปเกรดอีเธอเรียม", "ethereum-brand-assets": "สินทรัพย์แบรนด์อีเธอเรียม", diff --git a/src/intl/tr/common.json b/src/intl/tr/common.json index 32278a132dd..13a4a39950c 100644 --- a/src/intl/tr/common.json +++ b/src/intl/tr/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Bir mutabakat istemcisi çalıştırın", "consensus-run-beacon-chain-desc": "Ethereum için olabildiğince fazla çalışan istemci gerekiyor. Bu Ethereum kamu malı için yardım edin!", "consensus-when-shipping": "Ne zaman gönderiliyor?", - "eth-upgrade-what-happened": "\"Eth2\"ye ne oldu?", - "eth-upgrade-what-happened-description": "Birleşmeye yaklaştığımız bu süreçte \"Eth2\" terimi artık kullanımdan çıkarıldı. \"Mutabakat katmanı\" eskiden \"Eth2\" olarak bilinen şeyi kapsamaktadır.", "ethereum": "Ethereum", "ethereum-upgrades": "Ethereum yükseltmeleri", "ethereum-brand-assets": "Ethereum Marka Varlıkları", diff --git a/src/intl/vi/common.json b/src/intl/vi/common.json index 9112d5d87a6..59033ca184d 100644 --- a/src/intl/vi/common.json +++ b/src/intl/vi/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "Chạy một máy khách đồng thuận", "consensus-run-beacon-chain-desc": "Ethereum cần nhiều clients hoạt động nhất có thể. Sử dụng một dịch vụ chung của Ethereum này!", "consensus-when-shipping": "Khi nào đi vào hoạt động?", - "eth-upgrade-what-happened": "Chuyện gì xảy ra với 'Eth2?'", - "eth-upgrade-what-happened-description": "Thuật ngữ 'Eth2' đã không được dùng nữa khi chúng ta tiếp cập giai đoạn hợp nhất. 'Lớp đồng thuận' chính là 'Eth2' trước đây.", "ethereum": "Ethereum", "ethereum-upgrades": "Các bản nâng cấp của Ethereum", "ethereum-brand-assets": "Tài sản thương hiệu Ethereum", diff --git a/src/intl/zh-tw/common.json b/src/intl/zh-tw/common.json index db1441747e9..ca8d23361c3 100644 --- a/src/intl/zh-tw/common.json +++ b/src/intl/zh-tw/common.json @@ -58,8 +58,6 @@ "consensus-run-beacon-chain": "運行共識用戶端", "consensus-run-beacon-chain-desc": "以太坊需要大量客戶協助運作。請為以太坊的共同利益一起努力!", "consensus-when-shipping": "何時生效?", - "eth-upgrade-what-happened": "「Eth2」怎麼了?", - "eth-upgrade-what-happened-description": "以太坊即將合併時,我們決定不再使用「Eth2」這個稱呼,改以「共識層」取而代之。", "ethereum": "以太坊", "ethereum-upgrades": "以太坊升級", "ethereum-brand-assets": "以太坊品牌資產", diff --git a/src/intl/zh/common.json b/src/intl/zh/common.json index 0af6e2eee82..392be0b2180 100644 --- a/src/intl/zh/common.json +++ b/src/intl/zh/common.json @@ -59,8 +59,6 @@ "consensus-run-beacon-chain": "运行一个共识客户端", "consensus-run-beacon-chain-desc": "以太坊需要尽可能多地处在运行中的客户端支持,为这个以太坊公共产品提供帮助吧!", "consensus-when-shipping": "何时发布?", - "eth-upgrade-what-happened": "“Eth2”发生了什么?", - "eth-upgrade-what-happened-description": "以太坊逐渐合并的同时我们将废弃使用名词\"Eth2\"。取而代之的则是包含了所有“Eth2”含义的“共识层”。", "ethereum": "以太坊", "ethereum-upgrades": "以太坊升级", "ethereum-brand-assets": "以太坊品牌资产", diff --git a/src/templates/upgrade.tsx b/src/templates/upgrade.tsx index 18a24ee6bbb..56a1300bfdf 100644 --- a/src/templates/upgrade.tsx +++ b/src/templates/upgrade.tsx @@ -386,18 +386,6 @@ const UpgradePage = ({ maxDepth={mdx.frontmatter.sidebarDepth} /> )} - <DismissibleCard storageKey="dismissed-eth-upgrade-psa"> - <Emoji text=":cheering_megaphone:" size={5} /> - <h2> - <Translation id="eth-upgrade-what-happened" /> - </h2> - <p> - <Translation id="eth-upgrade-what-happened-description" />{" "} - <Link to="https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/"> - <Translation id="more-info" />. - </Link> - </p> - </DismissibleCard> </InfoColumn> <ContentContainer id="content"> {/* <DesktopBreadcrumbs slug={mdx.fields.slug} startDepth={1} /> */} From 0d11ac2278171d28c16bac20b7b5718d6accbb6c Mon Sep 17 00:00:00 2001 From: Sam Richards <sbrichards@gmail.com> Date: Fri, 17 Jun 2022 10:53:51 -0400 Subject: [PATCH 189/244] Add Eth2 section on merge page --- src/content/upgrades/merge/index.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index eab273f077c..f6a80ed6eea 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -207,6 +207,21 @@ The Merge is like changing an engine on a rocketship mid-flight and is designed Ethereum does not have downtime. </ExpandableCard> +## What happened to 'Eth2'? {#eth2} + +The term 'Eth2' has been deprecated as we approach The Merge. + +After merging 'Eth1' and 'Eth2' into a single chain, there will no longer be two distinct Ethereum networks; there will only be Ethereum. + +To limit confusion, the community has updated these terms: + +- 'Eth1' is now the 'execution layer', which handles transactions and execution. +- 'Eth2' is now the 'consensus layer', which handles proof-of-stake consensus. + +These terminology updates only change naming conventions; this does not alter Ethereum's goals or roadmap. + +[Learn more about the 'Eth2' renaming](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/) + ## Relationship between upgrades {#relationship-between-upgrades} The Ethereum upgrades are all somewhat interrelated. So let’s recap how The Merge relates to the other upgrades. From ff1cacfdafe948043292e387a1205a9c2d507954 Mon Sep 17 00:00:00 2001 From: Joshua <30259508@cityofglacol.ac.uk> Date: Fri, 17 Jun 2022 19:25:52 +0100 Subject: [PATCH 190/244] Make infographic SR friendly --- src/components/MergeInfographic.tsx | 14 +++++++++++--- src/intl/en/page-upgrades.json | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/MergeInfographic.tsx b/src/components/MergeInfographic.tsx index bb686123c6f..0fed291eb17 100644 --- a/src/components/MergeInfographic.tsx +++ b/src/components/MergeInfographic.tsx @@ -80,6 +80,7 @@ const SvgText: React.FC<SvgProps> = ({ getString }) => { version="1.1" xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" + aria-hidden="true" > <Text x="2%" y="35%" fontSize={lg}> ⛏ {getString("docs-nav-proof-of-work")} @@ -110,12 +111,19 @@ const MergeInfographic: React.FC<IProps> = ({ className }) => { translateMessageId(id, intl) return ( - <Container className={className}> - <ExecutionLayer> + <Container + className={className} + role="img" + aria-label={translateMessageId( + "page-upgrades-merge-infographic-alt-text", + intl + )} + > + <ExecutionLayer aria-hidden="true"> <Translation id="page-upgrades-merge-infographic-el" /> </ExecutionLayer> <SvgText getString={getString} /> - <Background /> + <Background aria-hidden="true" /> </Container> ) } diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index ae6a9f00c70..b3a2edaecc0 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -1,5 +1,6 @@ { "page-upgrades-merge-infographic-el": "Ethereum State: transactions, apps, contracts, balances", + "page-upgrades-merge-infographic-alt-text": "Infographic illustrating how the Beacon Chain merges into Ethereum's execution layer during the transition from proof-of-work to proof-of-stake.", "page-upgrades-beacon-date": "Shipped!", "page-upgrades-merge-date": "~Q3/Q4 2022", "page-upgrades-shards-date": "~2023" From 1a6df53e4ce70ac93fce14dfd8eb7931c6d186d7 Mon Sep 17 00:00:00 2001 From: Thomas Lisankie <id@tomlisankie.com> Date: Fri, 17 Jun 2022 17:04:59 -0400 Subject: [PATCH 191/244] Fix broken link on EVM docs page --- src/content/developers/docs/evm/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/evm/index.md b/src/content/developers/docs/evm/index.md index b8bbfc3a9c3..0054df72983 100644 --- a/src/content/developers/docs/evm/index.md +++ b/src/content/developers/docs/evm/index.md @@ -34,7 +34,7 @@ Given an old valid state `(S)` and a new set of valid transactions `(T)`, the Et ### State {#state} -In the context of Ethereum, the state is an enormous data structure called a [modified Merkle Patricia Trie](https://eth.wiki/en/fundamentals/patricia-tree), which keeps all [accounts](/developers/docs/accounts/) linked by hashes and reducible to a single root hash stored on the blockchain. +In the context of Ethereum, the state is an enormous data structure called a [modified Merkle Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie), which keeps all [accounts](/developers/docs/accounts/) linked by hashes and reducible to a single root hash stored on the blockchain. ### Transactions {#transactions} From b3c729b0155ee278d66f88a668e6e82b0b502802 Mon Sep 17 00:00:00 2001 From: Zhou Yang <github@arjenzhou.com> Date: Sat, 18 Jun 2022 21:14:22 +0800 Subject: [PATCH 192/244] fix typo --- .../translations/zh/developers/docs/nodes-and-clients/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/translations/zh/developers/docs/nodes-and-clients/index.md b/src/content/translations/zh/developers/docs/nodes-and-clients/index.md index 6d8dd5dd222..b3388085585 100644 --- a/src/content/translations/zh/developers/docs/nodes-and-clients/index.md +++ b/src/content/translations/zh/developers/docs/nodes-and-clients/index.md @@ -18,7 +18,7 @@ sidebarDepth: 2 通过查看此[节点图](https://etherscan.io/nodetracker),您可以查看以太坊网络的实时视图。 -[以太坊客户端](/developers/docs/nodes-and-clients/#execution-clients)存在多种编程语言(如 Go、Rust、JavaScrip、Python、C# .NET 和 Java)的版本。 这些实现的共同之处是它们都遵循了正式规范(原为[以太坊黄皮书](https://ethereum.github.io/yellowpaper/paper.pdf))。 此规范决定了以太坊网络和区块链的功能。 +[以太坊客户端](/developers/docs/nodes-and-clients/#execution-clients)存在多种编程语言(如 Go、Rust、JavaScript、Python、C# .NET 和 Java)的版本。 这些实现的共同之处是它们都遵循了正式规范(原为[以太坊黄皮书](https://ethereum.github.io/yellowpaper/paper.pdf))。 此规范决定了以太坊网络和区块链的功能。 ![执行客户端](./client-diagram.png) 以太坊客户端功能的简化图表。 From eb079165718ff4d2969e8a086ded8a17927b612a Mon Sep 17 00:00:00 2001 From: vdusart <43795504+vdusart@users.noreply.github.com> Date: Sat, 18 Jun 2022 15:49:00 +0200 Subject: [PATCH 193/244] Update markdown Error in the markdown --- src/content/developers/docs/networks/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index 1de9b5d1768..fb9279e47b7 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -68,7 +68,7 @@ _Note, [the Ropsten testnet is deprecated](https://github.com/ethereum/pm/issues A proof-of-work testnet. It only serves historical relevance and is mainly used by core developers for testing protocol upgrades. -##### Ropsten faucets +##### Ropsten faucets - [FaucETH](https://fauceth.komputing.org) (multi-Chain faucet without the need for social account) - [Paradigm faucet](https://faucet.paradigm.xyz/) @@ -79,7 +79,7 @@ _Note: [the Rinkeby testnet is deprecated](https://github.com/ethereum/pm/issues A proof-of-authority testnet for those running old versions of the Geth client. -##### Rinkeby faucets +##### Rinkeby faucets - [FaucETH](https://fauceth.komputing.org) (multi-Chain faucet without the need for social account) - [Alchemy faucet](https://RinkebyFaucet.com) From 015501a9ce924614117ddef1819f357312e726a0 Mon Sep 17 00:00:00 2001 From: Andrew Gallagher <andrewtgallagherJS@gmail.com> Date: Sat, 18 Jun 2022 16:47:47 -0400 Subject: [PATCH 194/244] fix bug bounty leaderboard --- src/pages/bug-bounty.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/pages/bug-bounty.js b/src/pages/bug-bounty.js index 76a07e464f3..f622ba3a7af 100644 --- a/src/pages/bug-bounty.js +++ b/src/pages/bug-bounty.js @@ -243,10 +243,28 @@ const BugBountiesPage = ({ data, location }) => { (a, b) => b.score - a.score ) - const allBounterHunters = [ - ...consensusBountyHunters, - ...executionBountyHunters, - ].sort((a, b) => b.score - a.score) + // total all counts using name as identifier, then sort + const allBounterHunters = Object.values( + [...consensusBountyHunters, ...executionBountyHunters].reduce( + (acc, next) => { + if (acc[next.name]) { + return { + ...acc, + [next.name]: { + ...next, + score: acc[next.name].score + next.score, + }, + } + } + + return { + ...acc, + [next.name]: next, + } + }, + {} + ) + ).sort((a, b) => b.score - a.score) const clients = [ { From 57aff1aabd3f906b31214675d3de86df8e15b078 Mon Sep 17 00:00:00 2001 From: tree <tree@hidden.cz> Date: Sun, 19 Jun 2022 01:51:56 +0200 Subject: [PATCH 195/244] Adding a Czech section to the Language Resources page --- src/content/community/language-resources/index.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/content/community/language-resources/index.md b/src/content/community/language-resources/index.md index 80a1e410073..714978ab6b5 100644 --- a/src/content/community/language-resources/index.md +++ b/src/content/community/language-resources/index.md @@ -68,6 +68,13 @@ If you are bilingual and want to help us reach more people, you can also get inv - [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - a WeChat account, explaining cryptography, security, etc. - [Sparkbyte](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - a WeChat account, explaining zk technology +### Czech {#cs} + +- [Gwei.cz](https://gwei.cz) - local community around Web3, creates educational content, organises online and in-person events +- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - Ethereum guide for beginners +- [DAO Příručka](https://dao.gwei.cz/) - beginner's guide to the DAOs +- [Mastering Ethereum](https://ipfs.infura-ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - Mastering Ethereum in Czech + ### French {#fr} - [Ethereum France](https://www.ethereum-france.com/) - Ethereum France organizes events, creates content and encourages discussions around Ethereum From d8a57ff5da3f8314d84a3a4368ef3fe4040bb1c7 Mon Sep 17 00:00:00 2001 From: Manu kashyap <76866512+ManuKashyap01@users.noreply.github.com> Date: Sun, 19 Jun 2022 15:29:59 +0530 Subject: [PATCH 196/244] Update index.md changed "wallet" to "account" in the "types of transactions" section --- src/content/developers/docs/transactions/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/transactions/index.md b/src/content/developers/docs/transactions/index.md index f7350c3c516..c524219a963 100644 --- a/src/content/developers/docs/transactions/index.md +++ b/src/content/developers/docs/transactions/index.md @@ -135,7 +135,7 @@ The `value` is 0x3b0559f4 = 990206452. On Ethereum there are a few different types of transactions: -- Regular transactions: a transaction from one wallet to another. +- Regular transactions: a transaction from one account to another. - Contract deployment transactions: a transaction without a 'to' address, where the data field is used for the contract code. - Execution of a contract: a transaction that interacts with a deployed smart contract. In this case, 'to' address is the smart contract address. From 1889bd9dc9ee70e5137e1e1cd92ee8e1f93d2d61 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:48:42 +0000 Subject: [PATCH 197/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 95e24887945..be7e258fc03 100644 --- a/README.md +++ b/README.md @@ -1268,6 +1268,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="http://kaanuzdogan.com"><img src="https://avatars.githubusercontent.com/u/13069972?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kaan Uzdoğan</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=kuzdogan" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/NiloCK"><img src="https://avatars.githubusercontent.com/u/10780590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Colin Kennedy</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=NiloCK" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/TimGrey998"><img src="https://avatars.githubusercontent.com/u/57596934?v=4?s=100" width="100px;" alt=""/><br /><sub><b>XOF</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TimGrey998" title="Documentation">📖</a> <a href="#translation-TimGrey998" title="Translation">🌍</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3ATimGrey998" title="Bug reports">🐛</a></td> + <td align="center"><a href="https://github.com/ManuKashyap01"><img src="https://avatars.githubusercontent.com/u/76866512?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Manu kashyap</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=ManuKashyap01" title="Documentation">📖</a></td> </tr> </table> From e3d179dd0577ebfa8b82d595c2907e01af094368 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:48:43 +0000 Subject: [PATCH 198/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7cc2d626123..b1b0158206e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7878,6 +7878,15 @@ "translation", "bug" ] + }, + { + "login": "ManuKashyap01", + "name": "Manu kashyap", + "avatar_url": "https://avatars.githubusercontent.com/u/76866512?v=4", + "profile": "https://github.com/ManuKashyap01", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 986e398d9afd27880e7a4b28df8d5d6c2338ce88 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:50:38 +0000 Subject: [PATCH 199/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index be7e258fc03..9b67064e4e5 100644 --- a/README.md +++ b/README.md @@ -1269,6 +1269,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="https://github.com/NiloCK"><img src="https://avatars.githubusercontent.com/u/10780590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Colin Kennedy</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=NiloCK" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/TimGrey998"><img src="https://avatars.githubusercontent.com/u/57596934?v=4?s=100" width="100px;" alt=""/><br /><sub><b>XOF</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TimGrey998" title="Documentation">📖</a> <a href="#translation-TimGrey998" title="Translation">🌍</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3ATimGrey998" title="Bug reports">🐛</a></td> <td align="center"><a href="https://github.com/ManuKashyap01"><img src="https://avatars.githubusercontent.com/u/76866512?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Manu kashyap</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=ManuKashyap01" title="Documentation">📖</a></td> + <td align="center"><a href="http://arjenzhou.com"><img src="https://avatars.githubusercontent.com/u/23600703?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Zhou Yang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=arjenzhou" title="Documentation">📖</a></td> </tr> </table> From 3bd4e21c01910682c1cb5f17386b9d11afd86362 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:50:39 +0000 Subject: [PATCH 200/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b1b0158206e..8ac7235a981 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7887,6 +7887,15 @@ "contributions": [ "doc" ] + }, + { + "login": "arjenzhou", + "name": "Zhou Yang", + "avatar_url": "https://avatars.githubusercontent.com/u/23600703?v=4", + "profile": "http://arjenzhou.com", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 2dfc3a104887ead8b92288b8b204aa819e439f22 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Sun, 19 Jun 2022 17:53:57 +0100 Subject: [PATCH 201/244] Update src/content/developers/docs/evm/index.md --- src/content/developers/docs/evm/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/evm/index.md b/src/content/developers/docs/evm/index.md index 0054df72983..208b2fcddfe 100644 --- a/src/content/developers/docs/evm/index.md +++ b/src/content/developers/docs/evm/index.md @@ -34,7 +34,7 @@ Given an old valid state `(S)` and a new set of valid transactions `(T)`, the Et ### State {#state} -In the context of Ethereum, the state is an enormous data structure called a [modified Merkle Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie), which keeps all [accounts](/developers/docs/accounts/) linked by hashes and reducible to a single root hash stored on the blockchain. +In the context of Ethereum, the state is an enormous data structure called a [modified Merkle Patricia Trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/), which keeps all [accounts](/developers/docs/accounts/) linked by hashes and reducible to a single root hash stored on the blockchain. ### Transactions {#transactions} From 24fd6a47a742d050b4e65fa06ab2e7978e18f606 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:54:29 +0000 Subject: [PATCH 202/244] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9b67064e4e5..6eeaa3028fd 100644 --- a/README.md +++ b/README.md @@ -888,7 +888,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="http://hubertsikorski.com"><img src="https://avatars.githubusercontent.com/u/46070006?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hubert Sikorski</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=princeelector" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/coreyar"><img src="https://avatars.githubusercontent.com/u/7258308?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Corey Rice</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=coreyar" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/ezenwankwogabriel"><img src="https://avatars.githubusercontent.com/u/32826083?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ezenwankwo Gabriel</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=ezenwankwogabriel" title="Documentation">📖</a></td> - <td align="center"><a href="https://tomlisankie.com"><img src="https://avatars.githubusercontent.com/u/92654?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas Lisankie</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TomLisankie" title="Documentation">📖</a></td> + <td align="center"><a href="https://tomlisankie.com"><img src="https://avatars.githubusercontent.com/u/92654?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas Lisankie</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TomLisankie" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3ATomLisankie" title="Bug reports">🐛</a></td> <td align="center"><a href="https://www.linkedin.com/in/tylerilunga/"><img src="https://avatars.githubusercontent.com/u/11746486?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tyler Ilunga</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=TylerIlunga" title="Documentation">📖</a></td> <td align="center"><a href="http://linkedin.com/in/katarzynakosturek/"><img src="https://avatars.githubusercontent.com/u/36547835?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kasia Kosturek</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=kocvrek" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/solarpunklabs"><img src="https://avatars.githubusercontent.com/u/84196983?v=4?s=100" width="100px;" alt=""/><br /><sub><b>solarpunklabs</b></sub></a><br /><a href="#ideas-solarpunklabs" title="Ideas, Planning, & Feedback">🤔</a></td> From 92b7a54808b04f8d5ef7305a533ff7d59382ab2e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 19 Jun 2022 16:54:30 +0000 Subject: [PATCH 203/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 8ac7235a981..2c31da2b7d2 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -5119,7 +5119,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/92654?v=4", "profile": "https://tomlisankie.com", "contributions": [ - "doc" + "doc", + "bug" ] }, { From f3e15c8e2d6abde1d8d49d731fad601a1b99f90f Mon Sep 17 00:00:00 2001 From: Fredrik Svantes <fredrik@ethereum.org> Date: Mon, 20 Jun 2022 10:46:34 +0200 Subject: [PATCH 204/244] Adding Sergio Demian Lerner to EL bounty list --- src/data/execution-bounty-hunters.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/execution-bounty-hunters.csv b/src/data/execution-bounty-hunters.csv index 7364fd86888..abee2762554 100644 --- a/src/data/execution-bounty-hunters.csv +++ b/src/data/execution-bounty-hunters.csv @@ -22,6 +22,7 @@ p-, "Peter Stöckli", 5000 Dedaub, "Neville Grech", 5000 jtoman, "John Toman", 5000 EthHead, "EthHead", 5000 +SergioDemianLerner, "Sergio Demian Lerner", 2500 danhper, "Daniel Perez", 2500 yaronvel, "Yaron Velner", 2000 whitj00, "Whit Jackson", 2000 From b7f8b7eac8a0178f763278220ea646941187a258 Mon Sep 17 00:00:00 2001 From: Fredrik Svantes <fredrik@ethereum.org> Date: Mon, 20 Jun 2022 10:49:23 +0200 Subject: [PATCH 205/244] Increased bounty score of John Toman --- src/data/execution-bounty-hunters.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/execution-bounty-hunters.csv b/src/data/execution-bounty-hunters.csv index abee2762554..f63ca1b1091 100644 --- a/src/data/execution-bounty-hunters.csv +++ b/src/data/execution-bounty-hunters.csv @@ -15,12 +15,12 @@ tintinweb, "Tin", 12500 lukaszmatczak, "Łukasz Matczak", 11000 , "Heilman/Marcus/Goldberg", 10000 jonasnick, "Jonas Nick", 10000 +jtoman, "John Toman", 10000 , "Sebastian Henningsen", 8000 , "Dominic Brütsch", 7500 HarryR, "Harry Roberts", 5000 p-, "Peter Stöckli", 5000 Dedaub, "Neville Grech", 5000 -jtoman, "John Toman", 5000 EthHead, "EthHead", 5000 SergioDemianLerner, "Sergio Demian Lerner", 2500 danhper, "Daniel Perez", 2500 From ab67afb44fb93df211b5625ed073ab27ec6136d2 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:10:39 +0000 Subject: [PATCH 206/244] docs: update README.md [skip ci] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 6eeaa3028fd..cf3d5c5017c 100644 --- a/README.md +++ b/README.md @@ -1271,6 +1271,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="https://github.com/ManuKashyap01"><img src="https://avatars.githubusercontent.com/u/76866512?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Manu kashyap</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=ManuKashyap01" title="Documentation">📖</a></td> <td align="center"><a href="http://arjenzhou.com"><img src="https://avatars.githubusercontent.com/u/23600703?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Zhou Yang</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=arjenzhou" title="Documentation">📖</a></td> </tr> + <tr> + <td align="center"><a href="https://keybase.io/tree"><img src="https://avatars.githubusercontent.com/u/67269?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tree</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=burningtree" title="Documentation">📖</a></td> + </tr> </table> <!-- markdownlint-restore --> From 46da34d6109220934512cc35b89575b948d2c618 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:10:40 +0000 Subject: [PATCH 207/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2c31da2b7d2..2160f06b06a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7897,6 +7897,15 @@ "contributions": [ "doc" ] + }, + { + "login": "burningtree", + "name": "tree", + "avatar_url": "https://avatars.githubusercontent.com/u/67269?v=4", + "profile": "https://keybase.io/tree", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 0f9bfa860dde263279c5a3b4350de119286d4611 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:13:22 +0000 Subject: [PATCH 208/244] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf3d5c5017c..306d8556f32 100644 --- a/README.md +++ b/README.md @@ -858,7 +858,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="https://github.com/abcoathup"><img src="https://avatars.githubusercontent.com/u/28278242?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew B Coathup</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=abcoathup" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Aabcoathup" title="Bug reports">🐛</a></td> </tr> <tr> - <td align="center"><a href="https://www.andrewgallagher-portfolio.com/"><img src="https://avatars.githubusercontent.com/u/43940590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew Gallagher</b></sub></a><br /><a href="#content-andyGallagher" title="Content">🖋</a></td> + <td align="center"><a href="https://www.andrewgallagher-portfolio.com/"><img src="https://avatars.githubusercontent.com/u/43940590?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew Gallagher</b></sub></a><br /><a href="#content-andyGallagher" title="Content">🖋</a> <a href="https://github.com/ethereum/ethereum-org-website/commits?author=andyGallagher" title="Code">💻</a></td> <td align="center"><a href="https://github.com/phatngluu"><img src="https://avatars.githubusercontent.com/u/44693107?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phat Nguyen Luu</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=phatngluu" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/Andrew-Sofos"><img src="https://avatars.githubusercontent.com/u/56540744?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andreas Sofos</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=Andrew-Sofos" title="Code">💻</a></td> <td align="center"><a href="https://github.com/fselmo"><img src="https://avatars.githubusercontent.com/u/3532824?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Felipe Selmo</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=fselmo" title="Documentation">📖</a></td> From ed5ab0782cffff077e5fa1a4727256b8ce215025 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 10:13:23 +0000 Subject: [PATCH 209/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2160f06b06a..1555c011a84 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -4899,7 +4899,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/43940590?v=4", "profile": "https://www.andrewgallagher-portfolio.com/", "contributions": [ - "content" + "content", + "code" ] }, { From 56b115dc54504ac26a647f353af431fb1e1de19a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 11:23:22 +0000 Subject: [PATCH 210/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 306d8556f32..f17e8d7cf32 100644 --- a/README.md +++ b/README.md @@ -1273,6 +1273,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d </tr> <tr> <td align="center"><a href="https://keybase.io/tree"><img src="https://avatars.githubusercontent.com/u/67269?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tree</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=burningtree" title="Documentation">📖</a></td> + <td align="center"><a href="https://github.com/StephenFluin"><img src="https://avatars.githubusercontent.com/u/165056?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stephen Fluin</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=StephenFluin" title="Documentation">📖</a></td> </tr> </table> From 1c5e0fe00d92025cfa6efd521482b2817fb52328 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 11:23:26 +0000 Subject: [PATCH 211/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1555c011a84..fe7324d575d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7907,6 +7907,15 @@ "contributions": [ "doc" ] + }, + { + "login": "StephenFluin", + "name": "Stephen Fluin", + "avatar_url": "https://avatars.githubusercontent.com/u/165056?v=4", + "profile": "https://github.com/StephenFluin", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From b88b9fb029ed0ab2226ce76e94c91c283a2af383 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 20 Jun 2022 20:34:14 -0700 Subject: [PATCH 212/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/intl/en/page-eth.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 190eb0a39a1..07e36e12dcf 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -20,7 +20,7 @@ "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", "page-eth-fuels-desc-4": "Anyone is free to run Ethereum client software to verify and hold the state of the chain themselves. Node operators are not required to perform the same work as miners, and can quickly verify blocks that are proposed by others to ensure their validity, and to ensure they always have permissionless and private access to the network.", "page-eth-fuels-desc-4-link": "More on running a node", - "page-eth-fuels-staking": "Soon, ETH will become even more important with staking. When you stake your ETH you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing your ETH deters attacks.", + "page-eth-fuels-staking": "Soon, ETH will become even more important with staking. When you stake your ETH, you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing their ETH deters attackers.", "page-eth-fuels-more-staking": "More on staking", "page-eth-get-eth-btn": "Get ETH", "page-eth-gov-tokens": "Governance tokens", From 981736c7012d15bb0495b4e61a7e70fa30420bd9 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 21 Jun 2022 13:43:36 +0100 Subject: [PATCH 213/244] Apply suggestions from code review Co-authored-by: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> --- .../developers/docs/data-structures-and-encoding/rlp/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md index c0e2ae6e0c5..88d2d52728e 100644 --- a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md +++ b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md @@ -34,8 +34,8 @@ Note that in the context of the rest of this page, 'string' means "a certain num RLP encoding is defined as follows: - For a single byte whose value is in the `[0x00, 0x7f]` (decimal `[0, 127]`) range, that byte is its own RLP encoding. -- Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with value **0x80** (dec. **128**) plus the length of the string followed by the string. The range of the first byte is thus `[0x80, 0xb7]` (dec. `[128, 183]`). -- If a string is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xb7** (dec. 183) plus the length in bytes of the length of the string in binary form, followed by the length of the string, followed by the string. For example, 1024 byte long string would be encoded as `\xb9\x04\x00` (dec. `185, 4, 0`) followed by the string. Here, `0xb9` (183 + 2 = 185) as the first byte, followed by the 2 bytes `0x0400` (dec. 1024) that denote the length if the acutal string. The range of the first byte is thus `[0xb8, 0xbf]` (dec. `[184, 191]`). +- Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with value **0x80** (dec. 128) plus the length of the string followed by the string. The range of the first byte is thus `[0x80, 0xb7]` (dec. `[128, 183]`). +- If a string is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xb7** (dec. 183) plus the length in bytes of the length of the string in binary form, followed by the length of the string, followed by the string. For example, a 1024 byte long string would be encoded as `\xb9\x04\x00` (dec. `185, 4, 0`) followed by the string. Here, `0xb9` (183 + 2 = 185) as the first byte, followed by the 2 bytes `0x0400` (dec. 1024) that denote the length of the actual string. The range of the first byte is thus `[0xb8, 0xbf]` (dec. `[184, 191]`). - If the total payload of a list (i.e. the combined length of all its items being RLP encoded) is 0-55 bytes long, the RLP encoding consists of a single byte with value **0xc0** plus the length of the list followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xc0, 0xf7]` (dec. `[192, 247]`). - If the total payload of a list is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xf7** plus the length in bytes of the length of the payload in binary form, followed by the length of the payload, followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xf8, 0xff]` (dec. `[248, 255]`). From 917d1cfa08f2c0756b6966eccad487aa1a049882 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:17:49 -0700 Subject: [PATCH 214/244] Adds Gray Glacier to /history --- src/content/history/index.md | 30 ++++++++++++++++++++++++++---- yarn.lock | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/content/history/index.md b/src/content/history/index.md index fb1c0b9136e..94e775496d8 100644 --- a/src/content/history/index.md +++ b/src/content/history/index.md @@ -24,6 +24,32 @@ Looking for future protocol upgrades? [Learn about upcoming upgrades to Ethereum <Divider /> +## 2022 {#2022} + +### _(Planned)_ Gray Glacier {#gray-glacier} + +<Emoji text=":calendar:" size={1} mr={"0.5rem"} mb={"0.5rem"} /><code>Estimated: Jun-29-2022</code><br /> +<Emoji text=":bricks:" size={1} mr={"0.5rem"} mb={"0.5rem"} />Block number: <a href="https://etherscan.io/block/15050000">15,050,000</a><br /> +<Emoji text=":money_bag:" size={1} mr={"0.5rem"} mb={"0.5rem"} />ETH price: <i>to be determined</i><br /> + +#### Summary {#gray-glacier-summary} + +The Gray Glacier network upgrade pushes back the [difficulty bomb](/glossary/#difficulty-bomb) by three months. This is the only change introduced in this upgrade, and is similar in nature to the [Arrow Glacier](#arrow-glacier) and [Muir Glacier](#muir-glacier) upgrades. Similar changes have been performed on the [Byzantium](#byzantium), [Constantinople](#constantinople) and [London](#london) network upgrades. + +- [EF Blog - Gray Glacier Upgrade Announcement](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement/) + +<ExpandableCard title="Gray Glacier EIPs" contentPreview="Official improvements included in this upgrade."> + +- [EIP-5133](https://eips.ethereum.org/EIPS/eip-5133) – _delays the difficulty bomb until September 2022_ + +</ExpandableCard> + +#### <Emoji text=":police_car_light:" size={1} mr="0.5rem" />Node operators {#gray-glacier-node-operators} + +Be sure to upgrade your client software to the latest version before June 27, 2022 to account for variable block times. This will help avoid having your client sync to a pre-fork chain, resulting in the inability to send funds or properly verify transactions. + +<Divider /> + ## 2021 {#2021} ### Arrow Glacier {#arrow-glacier} @@ -46,10 +72,6 @@ The Arrow Glacier network upgrade pushed back the [difficulty bomb](/glossary/#d </ExpandableCard> -#### <Emoji text=":police_car_light:" size={1} mr="0.5rem" />Node operators {#arrow-glacier-node-operators} - -Be sure to upgrade your client software to the latest version before December 5, 2021 to account for variable block times. This will help avoid having your client sync to a pre-fork chain, resulting in the inability to send funds or properly verify transactions. - --- ### Altair {#altair} diff --git a/yarn.lock b/yarn.lock index 8ffc8f2b3b1..f1e199cf220 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11592,7 +11592,7 @@ minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== From 158742597c004b64827603e75cad9c00a75d5125 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:01:40 -0700 Subject: [PATCH 215/244] fix conflict update --- src/content/developers/docs/networks/index.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index bc9f955f4bb..dd17d2c4dad 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -38,13 +38,8 @@ ETH on testnets has no real value; therefore, there are no markets for testnet E #### Sepolia {#sepolia} -<<<<<<< HEAD -A proof-of-work testnet. The best like-for-like representation of Ethereum Mainnet. -======= A proof-of-work testnet; this means it's the best like-for-like representation of Ethereum. Sepolia is expected to undergo The Merge to proof-of-stake in summer 2022. It is not yet certain whether it will then be maintained long term. -> > > > > > > networks-page - - [Website](https://sepolia.dev/) - [Github](https://github.com/goerli/sepolia) - [Otterscan](https://sepolia.otterscan.io/) From 3d8171260a60361932aecc5b3319e62a6abfeb87 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:02:51 -0700 Subject: [PATCH 216/244] Update to "Goerli" for consistancy Recently updated on staking lauchpad as well --- src/content/developers/docs/networks/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index dd17d2c4dad..d29612cfbf3 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -50,7 +50,7 @@ A proof-of-work testnet; this means it's the best like-for-like representation o - [Sepolia faucet](https://faucet.sepolia.dev/) - [FaucETH](https://fauceth.komputing.org) -#### Görli {#goerli} +#### Goerli {#goerli} A proof-of-authority testnet that works across clients; an ideal testnet for application developers. Goerli will be the final testnet merged to proof-of-stake before Ethereum Mainnet is merged. This is expected to happen in summer 2022. Goerlia is expected to be maintained long term as a proof-of-stake testnet. @@ -58,15 +58,15 @@ A proof-of-authority testnet that works across clients; an ideal testnet for app - [Github](https://github.com/goerli/testnet) - [Etherscan](https://goerli.etherscan.io) -##### Görli faucets +##### Goerli faucets -- [Görli faucet](https://faucet.goerli.mudit.blog/) +- [Goerli faucet](https://faucet.goerli.mudit.blog/) - [Chainlink faucet](https://faucets.chain.link/) - [Alchemy Goerli Faucet](https://goerlifaucet.com/) #### Ropsten _(deprecated)_ {#ropsten} -_Note, [the Ropsten testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Görli._ +_Note, [the Ropsten testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Goerli._ Ropsten was a proof-of-work testnet that went through The Merge to proof-of-stake in May 2022. It can be used to test applications on a merged network, but it is not expected to be maintained long term and is likely to deprecated before summer 2023. @@ -77,7 +77,7 @@ Ropsten was a proof-of-work testnet that went through The Merge to proof-of-stak #### Rinkeby _(deprecated)_ {#rinkeby} -_Note: [the Rinkeby testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Görli._ +_Note: [the Rinkeby testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Goerli._ A proof-of-authority testnet for those running old versions of the Geth client. @@ -91,7 +91,7 @@ A proof-of-authority testnet for those running old versions of the Geth client. #### Kovan _(deprecated)_ {#kovan} -_Note: [the Kovan testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Görli._ +_Note: [the Kovan testnet is deprecated](https://github.com/ethereum/pm/issues/460) and will no longer receive protocol upgrades. Please consider migrating your applications to Sepolia or Goerli._ A very old proof-of-authority testnet for those still running OpenEthereum clients. From 4222463742cfe5e0c5683ddba96b8e6cf475d754 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 17:52:38 -0700 Subject: [PATCH 217/244] Update src/content/developers/docs/networks/index.md --- src/content/developers/docs/networks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index d29612cfbf3..4e1e954e8e2 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -52,7 +52,7 @@ A proof-of-work testnet; this means it's the best like-for-like representation o #### Goerli {#goerli} -A proof-of-authority testnet that works across clients; an ideal testnet for application developers. Goerli will be the final testnet merged to proof-of-stake before Ethereum Mainnet is merged. This is expected to happen in summer 2022. Goerlia is expected to be maintained long term as a proof-of-stake testnet. +A proof-of-authority testnet that works across clients; an ideal testnet for application developers. Goerli will be the final testnet merged to proof-of-stake before Ethereum Mainnet is merged. This is expected to happen in summer 2022. Goerli is expected to be maintained long term as a proof-of-stake testnet. - [Website](https://goerli.net/) - [Github](https://github.com/goerli/testnet) From 22f24bed53a4f090f7b1a5da663299a43dbff0dd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 18:06:08 -0700 Subject: [PATCH 218/244] frontmatter syntax bug fix --- .../developers/tutorials/run-node-raspberry-pi/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/tutorials/run-node-raspberry-pi/index.md b/src/content/developers/tutorials/run-node-raspberry-pi/index.md index 70d0b229c49..f1c6719f176 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -7,8 +7,8 @@ lang: en sidebar: true skill: intermediate published: 2022-06-10 -source: [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html) -sourceUrl: https://www.reddit.com/r/ethereum/comments/gf3nhg/ethereum_on_arm_raspberry_pi_4_images_release/ +source: Ethereum on ARM +sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html preMergeBanner: true --- From e5810c0cd0b04e3c4eea31aeca4dc6d1bb1eadd2 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 18:39:55 -0700 Subject: [PATCH 219/244] Upgrade home icon to svg --- src/assets/eth-home-icon.svg | 8 ++++++++ src/components/Nav/index.js | 26 ++++---------------------- 2 files changed, 12 insertions(+), 22 deletions(-) create mode 100644 src/assets/eth-home-icon.svg diff --git a/src/assets/eth-home-icon.svg b/src/assets/eth-home-icon.svg new file mode 100644 index 00000000000..fe48ec41843 --- /dev/null +++ b/src/assets/eth-home-icon.svg @@ -0,0 +1,8 @@ +<svg width="115" height="182" viewBox="0 0 115 182" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M57.5054 181V135.84L1.64064 103.171L57.5054 181Z" fill="#F0CDC2" stroke="#1616B4" stroke-linejoin="round"/> +<path d="M57.6906 181V135.84L113.555 103.171L57.6906 181Z" fill="#C9B3F5" stroke="#1616B4" stroke-linejoin="round"/> +<path d="M57.5055 124.615V66.9786L1 92.2811L57.5055 124.615Z" fill="#88AAF1" stroke="#1616B4" stroke-linejoin="round"/> +<path d="M57.6903 124.615V66.9786L114.196 92.2811L57.6903 124.615Z" fill="#C9B3F5" stroke="#1616B4" stroke-linejoin="round"/> +<path d="M1.00006 92.2811L57.5054 1V66.9786L1.00006 92.2811Z" fill="#F0CDC2" stroke="#1616B4" stroke-linejoin="round"/> +<path d="M114.196 92.2811L57.6906 1V66.9786L114.196 92.2811Z" fill="#B8FAF6" stroke="#1616B4" stroke-linejoin="round"/> +</svg> diff --git a/src/components/Nav/index.js b/src/components/Nav/index.js index ec0bae79a26..0d14dc8f394 100644 --- a/src/components/Nav/index.js +++ b/src/components/Nav/index.js @@ -1,7 +1,5 @@ import React, { useState } from "react" -import { useStaticQuery, graphql } from "gatsby" import { useIntl } from "gatsby-plugin-intl" -import { GatsbyImage, getImage } from "gatsby-plugin-image" import styled from "styled-components" import { cloneDeep } from "lodash" @@ -14,6 +12,7 @@ import Search from "../Search" import Translation from "../Translation" import { NavLink } from "../SharedStyledComponents" import { translateMessageId } from "../../utils/translations" +import HomeIcon from "../../assets/eth-home-icon.svg" const NavContainer = styled.div` position: sticky; @@ -104,7 +103,8 @@ const HomeLogoNavLink = styled(Link)` align-items: center; ` -const HomeLogo = styled(GatsbyImage)` +const HomeLogo = styled(HomeIcon)` + width: 22px; opacity: 0.85; &:hover { opacity: 1; @@ -134,21 +134,6 @@ const NavIcon = styled(Icon)` const Nav = ({ handleThemeChange, isDarkTheme, path }) => { const [isMenuOpen, setIsMenuOpen] = useState(false) const [isSearchOpen, setIsSearchOpen] = useState(false) - - const data = useStaticQuery(graphql` - { - file(relativePath: { eq: "eth-home-icon.png" }) { - childImageSharp { - gatsbyImageData( - width: 22 - layout: FIXED - placeholder: BLURRED - quality: 100 - ) - } - } - } - `) const intl = useIntl() const linkSections = [ @@ -396,10 +381,7 @@ const Nav = ({ handleThemeChange, isDarkTheme, path }) => { <StyledNav aria-label={translateMessageId("nav-primary", intl)}> <NavContent> <HomeLogoNavLink to="/"> - <HomeLogo - image={getImage(data.file)} - alt={translateMessageId("ethereum-logo", intl)} - /> + <HomeLogo alt={translateMessageId("ethereum-logo", intl)} /> </HomeLogoNavLink> {/* Desktop */} <InnerContent> From 39808cc23dcd360d5d0559a57cf2f309015cd7de Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 21 Jun 2022 18:57:15 -0700 Subject: [PATCH 220/244] `yarn` --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 8ffc8f2b3b1..f1e199cf220 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11592,7 +11592,7 @@ minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== From a302fd2c0a648d38bb6de7b3aadfcdf3806c126f Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Tue, 21 Jun 2022 23:53:47 -0600 Subject: [PATCH 221/244] add layer 2 question --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 95ead035b89..fedf05be653 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -209,6 +209,11 @@ body: attributes: label: Does the wallet support multi-chain networks? description: Please provide documentation on multi-chain networks this wallet supports. + - type: input + id: wallet_l2_support + attributes: + label: Does the wallet support Ethereum layer 2 networks? + description: Please provide documentation on Ethereum layer 2 networks this wallet supports. - type: input id: wallet_customize_gas_fees attributes: From eafea9d6ca1e7b3e87d0a7936ce4ca5693ca267a Mon Sep 17 00:00:00 2001 From: hakuta <hiroakuta@gmail.com> Date: Wed, 22 Jun 2022 18:41:17 +0900 Subject: [PATCH 222/244] fix 'withhold' and 'particularly' --- src/content/developers/docs/scaling/validium/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 900173dff8a..02c218ed03d 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -20,7 +20,7 @@ More on [zero-knowledge proofs](https://consensys.net/blog/blockchain-explained/ As with ZK-rollups, validity proofs prevent invalid state transitions on validium chains and enhance security guarantees available to users. For instance, a malicious operator cannot steal funds since users can always withdraw funds directly from the on-chain contract [using Merkle proofs](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). -However, user funds can be frozen, particualarly if the data availability managers on the validium chain withold off-chain data from users. This is the major difference between validiums and ZK-rollups—their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. +However, user funds can be frozen, particularly if the data availability managers on the validium chain withhold off-chain data from users. This is the major difference between validiums and ZK-rollups—their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. ### On-chain vs off-chain data availability {#on-chain-vs-off-chain-data-availability} From 27c81dd87287ef65c81cabd81d0998c4678c607b Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Wed, 22 Jun 2022 10:43:21 +0100 Subject: [PATCH 223/244] endpoint examples brought back --- .../developers/docs/apis/json-rpc/index.md | 2180 +++++++++++++++++ 1 file changed, 2180 insertions(+) diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index 22903da58db..4c984aa5a1a 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -72,6 +72,2186 @@ The following options are possible for the defaultBlock parameter: - `String "latest"` - for the latest mined block - `String "pending"` - for the pending state/transactions +## Examples + +On this page we provide examples of how to use individual JSON_RPC API endpoints using the command line tool, [curl](https://curl.se). These individial endpoint examples are found below in the [Curl examples](#curl-examples) section. Further down the page, we also provide an [end-to-end example](#usage-example) for compiling and deploying a smart contract using a Geth node, the json-rpc api and curl.. + +## Curl examples {#curl-examples} + +Examples of using the JSON_RPC API by making [curl](https://curl.se) requests to an Ethereum node are provided below. Each example +includes a description of the specific endpoint, its parameters, return type, and a worked example of how it should be used. + +The curl requests might return an error message relating to the content type. This is because the `--data` option sets the content type to `application/x-www-form-urlencoded`. If your node does complain about this, manually set the header by placing `-H "Content-Type: application/json"` at the start of the call. The examples also do not include the URL/IP & port combination which must be the last argument given to curl (e.g. `127.0.0.1:8545`). A complete curl request including these additional data takes the following form: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## Gossip, State, History {#gossip-state-history} + +A handful of core JSON-RPC methods require data from the Ethereum network, and fall neatly into three main categories: _Gossip, State, and History_. Use the links in these sections to jump to each method, or use the table of contents to explore the whole list of methods. + +### Gossip Methods {#gossip-methods} + +> These methods track the head of the chain. This is how transactions make their way around the network, find their way into blocks, and how clients find out about new blocks. + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### State Methods {#state_methods} + +> Methods that report the current state of all the data stored. The "state" is like one big shared piece of RAM, and includes account balances, contract data, and gas estimations. + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### History Methods {#history_methods} + +> Fetches historical records of every block back to genesis. This is like one large append-only file, and includes all block headers, block bodies, uncle blocks, and transaction receipts. + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC API Methods {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +Returns the current client version. + +**Parameters** + +None + +**Returns** + +`String` - The current client version + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result": "Mist/v0.9.3/darwin/go1.4.1" +} +``` + +### web3_sha3 {#web3_sha3} + +Returns Keccak-256 (_not_ the standardized SHA3-256) of the given data. + +**Parameters** + +1. `DATA` - the data to convert into a SHA3 hash + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**Returns** + +`DATA` - The SHA3 result of the given string. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +Returns the current network id. + +**Parameters** + +None + +**Returns** + +`String` - The current network id. + +The full list of current network IDs is available at [chainlist.org](https://chainlist.org). Sopme common ones are: +`1`: Ethereum Mainnet +`2`: Morden testnet (now deprecated) +`3`: Ropsten testnet +`4`: Rinkeby testnet +`5`: Goerli testnet + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_peercount} + +Returns `true` if client is actively listening for network connections. + +**Parameters** + +None + +**Returns** + +`Boolean` - `true` when listening, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_listening} + +Returns number of peers currently connected to the client. + +**Parameters** + +None + +**Returns** + +`QUANTITY` - integer of the number of connected peers. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// Result +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +Returns the current Ethereum protocol version. + +**Parameters** + +None + +**Returns** + +`String` - The current Ethereum protocol version + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +Returns an object with data about the sync status or `false`. + +**Parameters** + +None + +**Returns** + +`Object|Boolean`, An object with sync status data or `FALSE`, when not syncing: + +- `startingBlock`: `QUANTITY` - The block at which the import started (will only be reset, after the sync reached his head) +- `currentBlock`: `QUANTITY` - The current block, same as eth_blockNumber +- `highestBlock`: `QUANTITY` - The estimated highest block + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// Or when not syncing +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +Returns the client coinbase address. + +**Parameters** + +None + +**Returns** + +`DATA`, 20 bytes - the current coinbase address. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_mining {#eth_mining} + +Returns `true` if client is actively mining new blocks. + +**Parameters** + +None + +**Returns** + +`Boolean` - returns `true` of the client is mining, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' +// +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +Returns the number of hashes per second that the node is mining with. + +**Parameters** + +None + +**Returns** + +`QUANTITY` - number of hashes per second. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// Result +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +Returns the current price per gas in wei. + +**Parameters** + +None + +**Returns** + +`QUANTITY` - integer of the current gas price in wei. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// Result +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +Returns a list of addresses owned by client. + +**Parameters** + +None + +**Returns** + +`Array of DATA`, 20 Bytes - addresses owned by the client. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +Returns the number of most recent block. + +**Parameters** + +None + +**Returns** + +`QUANTITY` - integer of the current block number the client is on. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// Result +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +Returns the balance of the account of given address. + +**Parameters** + +1. `DATA`, 20 Bytes - address to check for balance. +2. `QUANTITY|TAG` - integer block number, or the string `"latest"`, `"earliest"` or `"pending"`, see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**Returns** + +`QUANTITY` - integer of the current balance in wei. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +Returns the value from a storage position at a given address. + +**Parameters** + +1. `DATA`, 20 Bytes - address of the storage. +2. `QUANTITY` - integer of the position in the storage. +3. `QUANTITY|TAG` - integer block number, or the string `"latest"`, `"earliest"` or `"pending"`, see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +**Returns** + +`DATA` - the value at this storage position. + +**Example** +Calculating the correct position depends on the storage to retrieve. Consider the following contract deployed at `0x295a70b2de5e3953354a6a8344e616ed314d7251` by address `0x391694e7e0b0cce554cb130d723a9d27458f9298`. + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + function Storage() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +Retrieving the value of pos0 is straight forward: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +Retrieving an element of the map is harder. The position of an element in the map is calculated with: + +```js +keccack(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +This means to retrieve the storage on pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] we need to calculate the position with: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +The geth console which comes with the web3 library can be used to make the calculation: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +Now to fetch the storage: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +Returns the number of transactions _sent_ from an address. + +**Parameters** + +1. `DATA`, 20 Bytes - address. +2. `QUANTITY|TAG` - integer block number, or the string `"latest"`, `"earliest"` or `"pending"`, see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // state at the latest block +] +``` + +**Returns** + +`QUANTITY` - integer of the number of transactions send from this address. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +Returns the number of transactions in a block from a block matching the given block hash. + +**Parameters** + +1. `DATA`, 32 Bytes - hash of a block + +```js +params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"] +``` + +**Returns** + +`QUANTITY` - integer of the number of transactions in this block. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xb" // 11 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +Returns the number of transactions in a block matching the given block number. + +**Parameters** + +1. `QUANTITY|TAG` - integer of a block number, or the string `"earliest"`, `"latest"` or `"pending"`, as in the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter). + +```js +params: [ + "0xe8", // 232 +] +``` + +**Returns** + +`QUANTITY` - integer of the number of transactions in this block. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa" // 10 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +Returns the number of uncles in a block from a block matching the given block hash. + +**Parameters** + +1. `DATA`, 32 Bytes - hash of a block + +```js +params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"] +``` + +**Returns** + +`QUANTITY` - integer of the number of uncles in this block. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +Returns the number of uncles in a block from a block matching the given block number. + +**Parameters** + +1. `QUANTITY|TAG` - integer of a block number, or the string "latest", "earliest" or "pending", see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +```js +params: [ + "0xe8", // 232 +] +``` + +**Returns** + +`QUANTITY` - integer of the number of uncles in this block. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getCode {#eth_getcode} + +Returns code at a given address. + +**Parameters** + +1. `DATA`, 20 Bytes - address +2. `QUANTITY|TAG` - integer block number, or the string `"latest"`, `"earliest"` or `"pending"`, see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +```js +params: [ + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x2", // 2 +] +``` + +**Returns** + +`DATA` - the code from the given address. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056" +} +``` + +### eth_sign {#eth_sign} + +The sign method calculates an Ethereum specific signature with: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. + +By adding a prefix to the message makes the calculated signature recognisable as an Ethereum specific signature. This prevents misuse where a malicious DApp can sign arbitrary data (e.g. transaction) and use the signature to impersonate the victim. + +Note: the address to sign with must be unlocked. + +**Parameters** + +1. `DATA`, 20 Bytes - address +2. `DATA`, N Bytes - message to sign + +**Returns** + +`DATA`: Signature + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +Signs a transaction that can be submitted to the network at a later time using with [eth_sendRawTransaction](#eth_sendrawtransaction). + +**Parameters** + +1. `Object` - The transaction object + +- `from`: `DATA`, 20 Bytes - The address the transaction is sent from. +- `to`: `DATA`, 20 Bytes - (optional when creating new contract) The address the transaction is directed to. +- `gas`: `QUANTITY` - (optional, default: 90000) Integer of the gas provided for the transaction execution. It will return unused gas. +- `gasPrice`: `QUANTITY` - (optional, default: To-Be-Determined) Integer of the gasPrice used for each paid gas, in Wei. +- `value`: `QUANTITY` - (optional) Integer of the value sent with this transaction, in Wei. +- `data`: `DATA` - The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. +- `nonce`: `QUANTITY` - (optional) Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce. + +**Returns** + +`DATA`, The signed transaction object. + +**Example** + +```js +// Request +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// Result +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +Creates new message call transaction or a contract creation, if the data field contains code. + +**Parameters** + +1. `Object` - The transaction object + +- `from`: `DATA`, 20 Bytes - The address the transaction is sent from. +- `to`: `DATA`, 20 Bytes - (optional when creating new contract) The address the transaction is directed to. +- `gas`: `QUANTITY` - (optional, default: 90000) Integer of the gas provided for the transaction execution. It will return unused gas. +- `gasPrice`: `QUANTITY` - (optional, default: To-Be-Determined) Integer of the gasPrice used for each paid gas. +- `value`: `QUANTITY` - (optional) Integer of the value sent with this transaction. +- `data`: `DATA` - The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. +- `nonce`: `QUANTITY` - (optional) Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce. + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + data: "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**Returns** + +`DATA`, 32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available. + +Use [eth_getTransactionReceipt](#eth_gettransactionreceipt) to get the contract address, after the transaction was mined, when you created a contract. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +Creates new message call transaction or a contract creation for signed transactions. + +**Parameters** + +1. `DATA`, The signed transaction data. + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**Returns** + +`DATA`, 32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available. + +Use [eth_getTransactionReceipt](#eth_gettransactionreceipt) to get the contract address, after the transaction was mined, when you created a contract. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +Executes a new message call immediately without creating a transaction on the block chain. + +**Parameters** + +1. `Object` - The transaction call object + +- `from`: `DATA`, 20 Bytes - (optional) The address the transaction is sent from. +- `to`: `DATA`, 20 Bytes - The address the transaction is directed to. +- `gas`: `QUANTITY` - (optional) Integer of the gas provided for the transaction execution. eth_call consumes zero gas, but this parameter may be needed by some executions. +- `gasPrice`: `QUANTITY` - (optional) Integer of the gasPrice used for each paid gas +- `value`: `QUANTITY` - (optional) Integer of the value sent with this transaction +- `data`: `DATA` - (optional) Hash of the method signature and encoded parameters. For details see [Ethereum Contract ABI in the Solidity documentation](https://docs.soliditylang.org/en/latest/abi-spec.html) + +2. `QUANTITY|TAG` - integer block number, or the string `"latest"`, `"earliest"` or `"pending"`, see the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter) + +**Returns** + +`DATA` - the return value of executed contract. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction will not be added to the blockchain. Note that the estimate may be significantly more than the amount of gas actually used by the transaction, for a variety of reasons including EVM mechanics and node performance. + +**Parameters** + +See [eth_call](#eth_call) parameters, expect that all properties are optional. If no gas limit is specified geth uses the block gas limit from the pending block as an upper bound. As a result the returned estimate might not be enough to executed the call/transaction when the amount of gas is higher than the pending block gas limit. + +**Returns** + +`QUANTITY` - the amount of gas used. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +Returns information about a block by hash. + +**Parameters** + +1. `DATA`, 32 Bytes - Hash of a block. +2. `Boolean` - If `true` it returns the full transaction objects, if `false` only the hashes of the transactions. + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**Returns** + +`Object` - A block object, or `null` when no block was found: + +- `number`: `QUANTITY` - the block number. `null` when its pending block. +- `hash`: `DATA`, 32 Bytes - hash of the block. `null` when its pending block. +- `parentHash`: `DATA`, 32 Bytes - hash of the parent block. +- `nonce`: `DATA`, 8 Bytes - hash of the generated proof-of-work. `null` when its pending block. +- `sha3Uncles`: `DATA`, 32 Bytes - SHA3 of the uncles data in the block. +- `logsBloom`: `DATA`, 256 Bytes - the bloom filter for the logs of the block. `null` when its pending block. +- `transactionsRoot`: `DATA`, 32 Bytes - the root of the transaction trie of the block. +- `stateRoot`: `DATA`, 32 Bytes - the root of the final state trie of the block. +- `receiptsRoot`: `DATA`, 32 Bytes - the root of the receipts trie of the block. +- `miner`: `DATA`, 20 Bytes - the address of the beneficiary to whom the mining rewards were given. +- `difficulty`: `QUANTITY` - integer of the difficulty for this block. +- `totalDifficulty`: `QUANTITY` - integer of the total difficulty of the chain until this block. +- `extraData`: `DATA` - the "extra data" field of this block. +- `size`: `QUANTITY` - integer the size of this block in bytes. +- `gasLimit`: `QUANTITY` - the maximum gas allowed in this block. +- `gasUsed`: `QUANTITY` - the total used gas by all transactions in this block. +- `timestamp`: `QUANTITY` - the unix timestamp for when the block was collated. +- `transactions`: `Array` - Array of transaction objects, or 32 Bytes transaction hashes depending on the last given parameter. +- `uncles`: `Array` - Array of uncle hashes. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// Result +{ +{ +"jsonrpc": "2.0", +"id": 1, +"result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] +} +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +Returns information about a block by block number. + +**Parameters** + +1. `QUANTITY|TAG` - integer of a block number, or the string `"earliest"`, `"latest"` or `"pending"`, as in the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter). +2. `Boolean` - If `true` it returns the full transaction objects, if `false` only the hashes of the transactions. + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**Returns** +See [eth_getBlockByHash](#eth_getblockbyhash) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +Result see [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +Returns the information about a transaction requested by transaction hash. + +**Parameters** + +1. `DATA`, 32 Bytes - hash of a transaction + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**Returns** + +`Object` - A transaction object, or `null` when no transaction was found: + +- `blockHash`: `DATA`, 32 Bytes - hash of the block where this transaction was in. `null` when its pending. +- `blockNumber`: `QUANTITY` - block number where this transaction was in. `null` when its pending. +- `from`: `DATA`, 20 Bytes - address of the sender. +- `gas`: `QUANTITY` - gas provided by the sender. +- `gasPrice`: `QUANTITY` - gas price provided by the sender in Wei. +- `hash`: `DATA`, 32 Bytes - hash of the transaction. +- `input`: `DATA` - the data send along with the transaction. +- `nonce`: `QUANTITY` - the number of transactions made by the sender prior to this one. +- `to`: `DATA`, 20 Bytes - address of the receiver. `null` when its a contract creation transaction. +- `transactionIndex`: `QUANTITY` - integer of the transactions index position in the block. `null` when its pending. +- `value`: `QUANTITY` - value transferred in Wei. +- `v`: `QUANTITY` - ECDSA recovery id +- `r`: `QUANTITY` - ECDSA signature r +- `s`: `QUANTITY` - ECDSA signature s + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// Result +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +Returns information about a transaction by block hash and transaction index position. + +**Parameters** + +1. `DATA`, 32 Bytes - hash of a block. +2. `QUANTITY` - integer of the transaction index position. + +```js +params: [ + "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", + "0x0", // 0 +] +``` + +**Returns** +See [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}' +``` + +Result see [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +Returns information about a transaction by block number and transaction index position. + +**Parameters** + +1. `QUANTITY|TAG` - a block number, or the string `"earliest"`, `"latest"` or `"pending"`, as in the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter). +2. `QUANTITY` - the transaction index position. + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**Returns** +See [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +Result see [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +Returns the receipt of a transaction by transaction hash. + +**Note** That the receipt is not available for pending transactions. + +**Parameters** + +1. `DATA`, 32 Bytes - hash of a transaction + +```js +params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"] +``` + +**Returns** +`Object` - A transaction receipt object, or `null` when no receipt was found: + +- `transactionHash `: `DATA`, 32 Bytes - hash of the transaction. +- `transactionIndex`: `QUANTITY` - integer of the transactions index position in the block. +- `blockHash`: `DATA`, 32 Bytes - hash of the block where this transaction was in. +- `blockNumber`: `QUANTITY` - block number where this transaction was in. +- `from`: `DATA`, 20 Bytes - address of the sender. +- `to`: `DATA`, 20 Bytes - address of the receiver. null when its a contract creation transaction. +- `cumulativeGasUsed `: `QUANTITY ` - The total amount of gas used when this transaction was executed in the block. +- `gasUsed `: `QUANTITY ` - The amount of gas used by this specific transaction alone. +- `contractAddress `: `DATA`, 20 Bytes - The contract address created, if the transaction was a contract creation, otherwise `null`. +- `logs`: `Array` - Array of log objects, which this transaction generated. +- `logsBloom`: `DATA`, 256 Bytes - Bloom filter for light clients to quickly retrieve related logs. + It also returns _either_ : +- `root` : `DATA` 32 bytes of post-transaction stateroot (pre Byzantium) +- `status`: `QUANTITY` either `1` (success) or `0` (failure) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}' +// Result +{ +"id":1, +"jsonrpc":"2.0", +"result": { + transactionHash: '0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238', + transactionIndex: '0x1', // 1 + blockNumber: '0xb', // 11 + blockHash: '0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b', + cumulativeGasUsed: '0x33bc', // 13244 + gasUsed: '0x4dc', // 1244 + contractAddress: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', // or null, if none was created + logs: [{ + // logs as returned by getFilterLogs, etc. + }, ...], + logsBloom: "0x00...0", // 256 byte bloom filter + status: '0x1' + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +Returns information about a uncle of a block by hash and uncle index position. + +**Parameters** + +1. `DATA`, 32 Bytes - The hash of a block. +2. `QUANTITY` - The uncle's index position. + +```js +params: [ + "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", + "0x0", // 0 +] +``` + +**Returns** +See [eth_getBlockByHash](#eth_getblockbyhash) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}' +``` + +Result see [eth_getBlockByHash](#eth_getblockbyhash) + +**Note**: An uncle doesn't contain individual transactions. + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +Returns information about a uncle of a block by number and uncle index position. + +**Parameters** + +1. `QUANTITY|TAG` - a block number, or the string `"earliest"`, `"latest"` or `"pending"`, as in the [default block parameter](/developers/docs/apis/json-rpc/#default-block-parameter). +2. `QUANTITY` - the uncle's index position. + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**Returns** +See [eth_getBlockByHash](#eth_getblockbyhash) + +**Note**: An uncle doesn't contain individual transactions. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +Result see [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getCompilers {#eth_getcompilers} + +Returns a list of available compilers in the client. + +**Parameters** +None + +**Returns** +`Array` - Array of available compilers. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCompilers","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": ["solidity", "lll", "serpent"] +} +``` + +### eth_compileSolidity {#eth_compile_solidity} + +Returns compiled solidity code. + +**Parameters** + +1. `String` - The source code. + +```js +params: [ + "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }", +] +``` + +**Returns** +`DATA` - The compiled source code. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": { + "code": "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056", + "info": { + "source": "contract test {\n function multiply(uint a) constant returns(uint d) {\n return a * 7;\n }\n}\n", + "language": "Solidity", + "languageVersion": "0", + "compilerVersion": "0.9.19", + "abiDefinition": [ + { + "constant": true, + "inputs": [ + { + "name": "a", + "type": "uint256" + } + ], + "name": "multiply", + "outputs": [ + { + "name": "d", + "type": "uint256" + } + ], + "type": "function" + } + ], + "userDoc": { + "methods": {} + }, + "developerDoc": { + "methods": {} + } + } +} +``` + +### eth_compileLLL {#eth_compileLLL} + +Returns compiled LLL code. + +**Parameters** + +1. `String` - The source code. + +```js +params: ["(returnlll (suicide (caller)))"] +``` + +**Returns** +`DATA` - The compiled source code. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileLLL","params":["(returnlll (suicide (caller)))"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code +} +``` + +### eth_compileSerpent {#eth_compileserpent} + +Returns compiled serpent code. + +**Parameters** + +1. `String` - The source code. + +```js +params: ["/* some serpent */"] +``` + +**Returns** +`DATA` - The compiled source code. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSerpent","params":["/* some serpent */"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code +} +``` + +### eth_newFilter {#eth_newfilter} + +Creates a filter object, based on filter options, to notify when the state changes (logs). +To check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges). + +**A note on specifying topic filters:** +Topics are order-dependent. A transaction with a log with topics [A, B] will be matched by the following topic filters: + +- `[]` "anything" +- `[A]` "A in first position (and anything after)" +- `[null, B]` "anything in first position AND B in second position (and anything after)" +- `[A, B]` "A in first position AND B in second position (and anything after)" +- `[[A, B], [A, B]]` "(A OR B) in first position AND (A OR B) in second position (and anything after)" +- **Parameters** + +1. `Object` - The filter options: + +- `fromBlock`: `QUANTITY|TAG` - (optional, default: `"latest"`) Integer block number, or `"latest"` for the last mined block or `"pending"`, `"earliest"` for not yet mined transactions. +- `toBlock`: `QUANTITY|TAG` - (optional, default: `"latest"`) Integer block number, or `"latest"` for the last mined block or `"pending"`, `"earliest"` for not yet mined transactions. +- `address`: `DATA|Array`, 20 Bytes - (optional) Contract address or a list of addresses from which logs should originate. +- `topics`: `Array of DATA`, - (optional) Array of 32 Bytes `DATA` topics. Topics are order-dependent. Each topic can also be an array of DATA with "or" options. + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**Returns** +`QUANTITY` - A filter id. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +Creates a filter in the node, to notify when a new block arrives. +To check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges). + +**Parameters** +None + +**Returns** +`QUANTITY` - A filter id. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +Creates a filter in the node, to notify when new pending transactions arrive. +To check if the state has changed, call [eth_getFilterChanges](#eth_getfilterchanges). + +**Parameters** +None + +**Returns** +`QUANTITY` - A filter id. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +Uninstalls a filter with given id. Should always be called when watch is no longer needed. +Additonally Filters timeout when they aren't requested with [eth_getFilterChanges](#eth_getfilterchanges) for a period of time. + +**Parameters** + +1. `QUANTITY` - The filter id. + +```js +params: [ + "0xb", // 11 +] +``` + +**Returns** +`Boolean` - `true` if the filter was successfully uninstalled, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +Polling method for a filter, which returns an array of logs which occurred since last poll. + +**Parameters** + +1. `QUANTITY` - the filter id. + +```js +params: [ + "0x16", // 22 +] +``` + +**Returns** +`Array` - Array of log objects, or an empty array if nothing has changed since last poll. + +- For filters created with `eth_newBlockFilter` the return are block hashes (`DATA`, 32 Bytes), e.g. `["0x3454645634534..."]`. +- For filters created with `eth_newPendingTransactionFilter ` the return are transaction hashes (`DATA`, 32 Bytes), e.g. `["0x6345343454645..."]`. +- For filters created with `eth_newFilter` logs are objects with following params: + - `removed`: `TAG` - `true` when the log was removed, due to a chain reorganization. `false` if its a valid log. + - `logIndex`: `QUANTITY` - integer of the log index position in the block. `null` when its pending log. + - `transactionIndex`: `QUANTITY` - integer of the transactions index position log was created from. `null` when its pending log. + - `transactionHash`: `DATA`, 32 Bytes - hash of the transactions this log was created from. `null` when its pending log. + - `blockHash`: `DATA`, 32 Bytes - hash of the block where this log was in. `null` when its pending. `null` when its pending log. + - `blockNumber`: `QUANTITY` - the block number where this log was in. `null` when its pending. `null` when its pending log. + - `address`: `DATA`, 20 Bytes - address from which this log originated. + - `data`: `DATA` - contains one or more 32 Bytes non-indexed arguments of the log. + - `topics`: `Array of DATA` - Array of 0 to 4 32 Bytes `DATA` of indexed log arguments. (In _solidity_: The first topic is the _hash_ of the signature of the event (e.g. `Deposit(address,bytes32,uint256)`), except you declared the event with the `anonymous` specifier.) +- **Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +Returns an array of all logs matching filter with given id. + +**Parameters** + +1. `QUANTITY` - The filter id. + +```js +params: [ + "0x16", // 22 +] +``` + +**Returns** +See [eth_getFilterChanges](#eth_getfilterchanges) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +Result see [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getLogs {#eth_getlogs} + +Returns an array of all logs matching a given filter object. + +**Parameters** + +1. `Object` - The filter options: + +- `fromBlock`: `QUANTITY|TAG` - (optional, default: `"latest"`) Integer block number, or `"latest"` for the last mined block or `"pending"`, `"earliest"` for not yet mined transactions. +- `toBlock`: `QUANTITY|TAG` - (optional, default: `"latest"`) Integer block number, or `"latest"` for the last mined block or `"pending"`, `"earliest"` for not yet mined transactions. +- `address`: `DATA|Array`, 20 Bytes - (optional) Contract address or a list of addresses from which logs should originate. +- `topics`: `Array of DATA`, - (optional) Array of 32 Bytes `DATA` topics. Topics are order-dependent. Each topic can also be an array of DATA with "or" options. +- `blockhash`: `DATA`, 32 Bytes - (optional, **future**) With the addition of EIP-234, `blockHash` will be a new filter option which restricts the logs returned to the single block with the 32-byte hash `blockHash`. Using `blockHash` is equivalent to `fromBlock` = `toBlock` = the block number with hash `blockHash`. If `blockHash` is present in in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**Returns** +See [eth_getFilterChanges](#eth_getfilterchanges) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +Result see [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getWork {#eth_getwork} + +Returns the hash of the current block, the seedHash, and the boundary condition to be met ("target"). + +**Parameters** +None + +**Returns** +`Array` - Array with the following properties: + +1. `DATA`, 32 Bytes - current block header pow-hash +2. `DATA`, 32 Bytes - the seed hash used for the DAG. +3. `DATA`, 32 Bytes - the boundary condition ("target"), 2^256 / difficulty. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": [ + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + "0x5EED00000000000000000000000000005EED0000000000000000000000000000", + "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000" + ] +} +``` + +### eth_submitWork {#eth_submitwork} + +Used for submitting a proof-of-work solution. + +**Parameters** + +1. `DATA`, 8 Bytes - The nonce found (64 bits) +2. `DATA`, 32 Bytes - The header's pow-hash (256 bits) +3. `DATA`, 32 Bytes - The mix digest (256 bits) + +```js +params: [ + "0x0000000000000001", + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000", +] +``` + +**Returns** +`Boolean` - returns `true` if the provided solution is valid, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}' +// Result +{ + "id":73, + "jsonrpc":"2.0", + "result": true +} +``` + +### eth_submitHashrate {#eth_submithashrate} + +Used for submitting mining hashrate. + +**Parameters** + +1. `Hashrate`, a hexadecimal string representation (32 bytes) of the hash rate +2. `ID`, String - A random hexadecimal(32 bytes) ID identifying the client + +```js +params: [ + "0x0000000000000000000000000000000000000000000000000000000000500000", + "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c", +] +``` + +**Returns** +`Boolean` - returns `true` if submitting went through successfully and `false` otherwise. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":73}' +// Result +{ + "id":73, + "jsonrpc":"2.0", + "result": true +} +``` + +### db_putString (deprecated) {#db_putstring} + +Stores a string in the local database. + +**Note** this function is deprecated. + +**Parameters** + +1. `String` - Database name. +2. `String` - Key name. +3. `String` - String to store. + +```js +params: ["testDB", "myKey", "myString"] +``` + +**Returns** +`Boolean` - returns `true` if the value was stored, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": true +} +``` + +### db_getString (deprecated) {#db_getstring} + +Returns string from the local database. +**Note** this function is deprecated. + +**Parameters** + +1. `String` - Database name. +2. `String` - Key name. + +```js +params: ["testDB", "myKey"] +``` + +**Returns** +`String` - The previously stored string. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": "myString" +} +``` + +### db_putHex (deprecated) {#db_puthex} + +Stores binary data in the local database. +**Note** this function is deprecated. + +**Parameters** + +1. `String` - Database name. +2. `String` - Key name. +3. `DATA` - The data to store. + +```js +params: ["testDB", "myKey", "0x68656c6c6f20776f726c64"] +``` + +**Returns** +`Boolean` - returns `true` if the value was stored, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","myKey","0x68656c6c6f20776f726c64"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": true +} +``` + +### db_getHex (deprecated) {#db_gethex} + +Returns binary data from the local database. +**Note** this function is deprecated. + +**Parameters** + +1. `String` - Database name. +2. `String` - Key name. + +```js +params: ["testDB", "myKey"] +``` + +**Returns** +`DATA` - The previously stored data. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","myKey"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": "0x68656c6c6f20776f726c64" +} +``` + +### shh_version (deprecated) {#shh_post} + +Returns the current whisper protocol version. + +**Note** this function is deprecated. + +**Parameters** +None + +**Returns** +`String` - The current whisper protocol version + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "2" +} +``` + +### shh_post (deprecated) {#shh_version} + +Sends a whisper message. + +**Note** this function is deprecated. + +**Parameters** + +1. `Object` - The whisper post object: + +- `from`: `DATA`, 60 Bytes - (optional) The identity of the sender. +- `to`: `DATA`, 60 Bytes - (optional) The identity of the receiver. When present whisper will encrypt the message so that only the receiver can decrypt it. +- `topics`: `Array of DATA` - Array of `DATA` topics, for the receiver to identify messages. +- `payload`: `DATA` - The payload of the message. +- `priority`: `QUANTITY` - The integer of the priority in a rang from ... (?). +- `ttl`: `QUANTITY` - integer of the time to live in seconds. + +```js +params: [ + { + from: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1", + to: "0x3e245533f97284d442460f2998cd41858798ddf04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a0d4d661997d3940272b717b1", + topics: [ + "0x776869737065722d636861742d636c69656e74", + "0x4d5a695276454c39425154466b61693532", + ], + payload: "0x7b2274797065223a226d6", + priority: "0x64", + ttl: "0x64", + }, +] +``` + +**Returns** +`Boolean` - returns `true` if the message was send, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_post","params":[{"from":"0xc931d93e97ab07fe42d923478ba2465f2..","topics": ["0x68656c6c6f20776f726c64"],"payload":"0x68656c6c6f20776f726c64","ttl":0x64,"priority":0x64}],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": true +} +``` + +### shh_newIdentity (deprecated){#shh_newidentity} + +Creates new whisper identity in the client. + +**Note** this function is deprecated. + +**Parameters** +None + +**Returns** +`DATA`, 60 Bytes - the address of the new identity. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newIdentity","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xc931d93e97ab07fe42d923478ba2465f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca9007d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf" +} +``` + +### shh_hasIdentity (deprecated){#shh_hasidentity} + +Checks if the client hold the private keys for a given identity. + +**Note** this function is deprecated. + +**Parameters** + +1. `DATA`, 60 Bytes - The identity address to check. + +```js +params: [ + "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1", +] +``` + +**Returns** +`Boolean` - returns `true` if the client holds the privatekey for that identity, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_hasIdentity","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### shh_newGroup (deprecated){#shh_newgroup} + +**Note** this function is deprecated. + +**Parameters** +None + +**Returns** +`DATA`, 60 Bytes - the address of the new group. (?) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newGroup","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xc65f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca90931d93e97ab07fe42d923478ba2407d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf" +} +``` + +### shh_addToGroup (deprecated){#shh_addtogroup} + +**Note** this function is deprecated. + +**Parameters** + +1. `DATA`, 60 Bytes - The identity address to add to a group (?). + +```js +params: [ + "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1", +] +``` + +**Returns** +`Boolean` - returns `true` if the identity was successfully added to the group, otherwise `false` (?). + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_addToGroup","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### shh_newFilter (deprecated){#shh_newfilter} + +Creates filter to notify, when client receives whisper message matching the filter options. +**Note** this function is deprecated. + +**Parameters** + +1. `Object` - The filter options: + +- `to`: `DATA`, 60 Bytes - (optional) Identity of the receiver. _When present it will try to decrypt any incoming message if the client holds the private key to this identity._ +- `topics`: `Array of DATA` - Array of `DATA` topics which the incoming message's topics should match. You can use the following combinations: + - `[A, B] = A && B` + - `[A, [B, C]] = A && (B || C)` + - `[null, A, B] = ANYTHING && A && B` `null` works as a wildcard + - + +```js +params: [ + { + topics: ["0x12341234bf4b564f"], + to: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1", + }, +] +``` + +**Returns** +`QUANTITY` - The newly created filter. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newFilter","params":[{"topics": ['0x12341234bf4b564f'],"to": "0x2341234bf4b2341234bf4b564f..."}],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": "0x7" // 7 +} +``` + +### shh_uninstallFilter (deprecated){#shh_uninstallfilter} + +Uninstalls a filter with given id. Should always be called when watch is no longer needed. +Additionally Filters timeout when they aren't requested with [shh_getFilterChanges](#shh_getfilterchanges) for a period of time. +**Note** this function is deprecated. + +**Parameters** + +1. `QUANTITY` - The filter id. + +```js +params: [ + "0x7", // 7 +] +``` + +**Returns** +`Boolean` - `true` if the filter was successfully uninstalled, otherwise `false`. + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_uninstallFilter","params":["0x7"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": true +} +``` + +### shh_getFilterChanges (deprecated){#shh_getfilterchanges} + +Polling method for whisper filters. Returns new messages since the last call of this method. +**Note** calling the [shh_getMessages](#shh_getmessages) method, will reset the buffer for this method, so that you won't receive duplicate messages. +**Note** this function is deprecated. + +**Parameters** + +1. `QUANTITY` - The filter id. + +```js +params: [ + "0x7", // 7 +] +``` + +**Returns** +`Array` - Array of messages received since last poll: + +- `hash`: `DATA`, 32 Bytes (?) - The hash of the message. +- `from`: `DATA`, 60 Bytes - The sender of the message, if a sender was specified. +- `to`: `DATA`, 60 Bytes - The receiver of the message, if a receiver was specified. +- `expiry`: `QUANTITY` - Integer of the time in seconds when this message should expire (?). +- `ttl`: `QUANTITY` - Integer of the time the message should float in the system in seconds (?). +- `sent`: `QUANTITY` - Integer of the unix timestamp when the message was sent. +- `topics`: `Array of DATA` - Array of `DATA` topics the message contained. +- `payload`: `DATA` - The payload of the message. +- `workProved`: `QUANTITY` - Integer of the work this message required before it was send (?). + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getFilterChanges","params":["0x7"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "hash": "0x33eb2da77bf3527e28f8bf493650b1879b08c4f2a362beae4ba2f71bafcd91f9", + "from": "0x3ec052fc33..", + "to": "0x87gdf76g8d7fgdfg...", + "expiry": "0x54caa50a", // 1422566666 + "sent": "0x54ca9ea2", // 1422565026 + "ttl": "0x64", // 100 + "topics": ["0x6578616d"], + "payload": "0x7b2274797065223a226d657373616765222c2263686...", + "workProved": "0x0" + }] +} +``` + +### shh_getMessages (deprecated) {#shh_getmessages} + +Get all messages matching a filter. Unlike `shh_getFilterChanges` this returns all messages. + +**Note** this function is deprecated. + +**Parameters** + +1. `QUANTITY` - The filter id. + +```js +params: [ + "0x7", // 7 +] +``` + +**Returns** +See [shh_getFilterChanges](#shh_getfilterchanges) + +**Example** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getMessages","params":["0x7" +],"id":73}' +``` + +Result see [shh_getFilterChanges](#shh_getfilterchanges) + ## Usage Example {#usage-example} ### Deploying a contract using JSON_RPC {#deploying-contract} From d00a9d7d6e306459b41ad97952fb21935ab7b401 Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Wed, 22 Jun 2022 10:55:53 +0100 Subject: [PATCH 224/244] typos --- src/content/developers/docs/apis/json-rpc/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index 4c984aa5a1a..868f11ff0b3 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -74,7 +74,7 @@ The following options are possible for the defaultBlock parameter: ## Examples -On this page we provide examples of how to use individual JSON_RPC API endpoints using the command line tool, [curl](https://curl.se). These individial endpoint examples are found below in the [Curl examples](#curl-examples) section. Further down the page, we also provide an [end-to-end example](#usage-example) for compiling and deploying a smart contract using a Geth node, the json-rpc api and curl.. +On this page we provide examples of how to use individual JSON_RPC API endpoints using the command line tool, [curl](https://curl.se). These individual endpoint examples are found below in the [Curl examples](#curl-examples) section. Further down the page, we also provide an [end-to-end example](#usage-example) for compiling and deploying a smart contract using a Geth node, the JSON_RPC API and curl. ## Curl examples {#curl-examples} From feddb662282918a36da2c7ddb1a883d159483fdd Mon Sep 17 00:00:00 2001 From: Luka Kropec <37338979+lukassim@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:20:21 +0200 Subject: [PATCH 225/244] Fix examples of dates in translation style guide --- .../translation-program/translators-guide/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/contributing/translation-program/translators-guide/index.md b/src/content/contributing/translation-program/translators-guide/index.md index 883842c0628..bf68fa8daab 100644 --- a/src/content/contributing/translation-program/translators-guide/index.md +++ b/src/content/contributing/translation-program/translators-guide/index.md @@ -253,8 +253,8 @@ Some examples of what to be particularly mindful of: - 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 (mm/dd/yyyy) – 1st January, 2022 - - English US (dd/mm/yyyy) – January 1, 2022 + - 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 From 4368a6289ebb109301d77cd0c30802f31c7d5a59 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:26:43 +0000 Subject: [PATCH 226/244] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f17e8d7cf32..fe98d51ba48 100644 --- a/README.md +++ b/README.md @@ -1274,6 +1274,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <tr> <td align="center"><a href="https://keybase.io/tree"><img src="https://avatars.githubusercontent.com/u/67269?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tree</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=burningtree" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/StephenFluin"><img src="https://avatars.githubusercontent.com/u/165056?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Stephen Fluin</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=StephenFluin" title="Documentation">📖</a></td> + <td align="center"><a href="https://github.com/hakuta"><img src="https://avatars.githubusercontent.com/u/806605?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hakuta</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=hakuta" title="Documentation">📖</a></td> </tr> </table> From 01142227b69f78e5cf0f600d27f0f328d4d215e6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:26:43 +0000 Subject: [PATCH 227/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index fe7324d575d..9c1efdaf6cd 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7916,6 +7916,15 @@ "contributions": [ "doc" ] + }, + { + "login": "hakuta", + "name": "hakuta", + "avatar_url": "https://avatars.githubusercontent.com/u/806605?v=4", + "profile": "https://github.com/hakuta", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 2ec897e0b5a4560d73376fa9ba2062befdede518 Mon Sep 17 00:00:00 2001 From: Patrice Lamarque <plamarque@exoplatform.com> Date: Wed, 22 Jun 2022 16:02:19 +0200 Subject: [PATCH 228/244] fix mistake on date formats --- .../translation-program/translators-guide/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/contributing/translation-program/translators-guide/index.md b/src/content/contributing/translation-program/translators-guide/index.md index 883842c0628..03ecda7ad79 100644 --- a/src/content/contributing/translation-program/translators-guide/index.md +++ b/src/content/contributing/translation-program/translators-guide/index.md @@ -253,8 +253,8 @@ Some examples of what to be particularly mindful of: - 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 (mm/dd/yyyy) – 1st January, 2022 - - English US (dd/mm/yyyy) – January 1, 2022 + - English UK (dd/mm/yyyy) – 1st January, 2022 + - English US (mm/dd/yyy) – January 1, 2022 - Chinese (yyyy-mm-dd) – 2022 年 1 月 1 日 - French (dd/mm/yyyy) – 1er janvier 2022 - Italian (dd/mm/yyyy) – 1º gennaio 2022 From 152f18e610c7b0e0bf0db4f782c41dba9ed72a98 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 07:48:07 -0700 Subject: [PATCH 229/244] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/intl/en/page-upgrades.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index add6b827e9e..21b59479b2f 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -3,6 +3,6 @@ "page-upgrades-merge-date": "~Q3/Q4 2022", "page-upgrades-shards-date": "~2023", "page-upgrades-merge-banner-intro": "The Merge is approaching, and comes with changes to Ethereum.", - "page-upgrades-merge-banner-content-outdated": "Some content on this page may be out-of-date related to these changes, and updates are coming soon.", - "page-upgrades-merge-banner-developers-landing": "Some docs may be out-of-date related to these changes and have been marked with a banner similar to this. Updates coming soon." + "page-upgrades-merge-banner-content-outdated": "Some content on this page is out-of-date related to these changes. Updates are coming soon.", + "page-upgrades-merge-banner-developers-landing": "Some docs have a banner indicating they are out-of-date. Updates coming soon." } From 6ca33dfdc3b4f43392725ddca8814181c8b153b8 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 07:59:31 -0700 Subject: [PATCH 230/244] Update src/intl/en/page-eth.json --- src/intl/en/page-eth.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 07e36e12dcf..953a52c2945 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -15,7 +15,7 @@ "page-eth-flexible-amounts": "Available in flexible amounts", "page-eth-flexible-amounts-desc": "ETH is divisible up to 18 decimal places so you don't have to buy 1 whole ETH. You can buy fractions at a time – as little as 0.000000000000000001 ETH if you want.", "page-eth-fuels": "ETH fuels and secures Ethereum", -"page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. Part of the fee is required by the network (<a to=\"/glossary/#base-fee\">base fee</a>), and part is an incentive for a block producer (priority fee) to process and include what you're trying to do.", +"page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. This fee is an incentive for a block producer to process and verify what you're trying to do.", "page-eth-fuels-desc-2": "Currently, miners are like the record-keepers of Ethereum—they check and prove that no one is cheating, and perform work for the right to propose a block of transactions. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", "page-eth-fuels-desc-4": "Anyone is free to run Ethereum client software to verify and hold the state of the chain themselves. Node operators are not required to perform the same work as miners, and can quickly verify blocks that are proposed by others to ensure their validity, and to ensure they always have permissionless and private access to the network.", From e6b0c1072aa33eb64edc20b607a384fffb401ec2 Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Wed, 22 Jun 2022 16:45:02 +0100 Subject: [PATCH 231/244] update mev page for pre-merge --- src/content/developers/docs/mev/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index d15c62f6897..322fb6bf51c 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -9,7 +9,7 @@ Maximal extractable value (MEV) refers to the maximum value that can be extracte ### Miner extractable value -This concept was first applied under the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and was initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, after the transition to proof-of-stake via [The Merge](/upgrades/merge) validators will be responsible for these roles, and mining will no longer be applicable. The value extraction methods here will still persist after this transition, and thus a name change was needed. To keep the same acronym for continuity while maintaining the same fundamental meaning, "maximal extractable value" is now used as a more inclusive replacement. +This concept was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and was initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, after the transition to proof-of-stake via [The Merge](/upgrades/merge) validators will be responsible for these roles, and mining will no longer be applicable. The value extraction methods here will still persist after this transition, and thus the term "miner extractable value" is invalidated. "Maximal extractable value" is now used as a more inclusive replacement. ## Prerequisites {#prerequisites} @@ -17,11 +17,11 @@ Make sure you're familiar with [transactions](/developers/docs/transactions/), [ ## MEV extraction {#mev-extraction} -In theory MEV accrues entirely to miners because miners are the only party that can guarantee the execution of a profitable MEV opportunity (at least on the current proof-of-work chain — this will change after [The Merge](/upgrades/merge/)). In practice, however, a large portion of MEV is extracted by independent network participants referred to as "searchers." Searchers run complex algorithms on blockchain data to detect profitable MEV opportunities and have bots to automatically submit those profitable transactions to the network. +In theory MEV accrues entirely to miners/validators because they are the only party that can guarantee the execution of a profitable MEV opportunity. In practice, however, a large portion of MEV is extracted by independent network participants referred to as "searchers." Searchers run complex algorithms on blockchain data to detect profitable MEV opportunities and have bots to automatically submit those profitable transactions to the network. -Miners do get a portion of the full MEV amount anyway because searchers are willing to pay high gas fees (which go to the miner) in exchange for higher likelihood of inclusion of their profitable transactions in a block. Assuming searchers are economically rational, the gas fee that a searcher is willing to pay will be an amount up to 100% of the searcher's MEV (because if the gas fee was higher, the searcher would lose money). +Miners/validators do get a portion of the full MEV amount anyway because searchers are willing to pay high gas fees (which go to the miner/validator) in exchange for higher likelihood of inclusion of their profitable transactions in a block. Assuming searchers are economically rational, the gas fee that a searcher is willing to pay will be an amount up to 100% of the searcher's MEV (because if the gas fee was higher, the searcher would lose money). -With that, for some highly competitive MEV opportunities, such as [DEX arbitrage](#mev-examples-dex-arbitrage), searchers may have to pay 90% or even more of their total MEV revenue in gas fees to the miner because so many people want to run the same profitable arbitrage trade. This is because the only way to guarantee that their arbitrage transaction runs is if they submit the transaction with the highest gas price. +With that, for some highly competitive MEV opportunities, such as [DEX arbitrage](#mev-examples-dex-arbitrage), searchers may have to pay 90% or even more of their total MEV revenue in gas fees to the miner/validator because so many people want to run the same profitable arbitrage trade. This is because the only way to guarantee that their arbitrage transaction runs is if they submit the transaction with the highest gas price. ### Gas golfing {#mev-extraction-gas-golfing} @@ -111,7 +111,7 @@ This possibility of blockchain re-organization has been [previously explored on MEV extraction ballooned in early 2021, resulting in extremely high gas prices in the first few months of the year. The emergence of Flashbots's MEV relay has reduced the effectiveness of generalized frontrunners and has taken gas price auctions off-chain, lowering gas prices for ordinary users. -While many searchers are still making good money from MEV, as opportunities become more well-known and more and more searchers compete for the same opportunity, miners will capture more and more total MEV revenue (because the same sort of gas auctions as originally described above also occur in Flashbots, albeit privately, and miners will capture the resulting gas revenue). MEV is also not unique to Ethereum, and as opportunities become more competitive on Ethereum, searchers are moving to alternate blockchains like Binance Smart Chain, where similar MEV opportunities as those on Ethereum exist with less competition. +While many searchers are still making good money from MEV, as opportunities become more well-known and more and more searchers compete for the same opportunity, miners/validators will capture more and more total MEV revenue (because the same sort of gas auctions as originally described above also occur in Flashbots, albeit privately, and miners will capture the resulting gas revenue). MEV is also not unique to Ethereum, and as opportunities become more competitive on Ethereum, searchers are moving to alternate blockchains like Binance Smart Chain, where similar MEV opportunities as those on Ethereum exist with less competition. As DeFi grows and increases in popularity, MEV may soon significantly outweigh the base Ethereum block reward. With that comes a growing possibility of selfish block remining and consensus instability. Some consider this to be an existential threat to Ethereum, and disincentivizing selfish mining is an active area of research in Ethereum protocol theory. One solution currently being explored is [MEV reward smoothing](https://ethresear.ch/t/committee-driven-mev-smoothing/10408). From 211b4710fca5226aa914e9e87a6ebcd4d5e57a00 Mon Sep 17 00:00:00 2001 From: Joe <jmcook1186@gmail.com> Date: Wed, 22 Jun 2022 16:51:36 +0100 Subject: [PATCH 232/244] update mining algorithms for pre-merge --- .../pow/mining-algorithms/dagger-hashamoto/index.md | 2 +- .../consensus-mechanisms/pow/mining-algorithms/ethash/index.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md index 01359fed435..86ed2c27f5d 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Dagger-Hashimoto was the original research implementation and specification for Ethereum's mining algorithm. Dagger-Hashimoto was superseded by [Ethash](#ethash). +Dagger-Hashimoto was the original research implementation and specification for Ethereum's mining algorithm. Dagger-Hashimoto was superseded by [Ethash](#ethash). Mining will be switched off completely at [The Merge](/updates/merge) at which point Ethereum will be secured using a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) mechanism instead. ## Prerequisites {#prerequisites} diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md index 57165179ac1..b937f7ea659 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md @@ -5,6 +5,8 @@ lang: en sidebar: true --- +**Note that Ethash is Ethereum's proof-of-work mining algorithm. Proof-of-work mining will be switched off completely at [The Merge](/upgrades/merge) at which point Ethereum will be secured using a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) mechanism instead.** + [Ethash](https://github.com/ethereum/wiki/wiki/Ethash) is a modified version of the [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto) algorithm. Ethash proof-of-work is [memory hard](https://wikipedia.org/wiki/Memory-hard_function), which was thought to make the algorithm ASIC resistant, but ASIC Ethash-mining has since been shown to be possible. Memory hardness is achieved with a proof of work algorithm that requires choosing subsets of a fixed resource dependent on the nonce and block header. This resource (a few gigabytes in size) is called a DAG. The DAG is changed every 30000 blocks, a 125-hour window called an epoch (roughly 5.2 days) and takes a while to generate. Since the DAG only depends on block height, it can be pre-generated but if it's not, the client needs to wait until the end of this process to produce a block. If clients do not pre-generate and cache DAGs ahead of time the network may experience massive block delay on each epoch transition. Note that the DAG does not need to be generated for verifying the proof-of-work essentially allowing for verification with both low CPU and small memory. The general route that the algorithm takes is as follows: From 4c58214dccd2f5f19b7316ca8d6e7d3ee78bf067 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 10:08:29 -0700 Subject: [PATCH 233/244] Update src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../pow/mining-algorithms/dagger-hashamoto/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md index 86ed2c27f5d..647291b8e62 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/dagger-hashamoto/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Dagger-Hashimoto was the original research implementation and specification for Ethereum's mining algorithm. Dagger-Hashimoto was superseded by [Ethash](#ethash). Mining will be switched off completely at [The Merge](/updates/merge) at which point Ethereum will be secured using a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) mechanism instead. +Dagger-Hashimoto was the original research implementation and specification for Ethereum's mining algorithm. Dagger-Hashimoto was superseded by [Ethash](#ethash). Mining will be switched off completely after [The Merge](/updates/merge), at which point Ethereum will be secured using a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) mechanism instead. ## Prerequisites {#prerequisites} From c580c04362877bf35482fbb9cc567cf8de30ce96 Mon Sep 17 00:00:00 2001 From: smartcontracts <kelvin@optimism.io> Date: Wed, 22 Jun 2022 13:24:33 -0400 Subject: [PATCH 234/244] Include Arbitrum key in layer-2.json Key was missing, meaning the note wasn't being shown on the website. --- src/data/layer-2/layer-2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layer-2/layer-2.json b/src/data/layer-2/layer-2.json index 56afc9f30f3..41d87940621 100644 --- a/src/data/layer-2/layer-2.json +++ b/src/data/layer-2/layer-2.json @@ -10,7 +10,7 @@ "blockExplorer": "https://explorer.arbitrum.io/", "ecosystemPortal": "https://portal.arbitrum.one/", "tokenLists": "https://arbucks.io/tokens/", - "noteKey": "", + "noteKey": "layer-2-arbitrum-key", "purpose": ["universal"], "descriptionKey": "arbitrum-description", "imageKey": "arbitrum", From e2b1a4afa7ae54cbf91075c9d774ef8b8863ec0d Mon Sep 17 00:00:00 2001 From: smartcontracts <kelvin@optimism.io> Date: Wed, 22 Jun 2022 13:25:59 -0400 Subject: [PATCH 235/244] Update layer-2.json --- src/data/layer-2/layer-2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/layer-2/layer-2.json b/src/data/layer-2/layer-2.json index 41d87940621..af58ec456e6 100644 --- a/src/data/layer-2/layer-2.json +++ b/src/data/layer-2/layer-2.json @@ -10,7 +10,7 @@ "blockExplorer": "https://explorer.arbitrum.io/", "ecosystemPortal": "https://portal.arbitrum.one/", "tokenLists": "https://arbucks.io/tokens/", - "noteKey": "layer-2-arbitrum-key", + "noteKey": "layer-2-arbitrum-note", "purpose": ["universal"], "descriptionKey": "arbitrum-description", "imageKey": "arbitrum", From 03ecb1a9c1f0b39c1c77bb6a60314ba89a73fcd5 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 22 Jun 2022 11:36:09 -0600 Subject: [PATCH 236/244] add l2 info to adding-wallets page --- src/content/contributing/adding-wallets/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/contributing/adding-wallets/index.md b/src/content/contributing/adding-wallets/index.md index bdc21e965d6..544b8ae7032 100644 --- a/src/content/contributing/adding-wallets/index.md +++ b/src/content/contributing/adding-wallets/index.md @@ -43,6 +43,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Staking** - users are able to stake directly through the wallet. - **Swaps** - users are able to swap tokens through the wallet. - **Multichain networks** - your wallet supports users accessing multiple blockchain networks by default. +- **Layer 2 networks** - your wallet supports users accessing layer 2 networks by default. - **Customize gas fees** - your wallet allows users to customize their transaction gas fees (base fee, priority fee, max fee). - **ENS support** - your wallet allows users to send transactions to ENS names. - **ERC-20 support** - your wallet allows users to import ERC-20 token contracts, or automatically queries and displays ERC-20 tokens. From 312f3ab57e91f8e61b26f6dfa8a80b661debf018 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 22 Jun 2022 11:41:13 -0600 Subject: [PATCH 237/244] expand past smart contracts for code audits to also include security modules --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index fedf05be653..53f2c17f8bc 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -136,7 +136,7 @@ body: - type: input id: wallet_smart_contract_audit attributes: - label: Has the wallet's smart contract code been audited? + label: Has the wallet's smart contract code or security modules been audited? description: If yes, provide a link to any audits. - type: input id: wallet_security_team From ad933c495ef058806baa2031aafd7c00b9d66f81 Mon Sep 17 00:00:00 2001 From: Corwin Smith <cssmittys@gmail.com> Date: Wed, 22 Jun 2022 11:48:42 -0600 Subject: [PATCH 238/244] spam_protection -> scam_protection --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 53f2c17f8bc..c8fea37b5ff 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -149,10 +149,10 @@ body: label: Any other security testing that should be noted? description: Please note any other security precautions taken. - type: textarea - id: wallet_spam_protection + id: wallet_scam_protection attributes: - label: Spam protection? - description: Does the wallet employ any practices to warn users against potential spam (e.g. when interacting with suspicious accounts/contracts)? + label: Scam protection? + description: Does the wallet employ any practices to warn users against potential scams (e.g. when interacting with suspicious accounts/contracts)? - type: markdown id: features attributes: From 250ef6698d65b411df79ee91472aaec89871bb8a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:03:46 -0700 Subject: [PATCH 239/244] spelling correction for American English per style guide --- src/content/developers/docs/apis/json-rpc/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index 868f11ff0b3..29db4ea4f7c 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -766,7 +766,7 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f53 The sign method calculates an Ethereum specific signature with: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. -By adding a prefix to the message makes the calculated signature recognisable as an Ethereum specific signature. This prevents misuse where a malicious DApp can sign arbitrary data (e.g. transaction) and use the signature to impersonate the victim. +By adding a prefix to the message makes the calculated signature recognizable as an Ethereum specific signature. This prevents misuse where a malicious DApp can sign arbitrary data (e.g. transaction) and use the signature to impersonate the victim. Note: the address to sign with must be unlocked. From aeb8ed4948c4b1594a68f4657093f8b828bc722f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:12:32 -0700 Subject: [PATCH 240/244] remove node comments from /eth --- src/intl/en/page-eth.json | 5 +---- src/pages-conditional/eth.tsx | 11 +---------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 953a52c2945..57a223f4d3b 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -15,11 +15,9 @@ "page-eth-flexible-amounts": "Available in flexible amounts", "page-eth-flexible-amounts-desc": "ETH is divisible up to 18 decimal places so you don't have to buy 1 whole ETH. You can buy fractions at a time – as little as 0.000000000000000001 ETH if you want.", "page-eth-fuels": "ETH fuels and secures Ethereum", -"page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. This fee is an incentive for a block producer to process and verify what you're trying to do.", + "page-eth-fuels-desc": "ETH is the lifeblood of Ethereum. When you send ETH or use an Ethereum application, you'll pay a fee in ETH to use the Ethereum network. This fee is an incentive for a block producer to process and verify what you're trying to do.", "page-eth-fuels-desc-2": "Currently, miners are like the record-keepers of Ethereum—they check and prove that no one is cheating, and perform work for the right to propose a block of transactions. Miners who do this work are also rewarded with small amounts of newly-issued ETH.", "page-eth-fuels-desc-3": "The work miners do keeps Ethereum secure and free of centralized control. In other words,", - "page-eth-fuels-desc-4": "Anyone is free to run Ethereum client software to verify and hold the state of the chain themselves. Node operators are not required to perform the same work as miners, and can quickly verify blocks that are proposed by others to ensure their validity, and to ensure they always have permissionless and private access to the network.", - "page-eth-fuels-desc-4-link": "More on running a node", "page-eth-fuels-staking": "Soon, ETH will become even more important with staking. When you stake your ETH, you'll be able to help secure Ethereum and earn rewards. In this system, the threat of losing their ETH deters attackers.", "page-eth-fuels-more-staking": "More on staking", "page-eth-get-eth-btn": "Get ETH", @@ -35,7 +33,6 @@ "page-eth-how-to-buy-caption": "Updated often", "page-eth-is-money": "ETH is digital, global money.", "page-eth-last-updated": "January 2019", - "page-eth-mining-link": "More on Mining", "page-eth-monetary-policy": "Ethereum's monetary policy", "page-eth-more-on-ethereum-link": "More on Ethereum", "page-eth-no-centralized": "No centralized control ", diff --git a/src/pages-conditional/eth.tsx b/src/pages-conditional/eth.tsx index 713bc47638c..85a4e2e13ed 100644 --- a/src/pages-conditional/eth.tsx +++ b/src/pages-conditional/eth.tsx @@ -359,16 +359,7 @@ const EthPage = (props: PageProps<Queries.EthPageQuery, Context>) => { <strong> <Translation id="page-eth-powers-ethereum" /> </strong> - .{" "} - <Link to="/developers/docs/consensus-mechanisms/pow/mining/"> - <Translation id="page-eth-mining-link" /> - </Link> - </p> - <p> - <Translation id="page-eth-fuels-desc-4" />{" "} - <Link to="/run-a-node/"> - <Translation id="page-eth-fuels-desc-4-link" /> - </Link> + <Translation id="page-eth-period" /> </p> <p> <Translation id="page-eth-fuels-staking" />{" "} From ccf3403550a2de1b948e4467ad697e048192cace Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 18:36:03 +0000 Subject: [PATCH 241/244] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe98d51ba48..43594164b2c 100644 --- a/README.md +++ b/README.md @@ -1123,7 +1123,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d <td align="center"><a href="http://www.oskarmendel.me"><img src="https://avatars.githubusercontent.com/u/16289144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Oskar Mendel</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=brokenprogrammer" title="Code">💻</a></td> <td align="center"><a href="https://github.com/thewild-being"><img src="https://avatars.githubusercontent.com/u/82868359?v=4?s=100" width="100px;" alt=""/><br /><sub><b>thewild-being</b></sub></a><br /><a href="#ideas-thewild-being" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center"><a href="http://mihrac.com"><img src="https://avatars.githubusercontent.com/u/18642701?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mihrac Cerrahoglu</b></sub></a><br /><a href="#ideas-mydearcode" title="Ideas, Planning, & Feedback">🤔</a></td> - <td align="center"><a href="https://github.com/smartcontracts"><img src="https://avatars.githubusercontent.com/u/14298799?v=4?s=100" width="100px;" alt=""/><br /><sub><b>smartcontracts</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=smartcontracts" title="Documentation">📖</a></td> + <td align="center"><a href="https://github.com/smartcontracts"><img src="https://avatars.githubusercontent.com/u/14298799?v=4?s=100" width="100px;" alt=""/><br /><sub><b>smartcontracts</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=smartcontracts" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Asmartcontracts" title="Bug reports">🐛</a></td> <td align="center"><a href="http://thetaclubai.com"><img src="https://avatars.githubusercontent.com/u/47613687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Samay Lakhani</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=BlockchainRev" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/vdusart"><img src="https://avatars.githubusercontent.com/u/43795504?v=4?s=100" width="100px;" alt=""/><br /><sub><b>vdusart</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=vdusart" title="Documentation">📖</a> <a href="https://github.com/ethereum/ethereum-org-website/commits?author=vdusart" title="Code">💻</a></td> </tr> From a88b6d6c5de14eb3ecddfaa5b119c37699a45b2b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 18:36:04 +0000 Subject: [PATCH 242/244] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9c1efdaf6cd..ad84355227d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -6828,7 +6828,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/14298799?v=4", "profile": "https://github.com/smartcontracts", "contributions": [ - "doc" + "doc", + "bug" ] }, { From 02eaf440b59365552be101db84e435bd323f3e11 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:47:42 -0700 Subject: [PATCH 243/244] Update src/content/developers/docs/mev/index.md --- src/content/developers/docs/mev/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 322fb6bf51c..d1f5bc83471 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -9,7 +9,7 @@ Maximal extractable value (MEV) refers to the maximum value that can be extracte ### Miner extractable value -This concept was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and was initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, after the transition to proof-of-stake via [The Merge](/upgrades/merge) validators will be responsible for these roles, and mining will no longer be applicable. The value extraction methods here will still persist after this transition, and thus the term "miner extractable value" is invalidated. "Maximal extractable value" is now used as a more inclusive replacement. +This concept was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and was initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, after the transition to proof-of-stake via [The Merge](/upgrades/merge) validators will be responsible for these roles, and mining will no longer be applicable. The value extraction methods here will still persist after this transition, and thus the term "miner extractable value" is no longer valid. "Maximal extractable value" is now used as a more inclusive replacement. ## Prerequisites {#prerequisites} From 479d76fd43011765845acda49864ea72d44c85e1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:11:47 -0700 Subject: [PATCH 244/244] v4.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10abb575056..2e2ef4b8c9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-org-website", - "version": "4.2.0", + "version": "4.3.0", "description": "Website of ethereum.org", "main": "index.js", "repository": "git@github.com:ethereum/ethereum-org-website.git",