From 8b94616495de2a578eb30c2b073aea0bce8db23b Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 15 Jul 2022 11:06:22 +0100 Subject: [PATCH 001/183] update page w pos-merge content --- src/content/energy-consumption/index.md | 50 +++++++++++++------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index d01475a0151..bd7b4bf0dae 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,50 +7,52 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum's energy consumption will be reduced by ~99.95% following [The Merge](/en/upgrades/merge) from proof-of-work (PoW) to proof-of-stake (PoS). After The Merge, Ethereum will use dramatically less carbon to be more secure. +Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that +can be run on low-powered devices and does not require heavy computation to participate. Under Ethereum's proof-of-stake mechanism +the network is secured using staked Ether rather than expended energy (as in [proof-of-work](/developers/docs/consensus-mechanisms/pos)). This means the energy expended by the Etheruem network is very small - on the order of 0.01 TWhr/yr. -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. +## Proof-of-stake energy expenditure {#proof-of-stake-energy} -## The Merge {#the-merge} +The energy expenditure of Ethereum is roughly equal to the cost of running a modest laptop for each node on the network. -[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. +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. -## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} +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 one reason why tools that compare energy consumption per transaction across platforms are misleading. -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. +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. -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 [^1] and a carbon footprint similar to Switzerland[^1]. +[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, Bitcoin 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. In comparison, the total energy expenditure for securing Ethereum is closer to **0.01 TWh/yr**. -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). +![Comparison of energy expenditure across industries](./energy.png) -Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. +The figure above shows the estimated annual energy consumption in TWh/yr for various industries (retrieved in June 2022). +_Note that the estimates presented in the plot are from publicly available sources that have been linked to in the text below. They are +illustrative and do not represent an official estimate, promise or forecast._ -## Proof-of-stake energy expenditure {#proof-of-stake-energy} +To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. Taking 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 (estimated to consume 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). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. 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 uses in a year. -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. +## A green application layer {#green-applications} -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. +While Ethereum's energy consumption is very low, there are is also 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. Through the development of these (and other, e.g. [DeSci](/desci)) Ethereum is becoming an environmentally and socially-positive technology. -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. +## Ethereum's Carbon debt -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. +Ethereum's current energy expenditure is very low, but this has not always been the case. Ethereum switched on it's proof-of-stake consensus mechanism in autumn 2022, but for eight years before then it used a proof-of-work mechanism with a much greater environmental cost. -[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**. +Since its inception, Ethereum aimed to implement a proof-of-stake consensus mechanism, but doing so without sacrificing security and decentralization took years of focused research and development. Therefore, a proof-of-work mechanism was used to get the network started. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle, expending energy in the process. 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. Ethereum's total energy consumption peaked during the apex of the crypto bull market in February 2022 at just under 94 TWh/yr. In the summer before the switch to proof-of-stake, the energy consumption was closer to 60 TWh/yr, comparable to that of Uzbekistan, with a Carbon emission equivalent to that of Azerbaijan (33 MT/yr). -![Comparison of energy expenditure across industries](./energy.png) +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 figure above shows the estimated annual energy consumption in TWh/yr for various industries (retrieved in June 2022). -_Note that the estimates presented in the plot are from publicly available sources that have been linked to in the text below. They are -illustrative and do not represent an official estimate, promise or forecast._ +## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} -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 (estimated to consume 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). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. 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. +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. -## A greener Ethereum {#green-ethereum} +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 [^1] and a carbon footprint similar to Switzerland[^1]. -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. +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). -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. +Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. 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 b3283ed8c27835f168af0f9918d1ba0fe273ae2a Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 15 Jul 2022 12:13:48 +0100 Subject: [PATCH 002/183] Update src/content/energy-consumption/index.md --- src/content/energy-consumption/index.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index bd7b4bf0dae..4da550fe36b 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -7,9 +7,7 @@ sidebar: true # Ethereum energy consumption {#introduction} -Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that -can be run on low-powered devices and does not require heavy computation to participate. Under Ethereum's proof-of-stake mechanism -the network is secured using staked Ether rather than expended energy (as in [proof-of-work](/developers/docs/consensus-mechanisms/pos)). This means the energy expended by the Etheruem network is very small - on the order of 0.01 TWhr/yr. +Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that can be run on low-powered devices and does not require heavy computation to participate. Under Ethereum's proof-of-stake mechanism the network is secured using staked Ether rather than expended energy (as in [proof-of-work](/developers/docs/consensus-mechanisms/pos)). This means the energy expended by the Etheruem network is very small - on the order of 0.01 TWhr/yr. ## Proof-of-stake energy expenditure {#proof-of-stake-energy} From 5acbdebfaa9950c0347a61adf4ab05182455cbb4 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 15 Jul 2022 13:00:03 +0100 Subject: [PATCH 003/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- 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 4da550fe36b..379ef500c57 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 is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that can be run on low-powered devices and does not require heavy computation to participate. Under Ethereum's proof-of-stake mechanism the network is secured using staked Ether rather than expended energy (as in [proof-of-work](/developers/docs/consensus-mechanisms/pos)). This means the energy expended by the Etheruem network is very small - on the order of 0.01 TWhr/yr. +Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) consensus mechanism that can be run on low-powered devices and does not require heavy computation to participate. Ethereum's proof-of-stake mechanism secures the network by using staked ETH rather than expended energy, like in [proof-of-work](/developers/docs/consensus-mechanisms/pos). The switch to proof-of-stake means the energy expended by the Ethereum network is relatively small - on the order of 0.01 TWh/yr. ## Proof-of-stake energy expenditure {#proof-of-stake-energy} @@ -31,11 +31,11 @@ To put Ethereum's energy consumption in context, we can compare annualized estim ## A green application layer {#green-applications} -While Ethereum's energy consumption is very low, there are is also 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. Through the development of these (and other, e.g. [DeSci](/desci)) Ethereum is becoming an environmentally and socially-positive technology. +While Ethereum's energy consumption is very low, there is also 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. Through the development of these (and others, e.g. [DeSci](/desci/)), Ethereum is becoming an environmentally and socially-positive technology. -## Ethereum's Carbon debt +## Ethereum's carbon debt {#carbon-debt} -Ethereum's current energy expenditure is very low, but this has not always been the case. Ethereum switched on it's proof-of-stake consensus mechanism in autumn 2022, but for eight years before then it used a proof-of-work mechanism with a much greater environmental cost. +Ethereum's current energy expenditure is very low, but this has not always been the case. Ethereum switched on its proof-of-stake consensus mechanism in Q3 2022. However, Ethereum used a proof-of-work mechanism from 2014-2022, which had a much greater environmental cost. Since its inception, Ethereum aimed to implement a proof-of-stake consensus mechanism, but doing so without sacrificing security and decentralization took years of focused research and development. Therefore, a proof-of-work mechanism was used to get the network started. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle, expending energy in the process. 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. Ethereum's total energy consumption peaked during the apex of the crypto bull market in February 2022 at just under 94 TWh/yr. In the summer before the switch to proof-of-stake, the energy consumption was closer to 60 TWh/yr, comparable to that of Uzbekistan, with a Carbon emission equivalent to that of Azerbaijan (33 MT/yr). From e841390952fd1031f8e8a887cc85748602185539 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 15 Jul 2022 13:09:17 +0100 Subject: [PATCH 004/183] remove rogue "mine" --- 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 379ef500c57..a296fcd8246 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -13,7 +13,7 @@ Ethereum is a green blockchain. It uses a [proof-of-stake](/developers/docs/cons The energy expenditure of Ethereum is 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. However, transaction-based estimates can be misleading because the energy required to propose and validate 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, 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 one reason why tools that compare energy consumption per transaction across platforms are misleading. From c9b454e0ca8f1dbe69a5e5b47251b287b3745e37 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 15 Jul 2022 15:06:42 +0100 Subject: [PATCH 005/183] update content for post-merge --- src/content/nft/index.md | 135 ++++----------------------------------- 1 file changed, 14 insertions(+), 121 deletions(-) diff --git a/src/content/nft/index.md b/src/content/nft/index.md index f6e09540ab1..e12443d1ad6 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -20,7 +20,7 @@ If Andy Warhol had been born in the late 90s, he probably would have minted Camp ## What's an NFT? {#what-are-nfts} -NFTs are tokens that we can use to represent ownership of unique items. They let us tokenise things like art, collectibles, even real estate. They can only have one official owner at a time and they're secured by the Ethereum blockchain – no one can modify the record of ownership or copy/paste a new NFT into existence. +NFTs are tokens that we can use to represent ownership of unique items. They let us tokenize things like art, collectibles, even real estate. Ownership of an asset is secured by the Ethereum blockchain – no one can modify the record of ownership or copy/paste a new NFT into existence. NFT stands for non-fungible token. Non-fungible is an economic term that you could use to describe things like your furniture, a song file, or your computer. These things are not interchangeable for other items because they have unique properties. @@ -96,7 +96,7 @@ NFTs are different from ERC-20 tokens, such as DAI or LINK, in that each individ - Signatures - Lots and lots more options to get creative with! -An NFT can only have one owner at a time. Ownership is managed through the uniqueID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as ERC-721. This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: +Ownership of NFTs is managed through the uniqueID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as ERC-721. This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: - Creating a new block - Validating information @@ -291,11 +291,10 @@ NFTs are growing in popularity which means they're also coming under increased s To clarify a few things: -- NFTs aren't directly increasing the carbon footprint of Ethereum. -- The way Ethereum keeps your funds and assets secure is currently energy-intensive but it's about to improve. -- Once improved, Ethereum's carbon footprint will be 99.95% better, making it more energy efficient than many existing industries. +- Creating and transferring NFTs are just Ethereum transactions - they have no direct impact on the energy expended by Ethereum, nor do they independently expend their own energy. +- Ethereum is a low-energy blockchain, meaning the environmental impact of creating, buying and transferring NFTs is very small. -To explain further we're going to have to get a little more technical so bear with us... +The next sections explain further with a little more technical detail... ### Don't blame it on the NFTs {#nft-qualities} @@ -305,9 +304,9 @@ Decentralized meaning you and everyone else can verify you own something. All wi Secure meaning no one can copy/paste your NFT or steal it. -These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. But it comes at a cost. Blockchains like Bitcoin and Ethereum are energy intensive right now because it takes a lot of energy to preserve these qualities. If it was easy to rewrite Ethereum's history to steal NFTs or cryptocurrency, the system collapses. +These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. Ethereum protects the assets using a decentralized consensus mechanism called ['proof-of-stake'](/developers/docs/consensus-mechanisms/pos). This is a low carbon consensus mechanism that is also considered more secure than the energy-intensive alternative, ['proof-of-work'](/developers/docs/consensus-mechanisms/pow). NFTs have been associated with high energy expenditure because Ethereum used to be secured using proof-of-work. This is no longer true. -#### The work in minting your NFT {#minting-nfts} +#### Minting NFTs {#minting-nfts} When you mint an NFT, a few things have to happen: @@ -316,56 +315,16 @@ When you mint an NFT, a few things have to happen: - The transactions that confirm the above need to be added to a block and "immortalised" on the chain. - The block needs to be confirmed by everyone in the network as "correct". This consensus removes the need for intermediaries because the network agrees that your NFT exists and belongs to you. And it's on chain so anyone can check it. This is one of the ways Ethereum helps NFT creators to maximise their earnings. -All these tasks are done by miners. And they let the rest of the network know about your NFT and who owns it. This means mining needs to be sufficiently difficult, otherwise anyone could just claim that they own the NFT you just minted and fraudulently transfer ownership. There are lots of incentives in place to make sure miners are acting honestly. +All these tasks are done by block producers and validators. Block proposers add your NFT transaction to a block and broadcast it to the rest of the network. Validators check that the transaction is valid and then add it to their databases. There are lots of crypto-economic incentives in place to make sure validators are acting honestly. Otherwise, anyone could just claim that they own the NFT you just minted and fraudulently transfer ownership. -[More on mining](/developers/docs/consensus-mechanisms/pow/) +#### NFT security {#nft-security} -#### Securing your NFT with mining {#securing-nfts} +Ethereum's security comes from its proof-of-stake consensus mechanism - validators deposit 32 ETH into a contract that can be destroyed if they misbehave. The system is designed to strongly economically disincentivize malicious actions, making Ethereum effectively tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ether to change it, and even then their success is not guaranteed because the Ethereum community could decide to fork their malicious actions away. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT and the bad actor would be economically penalized and ejected from the pool of validators to prevent it from happening. -Mining difficulty comes from the fact that it takes a lot of computing power to create new blocks in the chain. Importantly, blocks are created consistently, not just when they're needed. They're created every 12 seconds or so. +Security issues relating to NFTs are most often related to phishing scams, smart contract vulnerabilities or user errors (such as inadvertently exposing private keys), making good wallet security critical for NFT owners. -This is important for making Ethereum tamper-proof, one of the qualities that makes NFTs possible. The more blocks the more secure the chain. If your NFT was created in block #600 and a hacker were to try and steal your NFT by modifying its data, the digital fingerprint of all subsequent blocks would change. That means anyone running Ethereum software would immediately be able to detect and prevent it from happening. - -However this means that computing power needs to be used constantly. It also means that a block that contains 0 NFT transactions will still have roughly the same carbon footprint, because computing power will still be consumed to create it. Other non-NFT transactions will fill the blocks. - -#### Blockchains are energy intensive, right now {#blockchains-intensive} - -So yes, there is a carbon footprint associated with creating blocks by mining – and this is a problem for chains like Bitcoin too – but it's not directly the fault of NFTs. - -A lot of mining uses renewable energy sources or untapped energy in remote locations. And there is the argument that the industries that NFTs and cryptocurrencies are disrupting have huge carbon footprints too. But just because existing industries are bad, doesn't mean we shouldn't strive to be better. - -And we are. Ethereum is evolving to make using Ethereum (and by virtue, NFTs) more energy efficient. And that's always been the plan. - -We're not here to defend the environmental footprint of mining, instead we want to explain how things are changing for the better. - -### A greener future... {#a-greener-future} - -For as long as Ethereum has been around, the energy-consumption of mining has been a huge focus area for developers and researchers. And the vision has always been to replace it as soon as possible. [More on Ethereum's vision](/upgrades/vision/) - -This vision is being delivered right now. - -#### A greener Ethereum {#greener-ethereum} - -Ethereum is currently going through a series of upgrades that will replace mining with [staking](/staking/). This will remove computing power as a security mechanism, and reduce Ethereum's carbon footprint by ~99.95%[^1]. In this world, stakers commit funds instead of computing power to secure the network. - -The energy-cost of Ethereum will become the cost of running a home computer multiplied by the number of nodes in the network. If there are 10,000 nodes in the network and the cost of running a home computer is roughly 525kWh per year. That's 5,250,000kWh[^1] per year for the entire network. - -We can use this to compare the future of Ethereum to a global service like Visa. 100,000 Visa transactions uses 149kWh of energy[^2]. In proof-of-stake Ethereum, that same number of transactions would cost 17.4kWh of energy or ~11% of the total energy[^3]. That's without considering the many optimizations being worked on in parallel to the consensus layer and shard chains, like [rollups](/glossary/#rollups). It could be as little as 0.1666666667kWh of energy for 100,000 transactions. - -Importantly this improves the energy efficiency while preserving Ethereum's decentralization and security. Many other blockchains out there might already use some form of staking, but they're secured by a select few stakers, not the thousands that Ethereum will have. The more decentralization, the more secure the system. - -[More on energy estimates](#footnotes-and-sources) - -_We’ve provided the basic comparison to Visa to baseline your understanding of proof-of-stake Ethereum energy consumption against a familiar name. However, in practice, it’s not really correct to compare based on number of transactions. Ethereum’s energy output is time-based. If Ethereum did more or less transactions from one minute to the next, the energy output would stay the same._ - -_It’s also important to remember that Ethereum does more than just financial transactions, it’s a platform for applications, so a fairer comparison might be to many companies/industries including Visa, AWS and more!_ - -#### Timelines {#timelines} - -The process has already started. [The Beacon Chain](/upgrades/beacon-chain/), the first upgrade, shipped in December 2020. This provides the foundation for staking by allowing stakers to join the system. The next step relevant to energy efficiency is to merge the current chain, the one secured by miners, into the Beacon Chain where mining isn't needed. Timelines can't be exact at this stage, but it's estimated that this will happen sometime in 2022. This process is known as The Merge (formerly referred to as the docking). [More on The Merge](/upgrades/merge/). - - - More on Ethereum upgrades + + More on security ## Build with NFTs {#build-with-nfts} @@ -379,71 +338,5 @@ Most NFTs are built using a consistent standard known as [ERC-721](/developers/d - [A beginner's guide to NFTs](https://linda.mirror.xyz/df649d61efb92c910464a4e74ae213c4cab150b9cbcc4b7fb6090fc77881a95d) – _Linda Xie, January 2020_ - [Everything you need to know about the metaverse](https://foundation.app/blog/enter-the-metaverse) – _Foundation team, foundation.app_ - [No, CryptoArtists Aren’t Harming the Planet](https://medium.com/superrare/no-cryptoartists-arent-harming-the-planet-43182f72fc61) +- [Ethereum's energy consumption](/energy_consumption) - [A country's worth of power, no more](https://blog.ethereum.org/2021/05/18/country-power-no-more/) – _Carl Beekhuizen, May 18 2021_ - - - -### Footnotes and sources {#footnotes-and-sources} - -This explains how we arrived at our energy estimates above. These estimates apply to the network as a whole and are not just reserved for the process of creating, buying, or selling NFTs. - -#### 1. 99.95% energy reduction from mining {#fn-1} - -The 99.95% reduction in energy consumption from a system secured by mining to a system secured by staking is calculated using the following data sources: - -- 44.49 TWh of annualized electrical energy is consumed by mining Ethereum - [Digiconomist](https://digiconomist.net/ethereum-energy-consumption) - -- The average desktop computer, all that's needed to run proof-of-stake, uses 0.06kWh of energy per hour – [Silicon Valley power chart](https://www.siliconvalleypower.com/residents/save-energy/appliance-energy-use-chart) (Some estimates are a little higher at 0.15kWh) - -At the time of writing, there are 140 592 validators from 16 405 unique addresses. -Of those, 87 897 validators are assumed to be staking from home. - -It is assumed the average person staking from home uses a 100 watt desktop personal computer setup to run an average of 5.4 validator clients. - -The 87 897 validators running from home gives us 16 300 users consuming ~1.64 megawatt of energy. - -The rest of the validators are run by custodial stakers such as exchanges and staking services. -It can be assumed that they use 100w per 5.5 validators. This is a gross overestimation to be on the safe side. - -In total, Ethereum on proof-of-stake therefore consumes something on the order of 2.62 megawatt, which is about the same as a small American town. - -This is a reduction of at least 99.95% in total energy usage from the Digiconomist estimate of 44.94 TWh per year that the Ethereum miners currently consume. - -#### 2. Visa energy consumption {#fn-2} - -The cost of 100,000 Visa transactions is 149 kwH - [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/) - -Year-ending September 2020 they processed 140,839,000,000 transactions – [Visa financials report Q4 2020](https://s1.q4cdn.com/050606653/files/doc_financials/2020/q4/Visa-Inc.-Q4-2020-Operational-Performance-Data.pdf) - -#### 3. Energy usage for 100,000 transactions on a sharded proof-of-stake network {#fn-3} - -It's estimated that scalability upgrades will allow the network to process between 25,000 and 100,000 transactions per second, with [100,000 as the theoretical maximum right now](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698). - -[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/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. - -- `15 * 64 = 960` transactions per second. -- `100,000 / 960 = 104.2` seconds to process 100,000 transactions. - -In 104.2 seconds, the Ethereum network will use the following amount of energy: - -`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.1666666667kWh` per second. - -If we multiply that by the amount of time it takes to process 100,000 transaction: `0.1666666667 * 104.2 = 17.3666666701 kWh`. - -That is **11.6554809866%** of the energy consumed by the same amount of transactions on Visa. - -And remember, this is based on the minimum amount of transactions that Ethereum will be able to handle per second. If Ethereum reaches its potential of 100,000 transactions per second, 100,000 transactions would consume 0.1666666667kWh. - -To put it another way, if Visa handled 140,839,000,000 transactions at a cost of 149 kWh per 100,000 transactions that's 209,850,110 kWh energy consumed for the year. - -Ethereum in a single year stands to consume 5,256,000 kWh. With a potential of 788,940,000,000 - 3,153,600,000,000 transactions processed in that time. - - - 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 planned Ethereum design. This doesn't represent an official promise from the Ethereum Foundation. - From 7587ade8289e8c789dafc61275e2a09844ff5e6f Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 15 Jul 2022 15:37:33 +0100 Subject: [PATCH 006/183] update gas page content for post-merge --- src/content/developers/docs/gas/index.md | 44 +++++------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 94a73a1cdec..0b115f83fa8 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -23,29 +23,9 @@ _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/d Gas fees are paid in Ethereum's native currency, ether (ETH). Gas prices are denoted in gwei, which itself is a denomination of ETH - each gwei is equal to 0.000000001 ETH (10-9 ETH). For example, instead of saying that your gas costs 0.000000001 ether, you can say your gas costs 1 gwei. The word 'gwei' itself means 'giga-wei', and it is equal to 1,000,000,000 wei. Wei itself (named after [Wei Dai](https://wikipedia.org/wiki/Wei_Dai), creator of [b-money](https://www.investopedia.com/terms/b/bmoney.asp)) is the smallest unit of ETH. -## Prior to the London upgrade {#pre-london} +## How Gas works {#how-gas-works} -The way transaction fees on the Ethereum network were calculated changed with [the London Upgrade](/history/#london) of August 2021. Here is a recap of how things used to work: - -Let's say Alice had to pay Bob 1 ETH. -In the transaction, the gas limit is 21,000 units, and the gas price is 200 gwei. - -Total fee would have been: `Gas units (limit) * Gas price per unit` -i.e `21,000 * 200 = 4,200,000 gwei` or 0.0042 ETH - -When Alice sent the money, 1.0042 ETH would be deducted from Alice's account. -Bob would be credited 1.0000 ETH. -Miner would receive 0.0042 ETH. - -This video offers a concise overview of gas and why it exists: - - - -## After the London upgrade {#post-london} - -[The London Upgrade](/history/#london) was implemented on August 5th, 2021, to make transacting on Ethereum more predictable for users by overhauling Ethereum's transaction-fee-mechanism. The high-level benefits introduced by this change include better transaction fee estimation, generally quicker transaction inclusion, and offsetting the ETH issuance by burning a percentage of transaction fees. - -Starting with the London network upgrade, every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates miners for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. +Since the [London Upgrade](/history/#london) every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates validators for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. Calculating the total transaction fee works as follows: `Gas units (limit) * (Base fee + Tip)` @@ -55,7 +35,7 @@ Using the formula above we can calculate this as `21,000 * (100 + 10) = 2,310,00 When Jordan sends the money, 1.00231 ETH will be deducted from Jordan's account. Taylor will be credited 1.0000 ETH. -Miner receives the tip of 0.00021 ETH. +Validator receives the tip of 0.00021 ETH. Base fee of 0.0021 ETH is burned. Additionally, Jordan can also set a max fee (`maxFeePerGas`) for the transaction. The difference between the max fee and the actual fee is refunded to Jordan, i.e. `refund = max fee - (base fee + priority fee)`. Jordan can set a maximum amount to pay for the transaction to execute and not worry about overpaying "beyond" the base fee when the transaction is executed. @@ -68,7 +48,7 @@ The London Upgrade introduced variable-size blocks to Ethereum. Each block has a ### Base fee {#base-fee} -Every block has a base fee which acts as a reserve price. To be eligible for inclusion in a block the offered price per gas must at least equal the base fee. The base fee is calculated independently of the current block and is instead determined by the blocks before it - making transaction fees more predictable for users. When the block is mined this base fee is "burned", removing it from circulation. +Every block has a base fee which acts as a reserve price. To be eligible for inclusion in a block the offered price per gas must at least equal the base fee. The base fee is calculated independently of the current block and is instead determined by the blocks before it - making transaction fees more predictable for users. When the block is added to the blockchain this base fee is "burned", removing it from circulation. The base fee is calculated by a formula that compares the size of the previous block (the amount of gas used for all the transactions) with the target size. The base fee will increase by a maximum of 12.5% per block if the target block size is exceeded. This exponential growth makes it economically non-viable for block size to remain high indefinitely. @@ -97,9 +77,7 @@ It's also important to note it is unlikely we will see extended spikes of full b ### Priority fee (tips) {#priority-fee} -Before the London Upgrade, miners would receive the total gas fee from any transaction included in a block. - -With the new base fee getting burned, the London Upgrade introduced a priority fee (tip) to incentivize miners to include a transaction in the block. Without tips, miners would find it economically viable to mine empty blocks, as they would receive the same block reward. Under normal conditions, a small tip provides miners a minimal incentive to include a transaction. For transactions that need to get preferentially executed ahead of other transactions in the same block, a higher tip will be necessary to attempt to outbid competing transactions. +In addition to the base fee, which is burned, there is also a priority fee (tip) to incentivize validators to include a transaction in the block. Without tips, validators would find it economically viable to propose empty blocks, as they would receive the same block reward. Under normal conditions, a small tip provides validators a sufficient incentive to include a transaction. For transactions that need to get preferentially executed ahead of other transactions in the same block, a higher tip will be necessary to attempt to outbid competing transactions. ### Max fee {#maxfee} @@ -107,13 +85,13 @@ To execute a transaction on the network, users can specify a maximum limit they ### Calculating fees {#calculating-fees} -One of the main benefits of the London upgrade is improving the user's experience when setting transaction fees. For wallets that support the upgrade, instead of explicitly stating how much you are willing to pay to get your transaction through, wallet providers will automatically set a recommended transaction fee (base fee + recommended priority fee) to reduce the amount of complexity burdened onto their users. +For wallets that support the London upgrade, instead of explicitly stating how much you are willing to pay to get your transaction through, wallet providers will automatically set a recommended transaction fee (base fee + recommended priority fee) to reduce the amount of complexity burdened onto their users. ## EIP-1559 {#eip-1559} The implementation of [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) in the London Upgrade made the transaction fee mechanism more complex than the previous gas price auction, but it has the advantage of making gas fees more predictable, resulting in a more efficient transaction fee market. Users can submit transactions with a `maxFeePerGas` corresponding to how much they are willing to pay for the transaction to be executing, knowing that they will not pay more than the market price for gas (`baseFeePerGas`), and get any extra, minus their tip, refunded. -This video explains EIP-1559 and the benefits it brings: +This video explains EIP-1559 and the benefits it brought: @@ -135,7 +113,7 @@ _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/d Gas limit refers to the maximum amount of gas you are willing to consume on a transaction. More complicated transactions involving [smart contracts](/developers/docs/smart-contracts/) require more computational work, so they require a higher gas limit than a simple payment. A standard ETH transfer requires a gas limit of 21,000 units of gas. -For example, if you put a gas limit of 50,000 for a simple ETH transfer, the EVM would consume 21,000, and you would get back the remaining 29,000. However, if you specify too little gas, for example, a gas limit of 20,000 for a simple ETH transfer, the EVM will consume your 20,000 gas units attempting to fulfill the transaction, but it will not complete. The EVM then reverts any changes, but since the miner has already done 20k gas units worth of work, that gas is consumed. +For example, if you put a gas limit of 50,000 for a simple ETH transfer, the EVM would consume 21,000, and you would get back the remaining 29,000. However, if you specify too little gas, for example, a gas limit of 20,000 for a simple ETH transfer, the EVM will consume your 20,000 gas units attempting to fulfill the transaction, but it will not complete. The EVM then reverts any changes, but since the block-proposer has already done 20k gas units worth of work, that gas is consumed. ## Why can gas fees get so high? {#why-can-gas-fees-get-so-high} @@ -151,7 +129,7 @@ Layer 2 scaling is a primary initiative to greatly improve gas costs, user exper ## Strategies for you to reduce gas costs {#strategies-for-you-to-reduce-gas-costs} -If you are looking to reduce gas costs for your ETH, you can set a tip to indicate the priority level of your transaction. Miners will 'work on' and execute transactions that offer a higher tip per gas, as they get to keep the tips that you pay and will be less inclined to execute transactions with lower tips set. +If you are looking to reduce gas costs for your ETH, you can set a tip to indicate the priority level of your transaction. Validators will execute transactions that offer a higher tip per gas, as they get to keep the tips that you pay and will be less inclined to execute transactions with lower tips set. If you want to monitor gas prices, so you can send your ETH for less, you can use many different tools such as: @@ -172,7 +150,3 @@ If you want to monitor gas prices, so you can send your ETH for less, you can us - [Is Ethereum more expensive to use as price rises?](https://docs.ethhub.io/questions-about-ethereum/is-ethereum-more-expensive-to-use-as-price-rises/) - [Reducing the gas consumption of your Smart Contracts](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) - [Proof of Stake versus Proof of Work](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) - -## Related topics {#related-topics} - -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) From 0b9efeac2d14229bb9678ce5192527edb8e54616 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 15 Jul 2022 15:47:39 +0100 Subject: [PATCH 007/183] text spacing for calculation --- src/content/developers/docs/gas/index.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 0b115f83fa8..74e90bc8eba 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -18,7 +18,7 @@ Gas refers to the unit that measures the amount of computational effort required Since each Ethereum transaction requires computational resources to execute, each transaction requires a fee. Gas refers to the fee required to conduct a transaction on Ethereum successfully. -![A diagram showing where gas is needed in EVM operations](./gas.png) +![A diagram showing where gas is needed in EVM operations](/developers/docs/gas/gas.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ Gas fees are paid in Ethereum's native currency, ether (ETH). Gas prices are denoted in gwei, which itself is a denomination of ETH - each gwei is equal to 0.000000001 ETH (10-9 ETH). For example, instead of saying that your gas costs 0.000000001 ether, you can say your gas costs 1 gwei. The word 'gwei' itself means 'giga-wei', and it is equal to 1,000,000,000 wei. Wei itself (named after [Wei Dai](https://wikipedia.org/wiki/Wei_Dai), creator of [b-money](https://www.investopedia.com/terms/b/bmoney.asp)) is the smallest unit of ETH. @@ -27,11 +27,15 @@ Gas fees are paid in Ethereum's native currency, ether (ETH). Gas prices are den Since the [London Upgrade](/history/#london) every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates validators for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. -Calculating the total transaction fee works as follows: `Gas units (limit) * (Base fee + Tip)` +Calculating the total transaction fee works as follows: + +`Gas units (limit) * (Base fee + Tip)` Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 100 gwei. Jordan includes a tip of 10 gwei. -Using the formula above we can calculate this as `21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. +Using the formula above we can calculate this as + +`21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. When Jordan sends the money, 1.00231 ETH will be deducted from Jordan's account. Taylor will be credited 1.0000 ETH. From 8b0914c9feb4aa625122096f358614ec5e209477 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 10:13:35 +0100 Subject: [PATCH 008/183] update pow index for post-merge --- .../docs/consensus-mechanisms/pow/index.md | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/index.md b/src/content/developers/docs/consensus-mechanisms/pow/index.md index 49694e7776b..d8553f90faf 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/index.md @@ -3,12 +3,11 @@ title: Proof-of-work (PoW) description: An explanation of the proof-of-work consensus protocol and its role in Ethereum. lang: en sidebar: true -incomplete: true --- -Ethereum, like Bitcoin, currently uses a consensus protocol called **[Proof-of-work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. This allows the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. +Ethereum was always intended to be a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) network, but the research and development required to implement proof-of-stake safely, securely and performantly took several years. The network was therefore started with a different consensus mechanism called **[Proof-of-work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. -Over the next year, proof-of-work will be phased out in favour of **[Proof-of-stake (PoS)](/developers/docs/consensus-mechanisms/pos)**. The transition to proof-of-stake will also phase out mining from Ethereum. [More on The Merge.](/upgrades/merge/) +**Note**: _proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as a consensus mechanism._ ## Prerequisites {#prerequisites} @@ -16,63 +15,59 @@ To better understand this page, we recommend you first read up on [transactions] ## What is Proof-of-work (PoW)? {#what-is-pow} -Proof-of-work is the mechanism that allows the decentralized Ethereum network to come to consensus, or agree on things like account balances and the order of transactions. This prevents users from "double spending" their coins and ensures that the Ethereum chain is tremendously difficult to attack or manipulate. +Proof-of-work is the mechanism that once allowed the decentralized Ethereum network to come to consensus (i.e. all nodes agree) on things like account balances and the order of transactions. This prevented users from "double spending" their coins and ensured that the Ethereum chain was tremendously difficult to attack or manipulate. These security properties now come from proof-of-stake instead. ## Proof-of-work and mining {#pow-and-mining} -Proof-of-work is the underlying algorithm that sets the difficulty and rules for the work miners do. Mining is the "work" itself. It's the act of adding valid blocks to the chain. This is important because the chain's length helps the network follow the correct Ethereum chain and understand Ethereum's current state. The more "work" done, the longer the chain, and the higher the block number, the more certain the network can be of the current state of things. +Proof-of-work is the underlying algorithm that sets the difficulty and rules for the work miners do on proof-of-work blockchains. Mining is the "work" itself. It's the act of adding valid blocks to the chain. This is important because the chain's length helps the network follow the correct fork of the blockchain. The more "work" done, the longer the chain, and the higher the block number, the more certain the network can be of the current state of things. [More on mining](/developers/docs/consensus-mechanisms/pow/mining/) -## How does Ethereum's proof-of-work work? {#how-it-works} +## How did Ethereum's proof-of-work work? {#how-it-works} -Ethereum transactions are processed into blocks. Each block has a: +Ethereum transactions are processed into blocks. In proof-of-work Ethereum, each block contained: - block difficulty – for example: 3,324,092,183,262,715 - mixHash – for example: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` - nonce – for example: `0xd3ee432b4fb3d26b` -This block data is directly related to proof-of-work. +This block data was directly related to proof-of-work. ### The work in proof-of-work {#the-work} -The proof-of-work protocol, Ethash, requires miners to go through an intense race of trial and error to find the nonce for a block. Only blocks with a valid nonce can be added to the chain. +The proof-of-work protocol, Ethash, required miners to go through an intense race of trial and error to find the nonce for a block. Only blocks with a valid nonce could be added to the chain. -When racing to create a block, a miner will repeatedly put a dataset, that you can only get from downloading and running the full chain (as a miner does), through a mathematical function. The dataset gets used to generate a mixHash below a target nonce, as dictated by the block difficulty. The best way to do this is through trial and error. +When racing to create a block, a miner repeatedly put a dataset, that could only be obtained by downloading and running the full chain (as a miner does), through a mathematical function. The dataset was used to generate a mixHash below a target nonce, as dictated by the block difficulty. The best way to do this is through trial and error. -The difficulty determines the target for the hash. The lower the target, the smaller the set of valid hashes. Once generated, this is incredibly easy for other miners and clients to verify. Even if one transaction were to change, the hash would be completely different, signalling fraud. +The difficulty determined the target for the hash. The lower the target, the smaller the set of valid hashes. Once generated, this was incredibly easy for other miners and clients to verify. Even if one transaction were to change, the hash would be completely different, signalling fraud. -Hashing makes fraud easy to spot. But proof-of-work as a process is also a big deterrent to attacking the chain. +Hashing makes fraud easy to spot. But proof-of-work as a process was also a big deterrent to attacking the chain. ### Proof-of-work and security {#security} -Miners are incentivised to do this work on the main Ethereum chain. There is little incentive for a subset of miners to start their own chain – it undermines the system. Blockchains rely on having a single state as a source of truth. And users will always choose the longest or "heaviest" chain. +Miners were incentivised to do this work on the main Ethereum chain. There was little incentive for a subset of miners to start their own chain – it undermines the system. Blockchains rely on having a single state as a source of truth. -The objective of proof-of-work is to extend the chain. The longest chain is most believable as the valid one because it's had the most computational work done. Within Ethereum's PoW system, it's nearly impossible to create new blocks that erase transactions, create fake ones, or maintain a second chain. That's because a malicious miner would need to always solve the block nonce faster than everyone else. +The objective of proof-of-work was to extend the chain. The longest chain was most believable as the valid one because it had the most computational work done to generate it. Within Ethereum's PoW system, it was nearly impossible to create new blocks that erase transactions, create fake ones, or maintain a second chain. That's because a malicious miner would have needed to always solve the block nonce faster than everyone else. -To consistently create malicious yet valid blocks, you'd need over 51% of the network mining power to beat everyone else. You'd need a lot of computing power to be able to do this amount of "work". And the energy spent might even outweigh the gains you'd make in an attack. +To consistently create malicious yet valid blocks, a malicious miner would have needed over 51% of the network mining power to beat everyone else. That amount of "work" requires a lot of expensive computing power and the energy spent might even have outweighed the gains made in an attack. ### Proof-of-work economics {#economics} -Proof-of-work is also responsible for issuing new currency into the system and incentivizing miners to do the work. +Proof-of-work was also responsible for issuing new currency into the system and incentivizing miners to do the work. -Miners who successfully create a block get rewarded with two freshly minted ETH but no longer receive all the transaction fees, as the base fee gets burned, while the tip and block reward goes to the miner. A miner may also get 1.75 ETH for an uncle block. Uncle blocks are valid blocks created by a miner practically at the same time as another miner mined the successful block. Uncle blocks usually happen due to network latency. +Miners who successfully create a block were rewarded with two freshly minted ETH and part of the transaction fees. 1.75 ETH was also paid for an uncle block. Uncle blocks are valid blocks created by a miner practically at the same time as another miner mined the successful block. Uncle blocks usually happen due to network latency. ## Finality {#finality} A transaction has "finality" on Ethereum when it's part of a block that can't change. -Because miners work in a decentralized way, two valid blocks can get mined at the same time. This creates a temporary fork. Eventually, one of these chains will become the accepted chain after a subsequent block has been mined and added, making it longer. +Because miners worked in a decentralized way, two valid blocks could be mined at the same time. This creates a temporary fork. Eventually, one of these chains became the accepted chain after subsequent blocks were mined and added to it, making it longer. -But to complicate things further, transactions rejected on the temporary fork may have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. For Ethereum, the recommended time is six blocks or just over 1 minute. After six blocks, you can say with relative confidence that the transaction was successful. You can wait longer for even greater assurances. - -Finality is something to bear in mind when designing dapps. It would be a poor user experience to misrepresent transaction information to your users, especially if the transaction is of high value. - -Remember, this timing doesn't include the wait times for having a transaction picked up by a miner. +But to complicate things further, transactions rejected on the temporary fork may have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. For Ethereum, the recommended time was six blocks or just over 1 minute. After six blocks, there was high confidence that the transaction was successful - lonmgher waits gave higher confidence. Now, with proof-of-stake, finalization is an explicit, rather than probabilistic, property of a block. ## Proof-of-work energy-usage {#energy} -A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumes 73.2 TWh annually, the energy equivalent of a medium-sized country like Austria. +A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumed large amounts of energy. Shortly before switching to proof-of-stake, Ethereum miners were collectively consuming about 70 TWh/yr (about the same as the Czech Republic - according to [digiconomist](digiconomist.net) on 18/07/22). ## Pros and cons {#pros-and-cons} From fd4fc29f62e1cb2c34ff42b37dd7633df6cbc168 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 10:20:14 +0100 Subject: [PATCH 009/183] upgrade note to banner --- src/content/developers/docs/consensus-mechanisms/pow/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/index.md b/src/content/developers/docs/consensus-mechanisms/pow/index.md index d8553f90faf..6a28194c0b8 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/index.md @@ -7,7 +7,9 @@ sidebar: true Ethereum was always intended to be a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) network, but the research and development required to implement proof-of-stake safely, securely and performantly took several years. The network was therefore started with a different consensus mechanism called **[Proof-of-work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. -**Note**: _proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as a consensus mechanism._ + + Proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as a consensus mechanism. Instead, it uses proof-of-stake. Read more on proof-of-stake and staking. + ## Prerequisites {#prerequisites} From a842b2739c8fc3c1377f699fccc097e71f804295 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 10:30:26 +0100 Subject: [PATCH 010/183] revert gas page changes in pow branch --- src/content/developers/docs/gas/index.md | 52 +++++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 74e90bc8eba..94a73a1cdec 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -18,28 +18,44 @@ Gas refers to the unit that measures the amount of computational effort required Since each Ethereum transaction requires computational resources to execute, each transaction requires a fee. Gas refers to the fee required to conduct a transaction on Ethereum successfully. -![A diagram showing where gas is needed in EVM operations](/developers/docs/gas/gas.png) +![A diagram showing where gas is needed in EVM operations](./gas.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ Gas fees are paid in Ethereum's native currency, ether (ETH). Gas prices are denoted in gwei, which itself is a denomination of ETH - each gwei is equal to 0.000000001 ETH (10-9 ETH). For example, instead of saying that your gas costs 0.000000001 ether, you can say your gas costs 1 gwei. The word 'gwei' itself means 'giga-wei', and it is equal to 1,000,000,000 wei. Wei itself (named after [Wei Dai](https://wikipedia.org/wiki/Wei_Dai), creator of [b-money](https://www.investopedia.com/terms/b/bmoney.asp)) is the smallest unit of ETH. -## How Gas works {#how-gas-works} +## Prior to the London upgrade {#pre-london} -Since the [London Upgrade](/history/#london) every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates validators for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. +The way transaction fees on the Ethereum network were calculated changed with [the London Upgrade](/history/#london) of August 2021. Here is a recap of how things used to work: -Calculating the total transaction fee works as follows: +Let's say Alice had to pay Bob 1 ETH. +In the transaction, the gas limit is 21,000 units, and the gas price is 200 gwei. -`Gas units (limit) * (Base fee + Tip)` +Total fee would have been: `Gas units (limit) * Gas price per unit` +i.e `21,000 * 200 = 4,200,000 gwei` or 0.0042 ETH -Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 100 gwei. Jordan includes a tip of 10 gwei. +When Alice sent the money, 1.0042 ETH would be deducted from Alice's account. +Bob would be credited 1.0000 ETH. +Miner would receive 0.0042 ETH. + +This video offers a concise overview of gas and why it exists: + + -Using the formula above we can calculate this as +## After the London upgrade {#post-london} -`21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. +[The London Upgrade](/history/#london) was implemented on August 5th, 2021, to make transacting on Ethereum more predictable for users by overhauling Ethereum's transaction-fee-mechanism. The high-level benefits introduced by this change include better transaction fee estimation, generally quicker transaction inclusion, and offsetting the ETH issuance by burning a percentage of transaction fees. + +Starting with the London network upgrade, every block has a base fee, the minimum price per unit of gas for inclusion in this block, calculated by the network based on demand for block space. As the base fee of the transaction fee is burnt, users are also expected to set a tip (priority fee) in their transactions. The tip compensates miners for executing and propagating user transactions in blocks and is expected to be set automatically by most wallets. + +Calculating the total transaction fee works as follows: `Gas units (limit) * (Base fee + Tip)` + +Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 100 gwei. Jordan includes a tip of 10 gwei. + +Using the formula above we can calculate this as `21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. When Jordan sends the money, 1.00231 ETH will be deducted from Jordan's account. Taylor will be credited 1.0000 ETH. -Validator receives the tip of 0.00021 ETH. +Miner receives the tip of 0.00021 ETH. Base fee of 0.0021 ETH is burned. Additionally, Jordan can also set a max fee (`maxFeePerGas`) for the transaction. The difference between the max fee and the actual fee is refunded to Jordan, i.e. `refund = max fee - (base fee + priority fee)`. Jordan can set a maximum amount to pay for the transaction to execute and not worry about overpaying "beyond" the base fee when the transaction is executed. @@ -52,7 +68,7 @@ The London Upgrade introduced variable-size blocks to Ethereum. Each block has a ### Base fee {#base-fee} -Every block has a base fee which acts as a reserve price. To be eligible for inclusion in a block the offered price per gas must at least equal the base fee. The base fee is calculated independently of the current block and is instead determined by the blocks before it - making transaction fees more predictable for users. When the block is added to the blockchain this base fee is "burned", removing it from circulation. +Every block has a base fee which acts as a reserve price. To be eligible for inclusion in a block the offered price per gas must at least equal the base fee. The base fee is calculated independently of the current block and is instead determined by the blocks before it - making transaction fees more predictable for users. When the block is mined this base fee is "burned", removing it from circulation. The base fee is calculated by a formula that compares the size of the previous block (the amount of gas used for all the transactions) with the target size. The base fee will increase by a maximum of 12.5% per block if the target block size is exceeded. This exponential growth makes it economically non-viable for block size to remain high indefinitely. @@ -81,7 +97,9 @@ It's also important to note it is unlikely we will see extended spikes of full b ### Priority fee (tips) {#priority-fee} -In addition to the base fee, which is burned, there is also a priority fee (tip) to incentivize validators to include a transaction in the block. Without tips, validators would find it economically viable to propose empty blocks, as they would receive the same block reward. Under normal conditions, a small tip provides validators a sufficient incentive to include a transaction. For transactions that need to get preferentially executed ahead of other transactions in the same block, a higher tip will be necessary to attempt to outbid competing transactions. +Before the London Upgrade, miners would receive the total gas fee from any transaction included in a block. + +With the new base fee getting burned, the London Upgrade introduced a priority fee (tip) to incentivize miners to include a transaction in the block. Without tips, miners would find it economically viable to mine empty blocks, as they would receive the same block reward. Under normal conditions, a small tip provides miners a minimal incentive to include a transaction. For transactions that need to get preferentially executed ahead of other transactions in the same block, a higher tip will be necessary to attempt to outbid competing transactions. ### Max fee {#maxfee} @@ -89,13 +107,13 @@ To execute a transaction on the network, users can specify a maximum limit they ### Calculating fees {#calculating-fees} -For wallets that support the London upgrade, instead of explicitly stating how much you are willing to pay to get your transaction through, wallet providers will automatically set a recommended transaction fee (base fee + recommended priority fee) to reduce the amount of complexity burdened onto their users. +One of the main benefits of the London upgrade is improving the user's experience when setting transaction fees. For wallets that support the upgrade, instead of explicitly stating how much you are willing to pay to get your transaction through, wallet providers will automatically set a recommended transaction fee (base fee + recommended priority fee) to reduce the amount of complexity burdened onto their users. ## EIP-1559 {#eip-1559} The implementation of [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) in the London Upgrade made the transaction fee mechanism more complex than the previous gas price auction, but it has the advantage of making gas fees more predictable, resulting in a more efficient transaction fee market. Users can submit transactions with a `maxFeePerGas` corresponding to how much they are willing to pay for the transaction to be executing, knowing that they will not pay more than the market price for gas (`baseFeePerGas`), and get any extra, minus their tip, refunded. -This video explains EIP-1559 and the benefits it brought: +This video explains EIP-1559 and the benefits it brings: @@ -117,7 +135,7 @@ _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/d Gas limit refers to the maximum amount of gas you are willing to consume on a transaction. More complicated transactions involving [smart contracts](/developers/docs/smart-contracts/) require more computational work, so they require a higher gas limit than a simple payment. A standard ETH transfer requires a gas limit of 21,000 units of gas. -For example, if you put a gas limit of 50,000 for a simple ETH transfer, the EVM would consume 21,000, and you would get back the remaining 29,000. However, if you specify too little gas, for example, a gas limit of 20,000 for a simple ETH transfer, the EVM will consume your 20,000 gas units attempting to fulfill the transaction, but it will not complete. The EVM then reverts any changes, but since the block-proposer has already done 20k gas units worth of work, that gas is consumed. +For example, if you put a gas limit of 50,000 for a simple ETH transfer, the EVM would consume 21,000, and you would get back the remaining 29,000. However, if you specify too little gas, for example, a gas limit of 20,000 for a simple ETH transfer, the EVM will consume your 20,000 gas units attempting to fulfill the transaction, but it will not complete. The EVM then reverts any changes, but since the miner has already done 20k gas units worth of work, that gas is consumed. ## Why can gas fees get so high? {#why-can-gas-fees-get-so-high} @@ -133,7 +151,7 @@ Layer 2 scaling is a primary initiative to greatly improve gas costs, user exper ## Strategies for you to reduce gas costs {#strategies-for-you-to-reduce-gas-costs} -If you are looking to reduce gas costs for your ETH, you can set a tip to indicate the priority level of your transaction. Validators will execute transactions that offer a higher tip per gas, as they get to keep the tips that you pay and will be less inclined to execute transactions with lower tips set. +If you are looking to reduce gas costs for your ETH, you can set a tip to indicate the priority level of your transaction. Miners will 'work on' and execute transactions that offer a higher tip per gas, as they get to keep the tips that you pay and will be less inclined to execute transactions with lower tips set. If you want to monitor gas prices, so you can send your ETH for less, you can use many different tools such as: @@ -154,3 +172,7 @@ If you want to monitor gas prices, so you can send your ETH for less, you can us - [Is Ethereum more expensive to use as price rises?](https://docs.ethhub.io/questions-about-ethereum/is-ethereum-more-expensive-to-use-as-price-rises/) - [Reducing the gas consumption of your Smart Contracts](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) - [Proof of Stake versus Proof of Work](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) + +## Related topics {#related-topics} + +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) From d95d117d64450ca5f3ab2494ee9a9b0c311bc351 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 11:40:08 +0100 Subject: [PATCH 011/183] update pow/mining for post-merge --- .../consensus-mechanisms/pow/mining/index.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 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 08c9078bc63..9c1a47f5f51 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -3,47 +3,45 @@ 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 --- - 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. + Proof-of-work is no longer Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! - + + ## 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/). ## What is Ethereum mining? {#what-is-ethereum-mining} -Mining is the process of creating a block of transactions to be added to the Ethereum blockchain. +Mining is the process of creating a block of transactions to be added to the Ethereum blockchain in Ethereum's now-deprecated proof-of-work architecture. -The word mining originates in the context of the gold analogy for crypto currencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume is through mining. This is appropriate to the extent that in Ethereum too, the only mode of issuance post launch is via mining. Unlike these examples however, mining is also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. +The word mining originates in the context of the gold analogy for crypto currencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume in a proof-of-work system is through mining. In proof-of-work Ethereum, the only mode of issuance was via mining. Unlike gold or precious metals however, Ethereum mining was also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. 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. +Mining is the lifeblood of proof-of-work. Ethereum miners - computers running software - used their time and computation power to process transactions and produce blocks. ## 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. +In decentralized systems like Ethereum, we need to ensure that everyone agrees on the order of transactions. Miners helped this happen by solving computationally difficult puzzles to produce blocks, securing the network from attacks. [More on proof-of-work](/developers/docs/consensus-mechanisms/pow/) -## Who can become a miner on Ethereum? {#who-can-become-a-miner} - -Technically, anyone can mine on the Ethereum network using their computer. However, not everyone can mine ether (ETH) profitably. In most cases, miners must purchase dedicated computer hardware to mine profitably. While it is true anyone can run the mining software on their computer, it is unlikely that the average computer would earn enough block rewards to cover the associated costs of mining. +Anyone could mine on the Ethereum network using their computer. However, not everyone could mine ether (ETH) profitably. In most cases, miners had to purchase dedicated computer hardware. The average computer was unlikely to earn enough block rewards to cover the associated costs of mining. ### Cost of mining {#cost-of-mining} - Potential costs of the hardware necessary to build and maintain a mining rig - Electrical cost of powering the mining rig -- If you are mining in a pool, mining pools typically charge a flat % fee of each block generated by the pool +- If you were mining in a pool, mining pools typically charge a flat % fee of each block generated by the pool - Potential cost of equipment to support mining rig (ventilation, energy monitoring, electrical wiring, etc.) To further explore mining profitability, use a mining calculator, such as the one [Etherscan](https://etherscan.io/ether-mining-calculator) provides. -## How Ethereum transactions are mined {#how-ethereum-transactions-are-mined} +## How Ethereum transactions were mined {#how-ethereum-transactions-were-mined} 1. A user writes and signs a [transaction](/developers/docs/transactions/) request with the private key of some [account](/developers/docs/accounts/). 2. The user broadcasts the transaction request to the entire Ethereum network from some [node](/developers/docs/nodes-and-clients/). @@ -66,7 +64,9 @@ Watch Austin walk you through mining and the proof-of-work blockchain. ## The mining algorithm {#mining-algorithm} -The Ethereum mining algorithm has undergone several upgrades since its inception. The original algorithm, "Dagger Hashimoto" was based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger-part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This algorithm was novel because it had high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). After substantial upgrades to the algorithm, it was renamed to "Ethash". This renaming happened before mining began on Ethereum mainnet. Dagger-Hashimoto was a precursor, research algorithm that was not used on Ethereum mainnet. +Ethereum Mainnet onyl ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). + +The algorithm is based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger-part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This has high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). ASICs for Ethereum mining were eventually developed, but the majority of mining on Ethereum was nevertheless done using GPUs. More information on these mining algorithms is available at our [mining algorithms page](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). From 361b5aef8b6c9cfcaa9a66ec3f7732cafe70692e Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 11:46:03 +0100 Subject: [PATCH 012/183] update mining algorithms page --- .../pow/mining-algorithms/index.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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 dae534116c8..e7a444f933c 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 @@ -6,9 +6,12 @@ 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](/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. + + Proof-of-work is no longer Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + + + +Ethereum mining used an algorithm known as Ethash. The fundamental idea of the algorithm 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. ## Prerequisites {#prerequisites} @@ -16,7 +19,7 @@ To better understand this page, we recommend you first read up on [proof-of-work ## Dagger Hashimoto {#dagger-hashimoto} -Dagger Hashimoto was a precursor research algorithm for Ethereum mining that Ethash superseded. It was an amalgamation of two different algorithms: Dagger and Hashimoto. +Dagger Hashimoto was a precursor research algorithm for Ethereum mining that Ethash superseded. It was an amalgamation of two different algorithms: Dagger and Hashimoto. It was only ever a research implementation and was superceded by Ethash by the time Ethereum Mainnet launched. [Dagger](http://www.hashcash.org/papers/dagger.html) involves the generation of a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph), random slices of which get hashed together. The core principle is that each nonce only requires a small portion of a large total data tree. Recomputing the subtree for each nonce is prohibitive for mining - hence the need to store the tree - but okay for a single nonce’s worth of verification. Dagger was designed to be an alternative to existing algorithms like Scrypt, which are memory-hard but difficult to verify when their memory-hardness increases to genuinely secure levels. However, Dagger was vulnerable to shared memory hardware acceleration and dropped in favor of other avenues of research. @@ -28,7 +31,7 @@ More on [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algo ## Ethash {#ethash} -Ethash is Ethereum's current mining algorithm. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum mainnet has only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. +Ethash the mining algorithm that was actually used on the real Ethereum Mainnet. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum Mainnet only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. [More on Ethash](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash). From 71f098e89feb0d2c2cc7235993ac49fb0d04450f Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 11:56:40 +0100 Subject: [PATCH 013/183] update ethash page --- .../pow/mining-algorithms/ethash/index.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 b937f7ea659..a7a89f53548 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,9 +5,15 @@ 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 is Ethereum's proof-of-work mining algorithm. Proof-of-work has now been **switched off entirely** and Ethereum is now secured using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + -[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. +[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. Ethash ASICs were eventually developed but GPU mining was still a viable option until proof-of-work was switched off. Ethash is still used to mine other coins on other non-Ethereum proof-of-work networks. + +## How does Ethash work? {#how-does-ethash-work} + +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 30d8b351fd48ac62075916792e55ff2432d80aa6 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 18 Jul 2022 12:38:07 +0100 Subject: [PATCH 014/183] Update src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md --- .../consensus-mechanisms/pow/mining-algorithms/ethash/index.md | 1 + 1 file changed, 1 insertion(+) 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 a7a89f53548..04ddfa90f12 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 @@ -11,6 +11,7 @@ sidebar: true [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. Ethash ASICs were eventually developed but GPU mining was still a viable option until proof-of-work was switched off. Ethash is still used to mine other coins on other non-Ethereum proof-of-work networks. + ## How does Ethash work? {#how-does-ethash-work} 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. From dab2cddb66c3b4f769d08ae74442fa8f63e1d1a4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 18 Jul 2022 12:47:43 +0100 Subject: [PATCH 015/183] Update src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/index.md --- .../consensus-mechanisms/pow/mining-algorithms/ethash/index.md | 1 - 1 file changed, 1 deletion(-) 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 04ddfa90f12..a7a89f53548 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 @@ -11,7 +11,6 @@ sidebar: true [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. Ethash ASICs were eventually developed but GPU mining was still a viable option until proof-of-work was switched off. Ethash is still used to mine other coins on other non-Ethereum proof-of-work networks. - ## How does Ethash work? {#how-does-ethash-work} 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. From 2790bf92a4381dad05e97895d59fceb8b6cc5cf8 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 13:42:13 +0100 Subject: [PATCH 016/183] update staking content --- src/content/staking/pools/index.md | 12 ++---------- src/content/staking/saas/index.md | 14 +------------- src/content/staking/solo/index.md | 22 +++------------------- 3 files changed, 6 insertions(+), 42 deletions(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index b1e24cca95a..2fafcf9b19f 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -67,17 +67,9 @@ Typically ERC-20 liquidity tokens are issued to stakers that represents the valu -Currently, withdrawing funds from a validator on the Beacon Chain is not possible, which currently limits the ability to actually redeem your liquidity token for the ETH rewards locked in the consensus layer. +Currently, withdrawing funds from an Ethereum validator is not possible, which limits the ability to actually redeem your liquidity token for the ETH rewards locked in the consensus layer. -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. - - - -Pooled stakers do not need to do anything to prepare for The Merge. - -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/) +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 staking contract. diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index a1cbfb54500..34de01d1bc3 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -76,21 +76,9 @@ All of these keys can always be regenerated in a reproducible manner using your - When you stake 32 ETH with a SaaS provider, that ETH is still deposited to the official staking deposit contract. As such, SaaS stakers are currently limited by the same withdrawal restrictions as solo stakers. This means that staking your ETH is currently a one-way deposit. This will be the case until the Shanghai upgrade planned to follow the Merge. + When you stake 32 ETH with a SaaS provider, that ETH is still deposited to the official staking deposit contract. As such, SaaS stakers are currently limited by the same withdrawal restrictions as solo stakers. This means that staking your ETH is currently a one-way deposit. This will be the case until the Shanghai upgrade. - - After the Merge, SaaS stakers will begin to receive unburnt transaction fees/tips. Check with your provider to determine how to update your settings to include an Ethereum address you control where these funds will be sent when the time comes. - -The Merge will not 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. - - - -SaaS stakers do not need to do anything to prepare for The Merge. - -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/) diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 4f64ba0b2e0..14232b6a67f 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -9,7 +9,7 @@ image: ../../../assets/staking/leslie-solo.png alt: Leslie the rhino on her own computer chip. sidebarDepth: 2 summaryPoints: - - Receive maximum rewards directly from the protocol (including unburnt fees after The Merge) for keeping your validator properly functioning and online + - Receive maximum rewards directly from the protocol for keeping your validator properly functioning and online - Run home hardware and personally add to the security and decentralization of the Ethereum network - Remove trust, and never give up control of the keys to your funds --- @@ -58,7 +58,7 @@ As much as we wish that solo staking was accessible and risk free to everyone, t

Ethereum security and scam prevention

- Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the Shanghai upgrade following The Merge. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. + Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the Shanghai upgrade. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. Hardware occasionally fails, network connections error out, and client software occasionally needs upgrading. Node maintenance is inevitable and will occasionally require your attention. You'll want to be sure you stay aware of any anticipated network upgrades, or other critical client upgrades. @@ -89,10 +89,6 @@ The Staking Launchpad is an open source application that will help you become a - -Note for existing stakers: The Merge is approaching, which brings a few changes since staking was launched. Make sure you're prepared with the Merge readiness checklist over on the Staking Launchpad. - - ## 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. @@ -130,7 +126,7 @@ Have a suggestion for a staking tool we missed? Check out our [product listing p These are a few of the most common questions about staking that are worth knowing about. -A validator is a virtual entity that lives on the Beacon Chain and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. +A validator is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. @@ -180,18 +176,6 @@ Offline penalties are proportional to how many others are offline at the same ti More on rewards and penalties - -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. 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. - - -Merge readiness checklist - - - ## Further reading {#further-reading} - [Ethereum's Client Diversity Problem](https://hackernoon.com/ethereums-client-diversity-problem) - _@emmanuelawosika 2022_ From 794af2cd355801ec2515fed0764246326934348d Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 14:29:04 +0100 Subject: [PATCH 017/183] update pos page --- .../docs/consensus-mechanisms/pos/index.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/index.md b/src/content/developers/docs/consensus-mechanisms/pos/index.md index a54dbc96483..f8ee157dccd 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Proof-of-stake (PoS) is the [consensus mechanism](/developers/docs/consensus-mechanisms/) that Ethereum will use after [The Merge](/upgrades/merge). Ethereum is moving off of [proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow/) to proof-of-stake because it is more secure, less energy-intensive, and better for implementing new scaling solutions. While it has always been the plan to transition to proof-of-stake, it is also more complex than proof-of-work, and refining the mechanism has taken years of research and development. The challenge now is to implement proof-of-stake on Ethereum Mainnet. This process is called ["The Merge"](/upgrades/merge/). +Proof-of-stake (PoS) is Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous consensus mechanism, [proof-of-work](/developers/docs/consensus-mechanisms/pow). ## Prerequisites {#prerequisites} @@ -13,9 +13,9 @@ To better understand this page, we recommend you first read up on [consensus mec ## What is proof-of-stake (PoS)? {#what-is-pos} -Proof-of-stake is a type of [consensus mechanism](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. In proof-of-stake, validators explicitly stake capital in the form of ether into a smart contract on Ethereum. This staked ether then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. +Proof-of-stake is a type of [consensus mechanism](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. In proof-of-stake, validators explicitly stake capital in the form of ETH into a smart contract on Ethereum. This staked ETH then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. -Proof-of-stake comes with a number of improvements to the proof-of-work system: +Proof-of-stake comes with a number of improvements to the now-deprecated proof-of-work system: - better energy efficiency – there is no need to use lots of energy on proof-of-work computations - lower barriers to entry, reduced hardware requirements – there is no need for elite hardware to stand a chance of creating new blocks @@ -26,17 +26,17 @@ Proof-of-stake comes with a number of improvements to the proof-of-work system: ## Validators {#validators} -To participate as a validator, a user must deposit 32 ETH into the deposit contract and run three separate pieces of software: an execution client, a consensus client, and a validator. On depositing their ether, the user joins an activation queue that limits the rate of new validators joining the network. Once activated, validators receive new blocks from peers on the Ethereum network. The transactions delivered in the block are re-executed, and the block signature is checked to ensure the block is valid. The validator then sends a vote (called an attestation) in favor of that block across the network. +To participate as a validator, a user must deposit 32 ETH into the deposit contract and run three separate pieces of software: an execution client, a consensus client, and a validator. On depositing their ETH, the user joins an activation queue that limits the rate of new validators joining the network. Once activated, validators receive new blocks from peers on the Ethereum network. The transactions delivered in the block are re-executed, and the block signature is checked to ensure the block is valid. The validator then sends a vote (called an attestation) in favor of that block across the network. Whereas under proof-of-work, the timing of blocks is determined by the mining difficulty, in proof-of-stake, the tempo is fixed. Time in proof-of-stake Ethereum is divided into slots (12 seconds) and epochs (32 slots). One validator is randomly selected to be a block proposer in every slot. This validator is responsible for creating a new block and sending it out to other nodes on the network. Also in every slot, a committee of validators is randomly chosen, whose votes are used to determine the validity of the block being proposed. ## Finality {#finality} -A transaction has "finality" in distributed networks when it's part of a block that can't change without a significant amount of ether getting burned. On proof-of-stake Ethereum, this is managed using "checkpoint" blocks. The first block in each epoch is a checkpoint. Validators vote for pairs of checkpoints that it considers to be valid. If a pair of checkpoints attracts votes representing at least two-thirds of the total staked ether, the checkpoints are upgraded. The more recent of the two (target) becomes "justified". The earlier of the two is already justified because it was the "target" in the previous epoch. Now it is upgraded to "finalized". To revert a finalized block, an attacker would commit to losing at least one-third of the total supply of staked ether (currently around $10,000,000,000). The exact reason for this is explained [in this Ethereum Foundation blog post](https://blog.ethereum.org/2016/05/09/on-settlement-finality/). Since finality requires a two-thirds majority, an attacker could prevent the network from reaching finality by voting with one-third of the total stake. There is a mechanism to defend against this: the [inactivity leak](https://arxiv.org/pdf/2003.03052.pdf). This activates whenever the chain fails to finalize for more than four epochs. The inactivity leak bleeds away the staked ether from validators voting against the majority, allowing the majority to regain a two-thirds majority and finalize the chain. +A transaction has "finality" in distributed networks when it's part of a block that can't change without a significant amount of ETH getting burned. On proof-of-stake Ethereum, this is managed using "checkpoint" blocks. The first block in each epoch is a checkpoint. Validators vote for pairs of checkpoints that it considers to be valid. If a pair of checkpoints attracts votes representing at least two-thirds of the total staked ETH, the checkpoints are upgraded. The more recent of the two (target) becomes "justified". The earlier of the two is already justified because it was the "target" in the previous epoch. Now it is upgraded to "finalized". To revert a finalized block, an attacker would commit to losing at least one-third of the total supply of staked ETH. The exact reason for this is explained in this [Ethereum Foundation blog post](https://blog.ethereum.org/2016/05/09/on-settlement-finality/). Since finality requires a two-thirds majority, an attacker could prevent the network from reaching finality by voting with one-third of the total stake. There is a mechanism to defend against this: the [inactivity leak](https://arxiv.org/pdf/2003.03052.pdf). This activates whenever the chain fails to finalize for more than four epochs. The inactivity leak bleeds away the staked ETH from validators voting against the majority, allowing the majority to regain a two-thirds majority and finalize the chain. ## Crypto-economic security {#crypto-economic-security} -Running a validator is a commitment. The validator is expected to maintain sufficient hardware and connectivity to participate in block validation and proposal. In return, the validator is paid in ether (their staked balance increases). On the other hand, participating as a validator also opens new avenues for users to attack the network for personal gain or sabotage. To prevent this, validators miss out on ether rewards if they fail to participate when called upon, and their existing stake can be destroyed if they behave dishonestly. There are two primary behaviors that can be considered dishonest: proposing multiple blocks in a single slot (equivocating) and submitting contradictory attestations. The amount of ether slashed depends on how many validators are also being slashed at around the same time. This is known as the ["correlation penalty"](https://arxiv.org/pdf/2003.03052.pdf), and it can be minor (~1% stake for a single validator slashed on their own) or can result in 100% of the validator's stake getting destroyed (mass slashing event). It is imposed halfway through a forced exit period that begins with an immediate penalty (up to 0.5 ETH) on Day 1, the correlation penalty on Day 18, and finally, ejection from the network on Day 36. They receive minor attestation penalties every day because they are present on the network but not submitting votes. This all means a coordinated attack would be very costly for the attacker. +Running a validator is a commitment. The validator is expected to maintain sufficient hardware and connectivity to participate in block validation and proposal. In return, the validator is paid in ETH (their staked balance increases). On the other hand, participating as a validator also opens new avenues for users to attack the network for personal gain or sabotage. To prevent this, validators miss out on ETH rewards if they fail to participate when called upon, and their existing stake can be destroyed if they behave dishonestly. There are two primary behaviors that can be considered dishonest: proposing multiple blocks in a single slot (equivocating) and submitting contradictory attestations. The amount of ETH slashed depends on how many validators are also being slashed at around the same time. This is known as the ["correlation penalty"](https://arxiv.org/pdf/2003.03052.pdf), and it can be minor (~1% stake for a single validator slashed on their own) or can result in 100% of the validator's stake getting destroyed (mass slashing event). It is imposed halfway through a forced exit period that begins with an immediate penalty (up to 0.5 ETH) on Day 1, the correlation penalty on Day 18, and finally, ejection from the network on Day 36. They receive minor attestation penalties every day because they are present on the network but not submitting votes. This all means a coordinated attack would be very costly for the attacker. ## Fork choice {#fork-choice} @@ -44,7 +44,7 @@ When the network performs optimally and honestly, there is only ever one new blo ## Proof-of-stake and security {#pos-and-security} -The threat of a [51% attack](https://www.investopedia.com/terms/1/51-attack.asp) still exists on proof-of-stake as it does on proof-of-work, but it's even riskier for the attackers. A attacker would need 51% of the staked ETH (about $15,000,000,000 USD). They could then use their own attestations to ensure their preferred fork was the one with the most accumulated attestations. The 'weight' of accumulated attestations is what consensus clients use to determine the correct chain, so this attacker would be able to make their fork the canonical one. However, a strength of proof-of-stake over proof-of-work is that the community has flexibility in mounting a counter-attack. For example, the honest validators could decide to keep building on the minority chain and ignore the attacker's fork while encouraging apps, exchanges, and pools to do the same. They could also decide to forcibly remove the attacker from the network and destroy their staked ether. These are strong economic defenses against a 51% attack. +The threat of a [51% attack](https://www.investopedia.com/terms/1/51-attack.asp) still exists on proof-of-stake as it does on proof-of-work, but it's even riskier for the attackers. A attacker would need 51% of the staked ETH. They could then use their own attestations to ensure their preferred fork was the one with the most accumulated attestations. The 'weight' of accumulated attestations is what consensus clients use to determine the correct chain, so this attacker would be able to make their fork the canonical one. However, a strength of proof-of-stake over proof-of-work is that the community has flexibility in mounting a counter-attack. For example, the honest validators could decide to keep building on the minority chain and ignore the attacker's fork while encouraging apps, exchanges, and pools to do the same. They could also decide to forcibly remove the attacker from the network and destroy their staked ETH. These are strong economic defenses against a 51% attack. 51% attacks are just one flavor of malicious activity. Bad actors could attempt long-range attacks (although the finality gadget neutralizes this attack vector), short range 'reorgs' (although proposer boosting and attestation deadlines mitigate this), bouncing and balancing attacks (also mitigated by proposer boosting, and these attacks have anyway only been demonstrated under idealized network conditions) or avalanche attacks (neutralized by the fork choice algorithms rule of only considering the latest message). @@ -57,7 +57,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. | -| Less issuance of new ether is required to incentivize network participants | | +| Less issuance of new ETH is required to incentivize network participants | | ## Further reading {#further-reading} @@ -67,6 +67,7 @@ Overall, proof-of-stake, as it is implemented on Ethereum, has been demonstrated - [The Beacon Chain Ethereum 2.0 explainer you need to read first](https://ethos.dev/beacon-chain/) _Ethos.dev_ - [Why Proof of Stake (Nov 2020)](https://vitalik.ca/general/2020/11/06/pos2020.html) _Vitalik Buterin_ - [Proof of Stake: How I Learned to Love Weak Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ +- [PoS Ethereum attack and defense](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) - [A Proof of Stake Design Philosophy](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ ## Related topics {#related-topics} From 2809beabc9b3141b6a47582c36abb1eef4038f5e Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 18 Jul 2022 15:54:34 +0100 Subject: [PATCH 018/183] update staking landing page --- src/intl/en/page-staking.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/intl/en/page-staking.json b/src/intl/en/page-staking.json index e638e305b48..8ba428770d7 100644 --- a/src/intl/en/page-staking.json +++ b/src/intl/en/page-staking.json @@ -10,7 +10,7 @@ "page-staking-check-address": "Check deposit address", "page-staking-deposit-address": "Check the deposit address", "page-staking-deposit-address-desc": "If you’ve already followed the setup instructions on the launchpad, you’ll know you need to send a transaction to the staking deposit contract. We recommend you check the address very carefully. You can find the official address on ethereum.org and a number of other trusted sites.", - "page-staking-description": "Staking is the act of depositing 32 ETH to activate validator software. As a validator you’ll be responsible for storing data, processing transactions, and adding new blocks to the blockchain. This will keep Ethereum secure for everyone and earn you new ETH in the process. This process, known as proof-of-stake, is being introduced by the Beacon Chain.", + "page-staking-description": "Staking is the act of depositing 32 ETH to activate validator software. As a validator you’ll be responsible for storing data, processing transactions, and adding new blocks to the blockchain. This will keep Ethereum secure for everyone and earn you new ETH in the process.", "page-staking-hero-title": "How to stake your ETH", "page-staking-hero-header": "Earn rewards while securing Ethereum", "page-staking-hero-subtitle": "Staking is a public good for the Ethereum ecosystem. Any user with any amount of ETH can help secure the network and earn rewards in the process.", @@ -139,7 +139,7 @@ "page-staking-section-comparison-rewards-title": "Rewards", "page-staking-section-comparison-solo-rewards-li1": "Maximum rewards - receive full rewards directly from the protocol", "page-staking-section-comparison-solo-rewards-li2": "You'll get rewards for batching transactions into a new block or checking the work of other validators to keep the chain running securely", - "page-staking-section-comparison-solo-rewards-li3": "After The Merge you'll receive unburnt transaction fees for blocks you propose", + "page-staking-section-comparison-solo-rewards-li3": "You'll also receive unburnt transaction fees for blocks you propose", "page-staking-section-comparison-saas-rewards-li1": "Usually involves full protocol rewards minus monthly fee for node operations", "page-staking-section-comparison-saas-rewards-li2": "Dashboards often available to easily track your validator client", "page-staking-section-comparison-pools-rewards-li1": "Pooled stakers accrue rewards differently, depending on which method of pooled staking chosen", @@ -163,15 +163,15 @@ "page-staking-section-comparison-pools-requirements-li1": "Lowest ETH requirements, some projects require as little as 0.01 ETH", "page-staking-section-comparison-pools-requirements-li2": "Deposit directly from your wallet to different pooled staking platforms or simply trade for one of the staking liquidity tokens", "page-staking-faq-1-question": "What is a validator?", - "page-staking-faq-1-answer": "A validator is a virtual entity that lives on the Beacon Chain and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators.", + "page-staking-faq-1-answer": "A validator is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators.", "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. Learn more about The Merge", + "page-staking-faq-3-answer-p1": "There is no 'Eth2' token native to the protocol, as the native token ether (ETH) did not change when Ethereum switched to proof-of-stake.", "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 staking pools", "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-faq-4-answer-p1": "Yes. Staking has been live since December 1, 2020", + "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 Shanghai update, 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", From a37abcb109e4e769912da719691e0b72e5562ab4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:31:03 +0100 Subject: [PATCH 019/183] Update src/content/developers/docs/consensus-mechanisms/pos/index.md --- src/content/developers/docs/consensus-mechanisms/pos/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/index.md b/src/content/developers/docs/consensus-mechanisms/pos/index.md index f8ee157dccd..106d7090331 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -5,6 +5,7 @@ lang: en sidebar: true --- + Proof-of-stake (PoS) is Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous consensus mechanism, [proof-of-work](/developers/docs/consensus-mechanisms/pow). ## Prerequisites {#prerequisites} From e74c8b6ec7949cf9216fab6d411069b67ae882e5 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:31:23 +0100 Subject: [PATCH 020/183] Update src/content/developers/docs/consensus-mechanisms/pos/index.md --- src/content/developers/docs/consensus-mechanisms/pos/index.md | 1 - 1 file changed, 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 106d7090331..f8ee157dccd 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -5,7 +5,6 @@ lang: en sidebar: true --- - Proof-of-stake (PoS) is Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous consensus mechanism, [proof-of-work](/developers/docs/consensus-mechanisms/pow). ## Prerequisites {#prerequisites} From 0c51dc407ba437957f979ee95c845a7d550d2293 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 19 Jul 2022 10:32:38 +0100 Subject: [PATCH 021/183] Update src/content/developers/docs/consensus-mechanisms/pow/index.md --- src/content/developers/docs/consensus-mechanisms/pow/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/index.md b/src/content/developers/docs/consensus-mechanisms/pow/index.md index 6a28194c0b8..3ac8baeb813 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Ethereum was always intended to be a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) network, but the research and development required to implement proof-of-stake safely, securely and performantly took several years. The network was therefore started with a different consensus mechanism called **[Proof-of-work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. +The Ethereum network started using a consensus mechanism called **[Proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. However, Ethereum switched off proof-of-work in 2022 and started using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. Proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as a consensus mechanism. Instead, it uses proof-of-stake. Read more on proof-of-stake and staking. From 369542b86cffb1bbc8bd3ddb024b71aba28758de Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 19 Jul 2022 10:41:58 +0100 Subject: [PATCH 022/183] update web2vweb3 page --- src/content/developers/docs/web2-vs-web3/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/web2-vs-web3/index.md b/src/content/developers/docs/web2-vs-web3/index.md index 18d9d83f92d..2b94b42bea3 100644 --- a/src/content/developers/docs/web2-vs-web3/index.md +++ b/src/content/developers/docs/web2-vs-web3/index.md @@ -32,7 +32,7 @@ This doesn't mean that all services need to be turned into a dapp. These example Web3 has some limitations right now: -- Scalability – transactions are slower on web3 because they're decentralized. Changes to state, like a payment, need to be processed by a miner and propagated throughout the network. +- Scalability – transactions are slower on web3 because they're decentralized. Changes to state, like a payment, need to be processed by a node and propagated throughout the network. - UX – interacting with web3 applications can require extra steps, software, and education. This can be a hurdle to adoption. - Accessibility – the lack of integration in modern web browsers makes web3 less accessible to most users. - Cost – most successful dapps put very small portions of their code on the blockchain as it's expensive. From bbf278908190be708643209d2d0bb090954a997a Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 19 Jul 2022 11:37:13 +0100 Subject: [PATCH 023/183] update merge page --- src/content/upgrades/merge/index.md | 148 +++++++++++----------------- 1 file changed, 55 insertions(+), 93 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 7b0b5ba177e..db3b18999b2 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -1,61 +1,50 @@ --- title: The Merge -description: Learn about The Merge - when Mainnet Ethereum joins the Beacon Chain coordinated proof-of-stake system. +description: Learn about The Merge - when Mainnet Ethereum adotped proof-of-stake. 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. -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 sharding. -summaryPoint4: The Merge will reduce Ethereum's energy consumption by ~99.95%. +summaryPoint1: Ethereum Mainnet uses proof-of-stake, but this wasn't always the case. +summaryPoint2: The transition from the original proof-of-work mechanism to proof-of-stake was called The Merge. +summaryPoint3: The Merge refers to the original Ethereum Mainnet becoming part of a separate proof-of0-stake blockchain called the Beacon Chain. +summaryPoint4: The Merge reduced Ethereum's energy consumption by ~99.95%. --- - -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 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?_ - +## What was The Merge? {#what-is-the-merge} -## What is The Merge? {#what-is-the-merge} - -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. +The Merge was the joining of the original execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminated the need for energy-intensive mining and instead enabled the the network to be secured using staked ETH. It was 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/) 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. +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 - continued to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain ran in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge was when these two systems finally came together, and proof-of-work was permanently replaced 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. +Imagine Ethereum is a spaceship that wasn't quite ready for an interstellar voyage. With the Beacon Chain, the community built a new engine and a hardened hull. After significant testing, it became time to hot-swap the new engine for the old one mid-flight. This merged the new, more efficient engine into the existing ship enabling it to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -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. +Proof-of-work secured Ethereum Mainnet from genesis until The Merge. This allowed the Ethereum blockchain we're all used to to come into existence in July 2015 with all its familiar features - transactions, smart contracts, accounts, etc. -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. +Throughout Ethereum's history, developers have prepared for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created as a separate blockchain to Mainnet, running in parallel. -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 Beacon Chain was not processing Mainnet transactions. Instead, it was reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, it became time for the Beacon Chain to reach consensus on real world data. After The Merge, the Beacon Chain became 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. +The Merge represented the official switch to using the Beacon Chain as the engine of block production. Mining is no longer be the means of producing valid blocks. Instead, the proof-of-stake validators have adopted this role and are now responsible for processing the validity of all transactions and proposing blocks. -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. +No history was lost in The Merge. As Mainnet merged with the Beacon Chain, it also merged the entire transactional history of Ethereum. -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. +This transition to proof-of-stake changed the way ether is issued. Learn more about ether issuance before and after 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. - ### Users and holders {#users-holders} -**You do not need to do anything to protect your funds entering The Merge.** +**The Merge did not change anything for holders/users.** -_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.** +_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 to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before - people tellign you otherwise are likely scammers. -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 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. +Despite swapping out proof-of-work, the entire history of Ethereum since genesis remained intact and unaltered by the transition to proof-of-stake. Any funds held in your wallet before The Merge will are still accessible after The Merge. **No action is required to upgrade on your part.** [More on Ethereum security](/security/#eth2-token-scam) @@ -63,49 +52,43 @@ As we approach The Merge of Ethereum Mainnet, **you should be on high alert for Key action items include: -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. +1. Run _both_ a consensus layer client and an execution layer client; third-party endpoints to obtain execution data no longer work since The Merge. +2. Authenticate both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate. +3. Set a `fee recipient` address to receive your earned transaction fee tips/MEV. -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 completing the first two items above items will result in your node being seen as "offline" 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. -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) - - -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. +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 now also also depends on the validity of the "consensus block" it is contained within. -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. +As a result, a full Ethereum node now 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 - 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. +Not completing the above items 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 many of the details apply to all node operators. -The Merge comes with changes to consensus, which also includes changes related to: +The Merge came with changes to consensus, which also includes changes related to: - block structure - slot/block timing @@ -116,17 +99,20 @@ The Merge comes with changes to consensus, which also includes changes related t 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/). -## After The Merge {#after-the-merge} +## The Merge and energy consumption {#merge-and-energy} + +The Merge marked the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Ethereum's energy consumption dropped by an estimated 99.95%, making Ethereum a green blockchain. Learn more about [Ethereum energy consumption](/energy-consumption/). + -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/). +## The Merge and scaling {#merge-and-scaling} -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/). +The Merge 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} +contentPreview="False. Anyone is free to sync their own self-verified copy of Ethereum (i.e. run a node). No ETH is required - nmt before The Merge, not after The Merge, not ever."> 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. @@ -142,41 +128,38 @@ 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. +title="Misconception: "The Merge failed to reduced gas fees."" +contentPreview="False. The Merge was a change of consensus mechanism, not an expansion of network capacity, and was never intended to lower gas fees."> +Gas fees are a product of network demand relative to the capacity of the network. The Merge deprecated the use of proof-of-work, transitioning to proof-of-stake for consensus, but did 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](/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/) +title="Misconception: "Transactions are noticeably faster after The Merge."" +contentPreview="False. Though some slight changes exist, transaction speed is mostly remain the same on layer 1."> 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, 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. +Historically, on proof-of-work, the target was to have a new block every ~13.3 seconds. Under proof-of-stake, 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). In proof-of-stake blocks are be produced ~10% more frequently than on proof-of-work. This is a fairly insignificant change and is unlikely to be noticed by users. -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. +Proof-of-stake introduced the transaction finality concept that did not previously exist. In 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 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. -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. - -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. +Staked ETH and staking rewards continue to be locked without the ability to withdraw. Withdrawals are planned for the Shanghai upgrade. -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. +contentPreview="False. Fee tips/MEV are 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 DO have immediate access to the fee rewards/MEV earned during block proposals. -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. +The protocol issues ETH as a reward to validators for contributing to consensus. The validator nominates an account to receive 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 (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). +ETH on the execution layer 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). - -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 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 (as of June 2022). - - - -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 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. - - ## 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. +The term 'Eth2' has been deprecated. After merging 'Eth1' and 'Eth2' into a single chain, there is no longer any need to +distinguish between two Ethereum networks; there is just Ethereum. To limit confusion, the community has updated these terms: @@ -230,9 +192,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 on [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 original Mainnet execution layer. Since the Merge, validators are assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) is no longer 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 sharding. +Blocks are instead proposed by validating nodes that have staked ETH in return for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including sharding. The Beacon Chain @@ -240,13 +202,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, which will enable the ability for stakers to withdraw. +In order to simplify and maximize focus on a successful transition to proof-of-stake, The Merge upgrade did 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 sharding {#merge-and-data-sharding} -Originally, the plan was to work on sharding 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 sharding before The Merge to address scalability. However, with the boom of [layer 2 scaling solutions](/layer-2/), the priority shifted to swapping proof-of-work to proof-of-stake first. 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 bf79ac6531a42dc2cc3d8ec225e850c37abcbb45 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 19 Jul 2022 12:46:53 +0100 Subject: [PATCH 024/183] fix typos --- src/content/upgrades/merge/index.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index db3b18999b2..7baca5f4dfe 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -1,6 +1,6 @@ --- title: The Merge -description: Learn about The Merge - when Mainnet Ethereum adotped proof-of-stake. +description: Learn about The Merge - when Mainnet Ethereum adopted proof-of-stake. lang: en template: upgrade sidebar: true @@ -11,7 +11,6 @@ summaryPoint3: The Merge refers to the original Ethereum Mainnet becoming part o summaryPoint4: The Merge reduced Ethereum's energy consumption by ~99.95%. --- - ## What was The Merge? {#what-is-the-merge} The Merge was the joining of the original execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminated the need for energy-intensive mining and instead enabled the the network to be secured using staked ETH. It was a truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. @@ -42,7 +41,7 @@ This transition to proof-of-stake changed the way ether is issued. Learn more ab **The Merge did not change anything for holders/users.** -_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 to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before - people tellign you otherwise are likely scammers. +_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 to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before - people tellign you otherwise are likely scammers. Despite swapping out proof-of-work, the entire history of Ethereum since genesis remained intact and unaltered by the transition to proof-of-stake. Any funds held in your wallet before The Merge will are still accessible after The Merge. **No action is required to upgrade on your part.** @@ -103,7 +102,6 @@ For more information, check out this blog post by Tim Beiko on [How The Merge Im The Merge marked the end of proof-of-work for Ethereum and start the era of a more sustainable, eco-friendly Ethereum. Ethereum's energy consumption dropped by an estimated 99.95%, making Ethereum a green blockchain. Learn more about [Ethereum energy consumption](/energy-consumption/). - ## The Merge and scaling {#merge-and-scaling} The Merge 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/). @@ -112,7 +110,7 @@ The Merge also set the stage for further scalability upgrades not possible under +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 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. @@ -174,7 +172,7 @@ The APR is intentionally dynamic, allowing a market of stakers to balance how mu ## What happened to 'Eth2'? {#eth2} -The term 'Eth2' has been deprecated. After merging 'Eth1' and 'Eth2' into a single chain, there is no longer any need to +The term 'Eth2' has been deprecated. After merging 'Eth1' and 'Eth2' into a single chain, there is no longer any need to distinguish between two Ethereum networks; there is just Ethereum. To limit confusion, the community has updated these terms: From 79a7236d3ab7cbe3c410bc8301dcb4a0b24d5443 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 20 Jul 2022 10:36:41 +0100 Subject: [PATCH 025/183] update intro to ether page --- .../docs/intro-to-ethereum/index.md | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index c53ca51325f..be6a55ff38e 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -16,15 +16,9 @@ A blockchain is a public database that is updated and shared across many compute Every computer in the network must agree upon each new block and the chain as a whole. These computers are known as "nodes". Nodes ensure everyone interacting with the blockchain has the same data. To accomplish this distributed agreement, blockchains need a consensus mechanism. -Ethereum currently uses a [proof-of-work](/developers/docs/consensus-mechanisms/pow/) consensus mechanism. This means that anyone who wants to add new blocks to the chain must solve a difficult puzzle that requires a lot of computing power. Solving the puzzle "proves" that you have done the "work" by using computational resources. Doing this is known as [mining](/developers/docs/consensus-mechanisms/pow/mining/). Mining is typically brute force trial and error, but successfully adding a block is rewarded in ETH. +Ethereum uses a proof-of-stake based consensus mechanism. This means that anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then have a chance of being randomly selected to propose blocks that other validators check and add to the blockchain. In this model there is usually only one chain, but network latency and dishoinest behaviour can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. -New blocks are broadcast to the nodes in the network, checked and verified, thus updating the state of the blockchain for everyone. - -So to summarize, when you send ETH to someone, the transaction must be added to the block which will get mined. The updated state is then shared with the entire network. - -Watch Austin walk you through blockchains: - - +More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos). If you want to see how blockchain hashes data and then the previous block references all the past blocks, be sure to check out [this demo](https://andersbrownworth.com/blockchain/blockchain) by Anders Brownworth and watch the accompanying video below. @@ -34,6 +28,8 @@ Watch Anders explain hashes in blockchains: ## What is Ethereum? {#what-is-ethereum} +Ethereum is a blockchain with a computer embedded in it. It serves as the foundation for building apps and organizations is a decentralized, permissionless, censorship resistant way. + In the Ethereum universe, there is a single, canonical computer (called the Ethereum Virtual Machine, or EVM) whose state everyone on the Ethereum network agrees on. Everyone who participates in the Ethereum network (every Ethereum node) keeps a copy of the state of this computer. Additionally, any participant can broadcast a request for this computer to perform arbitrary computation. Whenever such a request is broadcast, other participants on the network verify, validate, and carry out ("execute") the computation. This execution causes a state change in the EVM, which is committed and propagated throughout the entire network. Requests for computation are called transaction requests; the record of all transactions and the EVM's present state gets stored on the blockchain, which in turn is stored and agreed upon by all nodes. @@ -42,11 +38,13 @@ Cryptographic mechanisms ensure that once transactions are verified as valid and ## What is ether? {#what-is-ether} -**Ether (ETH)** is the native cryptocurrency of Ethereum. The purpose of ether is to allow for a market for computation. Such a market provides an economic incentive for participants to verify and execute transaction requests and provide computational resources to the network. +**Ether (ETH)** is the native cryptocurrency of Ethereum. The purpose of ETH is to allow for a market for computation. Such a market provides an economic incentive for participants to verify and execute transaction requests and provide computational resources to the network. + +Any participant who broadcasts a transaction request must also offer some amount of ETH to the network as a bounty. This bounty will be awarded to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. -Any participant who broadcasts a transaction request must also offer some amount of ether to the network as a bounty. This bounty will be awarded to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. +The amount of ETH paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. -The amount of ether paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. +ETH is also used to provide crypto-economic security to the network, in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behaviour by other validators; 2) It is staked by validators, acting as collateral against dishionest behaviour - if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. ## What are smart contracts? {#what-are-smart-contracts} From 53e6d0afaf95ce7ef451765d3e03b582cb17d29b Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 20 Jul 2022 11:06:16 +0100 Subject: [PATCH 026/183] update evm details for post-merge --- src/content/developers/docs/evm/index.md | 2 +- .../developers/docs/evm/opcodes/index.md | 290 +++++++++--------- 2 files changed, 146 insertions(+), 146 deletions(-) diff --git a/src/content/developers/docs/evm/index.md b/src/content/developers/docs/evm/index.md index 208b2fcddfe..5bbb03a7b89 100644 --- a/src/content/developers/docs/evm/index.md +++ b/src/content/developers/docs/evm/index.md @@ -11,7 +11,7 @@ The Ethereum protocol itself exists solely for the purpose of keeping the contin ## Prerequisites {#prerequisites} -Some basic familiarity with common terminology in computer science such as [bytes](https://wikipedia.org/wiki/Byte), [memory](https://wikipedia.org/wiki/Computer_memory), and a [stack]() are necessary to understand the EVM. It would also be helpful to be comfortable with cryptography/blockchain concepts like [hash functions](https://wikipedia.org/wiki/Cryptographic_hash_function), [proof-of-work](https://wikipedia.org/wiki/Proof_of_work) and the [Merkle tree](https://wikipedia.org/wiki/Merkle_tree). +Some basic familiarity with common terminology in computer science such as [bytes](https://wikipedia.org/wiki/Byte), [memory](https://wikipedia.org/wiki/Computer_memory), and a [stack]() are necessary to understand the EVM. It would also be helpful to be comfortable with cryptography/blockchain concepts like [hash functions](https://wikipedia.org/wiki/Cryptographic_hash_function) and the [Merkle tree](https://wikipedia.org/wiki/Merkle_tree). ## From ledger to state machine {#from-ledger-to-state-machine} diff --git a/src/content/developers/docs/evm/opcodes/index.md b/src/content/developers/docs/evm/opcodes/index.md index 59b464a059d..1eb7b937292 100644 --- a/src/content/developers/docs/evm/opcodes/index.md +++ b/src/content/developers/docs/evm/opcodes/index.md @@ -12,156 +12,156 @@ If you want to be certain of correctness and aware of every edge case, using the For operations with dynamic gas costs, see [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md). -| Stack | Name | Gas | Initial Stack | Resulting Stack | Mem / Storage | Notes | -| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------- | :----------------------------- | :---------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| 00 | STOP | 0 | | | | halt execution | -| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | -| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | -| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | -| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | -| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | -| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | -| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | -| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | -| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | -| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | -| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | +| Stack | Name | Gas | Initial Stack | Resulting Stack | Mem / Storage | Notes | +| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------- | :------------------------------------ | :---------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| 00 | STOP | 0 | | | | halt execution | +| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | +| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | +| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | +| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | +| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | +| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | +| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | | 0C-0F | _invalid_ | -| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | -| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | -| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | -| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | -| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | -| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | -| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | -| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | -| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | -| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | -| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | -| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | -| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | -| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | +| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | +| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | +| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | +| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | +| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | +| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | | 1E-1F | _invalid_ | -| 20 | SHA3 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len])` | | keccak256 | +| 20 | SHA3 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len])` | | keccak256 | | 21-2F | _invalid_ | -| 30 | ADDRESS | 2 | `.` | `address(this)` | | address of executing contract | -| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | -| 32 | ORIGIN | 2 | `.` | `tx.origin` | | address that originated the tx | -| 33 | CALLER | 2 | `.` | `msg.sender` | | address of msg sender | -| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg value, in wei | -| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | -| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | length of msg data, in bytes | -| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := msg.data[ost:ost+len | copy msg data | -| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | length of executing contract's code, in bytes | -| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len] := this.code[ost:ost+len] | copy executing contract's bytecode | -| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://github.com/ethereum/EIPs/blob/0341984ff14c8ce398f6d2b3e009c07cd99df8eb/EIPS/eip-1559.md#gasprice) | -| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | -| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := addr.code[ost:ost+len] | copy code from `addr` | -| 3D | RETURNDATASIZE | 2 | `.` | `size` | | size of returned data from last external call, in bytes | -| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := returndata[ost:ost+len] | copy returned data from last external call | -| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | -| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | -| 41 | COINBASE | 2 | `.` | `block.coinbase` | | address of miner of current block | -| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | timestamp of current block | -| 43 | NUMBER | 2 | `.` | `block.number` | | number of current block | -| 44 | DIFFICULTY | 2 | `.` | `block.difficulty` | | difficulty of current block | -| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | gas limit of current block | -| 46 | CHAINID | 2 | `.` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | -| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | balance of executing contract, in wei | -| 48 | BASEFEE | 2 | `.` | `block.basefee` | | base fee of current block | +| 30 | ADDRESS | 2 | `.` | `address(this)` | | address of executing contract | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | +| 32 | ORIGIN | 2 | `.` | `tx.origin` | | address that originated the tx | +| 33 | CALLER | 2 | `.` | `msg.sender` | | address of msg sender | +| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg value, in wei | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | +| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | length of msg data, in bytes | +| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := msg.data[ost:ost+len | copy msg data | +| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | length of executing contract's code, in bytes | +| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len] := this.code[ost:ost+len] | copy executing contract's bytecode | +| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://github.com/ethereum/EIPs/blob/0341984ff14c8ce398f6d2b3e009c07cd99df8eb/EIPS/eip-1559.md#gasprice) | +| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | +| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := addr.code[ost:ost+len] | copy code from `addr` | +| 3D | RETURNDATASIZE | 2 | `.` | `size` | | size of returned data from last external call, in bytes | +| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len] := returndata[ost:ost+len] | copy returned data from last external call | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | +| 41 | COINBASE | 2 | `.` | `block.coinbase` | | address of miner of current block | +| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | timestamp of current block | +| 43 | NUMBER | 2 | `.` | `block.number` | | number of current block | +| 44 | PREVRANDAO | 2 | `.` | `block.execution_payload.prev_randao` | | output of beacon chain randomness function | +| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | gas limit of current block | +| 46 | CHAINID | 2 | `.` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | +| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | balance of executing contract, in wei | +| 48 | BASEFEE | 2 | `.` | `block.basefee` | | base fee of current block | | 49-4F | _invalid_ | -| 50 | POP | 2 | `_anon` | `.` | | remove item from top of stack and discard it | -| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | -| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | write a word to memory | -| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | write a single byte to memory | -| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | -| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | write word to storage | -| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | -| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ? dst : $pc + 1` | -| 58 | PC | 2 | `.` | `$pc` | | program counter | -| 59 | MSIZE | 2 | `.` | `len(mem)` | | size of memory in current execution context, in bytes | -| 5A | GAS | 2 | `.` | `gasRemaining` | | -| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | +| 50 | POP | 2 | `_anon` | `.` | | remove item from top of stack and discard it | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | +| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | write a word to memory | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | write a single byte to memory | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | write word to storage | +| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | +| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ? dst : $pc + 1` | +| 58 | PC | 2 | `.` | `$pc` | | program counter | +| 59 | MSIZE | 2 | `.` | `len(mem)` | | size of memory in current execution context, in bytes | +| 5A | GAS | 2 | `.` | `gasRemaining` | | +| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | | 5C-5F | _invalid_ | -| 60 | PUSH1 | 3 | `.` | `uint8` | | push 1-byte value onto stack | -| 61 | PUSH2 | 3 | `.` | `uint16` | | push 2-byte value onto stack | -| 62 | PUSH3 | 3 | `.` | `uint24` | | push 3-byte value onto stack | -| 63 | PUSH4 | 3 | `.` | `uint32` | | push 4-byte value onto stack | -| 64 | PUSH5 | 3 | `.` | `uint40` | | push 5-byte value onto stack | -| 65 | PUSH6 | 3 | `.` | `uint48` | | push 6-byte value onto stack | -| 66 | PUSH7 | 3 | `.` | `uint56` | | push 7-byte value onto stack | -| 67 | PUSH8 | 3 | `.` | `uint64` | | push 8-byte value onto stack | -| 68 | PUSH9 | 3 | `.` | `uint72` | | push 9-byte value onto stack | -| 69 | PUSH10 | 3 | `.` | `uint80` | | push 10-byte value onto stack | -| 6A | PUSH11 | 3 | `.` | `uint88` | | push 11-byte value onto stack | -| 6B | PUSH12 | 3 | `.` | `uint96` | | push 12-byte value onto stack | -| 6C | PUSH13 | 3 | `.` | `uint104` | | push 13-byte value onto stack | -| 6D | PUSH14 | 3 | `.` | `uint112` | | push 14-byte value onto stack | -| 6E | PUSH15 | 3 | `.` | `uint120` | | push 15-byte value onto stack | -| 6F | PUSH16 | 3 | `.` | `uint128` | | push 16-byte value onto stack | -| 70 | PUSH17 | 3 | `.` | `uint136` | | push 17-byte value onto stack | -| 71 | PUSH18 | 3 | `.` | `uint144` | | push 18-byte value onto stack | -| 72 | PUSH19 | 3 | `.` | `uint152` | | push 19-byte value onto stack | -| 73 | PUSH20 | 3 | `.` | `uint160` | | push 20-byte value onto stack | -| 74 | PUSH21 | 3 | `.` | `uint168` | | push 21-byte value onto stack | -| 75 | PUSH22 | 3 | `.` | `uint176` | | push 22-byte value onto stack | -| 76 | PUSH23 | 3 | `.` | `uint184` | | push 23-byte value onto stack | -| 77 | PUSH24 | 3 | `.` | `uint192` | | push 24-byte value onto stack | -| 78 | PUSH25 | 3 | `.` | `uint200` | | push 25-byte value onto stack | -| 79 | PUSH26 | 3 | `.` | `uint208` | | push 26-byte value onto stack | -| 7A | PUSH27 | 3 | `.` | `uint216` | | push 27-byte value onto stack | -| 7B | PUSH28 | 3 | `.` | `uint224` | | push 28-byte value onto stack | -| 7C | PUSH29 | 3 | `.` | `uint232` | | push 29-byte value onto stack | -| 7D | PUSH30 | 3 | `.` | `uint240` | | push 30-byte value onto stack | -| 7E | PUSH31 | 3 | `.` | `uint248` | | push 31-byte value onto stack | -| 7F | PUSH32 | 3 | `.` | `uint256` | | push 32-byte value onto stack | -| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | -| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | -| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | -| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | -| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | -| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | -| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | -| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | -| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | -| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | -| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | -| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | -| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | -| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | -| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | -| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | -| 90 | SWAP1 | 3 | `a, b` | `b, a` | | -| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | -| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | -| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | -| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | -| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | -| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | -| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | -| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | -| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | -| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | -| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | -| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | -| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | -| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | -| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | -| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len]) | -| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len], topic0) | -| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1) | -| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2) | -| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2, topic3) | +| 60 | PUSH1 | 3 | `.` | `uint8` | | push 1-byte value onto stack | +| 61 | PUSH2 | 3 | `.` | `uint16` | | push 2-byte value onto stack | +| 62 | PUSH3 | 3 | `.` | `uint24` | | push 3-byte value onto stack | +| 63 | PUSH4 | 3 | `.` | `uint32` | | push 4-byte value onto stack | +| 64 | PUSH5 | 3 | `.` | `uint40` | | push 5-byte value onto stack | +| 65 | PUSH6 | 3 | `.` | `uint48` | | push 6-byte value onto stack | +| 66 | PUSH7 | 3 | `.` | `uint56` | | push 7-byte value onto stack | +| 67 | PUSH8 | 3 | `.` | `uint64` | | push 8-byte value onto stack | +| 68 | PUSH9 | 3 | `.` | `uint72` | | push 9-byte value onto stack | +| 69 | PUSH10 | 3 | `.` | `uint80` | | push 10-byte value onto stack | +| 6A | PUSH11 | 3 | `.` | `uint88` | | push 11-byte value onto stack | +| 6B | PUSH12 | 3 | `.` | `uint96` | | push 12-byte value onto stack | +| 6C | PUSH13 | 3 | `.` | `uint104` | | push 13-byte value onto stack | +| 6D | PUSH14 | 3 | `.` | `uint112` | | push 14-byte value onto stack | +| 6E | PUSH15 | 3 | `.` | `uint120` | | push 15-byte value onto stack | +| 6F | PUSH16 | 3 | `.` | `uint128` | | push 16-byte value onto stack | +| 70 | PUSH17 | 3 | `.` | `uint136` | | push 17-byte value onto stack | +| 71 | PUSH18 | 3 | `.` | `uint144` | | push 18-byte value onto stack | +| 72 | PUSH19 | 3 | `.` | `uint152` | | push 19-byte value onto stack | +| 73 | PUSH20 | 3 | `.` | `uint160` | | push 20-byte value onto stack | +| 74 | PUSH21 | 3 | `.` | `uint168` | | push 21-byte value onto stack | +| 75 | PUSH22 | 3 | `.` | `uint176` | | push 22-byte value onto stack | +| 76 | PUSH23 | 3 | `.` | `uint184` | | push 23-byte value onto stack | +| 77 | PUSH24 | 3 | `.` | `uint192` | | push 24-byte value onto stack | +| 78 | PUSH25 | 3 | `.` | `uint200` | | push 25-byte value onto stack | +| 79 | PUSH26 | 3 | `.` | `uint208` | | push 26-byte value onto stack | +| 7A | PUSH27 | 3 | `.` | `uint216` | | push 27-byte value onto stack | +| 7B | PUSH28 | 3 | `.` | `uint224` | | push 28-byte value onto stack | +| 7C | PUSH29 | 3 | `.` | `uint232` | | push 29-byte value onto stack | +| 7D | PUSH30 | 3 | `.` | `uint240` | | push 30-byte value onto stack | +| 7E | PUSH31 | 3 | `.` | `uint248` | | push 31-byte value onto stack | +| 7F | PUSH32 | 3 | `.` | `uint256` | | push 32-byte value onto stack | +| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | +| 90 | SWAP1 | 3 | `a, b` | `b, a` | | +| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | +| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | +| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | +| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | +| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | +| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | +| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | +| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | +| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | +| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | +| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | +| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | +| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | +| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | +| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | +| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len]) | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len], topic0) | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1) | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2) | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG1(memory[ost:ost+len], topic0, topic1, topic2, topic3) | | A5-EF | _invalid_ | -| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | -| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen] := returndata | -| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | -| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len] | -| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | -| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len]))[12:] | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen] := returndata | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len] | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | +| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len]))[12:] | | F6-F9 | _invalid_ | -| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen] := returndata | | FB-FC | _invalid_ | -| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len]) | -| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | -| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | | destroy contract and sends all funds to `addr` | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len]) | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | | destroy contract and sends all funds to `addr` | From 9a18e8aeb5ea974ccfe7b294e6ae4bdf7d4df77a Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 20 Jul 2022 11:52:47 +0100 Subject: [PATCH 027/183] update consensus mechanism page --- .../docs/consensus-mechanisms/index.md | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index 7af78499c9e..9dd023f1a37 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -5,9 +5,7 @@ lang: en sidebar: true --- -When it comes to blockchains like Ethereum, which are, in essence, distributed databases, the network's nodes must reach an agreement on the network's current state. This agreement is achieved using consensus mechanisms. - -Although consensus mechanisms aren't directly related to building a dapp, understanding them will illuminate concepts relevant to you and your users' experience, like gas prices and transaction times. +The term 'consensus mechanism' is often used colloquially to refer to 'proof-of-stake', 'proof-of-work' or 'proof-of-authority' protocols.However, these are just components in consensus mechanisms that protect against Sybil attacks. Consensus mechanisms are the complete stack of ideas, protocols and incentives that enable a distributed set of nodes to agree on the state of a blockchain. ## Prerequisites {#prerequisites} @@ -15,31 +13,31 @@ To better understand this page, we recommend you first read our [introduction to ## What is consensus? {#what-is-consensus} -By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is not a disagreement on a proposed choice of film, then a consensus is achieved. In the extreme case the group will eventually split. +By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. In the extreme case the group will eventually split. -In regards to blockchain, the process is formalized, and reaching consensus means that at least 51% of the nodes on the network agree on the next global state of the network. +In regards to the Ethereum blockchain, the process is formalized, and reaching consensus means that at least 66% of the nodes on the network agree on the global state of the network. ## What is a consensus mechanism? {#what-is-a-consensus-mechanism} -Consensus mechanisms (also known as consensus protocols or consensus algorithms) allow distributed systems (networks of computers) to work together and stay secure. +The term consensus mechanism refers to the entire stack of protocols, incentives and ideas that allow a network of nodes to come to agreement about the state of a blockchain. -Consensus protocols and consensus algorithms are often used interchangeably. However, protocols and algorithms are different. A protocol is a set of rules defined in a standard that governs how a system and its many functioning parts operate and interact. Algorithms are like exact recipes on how to solve a problem or calculate a result. +Ethereum uses a proof-of-stake based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital staked by validators. This incentive structure encourages individual validators to act honestly, punishes those that don't, and also creates an extremely high cost to attack the network. -For decades, these mechanisms have been used to establish consensus among database nodes, application servers, and other enterprise infrastructure. In recent years, new consensus mechanisms have been invented to allow cryptoeconomic systems, such as Ethereum, to agree on the state of the network. +Then, there is a protocol that governs how honest validators are selected to propose or validate blocks, process transactions and vote for their view of the head of the chain. In the rare situations where there are multiple blocks in the same position near the head of the chain, there is a fork-choice mechanism that selects blocks that make up the 'heaviest' chain, measured by the number of validators that voted for the blocks weighted by thier staked ether balance. -A consensus mechanism in a cryptoeconomic system also helps prevent certain kinds of economic attacks. In theory, an attacker can compromise consensus by controlling 51% of the network. Consensus mechanisms are designed to make this "51% attack" unfeasible. Different mechanisms are engineered to solve this security problem in different ways. +There are also concepts that are important to consensus that are not explicitly defined in code, such as the additional security offered by potential out-of-band social coordination as a last line of defense against attacks on the network. - +These components together form the consensus mechanism. ## Types of consensus mechanisms {#types-of-consensus-mechanisms} -### Proof-of-work {#proof-of-work} +### Proof-of-work based {#proof-of-work} -Ethereum, like Bitcoin, currently uses a **proof-of-work (PoW)** consensus protocol. +Like Bitcoin, Ethereum once used a **proof-of-work (PoW)** based consensus protocol. #### Block creation {#pow-block-creation} -Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest – this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". +Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest – this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". The true head of the chain is then determined byh a fork-choice rule that selects the set of blocks that have had the most work done to mine them. #### Security {#pow-security} @@ -47,9 +45,9 @@ The network is kept secure by the fact that you'd need 51% of the network's comp More on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) -### Proof-of-stake {#proof-of-stake} +### Proof-of-stake based {#proof-of-stake} -Ethereum plans to upgrade to a **proof-of-stake (PoS)** consensus protocol. +Ethereum now uses a **proof-of-stake (PoS)** consensus protocol. #### Block creation {#pos-block-creation} @@ -57,7 +55,7 @@ Proof-of-stake is done by validators who have staked ETH to participate in the s #### Security {#pos-security} -A proof-of-stake system is kept secure by the fact that you'd need 51% of the total staked ETH to defraud the chain. And that your stake is slashed for malicious behaviour. +A proof-of-stake system is kept secure crypto-economically because a huge amount of ether must be destroyed by an attacker attempting to take control of the chain. A system of rewards an penalties incentivize individual miners to behave honestly. More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) @@ -69,15 +67,13 @@ Watch more on the different types of consensus mechanisms used on Ethereum: ### Sybil resistance & chain selection {#sybil-chain} -Now technically, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. It's this Sybil resistance mechanism combined with a chain selection rule that makes up a true consensus mechanism. +As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. It's this Sybil resistance mechanism combined with a chain selection rule that makes up a true consensus mechanism. **Sybil resistance** measures how a protocol fares against a [Sybil attack](https://wikipedia.org/wiki/Sybil_attack). Sybil attacks are when one user or group pretends to be many users. Resistance to this type of attack is essential for a decentralized blockchain and enables miners and validators to be rewarded equally based on resources put in. Proof-of-work and proof-of-stake protect against this by making users expend a lot of energy or put up a lot of collateral. These protections are an economic deterrent to Sybil attacks. A **chain selection rule** is used to decide which chain is the "correct" chain. Ethereum and Bitcoin currently use the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. -The combination of proof-of-work and longest chain rule is known as "Nakamoto Consensus." - -The [Beacon Chain](/upgrades/beacon-chain/) uses a consensus mechanism called [Casper the Friendly Finality Gadget](https://arxiv.org/abs/1710.09437), which is proof-of-stake based. +Ethereum uses a consensus mechanism that combines [Casper FFG](https://arxiv.org/abs/1710.09437) proof-of-stake with the [GHOST](https://arxiv.org/abs/2003.03052) fork-choice rule. ## Further reading {#further-reading} From 716a4d2a0eaad1720aa67690f3a0bbde0dfed70b Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 20 Jul 2022 11:56:56 +0100 Subject: [PATCH 028/183] more changes --- src/content/developers/docs/consensus-mechanisms/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index 9dd023f1a37..767f886c805 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -67,11 +67,11 @@ Watch more on the different types of consensus mechanisms used on Ethereum: ### Sybil resistance & chain selection {#sybil-chain} -As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. It's this Sybil resistance mechanism combined with a chain selection rule that makes up a true consensus mechanism. +As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (a.k.a fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. **Sybil resistance** measures how a protocol fares against a [Sybil attack](https://wikipedia.org/wiki/Sybil_attack). Sybil attacks are when one user or group pretends to be many users. Resistance to this type of attack is essential for a decentralized blockchain and enables miners and validators to be rewarded equally based on resources put in. Proof-of-work and proof-of-stake protect against this by making users expend a lot of energy or put up a lot of collateral. These protections are an economic deterrent to Sybil attacks. -A **chain selection rule** is used to decide which chain is the "correct" chain. Ethereum and Bitcoin currently use the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. +A **chain selection rule** is used to decide which chain is the "correct" chain. Bitcoin uses the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. Ethereum used to use the longest chain rule too; however, now that Etheruem runs on proof-of-stake it adopted an updated fork-choice algorithm that measures the 'weight' of the chain. The weight is the accumulated sum of validator votes, weighted by validator staked-ether balances. Ethereum uses a consensus mechanism that combines [Casper FFG](https://arxiv.org/abs/1710.09437) proof-of-stake with the [GHOST](https://arxiv.org/abs/2003.03052) fork-choice rule. From f711facc3d80e6339fd7f9c5f9c390c6bd0cb620 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 21 Jul 2022 10:27:55 +0100 Subject: [PATCH 029/183] rm reference to pow --- src/content/developers/docs/dapps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index dbe336e3137..5275cdc09e4 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -40,7 +40,7 @@ A smart contract is code that lives on the Ethereum blockchain and runs exactly ## Drawbacks of dapp development {#drawbacks-of-dapp-development} - **Maintenance** – Dapps can be harder to maintain because the code and data published to the blockchain are harder to modify. It’s hard for developers to make updates to their dapps (or the underlying data stored by a dapp) once they are deployed, even if bugs or security risks are identified in an old version. -- **Performance overhead** – There is a huge performance overhead, and scaling is really hard. To achieve the level of security, integrity, transparency, and reliability that Ethereum aspires to, every node runs and stores every transaction. On top of this, proof-of-work takes time as well. A back-of-the-envelope calculation puts the overhead at something like 1,000,000x that of standard computation currently. +- **Performance overhead** – There is a huge performance overhead, and scaling is really hard. To achieve the level of security, integrity, transparency, and reliability that Ethereum aspires to, every node runs and stores every transaction. On top of this, proof-of-stake consensus takes time as well. - **Network congestion** – When one dapp uses too many computational resources, the entire network gets backed up. Currently, the network can only process about 10-15 transactions per second; if transactions are being sent in faster than this, the pool of unconfirmed transactions can quickly balloon. - **User experience** – It may be harder to engineer user-friendly experiences because the average end-user might find it too difficult to set up a tool stack necessary to interact with the blockchain in a truly secure fashion. - **Centralization** – User-friendly and developer-friendly solutions built on top of the base layer of Ethereum might end up looking like centralized services anyways. For example, such services may store keys or other sensitive information server-side, serve a frontend using a centralized server, or run important business logic on a centralized server before writing to the blockchain. Centralization eliminates many (if not all) of the advantages of blockchain over the traditional model. From 322071b83993efab68f1e2cf8c92f3c881fc5469 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 11:53:42 +0100 Subject: [PATCH 030/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/nft/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/nft/index.md b/src/content/nft/index.md index e12443d1ad6..23d3f1e2e72 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -96,7 +96,7 @@ NFTs are different from ERC-20 tokens, such as DAI or LINK, in that each individ - Signatures - Lots and lots more options to get creative with! -Ownership of NFTs is managed through the uniqueID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as ERC-721. This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: +Ownership of NFTs is managed through the unique ID and metadata that no other token can replicate. NFTs are minted through smart contracts that assign ownership and manage the transferability of the NFT's. When someone creates or mints an NFT, they execute code stored in smart contracts that conform to different standards, such as [ERC-721](/developers/docs/standards/tokens/erc-721/). This information is added to the blockchain where the NFT is being managed. The minting process, from a high level, has the following steps that it goes through: - Creating a new block - Validating information @@ -304,7 +304,7 @@ Decentralized meaning you and everyone else can verify you own something. All wi Secure meaning no one can copy/paste your NFT or steal it. -These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. Ethereum protects the assets using a decentralized consensus mechanism called ['proof-of-stake'](/developers/docs/consensus-mechanisms/pos). This is a low carbon consensus mechanism that is also considered more secure than the energy-intensive alternative, ['proof-of-work'](/developers/docs/consensus-mechanisms/pow). NFTs have been associated with high energy expenditure because Ethereum used to be secured using proof-of-work. This is no longer true. +These qualities of Ethereum makes digitally owning unique items and getting a fair price for your content possible. Ethereum protects the assets using a decentralized consensus mechanism which involves ['proof-of-stake'](/developers/docs/consensus-mechanisms/pos). This is a low carbon method to determine who can add a block of transactions to the chain, and is considered more secure than the energy-intensive alternative, ['proof-of-work'](/developers/docs/consensus-mechanisms/pow). NFTs have been associated with high energy expenditure because Ethereum used to be secured using proof-of-work. This is no longer true. #### Minting NFTs {#minting-nfts} @@ -312,8 +312,8 @@ When you mint an NFT, a few things have to happen: - It needs to be confirmed as an asset on the blockchain. - The owner's account balance must be updated to include that asset. This makes it possible for it to then be traded or verifiably "owned". -- The transactions that confirm the above need to be added to a block and "immortalised" on the chain. -- The block needs to be confirmed by everyone in the network as "correct". This consensus removes the need for intermediaries because the network agrees that your NFT exists and belongs to you. And it's on chain so anyone can check it. This is one of the ways Ethereum helps NFT creators to maximise their earnings. +- The transactions that confirm the above need to be added to a block and "immortalized" on the chain. +- The block needs to be confirmed by everyone in the network as "correct". This consensus removes the need for intermediaries because the network agrees that your NFT exists and belongs to you. And it's on chain so anyone can check it. This is one of the ways Ethereum helps NFT creators to maximize their earnings. All these tasks are done by block producers and validators. Block proposers add your NFT transaction to a block and broadcast it to the rest of the network. Validators check that the transaction is valid and then add it to their databases. There are lots of crypto-economic incentives in place to make sure validators are acting honestly. Otherwise, anyone could just claim that they own the NFT you just minted and fraudulently transfer ownership. From 5769638eeaf95bf59d356e66272743345d899df1 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 11:55:47 +0100 Subject: [PATCH 031/183] rm forking from security discussion --- src/content/nft/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/nft/index.md b/src/content/nft/index.md index 23d3f1e2e72..235a4f01d81 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -319,7 +319,7 @@ All these tasks are done by block producers and validators. Block proposers add #### NFT security {#nft-security} -Ethereum's security comes from its proof-of-stake consensus mechanism - validators deposit 32 ETH into a contract that can be destroyed if they misbehave. The system is designed to strongly economically disincentivize malicious actions, making Ethereum effectively tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ether to change it, and even then their success is not guaranteed because the Ethereum community could decide to fork their malicious actions away. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT and the bad actor would be economically penalized and ejected from the pool of validators to prevent it from happening. +Ethereum's security comes from its consensus mechanism which uses proof-of-stake. Validators deposit 32 ETH into a contract that can be destroyed if they misbehave. The system is designed to strongly economically disincentivize malicious actions, making Ethereum effectively tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ETH to change it. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT and the bad actor would be economically penalized and ejected from the pool of validators to prevent it from happening. Security issues relating to NFTs are most often related to phishing scams, smart contract vulnerabilities or user errors (such as inadvertently exposing private keys), making good wallet security critical for NFT owners. From 4b0876b111d5bceff924773dc22974590aada87b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 11:58:19 +0100 Subject: [PATCH 032/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/energy-consumption/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/energy-consumption/index.md b/src/content/energy-consumption/index.md index a296fcd8246..d877ba2ecd9 100644 --- a/src/content/energy-consumption/index.md +++ b/src/content/energy-consumption/index.md @@ -19,7 +19,7 @@ For example, on 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, 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. -[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, Bitcoin 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. In comparison, the total energy expenditure for securing Ethereum is 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, Bitcoin expends about 200 TWh/yr of energy and emits about 100 MT (megatons) of carbon per year, while generating about 32,000 T of electrical waste from obsolete hardware annually. In comparison, the total energy expenditure for securing Ethereum is closer to **0.01 TWh/yr**. ![Comparison of energy expenditure across industries](./energy.png) @@ -27,28 +27,28 @@ The figure above shows the estimated annual energy consumption in TWh/yr for var _Note that the estimates presented in the plot are from publicly available sources that have been linked to in the text below. They are illustrative and do not represent an official estimate, promise or forecast._ -To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. Taking 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 (estimated to consume 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). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. 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 uses in a year. +To put Ethereum's energy consumption in context, we can compare annualized estimates for other industries. Taking 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 (estimated to consume 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). Estimates of energy consumption by Netflix range dramatically between [about 0.45TWhr/yr](https://s22.q4cdn.com/959853165/files/doc_downloads/2020/02/0220_Netflix_EnvironmentalSocialGovernanceReport_FINAL.pdf) (their own estimates reported in 2019) up to about 94 TWh/yr (as estimated by [Shift Project](https://theshiftproject.org/en/article/unsustainable-use-online-video/)) - there is some discussion about the assumptions underlying these estimates available on [Carbon Brief](https://www.carbonbrief.org/factcheck-what-is-the-carbon-footprint-of-streaming-video-on-netflix). Alternatively, Ethereum could be compared to Youtube which has been estimated to expend about [244 TWh/yr](https://thefactsource.com/how-much-electricity-does-youtube-use/), although these values depend a lot on the type of device videos are streamed on and the energy-efficiency of underlying infrastructure such as data centers. 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 uses in a year. ## A green application layer {#green-applications} -While Ethereum's energy consumption is very low, there is also 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. Through the development of these (and others, e.g. [DeSci](/desci/)), Ethereum is becoming an environmentally and socially-positive technology. +While Ethereum's energy consumption is very low, there is also 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"](https://en.wikipedia.org/wiki/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. Through the development of these (and others, e.g. [DeSci](/desci/)), Ethereum is becoming an environmentally and socially-positive technology. ## Ethereum's carbon debt {#carbon-debt} Ethereum's current energy expenditure is very low, but this has not always been the case. Ethereum switched on its proof-of-stake consensus mechanism in Q3 2022. However, Ethereum used a proof-of-work mechanism from 2014-2022, which had a much greater environmental cost. -Since its inception, Ethereum aimed to implement a proof-of-stake consensus mechanism, but doing so without sacrificing security and decentralization took years of focused research and development. Therefore, a proof-of-work mechanism was used to get the network started. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle, expending energy in the process. 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. Ethereum's total energy consumption peaked during the apex of the crypto bull market in February 2022 at just under 94 TWh/yr. In the summer before the switch to proof-of-stake, the energy consumption was closer to 60 TWh/yr, comparable to that of Uzbekistan, with a Carbon emission equivalent to that of Azerbaijan (33 MT/yr). +Since its inception, Ethereum aimed to implement a proof-of-stake consensus mechanism, but doing so without sacrificing security and decentralization took years of focused research and development. Therefore, a proof-of-work mechanism was used to get the network started. Proof-of-work consensus requires miners to use their computing hardware to solve a puzzle, expending energy in the process. 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. Ethereum's total energy consumption peaked during the apex of the crypto bull market in February 2022 at just under 94 TWh/yr. In the summer before the switch to proof-of-stake, the energy consumption was closer to 60 TWh/yr, comparable to that of Uzbekistan, with a carbon emission equivalent to that of Azerbaijan (33 MT/yr). 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. ## Why proof-of-stake is greener than proof-of-work {#why-pos-is-greener-than-pow} -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. +Proof-of-work is a robust way to secure the network. Transactions on the Ethereum blockchain under the previous proof-of-work system were validated by [miners](/developers/docs/consensus-mechanisms/pow/mining). Miners bundled together transactions into ordered blocks and added them to the Ethereum blockchain. The new blocks got broadcast to all the other node operators who run the transactions independently and verify that they are valid. Any dishonesty showed up as an inconsistency between different nodes. Honest blocks were added to the blockchain and became 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. 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 [^1] and a carbon footprint similar to Switzerland[^1]. +This mechanism of securing the network is problematic for several reasons. First, miners would 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 increased the network's energy consumption and generated hardware waste. Second, Ethereum's proof-of-work protocol (prior to transitioning to proof-of-stake) had a total annualized power consumption approximately equal to that of Finland [^1] and a carbon footprint similar to Switzerland[^1]. -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). +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 came from the mining algorithm, the switch to proof-of-stake dramatically reduced 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 a [Raspberry Pi](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/user-guide/ethereum2.0.html). Read more on [how Ethereum implements proof-of-stake](/developers/docs/consensus-mechanisms/pos) and how it compares to proof-of-work. From c12f0f076c38ab931b61dbf8ca86eb66d13a113b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 13:57:35 +0100 Subject: [PATCH 033/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../docs/consensus-mechanisms/pow/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pow/index.md b/src/content/developers/docs/consensus-mechanisms/pow/index.md index 3ac8baeb813..48a81da0d12 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/index.md @@ -5,10 +5,10 @@ lang: en sidebar: true --- -The Ethereum network started using a consensus mechanism called **[Proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevents certain kinds of economic attacks. However, Ethereum switched off proof-of-work in 2022 and started using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. +The Ethereum network began by using a consensus mechanism that involved **[Proof-of-work (PoW)](/developers/docs/consensus-mechanisms/pow)**. This allowed the nodes of the Ethereum network to agree on the state of all information recorded on the Ethereum blockchain and prevented certain kinds of economic attacks. However, Ethereum switched off proof-of-work in 2022 and started using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. - Proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as a consensus mechanism. Instead, it uses proof-of-stake. Read more on proof-of-stake and staking. + Proof-of-work has now been deprecated. Ethereum no longer uses proof-of-work as part of its consensus mechanism. Instead, it uses proof-of-stake. Read more on proof-of-stake and staking. ## Prerequisites {#prerequisites} @@ -17,7 +17,7 @@ To better understand this page, we recommend you first read up on [transactions] ## What is Proof-of-work (PoW)? {#what-is-pow} -Proof-of-work is the mechanism that once allowed the decentralized Ethereum network to come to consensus (i.e. all nodes agree) on things like account balances and the order of transactions. This prevented users from "double spending" their coins and ensured that the Ethereum chain was tremendously difficult to attack or manipulate. These security properties now come from proof-of-stake instead. +Nakamoto consensus, which utilizes proof-of-work, is the mechanism that once allowed the decentralized Ethereum network to come to consensus (i.e. all nodes agree) on things like account balances and the order of transactions. This prevented users from "double spending" their coins and ensured that the Ethereum chain was tremendously difficult to attack or manipulate. These security properties now come from proof-of-stake instead using the consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/). ## Proof-of-work and mining {#pow-and-mining} @@ -27,7 +27,7 @@ Proof-of-work is the underlying algorithm that sets the difficulty and rules for ## How did Ethereum's proof-of-work work? {#how-it-works} -Ethereum transactions are processed into blocks. In proof-of-work Ethereum, each block contained: +Ethereum transactions are processed into blocks. In the now-deprecated proof-of-work Ethereum, each block contained: - block difficulty – for example: 3,324,092,183,262,715 - mixHash – for example: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` @@ -39,7 +39,7 @@ This block data was directly related to proof-of-work. The proof-of-work protocol, Ethash, required miners to go through an intense race of trial and error to find the nonce for a block. Only blocks with a valid nonce could be added to the chain. -When racing to create a block, a miner repeatedly put a dataset, that could only be obtained by downloading and running the full chain (as a miner does), through a mathematical function. The dataset was used to generate a mixHash below a target nonce, as dictated by the block difficulty. The best way to do this is through trial and error. +When racing to create a block, a miner repeatedly put a dataset, that could only be obtained by downloading and running the full chain (as a miner does), through a mathematical function. The dataset was used to generate a mixHash below a target that is dictated by the block difficulty. The best way to do this is through trial and error. The difficulty determined the target for the hash. The lower the target, the smaller the set of valid hashes. Once generated, this was incredibly easy for other miners and clients to verify. Even if one transaction were to change, the hash would be completely different, signalling fraud. @@ -47,7 +47,7 @@ Hashing makes fraud easy to spot. But proof-of-work as a process was also a big ### Proof-of-work and security {#security} -Miners were incentivised to do this work on the main Ethereum chain. There was little incentive for a subset of miners to start their own chain – it undermines the system. Blockchains rely on having a single state as a source of truth. +Miners were incentivized to do this work on the main Ethereum chain. There was little incentive for a subset of miners to start their own chain—it undermines the system. Blockchains rely on having a single state as a source of truth. The objective of proof-of-work was to extend the chain. The longest chain was most believable as the valid one because it had the most computational work done to generate it. Within Ethereum's PoW system, it was nearly impossible to create new blocks that erase transactions, create fake ones, or maintain a second chain. That's because a malicious miner would have needed to always solve the block nonce faster than everyone else. @@ -57,7 +57,7 @@ To consistently create malicious yet valid blocks, a malicious miner would have Proof-of-work was also responsible for issuing new currency into the system and incentivizing miners to do the work. -Miners who successfully create a block were rewarded with two freshly minted ETH and part of the transaction fees. 1.75 ETH was also paid for an uncle block. Uncle blocks are valid blocks created by a miner practically at the same time as another miner mined the successful block. Uncle blocks usually happen due to network latency. +Since the [Constantinople upgrade](/history/#constantinople), miners who successfully create a block were rewarded with two freshly minted ETH and part of the transaction fees. Ommer blocks also compensated 1.75 ETH. Ommer blocks were valid blocks created by a miner practically at the same time as another miner created the canonical block, which was ultimately determined by which chain was built on top of first. Ommer blocks usually happened due to network latency. ## Finality {#finality} @@ -65,11 +65,11 @@ A transaction has "finality" on Ethereum when it's part of a block that can't ch Because miners worked in a decentralized way, two valid blocks could be mined at the same time. This creates a temporary fork. Eventually, one of these chains became the accepted chain after subsequent blocks were mined and added to it, making it longer. -But to complicate things further, transactions rejected on the temporary fork may have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. For Ethereum, the recommended time was six blocks or just over 1 minute. After six blocks, there was high confidence that the transaction was successful - lonmgher waits gave higher confidence. Now, with proof-of-stake, finalization is an explicit, rather than probabilistic, property of a block. +To complicate things further, transactions rejected on the temporary fork may not have been included in the accepted chain. This means it could get reversed. So finality refers to the time you should wait before considering a transaction irreversible. Under the previous proof-of-work Ethereum, the more blocks were mined on top of a specific block `N`, the higher confidence that the transactions in `N` were successful and would not be reverted. Now, with proof-of-stake, finalization is an explicit, rather than probabilistic, property of a block. ## Proof-of-work energy-usage {#energy} -A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumed large amounts of energy. Shortly before switching to proof-of-stake, Ethereum miners were collectively consuming about 70 TWh/yr (about the same as the Czech Republic - according to [digiconomist](digiconomist.net) on 18/07/22). +A major criticism of proof-of-work is the amount of energy output required to keep the network safe. To maintain security and decentralization, Ethereum on proof-of-work consumed large amounts of energy. Shortly before switching to proof-of-stake, Ethereum miners were collectively consuming about 70 TWh/yr (about the same as the Czech Republic - according to [digiconomist](digiconomist.net) on 18-July-2022). ## Pros and cons {#pros-and-cons} From 3a484bb0c6430ab5ed124e5e431ab03a0e6168fa Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:00:29 +0100 Subject: [PATCH 034/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../docs/consensus-mechanisms/pow/mining/index.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 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 9c1a47f5f51..10929b7b665 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -6,10 +6,9 @@ sidebar: true --- - Proof-of-work is no longer Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! - ## 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/). @@ -18,11 +17,11 @@ To better understand this page, we recommend you first read up on [transactions] Mining is the process of creating a block of transactions to be added to the Ethereum blockchain in Ethereum's now-deprecated proof-of-work architecture. -The word mining originates in the context of the gold analogy for crypto currencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume in a proof-of-work system is through mining. In proof-of-work Ethereum, the only mode of issuance was via mining. Unlike gold or precious metals however, Ethereum mining was also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. +The word mining originates in the context of the gold analogy for cryptocurrencies. Gold or precious metals are scarce, so are digital tokens, and the only way to increase the total volume in a proof-of-work system is through mining. In proof-of-work Ethereum, the only mode of issuance was via mining. Unlike gold or precious metals however, Ethereum mining was also the way to secure the network by creating, verifying, publishing and propagating blocks in the blockchain. Mining ether = Securing the Network -Mining is the lifeblood of proof-of-work. Ethereum miners - computers running software - used their time and computation power to process transactions and produce blocks. +Mining is the lifeblood of any proof-of-work blockchain. Ethereum miners - computers running software - used their time and computation power to process transactions and produce blocks prior to the transition to proof-of-stake. ## Why do miners exist? {#why-do-miners-exist} @@ -30,13 +29,13 @@ In decentralized systems like Ethereum, we need to ensure that everyone agrees o [More on proof-of-work](/developers/docs/consensus-mechanisms/pow/) -Anyone could mine on the Ethereum network using their computer. However, not everyone could mine ether (ETH) profitably. In most cases, miners had to purchase dedicated computer hardware. The average computer was unlikely to earn enough block rewards to cover the associated costs of mining. +Anyone was previously able to mine on the Ethereum network using their computer. However, not everyone could mine ether (ETH) profitably. In most cases, miners had to purchase dedicated computer hardware, and have access to inexpensive energy sources. The average computer was unlikely to earn enough block rewards to cover the associated costs of mining. ### Cost of mining {#cost-of-mining} - Potential costs of the hardware necessary to build and maintain a mining rig - Electrical cost of powering the mining rig -- If you were mining in a pool, mining pools typically charge a flat % fee of each block generated by the pool +- If you were mining in a pool, these pools typically charged a flat % fee of each block generated by the pool - Potential cost of equipment to support mining rig (ventilation, energy monitoring, electrical wiring, etc.) To further explore mining profitability, use a mining calculator, such as the one [Etherscan](https://etherscan.io/ether-mining-calculator) provides. @@ -64,9 +63,9 @@ Watch Austin walk you through mining and the proof-of-work blockchain. ## The mining algorithm {#mining-algorithm} -Ethereum Mainnet onyl ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). +Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). -The algorithm is based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger-part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This has high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). ASICs for Ethereum mining were eventually developed, but the majority of mining on Ethereum was nevertheless done using GPUs. +The algorithm is based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This has high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). ASICs for Ethereum mining were eventually developed, but the majority of mining on Ethereum was nevertheless done using GPUs. More information on these mining algorithms is available at our [mining algorithms page](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). From f56697e020fa43ba3c32047861020bcf43a5e8f3 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:02:56 +0100 Subject: [PATCH 035/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../consensus-mechanisms/pow/mining-algorithms/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 e7a444f933c..4b8bea458a5 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 @@ -7,11 +7,11 @@ preMergeBanner: true --- - Proof-of-work is no longer Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! -Ethereum mining used an algorithm known as Ethash. The fundamental idea of the algorithm 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. +Ethereum mining used an algorithm known as Ethash. The fundamental idea of the algorithm is that a miner tries to find a nonce input using brute force computation so that the resulting hash is smaller than a threshold determined by the calculated difficulty. This difficulty level can be dynamically adjusted, allowing block production to happen at a regular interval. ## Prerequisites {#prerequisites} @@ -31,7 +31,7 @@ More on [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining-algo ## Ethash {#ethash} -Ethash the mining algorithm that was actually used on the real Ethereum Mainnet. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum Mainnet only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. +Ethash was the mining algorithm that was actually used on the real Ethereum Mainnet under the now deprecated proof-of-work architecture. Ethash was effectively a new name given to a specific version of Dagger-Hashimoto after the algorithm got significantly updated, whilst still inheriting the fundamental principles of its predecessor. Ethereum Mainnet only ever used Ethash - Dagger Hashimoto was an R&D version of the mining algorithm that was superseded before mining started on Ethereum mainnet. [More on Ethash](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash). From 6308a2625df517c12e31f9ce7dc744d49d6bb4c1 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:04:10 +0100 Subject: [PATCH 036/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/gas/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/developers/docs/gas/index.md b/src/content/developers/docs/gas/index.md index 74e90bc8eba..e89691815d7 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -31,16 +31,16 @@ Calculating the total transaction fee works as follows: `Gas units (limit) * (Base fee + Tip)` -Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 100 gwei. Jordan includes a tip of 10 gwei. +Let's say Jordan has to pay Taylor 1 ETH. In the transaction, the gas limit is 21,000 units and the base fee is 10 gwei. Jordan includes a tip of 2 gwei. Using the formula above we can calculate this as -`21,000 * (100 + 10) = 2,310,000 gwei` or 0.00231 ETH. +`21,000 * (10 + 2) = 252,000 gwei` or 0.000252 ETH. -When Jordan sends the money, 1.00231 ETH will be deducted from Jordan's account. +When Jordan sends the money, 1.000252 ETH will be deducted from Jordan's account. Taylor will be credited 1.0000 ETH. -Validator receives the tip of 0.00021 ETH. -Base fee of 0.0021 ETH is burned. +Validator receives the tip of 0.000042 ETH. +Base fee of 0.00021 ETH is burned. Additionally, Jordan can also set a max fee (`maxFeePerGas`) for the transaction. The difference between the max fee and the actual fee is refunded to Jordan, i.e. `refund = max fee - (base fee + priority fee)`. Jordan can set a maximum amount to pay for the transaction to execute and not worry about overpaying "beyond" the base fee when the transaction is executed. From 85a2c2d59f018249bcb004501a0efc68e3f85c54 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:10:44 +0100 Subject: [PATCH 037/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../pow/mining-algorithms/ethash/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a7a89f53548..22a6ee8230f 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 @@ -6,14 +6,14 @@ sidebar: true --- - Ethash is Ethereum's proof-of-work mining algorithm. Proof-of-work has now been **switched off entirely** and Ethereum is now secured using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + Ethash was Ethereum's proof-of-work mining algorithm. Proof-of-work has now been **switched off entirely** and Ethereum is now secured using [proof-of-stake](/developers/docs/consensus-mechanisms/pos) instead. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! [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. Ethash ASICs were eventually developed but GPU mining was still a viable option until proof-of-work was switched off. Ethash is still used to mine other coins on other non-Ethereum proof-of-work networks. ## How does Ethash work? {#how-does-ethash-work} -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. +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 87aa0b346cfe50a36e5891399478ac1cdc6207de Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:24:37 +0100 Subject: [PATCH 038/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/staking/pools/index.md | 2 +- src/content/staking/saas/index.md | 2 -- src/content/staking/solo/index.md | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index 2fafcf9b19f..51749893ee4 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -69,7 +69,7 @@ Typically ERC-20 liquidity tokens are issued to stakers that represents the valu Currently, withdrawing funds from an Ethereum validator is not possible, which limits the ability to actually redeem your liquidity token for the ETH rewards locked in the consensus layer. -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 staking contract. +Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, allowing you to sell your staking position, effectively "withdrawing" without actually removing ETH from the staking contract. diff --git a/src/content/staking/saas/index.md b/src/content/staking/saas/index.md index 34de01d1bc3..fd4fcc9b764 100644 --- a/src/content/staking/saas/index.md +++ b/src/content/staking/saas/index.md @@ -79,8 +79,6 @@ All of these keys can always be regenerated in a reproducible manner using your When you stake 32 ETH with a SaaS provider, that ETH is still deposited to the official staking deposit contract. As such, SaaS stakers are currently limited by the same withdrawal restrictions as solo stakers. This means that staking your ETH is currently a one-way deposit. This will be the case until the Shanghai upgrade. - - 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. diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 14232b6a67f..0fcf330cac5 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -58,7 +58,7 @@ As much as we wish that solo staking was accessible and risk free to everyone, t

Ethereum security and scam prevention

- Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the Shanghai upgrade. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. + Withdrawing staked ETH or rewards from a validator balance is not yet supported. Support for withdrawals are planned for the upcoming Shanghai upgrade. You should anticipate your ETH being locked for at least one-to-two years. After the Shanghai upgrade you will be able to freely withdraw portions or all of your stake if you wish. Hardware occasionally fails, network connections error out, and client software occasionally needs upgrading. Node maintenance is inevitable and will occasionally require your attention. You'll want to be sure you stay aware of any anticipated network upgrades, or other critical client upgrades. From 6e96ee262d297233995d279a2eb3787c0e5e6fd5 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:46:22 +0100 Subject: [PATCH 039/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/consensus-mechanisms/pos/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/index.md b/src/content/developers/docs/consensus-mechanisms/pos/index.md index f8ee157dccd..2d29321ad7f 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Proof-of-stake (PoS) is Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous consensus mechanism, [proof-of-work](/developers/docs/consensus-mechanisms/pow). +Proof-of-stake (PoS) underlies Ethereum's [consensus mechanism](/developers/docs/consensus-mechanisms/). Ethereum switched on its proof-of-stake mechanism in 2022 because it is more secure, less energy-intensive, and better for implementing new scaling solutions compared to the previous [proof-of-work](/developers/docs/consensus-mechanisms/pow) architecture. ## Prerequisites {#prerequisites} @@ -13,7 +13,7 @@ To better understand this page, we recommend you first read up on [consensus mec ## What is proof-of-stake (PoS)? {#what-is-pos} -Proof-of-stake is a type of [consensus mechanism](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. In proof-of-stake, validators explicitly stake capital in the form of ETH into a smart contract on Ethereum. This staked ETH then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. +Proof-of-stake underlies certain [consensus mechanisms](/developers/docs/consensus-mechanisms/) used by blockchains to achieve distributed consensus. In proof-of-work, miners prove they have capital at risk by expending energy. Ethereum uses proof-of-stake, where validators explicitly stake capital in the form of ETH into a smart contract on Ethereum. This staked ETH then acts as collateral that can be destroyed if the validator behaves dishonestly or lazily. The validator is then responsible for checking that new blocks propagated over the network are valid and occasionally creating and propagating new blocks themselves. Proof-of-stake comes with a number of improvements to the now-deprecated proof-of-work system: From 75283e7332e985b60750d8bfbeb04aba85d80ea3 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 25 Jul 2022 09:10:02 -0700 Subject: [PATCH 040/183] Apply suggestions from code review --- src/content/developers/docs/intro-to-ethereum/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index be6a55ff38e..e09b9b89a94 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -16,7 +16,7 @@ A blockchain is a public database that is updated and shared across many compute Every computer in the network must agree upon each new block and the chain as a whole. These computers are known as "nodes". Nodes ensure everyone interacting with the blockchain has the same data. To accomplish this distributed agreement, blockchains need a consensus mechanism. -Ethereum uses a proof-of-stake based consensus mechanism. This means that anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then have a chance of being randomly selected to propose blocks that other validators check and add to the blockchain. In this model there is usually only one chain, but network latency and dishoinest behaviour can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. +Ethereum uses a proof-of-stake based consensus mechanism. This means that anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then have a chance of being randomly selected to propose blocks that other validators check and add to the blockchain. In this model there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos). @@ -28,7 +28,7 @@ Watch Anders explain hashes in blockchains: ## What is Ethereum? {#what-is-ethereum} -Ethereum is a blockchain with a computer embedded in it. It serves as the foundation for building apps and organizations is a decentralized, permissionless, censorship resistant way. +Ethereum is a blockchain with a computer embedded in it. It serves as the foundation for building apps and organizations in a decentralized, permissionless, censorship resistant way. In the Ethereum universe, there is a single, canonical computer (called the Ethereum Virtual Machine, or EVM) whose state everyone on the Ethereum network agrees on. Everyone who participates in the Ethereum network (every Ethereum node) keeps a copy of the state of this computer. Additionally, any participant can broadcast a request for this computer to perform arbitrary computation. Whenever such a request is broadcast, other participants on the network verify, validate, and carry out ("execute") the computation. This execution causes a state change in the EVM, which is committed and propagated throughout the entire network. @@ -44,7 +44,7 @@ Any participant who broadcasts a transaction request must also offer some amount The amount of ETH paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. -ETH is also used to provide crypto-economic security to the network, in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behaviour by other validators; 2) It is staked by validators, acting as collateral against dishionest behaviour - if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. +ETH is also used to provide crypto-economic security to the network, in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behavior by other validators; 2) It is staked by validators, acting as collateral against dishonest behavior—if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. ## What are smart contracts? {#what-are-smart-contracts} From 997ec1201cf5c0dec6639c247abc1324962111bf Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 26 Jul 2022 09:51:56 +0100 Subject: [PATCH 041/183] update index, revert intl changes --- 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 e0d4a255bb2..d508dfe6208 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -34,7 +34,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 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. +Ether is minted as a reward for each block proposed, and also at every epoch checkpoint for other validator activity related to reaching consensus. The total amount issued depends on the number of validators and how much ether they have staked. This total issuance is divided equally among validators in the ideal case that all validators are honest and online, but in reality it varies based on validator performance. About 1/8 of the total issuance goes to the block proposer, the remainder is distributed across the other validators. Block proposers also receive tips from transaction fees and MEV related income but these come from recycled ether, not fresh issuance. ## Burning ether {#burning-ether} From 35450d1b39020aae2f530ac6a7cb21c272e08b2c Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 26 Jul 2022 09:57:31 +0100 Subject: [PATCH 042/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../docs/consensus-mechanisms/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index 767f886c805..cafed97daa3 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -The term 'consensus mechanism' is often used colloquially to refer to 'proof-of-stake', 'proof-of-work' or 'proof-of-authority' protocols.However, these are just components in consensus mechanisms that protect against Sybil attacks. Consensus mechanisms are the complete stack of ideas, protocols and incentives that enable a distributed set of nodes to agree on the state of a blockchain. +The term 'consensus mechanism' is often used colloquially to refer to 'proof-of-stake', 'proof-of-work' or 'proof-of-authority' protocols. However, these are just components in consensus mechanisms that protect against Sybil attacks. Consensus mechanisms are the complete stack of ideas, protocols and incentives that enable a distributed set of nodes to agree on the state of a blockchain. ## Prerequisites {#prerequisites} @@ -13,7 +13,7 @@ To better understand this page, we recommend you first read our [introduction to ## What is consensus? {#what-is-consensus} -By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. In the extreme case the group will eventually split. +By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. If there is disagreement, the group must have a means to decide which film to see. In the extreme case the group will eventually split. In regards to the Ethereum blockchain, the process is formalized, and reaching consensus means that at least 66% of the nodes on the network agree on the global state of the network. @@ -21,7 +21,7 @@ In regards to the Ethereum blockchain, the process is formalized, and reaching c The term consensus mechanism refers to the entire stack of protocols, incentives and ideas that allow a network of nodes to come to agreement about the state of a blockchain. -Ethereum uses a proof-of-stake based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital staked by validators. This incentive structure encourages individual validators to act honestly, punishes those that don't, and also creates an extremely high cost to attack the network. +Ethereum uses a proof-of-stake based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital locked by stakers. This incentive structure encourages individual stakers to operate honest validators, punishes those that don't, and also creates an extremely high cost to attack the network. Then, there is a protocol that governs how honest validators are selected to propose or validate blocks, process transactions and vote for their view of the head of the chain. In the rare situations where there are multiple blocks in the same position near the head of the chain, there is a fork-choice mechanism that selects blocks that make up the 'heaviest' chain, measured by the number of validators that voted for the blocks weighted by thier staked ether balance. @@ -37,7 +37,7 @@ Like Bitcoin, Ethereum once used a **proof-of-work (PoW)** based consensus proto #### Block creation {#pow-block-creation} -Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest – this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". The true head of the chain is then determined byh a fork-choice rule that selects the set of blocks that have had the most work done to mine them. +Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest—this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". The true head of the chain is then determined by a fork-choice rule that selects the set of blocks that have had the most work done to mine them. #### Security {#pow-security} @@ -47,7 +47,7 @@ More on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) ### Proof-of-stake based {#proof-of-stake} -Ethereum now uses a **proof-of-stake (PoS)** consensus protocol. +Ethereum now uses a **proof-of-stake (PoS)** based consensus protocol. #### Block creation {#pos-block-creation} @@ -55,7 +55,7 @@ Proof-of-stake is done by validators who have staked ETH to participate in the s #### Security {#pos-security} -A proof-of-stake system is kept secure crypto-economically because a huge amount of ether must be destroyed by an attacker attempting to take control of the chain. A system of rewards an penalties incentivize individual miners to behave honestly. +A proof-of-stake system is kept secure crypto-economically because a huge amount of ether must be destroyed by an attacker attempting to take control of the chain. A system of rewards incentivizes individual stakers to behave honestly, and penalties disincentivize stakers from acting maliciously. More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) @@ -67,13 +67,13 @@ Watch more on the different types of consensus mechanisms used on Ethereum: ### Sybil resistance & chain selection {#sybil-chain} -As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (a.k.a fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. +As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (aka fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. **Sybil resistance** measures how a protocol fares against a [Sybil attack](https://wikipedia.org/wiki/Sybil_attack). Sybil attacks are when one user or group pretends to be many users. Resistance to this type of attack is essential for a decentralized blockchain and enables miners and validators to be rewarded equally based on resources put in. Proof-of-work and proof-of-stake protect against this by making users expend a lot of energy or put up a lot of collateral. These protections are an economic deterrent to Sybil attacks. A **chain selection rule** is used to decide which chain is the "correct" chain. Bitcoin uses the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. Ethereum used to use the longest chain rule too; however, now that Etheruem runs on proof-of-stake it adopted an updated fork-choice algorithm that measures the 'weight' of the chain. The weight is the accumulated sum of validator votes, weighted by validator staked-ether balances. -Ethereum uses a consensus mechanism that combines [Casper FFG](https://arxiv.org/abs/1710.09437) proof-of-stake with the [GHOST](https://arxiv.org/abs/2003.03052) fork-choice rule. +Ethereum uses a consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) that combines [Casper FFG](https://arxiv.org/abs/1710.09437) proof-of-stake with the [GHOST](https://arxiv.org/abs/2003.03052) fork-choice rule. ## Further reading {#further-reading} From 1d94e044fc6b07b7deb4ddff0a3f5bcda16b2ae7 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 26 Jul 2022 10:03:12 +0100 Subject: [PATCH 043/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 7baca5f4dfe..430731cc2d2 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -7,27 +7,27 @@ sidebar: true image: ../../../assets/upgrades/merge.png summaryPoint1: Ethereum Mainnet uses proof-of-stake, but this wasn't always the case. summaryPoint2: The transition from the original proof-of-work mechanism to proof-of-stake was called The Merge. -summaryPoint3: The Merge refers to the original Ethereum Mainnet becoming part of a separate proof-of0-stake blockchain called the Beacon Chain. +summaryPoint3: The Merge refers to the original Ethereum Mainnet becoming part of a separate proof-of-stake blockchain called the Beacon Chain, now existing as one chain. summaryPoint4: The Merge reduced Ethereum's energy consumption by ~99.95%. --- ## What was The Merge? {#what-is-the-merge} -The Merge was the joining of the original execution layer of Ethereum (the Mainnet we use today) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminated the need for energy-intensive mining and instead enabled the the network to be secured using staked ETH. It was a truly exciting step in realizing the Ethereum vision – more scalability, security, and sustainability. +The Merge was the joining of the original execution layer of Ethereum (the Mainnet that has existed since [genesis](/history/#frontier)) with its new proof-of-stake consensus layer, the Beacon Chain. It eliminated the need for energy-intensive mining and instead enabled the the network to be secured using staked ETH. It was a truly exciting step in realizing the Ethereum vision—more scalability, security, and sustainability. 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 - continued to be secured by [proof-of-work](/developers/docs/consensus-mechanisms/pow/), even while the Beacon Chain ran in parallel using [proof-of-stake](/developers/docs/consensus-mechanisms/pos/). The Merge was when these two systems finally came together, and proof-of-work was permanently replaced by proof-of-stake. -Imagine Ethereum is a spaceship that wasn't quite ready for an interstellar voyage. With the Beacon Chain, the community built a new engine and a hardened hull. After significant testing, it became time to hot-swap the new engine for the old one mid-flight. This merged the new, more efficient engine into the existing ship enabling it to put in some serious lightyears and take on the universe. +Imagine Ethereum is a spaceship that launched before it was quite ready for an interstellar voyage. With the Beacon Chain, the community built a new engine and a hardened hull. After significant testing, it became time to hot-swap the new engine for the old one mid-flight. This merged the new, more efficient engine into the existing ship enabling it to put in some serious lightyears and take on the universe. ## Merging with Mainnet {#merging-with-mainnet} -Proof-of-work secured Ethereum Mainnet from genesis until The Merge. This allowed the Ethereum blockchain we're all used to to come into existence in July 2015 with all its familiar features - transactions, smart contracts, accounts, etc. +Proof-of-work secured Ethereum Mainnet from genesis until The Merge. This allowed the Ethereum blockchain we're all used to to come into existence in July 2015 with all its familiar features—transactions, smart contracts, accounts, etc. -Throughout Ethereum's history, developers have prepared for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created as a separate blockchain to Mainnet, running in parallel. +Throughout Ethereum's history, developers prepared for an eventual transition away from proof-of-work to proof-of-stake. On December 1, 2020, the Beacon Chain was created as a separate blockchain to Mainnet, running in parallel. -The Beacon Chain was not processing Mainnet transactions. Instead, it was reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, it became time for the Beacon Chain to reach consensus on real world data. After The Merge, the Beacon Chain became the consensus engine for all network data, including execution layer transactions and account balances. +The Beacon Chain was not originally processing Mainnet transactions. Instead, it was reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, it became time for the Beacon Chain to reach consensus on real world data. After The Merge, the Beacon Chain became the consensus engine for all network data, including execution layer transactions and account balances. The Merge represented the official switch to using the Beacon Chain as the engine of block production. Mining is no longer be the means of producing valid blocks. Instead, the proof-of-stake validators have adopted this role and are now responsible for processing the validity of all transactions and proposing blocks. @@ -41,7 +41,7 @@ This transition to proof-of-stake changed the way ether is issued. Learn more ab **The Merge did not change anything for holders/users.** -_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 to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before - people tellign you otherwise are likely scammers. +_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 to account for The Merge.** ETH is just ETH. There is no such thing as "old ETH"/"new ETH" or "ETH1"/"ETH2" and wallets work exactly the same after The Merge as they did before—people telling you otherwise are likely scammers. Despite swapping out proof-of-work, the entire history of Ethereum since genesis remained intact and unaltered by the transition to proof-of-stake. Any funds held in your wallet before The Merge will are still accessible after The Merge. **No action is required to upgrade on your part.** @@ -56,8 +56,8 @@ id="staking-node-operators"> Key action items include: -1. Run _both_ a consensus layer client and an execution layer client; third-party endpoints to obtain execution data no longer work since The Merge. -2. Authenticate both execution layer and consensus layer clients with a shared JWT secret so they can securely communicate. +1. Run _both_ a consensus client and an execution client; third-party endpoints to obtain execution data no longer work since The Merge. +2. Authenticate both execution and consensus clients with a shared JWT secret so they can securely communicate. 3. Set a `fee recipient` address to receive your earned transaction fee tips/MEV. Not completing the first two items above items will result in your node being seen as "offline" until both layers are synced and authenticated. @@ -69,13 +69,13 @@ title="Non-validating node operators and infrastructure providers" contentPreview="If you're operating a non-validating Ethereum node, the most significant change that came with The Merge was the requirement to run clients for BOTH the execution layer AND the consensus layer." id="node-operators"> -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 now also also depends on the validity of the "consensus block" it is contained within. +Up until The Merge, an execution client (such as Geth, Erigon, Besu or Nethermind) 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 now also also depends on the validity of the "consensus block" it is contained within. -As a result, a full Ethereum node now 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. +As a result, a full Ethereum node now requires both an execution client and a consensus 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 +- Install a consensus client in addition to an execution client - Authenticate execution and consensus clients with a shared JWT secret so they can securely communicate with one another. Not completing the above items will result in your node appearing to be "offline" until both layers are synced and authenticated. @@ -110,7 +110,7 @@ The Merge also set the stage for further scalability upgrades not possible under +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 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. @@ -138,7 +138,7 @@ title="Misconception: "Transactions are noticeably faster after The Merge.& contentPreview="False. Though some slight changes exist, transaction speed is mostly remain the same on layer 1."> 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, on proof-of-work, the target was to have a new block every ~13.3 seconds. Under proof-of-stake, 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). In proof-of-stake blocks are be produced ~10% more frequently than on proof-of-work. This is a fairly insignificant change and is unlikely to be noticed by users. +Historically, on proof-of-work, the target was to have a new block every ~13.3 seconds. Under proof-of-stake, 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). In proof-of-stake, blocks are produced ~10% more frequently than on proof-of-work. This was a fairly insignificant change and is unlikely to be noticed by users. Proof-of-stake introduced the transaction finality concept that did not previously exist. In 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. @@ -147,12 +147,12 @@ Proof-of-stake introduced the transaction finality concept that did not previous -Staked ETH and staking rewards continue to be locked without the ability to withdraw. Withdrawals are planned for the Shanghai upgrade. +Staked ETH and staking rewards continue to be locked without the ability to withdraw. Withdrawals are planned for the upcoming Shanghai upgrade. +contentPreview="False. Fee tips/MEV are credited to a non-staking 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 DO have immediate access to the fee rewards/MEV earned during block proposals. The protocol issues ETH as a reward to validators for contributing to consensus. The validator nominates an account to receive 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. @@ -190,7 +190,7 @@ 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 original Mainnet execution layer. Since the Merge, validators are assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) is no longer a valid means of block production. +The Merge represents the formal adoption of the Beacon Chain as the new consensus layer to the original Mainnet execution layer. Since The Merge, validators are assigned to secure Ethereum Mainnet, and mining on [proof-of-work](/developers/docs/consensus-mechanisms/pow/) is no longer a valid means of block production. Blocks are instead proposed by validating nodes that have staked ETH in return for the right to participate in consensus. These upgrades set the stage for future scalability upgrades, including sharding. From 1a433f8c51ca59c16d130cb197771683020087de Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 26 Jul 2022 10:13:57 +0100 Subject: [PATCH 044/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/upgrades/merge/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/upgrades/merge/index.md b/src/content/upgrades/merge/index.md index 430731cc2d2..68174231812 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -134,8 +134,8 @@ With a [rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centri +title="Misconception: "Transactions were accelerated substantially by The Merge."" +contentPreview="False. Though some slight changes exist, transaction speed is mostly the same on layer 1 now as it was before The Merge."> 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, on proof-of-work, the target was to have a new block every ~13.3 seconds. Under proof-of-stake, 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). In proof-of-stake, blocks are produced ~10% more frequently than on proof-of-work. This was a fairly insignificant change and is unlikely to be noticed by users. @@ -155,7 +155,7 @@ title="Misconception: "Validators will not receive any liquid ETH rewards t contentPreview="False. Fee tips/MEV are credited to a non-staking 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 DO have immediate access to the fee rewards/MEV earned during block proposals. -The protocol issues ETH as a reward to validators for contributing to consensus. The validator nominates an account to receive 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. +The protocol issues ETH as a reward to validators for contributing to consensus. The consensus layer 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 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). From 7bfc549038142a26ff17f991b58d99acf140d430 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 26 Jul 2022 16:05:12 +0100 Subject: [PATCH 045/183] update networks page --- src/content/developers/docs/networks/index.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index bbd409ec25e..f0fdd45de60 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -30,15 +30,13 @@ In addition to Mainnet, there are public testnets. These are networks used by pr You should test any contract code you write on a testnet before deploying to Mainnet. Among dapps that integrate with existing smart contracts, most projects have copies deployed to testnets. -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. Testnets do not incentivize proof-of-work mining, which can leave them 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. +Most testnets started by using 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. Alternatively, some testnets started off using a proof-of-work consensus mechanism with just a few permissioned miners. However, in preparation for [The Merge](/upgrades/merge), these testnets underwent their own transitions to proof-of-stake, offering the opportunity for multiple 'dress-rehearsals' before developers merged Ethereum Mainnet. The Ethereum testnets are now proof-of-stake, just like Ethereum Mainnet. 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. 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. +Originally a proof-of-work testnet, now proof-of-stake. Sepolia is still running but it might not be maintained long term. - [Website](https://sepolia.dev/) - [GitHub](https://github.com/goerli/sepolia) @@ -52,7 +50,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. Goerli is expected to be maintained long term as a proof-of-stake testnet. +Originally a proof-of-authority testnet, now proof-of-stake. Goerli is expected to be maintained long term as a stable testnet for application developers. - [Website](https://goerli.net/) - [GitHub](https://github.com/goerli/testnet) @@ -68,7 +66,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 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. +Ropsten was a proof-of-work testnet that went through The Merge to proof-of-stake in May 2022. It is likely to deprecated soon. ##### Ropsten faucets From d81603002d3a28be5596ea6bc397d8a983025dd5 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 26 Jul 2022 16:16:51 +0100 Subject: [PATCH 046/183] update client diversity page --- .../docs/nodes-and-clients/client-diversity/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 80e3a73e919..43528c23a07 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 @@ -11,7 +11,7 @@ The behavior of an Ethereum node is controlled by the client software it runs. T ## 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/). The Beacon Chain is explained [here](/upgrades/beacon-chain/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. +If you don't already have an understanding of what nodes and clients are, check out [nodes and clients](/developers/docs/nodes-and-clients/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. ## Why are there multiple clients? {#why-multiple-clients} @@ -31,11 +31,11 @@ Client diversity also offers resilience to attacks. For example, an attack that ### Proof-of-stake finality {#finality} -Ethereum has had 100% uptime since the network began. After The Merge, the risks caused by poor client diversity become more alarming. A critical bug in a consensus client with over 33% of the Ethereum nodes could prevent the Beacon Chain from finalizing, causing Ethereum to go offline. +A bug in a consensus client with over 33% of the Ethereum nodes could prevent the Beacon Chain from finalizing, meaning users could not trust that transactions would not be reverted or changed at some point. This would be very problematic for many of the apps built on top of Ethereum, particularly DeFi. Worse still, a critical bug in a client with a two-thirds majority could cause the chain to incorrectly split and finalize, leading to a large set of validators getting stuck on an invalid chain. If they want to rejoin the correct chain, these validators face slashing or a slow and expensive voluntary withdrawal and reactivation. The magnitude of a slashing scales with the number of culpable nodes with a two-thirds majority slashed maximally (32 ETH). -Although these are unlikely scenarios, the Ethereum eco-system can mitigate their risk by evening out the distribution of clients across the active nodes. Ideally, no consensus client would ever have more than a 33% share of the total nodes. +Although these are unlikely scenarios, the Ethereum eco-system can mitigate their risk by evening out the distribution of clients across the active nodes. Ideally, no consensus client would ever reach a 33% share of the total nodes. ### Shared responsibility {#responsibility} From 3db743031bb3441b849075fa4872cf4dcc74d1c1 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 26 Jul 2022 16:42:15 +0100 Subject: [PATCH 047/183] update mev page --- src/content/developers/docs/mev/index.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 65ea0f9f728..79d6526c17f 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -10,19 +10,19 @@ 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 no longer valid. "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, since the transition to proof-of-stake via [The Merge](/upgrades/merge) validators have been responsible for these roles, and mining is no longer part of the Ethereum protocol. The value extraction methods still exist, though, so the term "Maximal extractable value" is now used instead. ## Prerequisites {#prerequisites} -Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), [gas](/developers/docs/gas/), and [mining](/developers/docs/consensus-mechanisms/pow/mining/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. +Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/) and [gas](/developers/docs/gas/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. ## MEV extraction {#mev-extraction} -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. +In theory MEV accrues entirely to 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/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). +Validators do get a portion of the full MEV amount anyway because searchers are willing to pay high gas fees (which go to the 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/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. +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 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} @@ -36,9 +36,7 @@ Rather than programming complex algorithms to detect profitable MEV opportunitie ### Flashbots {#mev-extraction-flashbots} -Flashbots is an independent project which extends the go-ethereum client with a service that allows searchers to submit MEV transactions to miners without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. - -As of this writing, a significant portion of MEV transactions is routed through Flashbots, meaning generalized frontrunners aren't as effective as they used to be. +Flashbots is an independent project which extends the go-ethereum client with a service that allows searchers to submit MEV transactions to validators without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. ## MEV examples {#mev-examples} @@ -104,17 +102,17 @@ At the application layer, some forms of MEV, like sandwich trading, result in an At the network layer, generalized frontrunners and the gas-price auctions they often engage in (when two or more frontrunners compete for their transaction to be included in the next block by progressively raising their own transactions' gas price) result in network congestion and high gas prices for everyone else trying to run regular transactions. -Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, miners may be incentivized to remine blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. +Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, validators may be incentivized to remine blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. -This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for miners to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. +This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for validators to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. ## State of MEV {#state-of-mev} 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/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. +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, 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 validators 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). +On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing efforst to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guarantees block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work, or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user-activity is ported away from Ethereum and onto its Layer-2 rollups and shards. ## Related resources {#related-resources} From ee88b66b970bf6692bc5cd5fe25d7ded8ad86f4a Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 27 Jul 2022 10:41:54 +0100 Subject: [PATCH 048/183] update transactions page --- .../developers/docs/transactions/index.md | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/content/developers/docs/transactions/index.md b/src/content/developers/docs/transactions/index.md index 27c7d73cfff..99450221a1c 100644 --- a/src/content/developers/docs/transactions/index.md +++ b/src/content/developers/docs/transactions/index.md @@ -19,9 +19,9 @@ An Ethereum transaction refers to an action initiated by an externally-owned acc ![Diagram showing a transaction cause state change](./tx.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ -Transactions, which change the state of the EVM, need to be broadcast to the whole network. Any node can broadcast a request for a transaction to be executed on the EVM; after this happens, a miner will execute the transaction and propagate the resulting state change to the rest of the network. +Transactions, which change the state of the EVM, need to be broadcast to the whole network. Any node can broadcast a request for a transaction to be executed on the EVM; after this happens, a validator will execute the transaction and propagate the resulting state change to the rest of the network. -Transactions require a fee and must be mined to become valid. To make this overview simpler we'll cover gas fees and mining elsewhere. +Transactions require a fee and must be included in a validated block. To make this overview simpler we'll cover gas fees and validation elsewhere. A submitted transaction includes the following information: @@ -30,10 +30,10 @@ A submitted transaction includes the following information: - `value` – amount of ETH to transfer from sender to recipient (in WEI, a denomination of ETH) - `data` – optional field to include arbitrary data - `gasLimit` – the maximum amount of gas units that can be consumed by the transaction. Units of gas represent computational steps -- `maxPriorityFeePerGas` - the maximum amount of gas to be included as a tip to the miner +- `maxPriorityFeePerGas` - the maximum amount of gas to be included as a tip to the validator - `maxFeePerGas` - the maximum amount of gas willing to be paid for the transaction (inclusive of `baseFeePerGas` and `maxPriorityFeePerGas`) -Gas is a reference to the computation required to process the transaction by a miner. Users have to pay a fee for this computation. The `gasLimit`, and `maxPriorityFeePerGas` determine the maximum transaction fee paid to the miner. [More on Gas](/developers/docs/gas/). +Gas is a reference to the computation required to process the transaction by a validator. Users have to pay a fee for this computation. The `gasLimit`, and `maxPriorityFeePerGas` determine the maximum transaction fee paid to the validator. [More on Gas](/developers/docs/gas/). The transaction object will look a little like this: @@ -158,7 +158,7 @@ Alice's account will be credited **+1.0 ETH** The base fee will be burned **-0.00399 ETH** -Miner keeps the tip **+0.000210 ETH** +Validator keeps the tip **+0.000210 ETH** Gas is required for any smart contract interaction too. @@ -174,11 +174,10 @@ Once the transaction has been submitted the following happens: 1. Once you send a transaction, cryptography generates a transaction hash: `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` 2. The transaction is then broadcast to the network and included in a pool with lots of other transactions. -3. A miner must pick your transaction and include it in a block in order to verify the transaction and consider it "successful". - - You may end up waiting at this stage if the network is busy and miners aren't able to keep up. -4. Your transaction will receive "confirmations". The number of confirmations is the number of blocks created since the block that included your transaction. The higher the number, the greater the certainty that the network processed and recognized the transaction. - - Recent blocks may get re-organized, giving the impression the transaction was unsuccessful; however, the transaction may still be valid but included in a different block. - - The probability of a re-organization diminishes with every subsequent block mined, i.e. the greater the number of confirmations, the more immutable the transaction is. +3. A validator must pick your transaction and include it in a block in order to verify the transaction and consider it "successful". +4. As time passes the block containing your transaction will be upgraded to "justified" then "finalized". These upgrades make it much + more certain that your transaction was successful and will never be altered. Once a block is "finalized" it could only ever be changed + by an attack that would cost many billions of dollars. ## A visual demo {#a-visual-demo} @@ -216,4 +215,3 @@ _Know of a community resource that helped you? Edit this page and add it!_ - [Accounts](/developers/docs/accounts/) - [Ethereum virtual machine (EVM)](/developers/docs/evm/) - [Gas](/developers/docs/gas/) -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) From fc20f7435207e14e8567ed2e017bb1364f590a3b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 27 Jul 2022 14:37:05 +0100 Subject: [PATCH 049/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/mev/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 79d6526c17f..3ea3eb129a6 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -10,11 +10,11 @@ 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, since the transition to proof-of-stake via [The Merge](/upgrades/merge) validators have been responsible for these roles, and mining is no longer part of the Ethereum protocol. The value extraction methods still exist, though, so the term "Maximal extractable value" is now used instead. +Maximal extractable value was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, since the transition to proof-of-stake via [The Merge](/upgrades/merge) validators have been responsible for these roles, and mining is no longer part of the Ethereum protocol. The value extraction methods still exist, though, so the term "Maximal extractable value" is now used instead. ## Prerequisites {#prerequisites} -Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/) and [gas](/developers/docs/gas/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. +Make sure you're familiar with [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos) and [gas](/developers/docs/gas/). Familiarity with [dapps](/dapps/) and [DeFi](/defi/) is helpful as well. ## MEV extraction {#mev-extraction} @@ -112,7 +112,7 @@ MEV extraction ballooned in early 2021, resulting in extremely high gas prices i 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, 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 validators 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. -On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing efforst to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guarantees block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work, or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user-activity is ported away from Ethereum and onto its Layer-2 rollups and shards. +On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing effort to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guarantees block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user activity is ported away from Ethereum and onto its Layer-2 rollups and shards. ## Related resources {#related-resources} From cbc1c44e33d1adc55eebf3d88e4e34efce6e2670 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Wed, 27 Jul 2022 14:38:47 +0100 Subject: [PATCH 050/183] 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 43528c23a07..f17e541d618 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 @@ -11,7 +11,7 @@ The behavior of an Ethereum node is controlled by the client software it runs. T ## 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/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. +If you don't already understand what nodes and clients are, check out [nodes and clients](/developers/docs/nodes-and-clients/). [Execution](/glossary/#execution-layer) and [consensus](/glossary/#consensus-layer) layers are defined in the glossary. ## Why are there multiple clients? {#why-multiple-clients} From 0d4512b65775361f0d695b129060308963ab818b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:30:20 +0100 Subject: [PATCH 051/183] Apply suggestions from code review --- src/content/developers/docs/intro-to-ethereum/index.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index e09b9b89a94..83b88c3c758 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -16,9 +16,8 @@ A blockchain is a public database that is updated and shared across many compute Every computer in the network must agree upon each new block and the chain as a whole. These computers are known as "nodes". Nodes ensure everyone interacting with the blockchain has the same data. To accomplish this distributed agreement, blockchains need a consensus mechanism. -Ethereum uses a proof-of-stake based consensus mechanism. This means that anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then have a chance of being randomly selected to propose blocks that other validators check and add to the blockchain. In this model there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. +Ethereum uses a [proof-of-stake-based consensus mechanism](/developers/docs/consensus-mechanisms/pos). Anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then can be randomly selected to propose blocks that other validators check and add to the blockchain. In this model, there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. -More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos). If you want to see how blockchain hashes data and then the previous block references all the past blocks, be sure to check out [this demo](https://andersbrownworth.com/blockchain/blockchain) by Anders Brownworth and watch the accompanying video below. @@ -28,7 +27,7 @@ Watch Anders explain hashes in blockchains: ## What is Ethereum? {#what-is-ethereum} -Ethereum is a blockchain with a computer embedded in it. It serves as the foundation for building apps and organizations in a decentralized, permissionless, censorship resistant way. +Ethereum is a blockchain with a computer embedded in it. It is the foundation for building apps and organizations in a decentralized, permissionless, censorship-resistant way. In the Ethereum universe, there is a single, canonical computer (called the Ethereum Virtual Machine, or EVM) whose state everyone on the Ethereum network agrees on. Everyone who participates in the Ethereum network (every Ethereum node) keeps a copy of the state of this computer. Additionally, any participant can broadcast a request for this computer to perform arbitrary computation. Whenever such a request is broadcast, other participants on the network verify, validate, and carry out ("execute") the computation. This execution causes a state change in the EVM, which is committed and propagated throughout the entire network. @@ -40,11 +39,11 @@ Cryptographic mechanisms ensure that once transactions are verified as valid and **Ether (ETH)** is the native cryptocurrency of Ethereum. The purpose of ETH is to allow for a market for computation. Such a market provides an economic incentive for participants to verify and execute transaction requests and provide computational resources to the network. -Any participant who broadcasts a transaction request must also offer some amount of ETH to the network as a bounty. This bounty will be awarded to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. +Any participant who broadcasts a transaction request must also offer some amount of ETH to the network as a bounty. The network will award this bounty to whoever eventually does the work of verifying the transaction, executing it, committing it to the blockchain, and broadcasting it to the network. The amount of ETH paid corresponds to the time required to do the computation. These bounties also prevent malicious participants from intentionally clogging the network by requesting the execution of infinite computation or other resource-intensive scripts, as these participants must pay for computation time. -ETH is also used to provide crypto-economic security to the network, in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behavior by other validators; 2) It is staked by validators, acting as collateral against dishonest behavior—if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. +ETH is also used to provide crypto-economic security to the network in three main ways: 1) it is used as a means to reward validators who propose blocks or call out dishonest behavior by other validators; 2) It is staked by validators, acting as collateral against dishonest behavior—if validators attempt to misbehave their ETH can be destroyed; 3) it is used to weight 'votes' for newly proposed blocks, feeding into the fork-choice part of the consensus mechanism. ## What are smart contracts? {#what-are-smart-contracts} From bcc7ec3aa67d50ca1a168cf4a27c192ac68a20f4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:30:46 +0100 Subject: [PATCH 052/183] Update src/content/developers/docs/intro-to-ethereum/index.md --- src/content/developers/docs/intro-to-ethereum/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index 83b88c3c758..2f54854b5c6 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -16,7 +16,7 @@ A blockchain is a public database that is updated and shared across many compute Every computer in the network must agree upon each new block and the chain as a whole. These computers are known as "nodes". Nodes ensure everyone interacting with the blockchain has the same data. To accomplish this distributed agreement, blockchains need a consensus mechanism. -Ethereum uses a [proof-of-stake-based consensus mechanism](/developers/docs/consensus-mechanisms/pos). Anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then can be randomly selected to propose blocks that other validators check and add to the blockchain. In this model, there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. +Ethereum uses a [proof-of-stake-based consensus mechanism](/developers/docs/consensus-mechanisms/pos/). Anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then can be randomly selected to propose blocks that other validators check and add to the blockchain. In this model, there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. If you want to see how blockchain hashes data and then the previous block references all the past blocks, be sure to check out [this demo](https://andersbrownworth.com/blockchain/blockchain) by Anders Brownworth and watch the accompanying video below. From 3a08f6496e8191a4d72ab9a4f67429c445d92f93 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 27 Jul 2022 15:43:31 +0100 Subject: [PATCH 053/183] add page on pos validator keys --- .../consensus-mechanisms/pos/keys/index.md | 93 ++++++++++++++++++ .../pos/keys/multiple-keys.png | Bin 0 -> 63768 bytes .../pos/keys/validator-key-schematic.png | Bin 0 -> 85053 bytes src/data/developer-docs-links.yaml | 6 +- src/intl/en/page-developers-docs.json | 1 + 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 src/content/developers/docs/consensus-mechanisms/pos/keys/index.md create mode 100644 src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png create mode 100644 src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md new file mode 100644 index 00000000000..bb0109d8c73 --- /dev/null +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -0,0 +1,93 @@ +--- +title: Keys in proof-of-stake Ethereum +description: An explanation of keys used in Ethereum since the transition to proof-of-stake. +lang: en +sidebar: true +--- + +Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an +Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') +key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so +that it can be cryptographically proven that some actionw as approved by the holder of a specific private key. + +Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). + +However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before - there were no changes to the elliptic-curve based keys securing accounts. However, for users that wanted to participate in proof-of-stake by staking ETH and running validators, a new type of key was needed. This need arose from scalability challenges associated with many messages passign between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. + +This new type of key uses the Boneh-Lyn-Shacham, [BLS](https://en.wikipedia.org/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham), signature scheme. This scheme enables very efficient aggregation of signatures but also allows reverse engineering of the individual validator keys that were aggregated - ideal for managing actions between validators. + +## The two types of validator key {#two-types-of-key} + +Before the switch to proof-of-stake, Ethereum users only had a single elliptic-curve based private key that they used to access their funds. With the introduction of proof-of-stake, users that wished to be solo stakers also required a **validator key** and a **withdrawal key**. + +### The validator key {#validator-key} + +The validator signing key consists of two elements: + +- Validator **private** key +- Validator **public** key + +The purpose of the validator private key is to actively sign on-chain operations such as block proposals and attestations. Therefore these keys have to be held in a hot wallet. + +This flexibility has the advantage to move validator signing keys very quickly from one device to another, however, if they have gotten lost or stolen, a thief may be able to **act maliciously** in the following ways: + +- Get the validator slashed) by: + - Being a proposer and signing two different beacon blocks for the same slot + - Being an attester and signing an attestation that "surrounds" another one. + - Being an attester and signing two different attestations having the same target. +- Force a voluntary exit, which stops the validator from staking, and grants access to its ETH balance to the withdrawal key owner. + +The **validator public key** is included in the _deposit data_ which allows Ethereum to identify the validator. + +### The withdrawal key {#withdrawal-key} + +The withdrawal key will be required to move the validator balance after this is enabled in the upcoming Shanghai upgrade. Just like the validator keys, the withdrawal keys also consist of two components: + +- Withdrawal **private** key +- Withdrawal **public** key + +Losing this key means losing access to the validator balance. However, the validator can still sign attestations and blocks since these actions require the validator private key, but there is little to no incentive to do so if the keys are lost. + +Separating out the validator keys from the Ethereum account keys enables multiple validators to be run by a single user. + +![validator key schematic](validator-key-schematic.png) + +## Deriving keys from other keys {#deriving-keys-from-keys} + +If every 32 ETH staked required a new set of 2 completely independent keys to be created, key management would quickly become unwieldy especially for users running multiple validators. To get around this problem, multiple validator keys can be derived from a single common secret. Storing that single secret allows access to multiple validator keys. + +[Mnemonics](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) and paths are a well-known feature that users often encounter when [they access](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) their hardware wallets. The mnemonic is a sequence of words that act as an initial seed for a private key. When combined with additional data, the mnemonic is used to generate a hash known as the 'master key'. This can be thought of as the root of a tree. Branches from this root can then be drived using a heirarchical path, so that child nodes can exist as combinations of their parent node's hash and their index in the tree. + +These paths have the following structure which will be familiar to users who have interacted with hardware wallets: + +``` +m/44'/60'/0'/0` +``` + +The slashes in this path separate components of the private key as follows: + +``` +master_key / purpose / coin_type / account / change / address_index +``` + +This logic enables a user to attach as many validators to a single **withdrawal key** as they want, because the root of the tree can be common and differentiation can happen at the branches. The user can **derive any number of keys** from the Mnemonic phrase. + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +Each branch is separated by a `/` so `m/2` means start with the master key and follow branch 2. In the schematic below a single mnemonic phrase is used to store three withdrawal keys, each with two associated validators. + +![validator key logic](multiple-keys.png) + +## Further Reading {#further-reading} + +[Ethereum Foundation blog post by Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) + +[EIP-2333 BLS12-381 key generation](https://eips.ethereum.org/EIPS/eip-2333) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png b/src/content/developers/docs/consensus-mechanisms/pos/keys/multiple-keys.png new file mode 100644 index 0000000000000000000000000000000000000000..f75b39ab0937433c042581378a1d114f0404ec8b GIT binary patch literal 63768 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 RxKi*(UuQ2ZNBcnd{{eG`Bt-xK literal 0 HcmV?d00001 diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png b/src/content/developers/docs/consensus-mechanisms/pos/keys/validator-key-schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..83dcbeaddeec9b2128caf63f43411cf90b698cc6 GIT binary patch literal 85053 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%0AyiJgH!`JXL^k~y`Thv$Df3) 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 q6s5K@y9HiiaU6%wBkI{YtGJjrk%L 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 Date: Wed, 27 Jul 2022 15:55:38 +0100 Subject: [PATCH 054/183] Update src/content/nft/index.md --- src/content/nft/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/nft/index.md b/src/content/nft/index.md index 235a4f01d81..c34b4b70f42 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -338,5 +338,5 @@ Most NFTs are built using a consistent standard known as [ERC-721](/developers/d - [A beginner's guide to NFTs](https://linda.mirror.xyz/df649d61efb92c910464a4e74ae213c4cab150b9cbcc4b7fb6090fc77881a95d) – _Linda Xie, January 2020_ - [Everything you need to know about the metaverse](https://foundation.app/blog/enter-the-metaverse) – _Foundation team, foundation.app_ - [No, CryptoArtists Aren’t Harming the Planet](https://medium.com/superrare/no-cryptoartists-arent-harming-the-planet-43182f72fc61) -- [Ethereum's energy consumption](/energy_consumption) +- [Ethereum's energy consumption](/energy-consumption/) - [A country's worth of power, no more](https://blog.ethereum.org/2021/05/18/country-power-no-more/) – _Carl Beekhuizen, May 18 2021_ From bf9f8ff42060aa98ba0dee022c4e531439e68b5e Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:55:47 +0100 Subject: [PATCH 055/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../docs/consensus-mechanisms/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index cafed97daa3..9a6f842762d 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -13,19 +13,19 @@ To better understand this page, we recommend you first read our [introduction to ## What is consensus? {#what-is-consensus} -By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. If there is disagreement, the group must have a means to decide which film to see. In the extreme case the group will eventually split. +By consensus, we mean that a general agreement has been reached. Consider a group of people going to the cinema. If there is no disagreement on a proposed choice of film, then a consensus is achieved. If there is disagreement, the group must have the means to decide which film to see. In extreme cases, the group will eventually split. In regards to the Ethereum blockchain, the process is formalized, and reaching consensus means that at least 66% of the nodes on the network agree on the global state of the network. ## What is a consensus mechanism? {#what-is-a-consensus-mechanism} -The term consensus mechanism refers to the entire stack of protocols, incentives and ideas that allow a network of nodes to come to agreement about the state of a blockchain. +The term consensus mechanism refers to the entire stack of protocols, incentives and ideas that allow a network of nodes to agree on the state of a blockchain. -Ethereum uses a proof-of-stake based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital locked by stakers. This incentive structure encourages individual stakers to operate honest validators, punishes those that don't, and also creates an extremely high cost to attack the network. +Ethereum uses a proof-of-stake-based consensus mechanism that derives its crypto-economic security from a set of rewards and penalties applied to capital locked by stakers. This incentive structure encourages individual stakers to operate honest validators, punishes those who don't, and creates an extremely high cost to attack the network. -Then, there is a protocol that governs how honest validators are selected to propose or validate blocks, process transactions and vote for their view of the head of the chain. In the rare situations where there are multiple blocks in the same position near the head of the chain, there is a fork-choice mechanism that selects blocks that make up the 'heaviest' chain, measured by the number of validators that voted for the blocks weighted by thier staked ether balance. +Then, there is a protocol that governs how honest validators are selected to propose or validate blocks, process transactions and vote for their view of the head of the chain. In the rare situations where multiple blocks are in the same position near the head of the chain, there is a fork-choice mechanism that selects blocks that make up the 'heaviest' chain, measured by the number of validators that voted for the blocks weighted by their staked ether balance. -There are also concepts that are important to consensus that are not explicitly defined in code, such as the additional security offered by potential out-of-band social coordination as a last line of defense against attacks on the network. +Some concepts are important to consensus that are not explicitly defined in code, such as the additional security offered by potential out-of-band social coordination as a last line of defense against attacks on the network. These components together form the consensus mechanism. @@ -37,7 +37,7 @@ Like Bitcoin, Ethereum once used a **proof-of-work (PoW)** based consensus proto #### Block creation {#pow-block-creation} -Proof-of-work is done by [miners](/developers/docs/consensus-mechanisms/pow/mining/), who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by the computer which is able to solve a math puzzle fastest—this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work". The true head of the chain is then determined by a fork-choice rule that selects the set of blocks that have had the most work done to mine them. +Blocks are created by validators. Each slot, one validator is randomly selected to be the block proposer. Their consensus client requests a bundle of transactions in the form of an 'execution payload' from their paired execution client. They wrap this in consensus data to form a block, which they send to other nodes on the Ethereum network. This block production is rewarded in ETH. In rare cases when multiple possible blocks exist for a single slot, or nodes hear about blocks at different times, the fork choice algorithm picks the block that forms the chain with the greatest weight of attestations (where weight is the number of validators attesting scaled by their ETH balance). #### Security {#pow-security} @@ -55,7 +55,7 @@ Proof-of-stake is done by validators who have staked ETH to participate in the s #### Security {#pos-security} -A proof-of-stake system is kept secure crypto-economically because a huge amount of ether must be destroyed by an attacker attempting to take control of the chain. A system of rewards incentivizes individual stakers to behave honestly, and penalties disincentivize stakers from acting maliciously. +A proof-of-stake system is secure crypto-economically because an attacker attempting to take control of the chain must destroy a massive amount of ETH. A system of rewards incentivizes individual stakers to behave honestly, and penalties disincentivize stakers from acting maliciously. More on [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) @@ -67,13 +67,13 @@ Watch more on the different types of consensus mechanisms used on Ethereum: ### Sybil resistance & chain selection {#sybil-chain} -As mentioned earlier, proof-of-work and proof-of-stake are not consensus protocols by themselves, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (aka fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. +Proof-of-work and proof-of-stake alone are not consensus protocols, but they are often referred to as such for simplicity. They are actually Sybil resistance mechanisms and block author selectors; they are a way to decide who is the author of the latest block. Another important component is the chain selection (aka fork choice) algorithm that enables nodes to pick one single correct block at the head of the chain in scenarios where multiple blocks exist in the same position. **Sybil resistance** measures how a protocol fares against a [Sybil attack](https://wikipedia.org/wiki/Sybil_attack). Sybil attacks are when one user or group pretends to be many users. Resistance to this type of attack is essential for a decentralized blockchain and enables miners and validators to be rewarded equally based on resources put in. Proof-of-work and proof-of-stake protect against this by making users expend a lot of energy or put up a lot of collateral. These protections are an economic deterrent to Sybil attacks. A **chain selection rule** is used to decide which chain is the "correct" chain. Bitcoin uses the "longest chain" rule, which means that whichever blockchain is the longest will be the one the rest of the nodes accept as valid and work with. For proof-of-work chains, the longest chain is determined by the chain's total cumulative proof-of-work difficulty. Ethereum used to use the longest chain rule too; however, now that Etheruem runs on proof-of-stake it adopted an updated fork-choice algorithm that measures the 'weight' of the chain. The weight is the accumulated sum of validator votes, weighted by validator staked-ether balances. -Ethereum uses a consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) that combines [Casper FFG](https://arxiv.org/abs/1710.09437) proof-of-stake with the [GHOST](https://arxiv.org/abs/2003.03052) fork-choice rule. +Ethereum uses a consensus mechanism known as [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) that combines [Casper FFG proof-of-stake](https://arxiv.org/abs/1710.09437) with the [GHOST fork-choice rule](https://arxiv.org/abs/2003.03052). ## Further reading {#further-reading} From 20308212a61c9de254c58c51efaa6518252f2d8e Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 28 Jul 2022 11:32:13 +0100 Subject: [PATCH 056/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/networks/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index f0fdd45de60..dccb089d57d 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -36,7 +36,7 @@ ETH on testnets has no real value; therefore, there are no markets for testnet E #### Sepolia {#sepolia} -Originally a proof-of-work testnet, now proof-of-stake. Sepolia is still running but it might not be maintained long term. +Sepolia is a proof-of-stake testnet. Although Sepolia is still running, it is not currently planned to be maintained long-term. Before undergoing The Merge in June 2022, Sepolia was a proof-of-work testnet. - [Website](https://sepolia.dev/) - [GitHub](https://github.com/goerli/sepolia) @@ -50,7 +50,7 @@ Originally a proof-of-work testnet, now proof-of-stake. Sepolia is still running #### Goerli {#goerli} -Originally a proof-of-authority testnet, now proof-of-stake. Goerli is expected to be maintained long term as a stable testnet for application developers. +Goerli is a proof-of-stake testnet. It is expected to be maintained long-term as a stable testnet for application developers. Before its testnet merge, Goerli was a proof-of-authority testnet. - [Website](https://goerli.net/) - [GitHub](https://github.com/goerli/testnet) @@ -66,7 +66,7 @@ Originally a proof-of-authority testnet, now proof-of-stake. Goerli is expected _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 is likely to deprecated soon. +Ropsten is a proof-of-stake testnet. Ropsten will be deprecated in late 2022. Before undergoing The Merge in May 2022, Ropsten was a proof-of-work testnet. ##### Ropsten faucets From abc3a734287cab834937477d9e4e6edbd1019883 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 28 Jul 2022 11:33:50 +0100 Subject: [PATCH 057/183] re-order testnets --- src/content/developers/docs/networks/index.md | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index dccb089d57d..a909353079e 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -34,6 +34,20 @@ Most testnets started by using a proof-of-authority consensus mechanism. This me 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. +#### Goerli {#goerli} + +Goerli is a proof-of-stake testnet. It is expected to be maintained long-term as a stable testnet for application developers. Before its testnet merge, Goerli was a proof-of-authority testnet. + +- [Website](https://goerli.net/) +- [GitHub](https://github.com/goerli/testnet) +- [Etherscan](https://goerli.etherscan.io) + +##### Goerli faucets + +- [Goerli faucet](https://faucet.goerli.mudit.blog/) +- [Chainlink faucet](https://faucets.chain.link/) +- [Alchemy Goerli Faucet](https://goerlifaucet.com/) + #### Sepolia {#sepolia} Sepolia is a proof-of-stake testnet. Although Sepolia is still running, it is not currently planned to be maintained long-term. Before undergoing The Merge in June 2022, Sepolia was a proof-of-work testnet. @@ -48,19 +62,6 @@ Sepolia is a proof-of-stake testnet. Although Sepolia is still running, it is no - [Sepolia faucet](https://faucet.sepolia.dev/) - [FaucETH](https://fauceth.komputing.org) -#### Goerli {#goerli} - -Goerli is a proof-of-stake testnet. It is expected to be maintained long-term as a stable testnet for application developers. Before its testnet merge, Goerli was a proof-of-authority testnet. - -- [Website](https://goerli.net/) -- [GitHub](https://github.com/goerli/testnet) -- [Etherscan](https://goerli.etherscan.io) - -##### Goerli faucets - -- [Goerli faucet](https://faucet.goerli.mudit.blog/) -- [Chainlink faucet](https://faucets.chain.link/) -- [Alchemy Goerli Faucet](https://goerlifaucet.com/) #### Ropsten _(deprecated)_ {#ropsten} From 4269571efc54151fb590ab78bb5726ba4f9264d7 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 29 Jul 2022 12:46:58 +0100 Subject: [PATCH 058/183] Fix line lengths --- .../developers/docs/consensus-mechanisms/pos/keys/index.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index bb0109d8c73..83714cd2408 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -5,10 +5,7 @@ lang: en sidebar: true --- -Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an -Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') -key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so -that it can be cryptographically proven that some actionw as approved by the holder of a specific private key. +Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that it can be cryptographically proven that some actionw as approved by the holder of a specific private key. Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). From 387b7d7abb6e34751415cc6351476187c31ba366 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 29 Jul 2022 13:47:19 +0100 Subject: [PATCH 059/183] update storage page --- src/content/developers/docs/storage/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/storage/index.md b/src/content/developers/docs/storage/index.md index bd03af39154..6a27b5a2bb7 100644 --- a/src/content/developers/docs/storage/index.md +++ b/src/content/developers/docs/storage/index.md @@ -28,7 +28,7 @@ This is known as **blockchain-based** persistence. The issue with blockchain-based persistence is that the chain could get far too big to upkeep and store all the data feasibly (e.g. [many sources](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/) estimate the Internet to require over 40 Zetabytes of storage capacity). -The blockchain must also have some type of incentive structure. For blockchain-based persistence, there is a payment made to the miner. When the data is added to the chain, the nodes are paid to add the data on. +The blockchain must also have some type of incentive structure. For blockchain-based persistence, there is a payment made to the validator. When the data is added to the chain, the validators are paid to add the data on. Platforms with blockchain-based persistence: @@ -93,11 +93,10 @@ PoW based: - Skynet - Arweave -- Ethereum PoS based: -- [The Beacon Chain](/upgrades/beacon-chain/) +- Ethereum - Filecoin - 0Chain From b8b1c0e724ecb42baf9e00e0b99c4c17bd975ef4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 29 Jul 2022 14:36:45 +0100 Subject: [PATCH 060/183] Update src/content/developers/docs/storage/index.md --- src/content/developers/docs/storage/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/storage/index.md b/src/content/developers/docs/storage/index.md index 6a27b5a2bb7..120fdc47826 100644 --- a/src/content/developers/docs/storage/index.md +++ b/src/content/developers/docs/storage/index.md @@ -94,7 +94,7 @@ PoW based: - Skynet - Arweave -PoS based: +Proof-of-stake based: - Ethereum - Filecoin From 38971232aabcfab1e3986059c66cd5c610ed8cca Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 29 Jul 2022 14:37:09 +0100 Subject: [PATCH 061/183] Update pow to proof-of-work --- src/content/developers/docs/storage/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/storage/index.md b/src/content/developers/docs/storage/index.md index 120fdc47826..5429b93dac9 100644 --- a/src/content/developers/docs/storage/index.md +++ b/src/content/developers/docs/storage/index.md @@ -89,7 +89,7 @@ Decentralized tools without KYC: Most of these tools have their own version of a [consensus mechanism](/developers/docs/consensus-mechanisms/) but generally they are based on either [**proof-of-work (PoW)**](/developers/docs/consensus-mechanisms/pow/) or [**proof-of-stake (PoS)**](/developers/docs/consensus-mechanisms/pos/). -PoW based: +Proof-of-work based: - Skynet - Arweave From d27d0b6b9caab81bef84c172e871007339c79ce2 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 29 Jul 2022 14:45:31 +0100 Subject: [PATCH 062/183] update block page --- src/content/developers/docs/blocks/index.md | 62 +++++++++++++-------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/content/developers/docs/blocks/index.md b/src/content/developers/docs/blocks/index.md index 473138a3eed..d82b16353ce 100644 --- a/src/content/developers/docs/blocks/index.md +++ b/src/content/developers/docs/blocks/index.md @@ -19,47 +19,61 @@ To ensure that all participants on the Ethereum network maintain a synchronized ![A diagram showing transaction in a block causing state changes](./tx-block.png) _Diagram adapted from [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ -By spacing out commits, we give all network participants enough time to come to consensus: even though transaction requests occur dozens of times per second, blocks on Ethereum are committed approximately once every fifteen seconds. +By spacing out commits, we give all network participants enough time to come to consensus: even though transaction requests occur dozens of times per second, blocks are only created and committed on Ethereum once every six seconds. ## How blocks work {#how-blocks-work} To preserve the transaction history, blocks are strictly ordered (every new block created contains a reference to its parent block), and transactions within blocks are strictly ordered as well. Except in rare cases, at any given time, all participants on the network are in agreement on the exact number and history of blocks, and are working to batch the current live transaction requests into the next block. -Once a block is put together (mined) by some miner on the network, it is propagated to the rest of the network; all nodes add this block to the end of their blockchain, and mining continues. The exact block-assembly (mining) process and commitment/consensus process is currently specified by Ethereum’s “proof-of-work” protocol. +Once a block is put together by some validator on the network, it is propagated to the rest of the network; all nodes add this block to the end of their blockchain, and a new validator is selected to create the next block. The exact block-assembly process and commitment/consensus process is currently specified by Ethereum’s “proof-of-stake” protocol. -### A visual demo {#a-visual-demo} +## Proof-of-stake protocol {#proof-of-work-protocol} - +Proof-of-stake means the following: -## Proof-of-work protocol {#proof-of-work-protocol} +- Validating nodes have to stake at least 32 ETH into a deposit contract as collateral against bad behaviour. This helps protect the network because provably dishonet activity leads to some or all of that stake being destroyed. +- In every slot (spaced 6 seconds apart) a validator is randomly selected to be the block proposer. They bundle transactions together, execute them and determine a new 'state'. They wrap this information int a block and pass it around to other validators. +- Other validators who hear about a new block re-execute the transactions to ensure they agree with the proposed change to the global state. Assuming the block is valid they add it to their own database. +- If a validator hears about two conflicting blocks for the same slot they use their fork-choice algorithm to pick the one supported by the most staked ETH. -Proof-of-work means the following: - -- Mining nodes have to spend a variable but substantial amount of energy, time, and computational power to produce a “certificate of legitimacy” for a block they propose to the network. This helps protect the network from spam/denial-of-service attacks, among other things, since certificates are expensive to produce. -- Other miners who hear about a new block with a valid certificate of legitimacy must accept the new block as the canonical next block on the blockchain. -- The exact amount of time needed for any given miner to produce this certificate is a random variable with high variance. This ensures that it is unlikely that two miners produce validations for a proposed next block simultaneously; when a miner produces and propagates a certified new block, they can be almost certain that the block will be accepted by the network as the canonical next block on the blockchain, without conflict (though there is a protocol for dealing with conflicts as well in the case that two chains of certified blocks are produced almost simultaneously). - -[More on mining](/developers/docs/consensus-mechanisms/pow/mining/) +[More on proof-of-stake](/developers/docs/consensus-mechanisms/pos) ## What's in a block? {#block-anatomy} -- `timestamp` – the time when the block was mined. -- `blockNumber` – the length of the blockchain in blocks. -- `baseFeePerGas` - the minimum fee per gas required for a transaction to be included in the block. -- `difficulty` – the effort required to mine the block. -- `mixHash` – a unique identifier for that block. -- `parentHash` – the unique identifier for the block that came before (this is how blocks are linked in a chain). -- `transactions` – the transactions included in the block. -- `stateRoot` – the entire state of the system: account balances, contract storage, contract code and account nonces are inside. -- `nonce` – a hash that, when combined with the mixHash, proves that the block has gone through [proof-of-work](/developers/docs/consensus-mechanisms/pow/). +There is a lot of information contained within a block. At the highest level a block contains the following fields: + +``` +slot: the slot the block belongs to +proposer_index: the ID of the validator proposing the block +parent_root: the hash of the preceding block +state_root: the root hash of the state object +body: an object containing several fields, as defined below +``` + +The block `body` contains several fields of its own: + +``` +randao_reveal: a value used to select the next blockl proposer +eth1_data: information about the deposit contract +graffiti: arbitrary data used to tag blocks +proposer_slashings: list of validators to be slashed +attester_slashings: list of validators to be slashed +attestations: list of attestations in favour of the current block +deposits: list of new deposits to the deposit contract +voluntary_exits: list of validators exiting the network +sync_aggregate: subset of validators used to serve light clients +execution_payload: transactions passed from the execution client +``` + +Executing the transactions in the `execution_payload` updates the global state. All clients re-execute the transactions in the `execution_payload` to ensure the new state matches that in the new block `state_root` field. This is how clients can tell that a new block is valid and safe to add to their blockchain. ## Block time {#block-time} -Block time refers to the time it takes to mine a new block. In Ethereum, the average block time is between 12 to 14 seconds and is evaluated after each block. The expected block time is set as a constant at the protocol level and is used to protect the network's security when the miners add more computational power. The average block time gets compared with the expected block time, and if the average block time is higher, then the difficulty is decreased in the block header. If the average block time is smaller, then the difficulty in the block header will be increased. +Block time refers to the time separating blocks. In Ethereum, time is divided up into 6 second units called 'slots'. In each slot a single validator is selected to propose a block. Assuming all validators are online and fully functional there will be a block in every slot, meanign the block time is 6s. However, occasionally validators might be offline when called to propose a block, meaning slots can sometimes go empty. This is different to proof-of-work based systems where block times are probabilistic and tuned by the mining difficulty. ## Block size {#block-size} -A final important note is that blocks themselves are bounded in size. Each block has a target size of 15 million gas but the size of blocks will increase or decrease in accordance with network demands, up until the block limit of 30 million gas (2x target block size). The total amount of gas expended by all transactions in the block must be less than the block gas limit. This is important because it ensures that blocks can’t be arbitrarily large. If blocks could be arbitrarily large, then less performant full nodes would gradually stop being able to keep up with the network due to space and speed requirements. +A final important note is that blocks themselves are bounded in size. Each block has a target size of 15 million gas but the size of blocks will increase or decrease in accordance with network demands, up until the block limit of 30 million gas (2x target block size). The total amount of gas expended by all transactions in the block must be less than the block gas limit. This is important because it ensures that blocks can’t be arbitrarily large. If blocks could be arbitrarily large, then less performant full nodes would gradually stop being able to keep up with the network due to space and speed requirements. The larger the block, the greater the computing power required to process them in time for the next slot. This is a centralizing force, which is resisted by capping block sizes. ## Further reading {#further-reading} @@ -67,6 +81,6 @@ _Know of a community resource that helped you? Edit this page and add it!_ ## Related topics {#related-topics} -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) - [Transactions](/developers/docs/transactions/) - [Gas](/developers/docs/gas/) +- [proof-of-stake](/developers/docs/consensus-mechanisms/pos) From 37f47cf9ef869818d46a3d61ec4dfb9954bb1cf2 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 29 Jul 2022 14:48:21 +0100 Subject: [PATCH 063/183] Use markdown within InfoBanner --- .../consensus-mechanisms/pow/mining-algorithms/index.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 4b8bea458a5..b5dbd3016da 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 @@ -6,8 +6,10 @@ sidebar: true preMergeBanner: true --- - - Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + + +Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on [The Merge](/upgrades/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), and [staking](/staking/). This page is for historical interest only. + From dca0c036f33104fa58fc66492a7a37647ecd3787 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 29 Jul 2022 15:48:03 +0100 Subject: [PATCH 064/183] update accounts page --- src/content/developers/docs/accounts/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/developers/docs/accounts/index.md b/src/content/developers/docs/accounts/index.md index 11af93f62b5..a9115f9edf3 100644 --- a/src/content/developers/docs/accounts/index.md +++ b/src/content/developers/docs/accounts/index.md @@ -97,6 +97,12 @@ Example: The contract address is usually given when a contract is deployed to the Ethereum Blockchain. The address comes from the creator's address and the number of transactions sent from that address (the “nonce”). +## Validator keys + +There is also another type of key in Ethereum, introduced when Ethereum switched from proof-of-work to proof-of-stake based consensus. These are 'BLS' keys and they are used to identify validators. These keys can be efficiently aggregated to reduce the bandwidth required for the network to come to consensus. Without this key aggregation the minimum stake for a validator would be much higher. + +Read more about [validator keys](/developers/docs/consensus-mechanisms/pos/keys). + ## A note on wallets {#a-note-on-wallets} An account is not a wallet. An account is the keypair for a user-owned Ethereum account. A wallet is an interface or application that lets you interact with your Ethereum account. From 14ff29697d0e7dbddfab39eafc6e9d0a03f7b9ad Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 1 Aug 2022 09:30:30 +0100 Subject: [PATCH 065/183] update networking layer page --- .../developers/docs/networking-layer/index.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/content/developers/docs/networking-layer/index.md b/src/content/developers/docs/networking-layer/index.md index fac237dba98..cbe4d0af75c 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -9,9 +9,9 @@ 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. -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. +There are two parts to the 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.** +Execution clients gossip transactions over the execution-layer peer-to-peer network. This requires encrypted communication between authenticated peers. When a validator is selected toi propose a block, transactions from the node's local transaction pool 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. This requires two separate p2p networks - one connecting execution clients for transaction gossip and one connecting consensus clients for block gossip. ## Prerequisites {#prerequisites} @@ -73,7 +73,7 @@ Along with the hello messages, the wire protocol can also send a "disconnect" me #### Wire protocol {#wire-protocol} -Once peers are connected and an RLPx session has been started, the wire protocol defines how peers communicate. There are three main tasks defined by the wire protocol: chain synchronization, block propagation and transaction exchange. Chain synchronization is the process of validating blocks near the head of the chain, checking their proof-of-work data and re-executing their transactions to ensure their root hashes are correct, then cascading back in history via those blocks' parents, grandparents etc until the whole chain has been downloaded and validated. State sync is a faster alternative that only validates block headers. Block propagation is the process of sending and receiving newly mined blocks. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc). +Once peers are connected and an RLPx session has been started, the wire protocol defines how peers communicate. Originally there were three main tasks defined by the wire protocol: chain synchronization, block propagation and transaction exchange. However, once Ethereum switched to proof-of-stake, block propagation and chain synchronization became part of the consensus layer. Transaction exchange is still in the remit of the execution clients. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc). #### les (light ethereum subprotocol) {#les} @@ -91,10 +91,6 @@ The [witness protocol](https://github.com/ethereum/devp2p/blob/master/caps/wit.m Whisper was a protocol that aimed to deliver secure messaging between peers without writing any information to the blockchain. It was part of the DevP2P wire protocol but is now deprecated. Other [related projects](https://wakunetwork.com/) exist with similar aims. -## Execution layer networking after The Merge {#execution-after-merge} - -After the Merge, an Ethereum node will run an execution client and a consensus client. The execution clients will operate similarly to today, but with the proof-of-work consensus and block gossip functionality removed. The EVM, validator deposit contract and selecting/executing transactions from the mempool will still be the domain of the execution client. This means execution clients still need to participate in transaction gossip so that they can manage the transaction mempool. This requires encrypted communication between authenticated peers meaning the networking layer for consensus clients will still be a critical component, including both the discovery protocol and DevP2P layer. Encoding will continue to be predominantly RLP on the execution layer. - ## The consensus layer {#consensus-layer} The consensus clients participate in a separate peer-to-peer network with a different specification. Consensus clients need to participate in block gossip so that they can receive new blocks from peers and broadcast them when it is their turn to be block proposer. Similarly to the execution layer, this first requires a discovery protocol so that a node can find peers and establish secure sessions for exchanging blocks, attestations etc. @@ -125,7 +121,7 @@ SSZ stands for simple serialization. It uses fixed offsets that make it easy to ## Connecting the execution and consensus clients {#connecting-clients} -After the Merge, both consensus and execution clients will run in parallel. They need to be connected together so that the consensus client can provide instructions to the execution client and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. This communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share a ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). +Both consensus and execution clients run in parallel. They need to be connected together so that the consensus client can provide instructions to the execution client and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. This communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share a ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). A summary of the control flow is shown below, with the relevant networking stack in brackets. @@ -153,7 +149,7 @@ Once the block has been attested by sufficient validators it is added to the hea ![](cons_client_net_layer.png) ![](exe_client_net_layer.png) -Network layer schematic for post-merge consensus and execution clients, from [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) +Network layer schematic for consensus and execution clients, from [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) ## Further Reading {#further-reading} From d306443219a37153f08bf7226f67705631d72d22 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 1 Aug 2022 10:10:12 +0100 Subject: [PATCH 066/183] update security page --- src/content/security/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/security/index.md b/src/content/security/index.md index 05c65c4692f..77f88a0cbde 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -214,6 +214,14 @@ As a general rule, staff will never communicate with you through private, unoffi +### 'Eth2' token scam {#eth2-token-scam} + +In the run up to [The Merge](/upgrades/merge/), scammers took advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2' and no other legitimate token was introduced with The Merge. The ETH that you owned before The Merge is the same ETH now, there is **no need to take any action related to your ETH to account for the switch from proof-of-work to proof-of-stake**. + +Scammers may appear in the form of "support" telling you if you deposit your ETH you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. + +_Note: There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase), but these are not something you need to "migrate to."_ + ### Phishing scams {#phishing-scams} Phishing scams are another increasingly common angle that scammers will use to attempt to steal your wallet's funds. @@ -240,7 +248,7 @@ These fraudulent brokers find their targets by using fake accounts on YouTube to ### Crypto mining pool scams {#mining-pool-scams} -Mining pool scams involve people contacting you unsolicited, and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. +Ethereum mining was switched off in 2022. However, mining pool scams still exist. Mining pool scams involve people contacting you unsolicited, and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. Bottom line, be wary of people who contact you on social media asking for you to be part of a mining pool. Once you lose your crypto, it is gone. @@ -252,14 +260,6 @@ Some things to remember: [Man loses $200k in mining pool scam](https://www.reddit.com/r/CoinBase/comments/r0qe0e/scam_or_possible_incredible_payout/) -### 'Eth2' token scam {#eth2-token-scam} - -With [The Merge](/upgrades/merge/) coming in 2022, scammers have taken advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2' or any other new token introduced with The Merge. The ETH that you own today will continue to be the same ETH after The Merge, and there is no need to do any swaps of your ETH for The Merge. - -Scammers may appear in the form of "support" telling you if you deposit your ETH you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. - -_Note: There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase), but these are not something you need to "migrate to."_ - ### Airdrop scams {#airdrop-scams} Airdrop scams involve a scam project airdropping an asset (NFT, token) into your wallet and sending you to a scam website to claim the airdropped asset. You will get prompted to sign in with your Ethereum wallet and "approve" a transaction when attempting to claim. This transaction compromises your account by sending your public and private keys to the scammer. An alternative form of this scam may have you confirm a transaction that sends funds to the scammer's account. From c5872b5fa5e4f8cba34ae2a7c37f76551fd9f5ff Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 1 Aug 2022 10:59:33 +0100 Subject: [PATCH 067/183] update beacon chain --- src/content/upgrades/beacon-chain/index.md | 48 ++++++++-------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 463d0d40881..961b609a813 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -7,51 +7,43 @@ sidebar: true image: ../../../assets/upgrades/core.png summaryPoint1: The Beacon Chain doesn't change anything about the Ethereum we use today. summaryPoint2: It introduced proof-of-stake to the Ethereum ecosystem. -summaryPoint3: It will coordinate the network, serving as the consensus layer. -summaryPoint4: It is an essential precursor to upcoming scaling upgrades, such as sharding. +summaryPoint3: It was merged with the original Ethereum proof-of-work chain in 2022. +summaryPoint4: It is now handling all consensus logic and block gossip for Ethereum. --- - The Beacon Chain shipped on December 1, 2020. To learn more, explore the data. If you want to help validate the chain, you can stake your ETH. + The Beacon Chain shipped on December 1, 2020. At the time it was a separate chain to Ethereum Mainnet. It ran proof-of-stake but did not handle any transactions. The Beacon Chain was merged with the original Ethereum Mainnet in 2022 to take over the consensus logic and block propagation for Ethereum. Since The Merge, there has only been one, single Ethereum chain. -## What does the Beacon Chain do? {#what-does-the-beacon-chain-do} +## What was the Beacon Chain? {#what-is-the-beacon-chain} -The Beacon Chain is a ledger of accounts that conducts and coordinates the network of [stakers](/staking/). It isn't quite like the [Ethereum Mainnet](/glossary/#mainnet) of today. It does not process transactions or handle smart contract interactions. +The Beacon Chain was the name given to the original proof-of-stake blockchain that was launched in 2020. It was created to ensure the proof-of-stake consensus logic was sound and sustainable before enabling it on Ethereum Mainnet. Therefore, it ran alongisde the original proof-of-work Ethereum. Switching off proof-of-work and switching on proof-of-stake on Ethereum required instructing the Beacon Chain to accept transactions from the original Ethereum chain, bundle them into blocks and then oprganize the blocks into a block chain using a proof-of-stake based consensus mechanism. At the same moment, the original Ethereum clients turned off their mining, block propagation and consensus logic, handing that all over to the Beacon Chain. This event was known as [The Merge](/upgrades/merge/). Once The Merge happened, there were no longer two blockchains, there was just one single proof-of-stake Ethereum. -It is a new consensus engine (or "consensus layer") that will soon take the place of proof-of-work mining, bringing many significant improvements with it. +## What did the Beacon Chain do? {#what-does-the-beacon-chain-do} -The Beacon Chain's role will change over time, but it's a foundational component for [the secure, environmentally friendly and scalable Ethereum we’re working towards](/upgrades/vision/). +The Beacon Chain was the name given to a ledger of accounts that conducted and coordinated the network of Ethereum [stakers](/staking/) before those stakers started validating real Ethereum transactions. It did not process transactions or handle smart contract interactions. + +It introduced the consensus engine (or "consensus layer") that took the place of proof-of-work mining on Ethereum and brought many significant improvements with it. + +The Beacon Chain was a foundational component for [the secure, environmentally friendly and scalable Ethereum we have now](/upgrades/vision/). ## Beacon Chain impact {#beacon-chain-features} ### Introducing staking {#introducing-staking} -The Beacon Chain introduced [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) to Ethereum. This is a new way for you to help keep Ethereum secure. Think of it like a public good that will make Ethereum healthier and earn you more ETH in the process. In practice, staking involves you staking ETH in order to activate validator software. As a staker, you'll run node software that processes transactions and creates new blocks in the chain. +The Beacon Chain introduced [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) to Ethereum. This keeps Ethereum secure and earns validators more ETH in the process. In practice, staking involves staking ETH in order to activate validator software. As a staker, you run the software that creates and validates new blocks in the chain. -Staking serves a similar purpose to [mining](/developers/docs/mining/), but is different in many ways. Mining requires large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also does not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. +Staking serves a similar purpose that mining used to [mining](/developers/docs/mining/), but is different in many ways. Mining required large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also did not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. -The transition to proof-of-stake will make Ethereum significantly more secure and decentralized by comparison. The more people that participate in the network, the more decentralized and safe from attacks it becomes. +The transition to proof-of-stake made Ethereum significantly more secure and decentralized by comparison to proof-of-work. The more people that participate in the network, the more decentralized and safe from attacks it becomes. If you're interested in becoming a validator and helping secure the Ethereum, learn more about staking. -### The Merge and the end of mining {#the-merge} - -While the Beacon Chain (or "consensus layer") is already live, it has existed as a separate chain from Mainnet (or the "execution layer") since its genesis. The plan is to swap out the current proof-of-work algorithm on the execution layer today and replace it with the proof-of-stake consensus protocol that the Beacon Chain provides. - -This process is known as **The Merge**, as it will 'merge' the new consensus layer with the existing execution layer and stop the use of mining. - -The Merge will have an immediate and profound impact on the carbon footprint of the Ethereum network. It also sets the stage for future scalability upgrades such as sharding. - -[Learn more about Ethereum energy consumption](/energy-consumption/) - -[Learn more about The Merge](/upgrades/merge/) - ### Setting up for sharding {#setting-up-for-sharding} -After Mainnet merges with the Beacon Chain, the next major upgrade will introduce sharding to the network. +Since the Beacon Chain merged with the original Ethereum Mainnet, the Ethereum community started looking to scaling 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. @@ -65,7 +57,7 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how the Be ### Beacon Chain and The Merge {#merge-and-beacon-chain} -The Beacon Chain, at first, will exist separately to the Ethereum Mainnet we use today. But eventually they will be connected. The plan is to "merge" Mainnet into the proof-of-stake system that's controlled and coordinated by the Beacon Chain. +The Beacon Chain, at first, existed separately to Ethereum Mainnet but they were merged together in 2022. The Merge @@ -73,14 +65,8 @@ The Beacon Chain, at first, will exist separately to the Ethereum Mainnet we use ### Shards and the Beacon Chain {#shards-and-beacon-chain} -Sharding can only safely enter the Ethereum ecosystem with a proof-of-stake consensus mechanism in place. The Beacon Chain introduced staking, which when 'merged' with Mainnet will pave the way for sharding to help further scale Ethereum. +Sharding can only safely enter the Ethereum ecosystem with a proof-of-stake consensus mechanism in place. The Beacon Chain introduced staking, which 'merged' with Mainnet, paving the way for sharding to help further scale Ethereum. Shard chains - - - -## Interact with the Beacon Chain {#interact-with-beacon-chain} - - From e9756879bacc44569e5606bca7072b8181dc1708 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 1 Aug 2022 11:06:32 +0100 Subject: [PATCH 068/183] fix typo and add further reading --- src/content/upgrades/beacon-chain/index.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 961b609a813..bfed71eee2c 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -33,7 +33,7 @@ The Beacon Chain was a foundational component for [the secure, environmentally f The Beacon Chain introduced [proof-of-stake](/developers/docs/consensus-mechanisms/pos/) to Ethereum. This keeps Ethereum secure and earns validators more ETH in the process. In practice, staking involves staking ETH in order to activate validator software. As a staker, you run the software that creates and validates new blocks in the chain. -Staking serves a similar purpose that mining used to [mining](/developers/docs/mining/), but is different in many ways. Mining required large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also did not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. +Staking serves a similar purpose that [mining](/developers/docs/mining/) used to, but is different in many ways. Mining required large up-front expenditures in the form of powerful hardware and energy consumption, resulting in economies of scale, and promoting centralization. Mining also did not come with any requirement to lock up assets as collateral, limiting the protocol's ability to punish bad actors after an attack. The transition to proof-of-stake made Ethereum significantly more secure and decentralized by comparison to proof-of-work. The more people that participate in the network, the more decentralized and safe from attacks it becomes. @@ -70,3 +70,8 @@ Sharding can only safely enter the Ethereum ecosystem with a proof-of-stake cons Shard chains + +## Further Reading + +[More on Ethereum's future upgrades](/upgrades/vision) +[More of proof-of-stake](/develoeprs/docs/consensus-mechanisms/pos) From 0cb7220a72b6cfce461af0d9f59728691b7f353c Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 1 Aug 2022 11:08:15 +0100 Subject: [PATCH 069/183] refine summary point --- src/content/upgrades/beacon-chain/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index bfed71eee2c..953b458fefd 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -8,7 +8,7 @@ image: ../../../assets/upgrades/core.png summaryPoint1: The Beacon Chain doesn't change anything about the Ethereum we use today. summaryPoint2: It introduced proof-of-stake to the Ethereum ecosystem. summaryPoint3: It was merged with the original Ethereum proof-of-work chain in 2022. -summaryPoint4: It is now handling all consensus logic and block gossip for Ethereum. +summaryPoint4: The consensus logic and block gossip protocol introduced by the Beacon Chain now secures Ethereum. --- From 4766d6c44afa5a1a743baaf18ce79144fc87a019 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 1 Aug 2022 11:16:04 +0100 Subject: [PATCH 070/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/upgrades/beacon-chain/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/upgrades/beacon-chain/index.md b/src/content/upgrades/beacon-chain/index.md index 953b458fefd..9318069b8b6 100644 --- a/src/content/upgrades/beacon-chain/index.md +++ b/src/content/upgrades/beacon-chain/index.md @@ -12,12 +12,12 @@ summaryPoint4: The consensus logic and block gossip protocol introduced by the B --- - The Beacon Chain shipped on December 1, 2020. At the time it was a separate chain to Ethereum Mainnet. It ran proof-of-stake but did not handle any transactions. The Beacon Chain was merged with the original Ethereum Mainnet in 2022 to take over the consensus logic and block propagation for Ethereum. Since The Merge, there has only been one, single Ethereum chain. + The Beacon Chain shipped on December 1, 2020. At the time, it was a separate chain to Ethereum Mainnet. It ran proof-of-stake but did not handle any transactions. The Beacon Chain was merged with the original Ethereum Mainnet in 2022 to take over the consensus logic and block propagation for Ethereum. Since The Merge, there has only been one Ethereum chain. ## What was the Beacon Chain? {#what-is-the-beacon-chain} -The Beacon Chain was the name given to the original proof-of-stake blockchain that was launched in 2020. It was created to ensure the proof-of-stake consensus logic was sound and sustainable before enabling it on Ethereum Mainnet. Therefore, it ran alongisde the original proof-of-work Ethereum. Switching off proof-of-work and switching on proof-of-stake on Ethereum required instructing the Beacon Chain to accept transactions from the original Ethereum chain, bundle them into blocks and then oprganize the blocks into a block chain using a proof-of-stake based consensus mechanism. At the same moment, the original Ethereum clients turned off their mining, block propagation and consensus logic, handing that all over to the Beacon Chain. This event was known as [The Merge](/upgrades/merge/). Once The Merge happened, there were no longer two blockchains, there was just one single proof-of-stake Ethereum. +The Beacon Chain was the name of the original proof-of-stake blockchain that was launched in 2020. It was created to ensure the proof-of-stake consensus logic was sound and sustainable before enabling it on Ethereum Mainnet. Therefore, it ran alongside the original proof-of-work Ethereum. Switching off proof-of-work and switching on proof-of-stake on Ethereum required instructing the Beacon Chain to accept transactions from the original Ethereum chain, bundle them into blocks and then organize them into a blockchain using a proof-of-stake based consensus mechanism. At the same moment, the original Ethereum clients turned off their mining, block propagation and consensus logic, handing that all over to the Beacon Chain. This event was known as [The Merge](/upgrades/merge/). Once The Merge happened, there were no longer two blockchains; there was just one proof-of-stake Ethereum chain. ## What did the Beacon Chain do? {#what-does-the-beacon-chain-do} @@ -57,7 +57,7 @@ The Ethereum upgrades are all somewhat interrelated. So let’s recap how the Be ### Beacon Chain and The Merge {#merge-and-beacon-chain} -The Beacon Chain, at first, existed separately to Ethereum Mainnet but they were merged together in 2022. +At first, The Beacon Chain existed separately from Ethereum Mainnet, but they were merged in 2022. The Merge From 7412787eeea7ffb767e41b8a49f647e78bf939da Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 11:43:00 +0100 Subject: [PATCH 071/183] Update src/content/developers/docs/intro-to-ether/index.md --- 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 d508dfe6208..8b72d2eeaba 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -34,7 +34,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 as a reward for each block proposed, and also at every epoch checkpoint for other validator activity related to reaching consensus. The total amount issued depends on the number of validators and how much ether they have staked. This total issuance is divided equally among validators in the ideal case that all validators are honest and online, but in reality it varies based on validator performance. About 1/8 of the total issuance goes to the block proposer, the remainder is distributed across the other validators. Block proposers also receive tips from transaction fees and MEV related income but these come from recycled ether, not fresh issuance. +Ether is minted as a reward for each block proposed and at every epoch checkpoint for other validator activity related to reaching consensus. The total amount issued depends on the number of validators and how much ether they have staked. This total issuance is divided equally among validators in the ideal case that all validators are honest and online, but in reality, it varies based on validator performance. About 1/8 of the total issuance goes to the block proposer; the remainder is distributed across the other validators. Block proposers also receive tips from transaction fees and MEV-related income, but these come from recycled ether, not new issuance. ## Burning ether {#burning-ether} From 72999eb00027f8bb7f898674eb06bf104869e00b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 11:45:19 +0100 Subject: [PATCH 072/183] Update src/content/developers/docs/consensus-mechanisms/index.md --- src/content/developers/docs/consensus-mechanisms/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/index.md b/src/content/developers/docs/consensus-mechanisms/index.md index 9a6f842762d..1388f221c70 100644 --- a/src/content/developers/docs/consensus-mechanisms/index.md +++ b/src/content/developers/docs/consensus-mechanisms/index.md @@ -37,7 +37,7 @@ Like Bitcoin, Ethereum once used a **proof-of-work (PoW)** based consensus proto #### Block creation {#pow-block-creation} -Blocks are created by validators. Each slot, one validator is randomly selected to be the block proposer. Their consensus client requests a bundle of transactions in the form of an 'execution payload' from their paired execution client. They wrap this in consensus data to form a block, which they send to other nodes on the Ethereum network. This block production is rewarded in ETH. In rare cases when multiple possible blocks exist for a single slot, or nodes hear about blocks at different times, the fork choice algorithm picks the block that forms the chain with the greatest weight of attestations (where weight is the number of validators attesting scaled by their ETH balance). +Validators create blocks. One validator is randomly selected in each slot to be the block proposer. Their consensus client requests a bundle of transactions as an 'execution payload' from their paired execution client. They wrap this in consensus data to form a block, which they send to other nodes on the Ethereum network. This block production is rewarded in ETH. In rare cases when multiple possible blocks exist for a single slot, or nodes hear about blocks at different times, the fork choice algorithm picks the block that forms the chain with the greatest weight of attestations (where weight is the number of validators attesting scaled by their ETH balance). #### Security {#pow-security} From ea06330e5e8e47cd2e073a665d59aea8362a85fd Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:20:36 +0100 Subject: [PATCH 073/183] Update src/content/nft/index.md --- src/content/nft/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/nft/index.md b/src/content/nft/index.md index c34b4b70f42..e311a1dc430 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -319,7 +319,7 @@ All these tasks are done by block producers and validators. Block proposers add #### NFT security {#nft-security} -Ethereum's security comes from its consensus mechanism which uses proof-of-stake. Validators deposit 32 ETH into a contract that can be destroyed if they misbehave. The system is designed to strongly economically disincentivize malicious actions, making Ethereum effectively tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ETH to change it. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT and the bad actor would be economically penalized and ejected from the pool of validators to prevent it from happening. +Ethereum's security comes from proof-of-stake. The system is designed to economically disincentivize malicious actions, making Ethereum tamper-proof. This is what makes NFTs possible. Once the block containing your NFT transaction becomes finalized it would cost an attacker millions of ETH to change it. Anyone running Ethereum software would immediately be able to detect dishonest tampering with an NFT, and the bad actor would be economically penalized and ejected. Security issues relating to NFTs are most often related to phishing scams, smart contract vulnerabilities or user errors (such as inadvertently exposing private keys), making good wallet security critical for NFT owners. From 59df9f7e06eddf8a625fbc8268f2bcf6cca5e2ef Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:27:02 +0100 Subject: [PATCH 074/183] Update src/content/developers/docs/consensus-mechanisms/pow/mining/index.md --- .../developers/docs/consensus-mechanisms/pow/mining/index.md | 4 +++- 1 file changed, 3 insertions(+), 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 10929b7b665..9bf4627c496 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,9 @@ sidebar: true --- - Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on The Merge, proof-of-stake and staking. This page is for historical interest! + + Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on [The Merge](/upgrades/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), and [staking](/staking/). This page is for historical interest. + ## Prerequisites {#prerequisites} From 925b1604f67a581447b41fe9851380c3f1b7d23f Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:32:50 +0100 Subject: [PATCH 075/183] Update src/content/staking/pools/index.md --- src/content/staking/pools/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/staking/pools/index.md b/src/content/staking/pools/index.md index 51749893ee4..f693d4565d8 100644 --- a/src/content/staking/pools/index.md +++ b/src/content/staking/pools/index.md @@ -67,7 +67,9 @@ Typically ERC-20 liquidity tokens are issued to stakers that represents the valu -Currently, withdrawing funds from an Ethereum validator is not possible, which limits the ability to actually redeem your liquidity token for the ETH rewards locked in the consensus layer. + +Currently, withdrawing funds from an Ethereum validator is not possible, which limits the ability to actually _redeem_ your liquidity token for the ETH rewards locked in the consensus layer. + Alternatively, pools that utilize an ERC-20 liquidity token allow users to trade this token in the open market, allowing you to sell your staking position, effectively "withdrawing" without actually removing ETH from the staking contract. From 28d34949031c9b9ed127747f96b62b87d6abc220 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:34:32 +0100 Subject: [PATCH 076/183] Update src/content/staking/solo/index.md --- src/content/staking/solo/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/staking/solo/index.md b/src/content/staking/solo/index.md index 0fcf330cac5..19de7421f97 100644 --- a/src/content/staking/solo/index.md +++ b/src/content/staking/solo/index.md @@ -126,7 +126,9 @@ Have a suggestion for a staking tool we missed? Check out our [product listing p These are a few of the most common questions about staking that are worth knowing about. -A validator is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A validator client is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. + +A _validator_ is a virtual entity that lives on Ethereum and participates in the consensus of the Ethereum protocol. Validators are represented by a balance, public key, and other properties. A _validator client_ is the software that acts on behalf of the validator by holding and using its private key. A single validator client can hold many key pairs, controlling many validators. + From 341a99ab2b33cd40e34a61907ae34e91ffa87c21 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:35:30 +0100 Subject: [PATCH 077/183] Update src/content/developers/docs/accounts/index.md --- src/content/developers/docs/accounts/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/accounts/index.md b/src/content/developers/docs/accounts/index.md index a9115f9edf3..68de0654b9a 100644 --- a/src/content/developers/docs/accounts/index.md +++ b/src/content/developers/docs/accounts/index.md @@ -97,7 +97,7 @@ Example: The contract address is usually given when a contract is deployed to the Ethereum Blockchain. The address comes from the creator's address and the number of transactions sent from that address (the “nonce”). -## Validator keys +## Validator keys {#validators-keys} There is also another type of key in Ethereum, introduced when Ethereum switched from proof-of-work to proof-of-stake based consensus. These are 'BLS' keys and they are used to identify validators. These keys can be efficiently aggregated to reduce the bandwidth required for the network to come to consensus. Without this key aggregation the minimum stake for a validator would be much higher. From 86031db3afc4dfa4850185eefb30ab5d6f58d277 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:37:43 +0100 Subject: [PATCH 078/183] Apply suggestions from code review --- .../developers/docs/consensus-mechanisms/pos/keys/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index 83714cd2408..862a7ff1f0b 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -9,13 +9,13 @@ Ethereum secures user's assets using public-private key cryptography. The public Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). -However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before - there were no changes to the elliptic-curve based keys securing accounts. However, for users that wanted to participate in proof-of-stake by staking ETH and running validators, a new type of key was needed. This need arose from scalability challenges associated with many messages passign between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. +However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before - there were no changes to the elliptic-curve-based keys securing accounts. However, users needed a new type of key for participating in proof-of-stake by staking ETH and running validators. This need arose from scalability challenges associated with many messages passing between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. -This new type of key uses the Boneh-Lyn-Shacham, [BLS](https://en.wikipedia.org/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham), signature scheme. This scheme enables very efficient aggregation of signatures but also allows reverse engineering of the individual validator keys that were aggregated - ideal for managing actions between validators. +This new type of key uses the [Boneh-Lyn-Shacham (BLS) signature scheme](https://wikipedia.org/wiki/BLS_digital_signature). BLS enables a very efficient aggregation of signatures but also allows reverse engineering of aggregated individual validator keys and is ideal for managing actions between validators. ## The two types of validator key {#two-types-of-key} -Before the switch to proof-of-stake, Ethereum users only had a single elliptic-curve based private key that they used to access their funds. With the introduction of proof-of-stake, users that wished to be solo stakers also required a **validator key** and a **withdrawal key**. +Before the switch to proof-of-stake, Ethereum users only had a single elliptic-curve-based private key to access their funds. With the introduction of proof-of-stake, users that wished to be solo stakers also required a **validator key** and a **withdrawal key**. ### The validator key {#validator-key} From ab20ad2edc4875003d43d60017d4c937518f119a Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:38:02 +0100 Subject: [PATCH 079/183] Update src/content/developers/docs/consensus-mechanisms/pos/keys/index.md --- .../developers/docs/consensus-mechanisms/pos/keys/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index 862a7ff1f0b..9155608d0c8 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that it can be cryptographically proven that some actionw as approved by the holder of a specific private key. +Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that cryptography can prove that the holder approves some action of a specific private key. Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). From e20a19d7d256df0ca0c832c684e9d5e44bee8a4f Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:41:49 +0100 Subject: [PATCH 080/183] Apply suggestions from code review --- .../developers/docs/consensus-mechanisms/pos/keys/index.md | 7 +++---- src/data/developer-docs-links.yaml | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index 9155608d0c8..18e8697c000 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -83,8 +83,7 @@ Each branch is separated by a `/` so `m/2` means start with the master key and f ![validator key logic](multiple-keys.png) -## Further Reading {#further-reading} +## Further reading {#further-reading} -[Ethereum Foundation blog post by Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) - -[EIP-2333 BLS12-381 key generation](https://eips.ethereum.org/EIPS/eip-2333) +- [Ethereum Foundation blog post by Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) +- [EIP-2333 BLS12-381 key generation](https://eips.ethereum.org/EIPS/eip-2333) diff --git a/src/data/developer-docs-links.yaml b/src/data/developer-docs-links.yaml index b395a95520e..874deb10edd 100644 --- a/src/data/developer-docs-links.yaml +++ b/src/data/developer-docs-links.yaml @@ -72,11 +72,11 @@ to: /developers/docs/consensus-mechanisms/pos/ items: - id: docs-nav-gasper - to: /developers/docs/consensus-mechanisms/pos/gasper + to: /developers/docs/consensus-mechanisms/pos/gasper/ - id: docs-nav-weak-subjectivity - to: /developers/docs/consensus-mechanisms/pos/weak-subjectivity + to: /developers/docs/consensus-mechanisms/pos/weak-subjectivity/ - id: docs-nav-keys - to: /developers/docs/consensus-mechanisms/pos/keys + to: /developers/docs/consensus-mechanisms/pos/keys/ - id: docs-nav-ethereum-stack path: /developers/docs/ items: From dc919d436ec5f71621262df056c0ef8129d196f9 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 1 Aug 2022 14:01:45 +0100 Subject: [PATCH 081/183] Update src/content/developers/docs/accounts/index.md --- src/content/developers/docs/accounts/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/accounts/index.md b/src/content/developers/docs/accounts/index.md index 68de0654b9a..7bd4495f0e0 100644 --- a/src/content/developers/docs/accounts/index.md +++ b/src/content/developers/docs/accounts/index.md @@ -101,7 +101,7 @@ The contract address is usually given when a contract is deployed to the Ethereu There is also another type of key in Ethereum, introduced when Ethereum switched from proof-of-work to proof-of-stake based consensus. These are 'BLS' keys and they are used to identify validators. These keys can be efficiently aggregated to reduce the bandwidth required for the network to come to consensus. Without this key aggregation the minimum stake for a validator would be much higher. -Read more about [validator keys](/developers/docs/consensus-mechanisms/pos/keys). +[More on validator keys](/developers/docs/consensus-mechanisms/pos/keys/). ## A note on wallets {#a-note-on-wallets} From 5dd4682be1c2efa55167d36d90ac24098b00b46a Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 1 Aug 2022 16:29:33 +0100 Subject: [PATCH 082/183] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/networking-layer/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/networking-layer/index.md b/src/content/developers/docs/networking-layer/index.md index cbe4d0af75c..fa91247c55f 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -11,7 +11,7 @@ Ethereum is a peer-to-peer network with thousands of nodes that must be able to There are two parts to the 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. -Execution clients gossip transactions over the execution-layer peer-to-peer network. This requires encrypted communication between authenticated peers. When a validator is selected toi propose a block, transactions from the node's local transaction pool 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. This requires two separate p2p networks - one connecting execution clients for transaction gossip and one connecting consensus clients for block gossip. +Execution clients gossip transactions over the execution-layer peer-to-peer network. This requires encrypted communication between authenticated peers. When a validator is selected to propose a block, transactions from the node's local transaction pool will be passed to consensus clients via a local RPC connection, which will be packaged into Beacon blocks. Consensus clients will then gossip Beacon blocks across their p2p network. This requires two separate p2p networks: one connecting execution clients for transaction gossip and one connecting consensus clients for block gossip. ## Prerequisites {#prerequisites} @@ -73,7 +73,7 @@ Along with the hello messages, the wire protocol can also send a "disconnect" me #### Wire protocol {#wire-protocol} -Once peers are connected and an RLPx session has been started, the wire protocol defines how peers communicate. Originally there were three main tasks defined by the wire protocol: chain synchronization, block propagation and transaction exchange. However, once Ethereum switched to proof-of-stake, block propagation and chain synchronization became part of the consensus layer. Transaction exchange is still in the remit of the execution clients. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc). +Once peers are connected, and an RLPx session has been started, the wire protocol defines how peers communicate. Initially, the wire protocol defined three main tasks: chain synchronization, block propagation and transaction exchange. However, once Ethereum switched to proof-of-stake, block propagation and chain synchronization became part of the consensus layer. Transaction exchange is still in the remit of the execution clients. Transaction exchange refers to exchanging pending transactions between nodes so that miners can select some of them for inclusion in the next block. Detailed information about these tasks is available [here](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Clients that support these sub-protocols expose them via the [JSON-RPC](/developers/docs/apis/json-rpc/). #### les (light ethereum subprotocol) {#les} @@ -121,7 +121,7 @@ SSZ stands for simple serialization. It uses fixed offsets that make it easy to ## Connecting the execution and consensus clients {#connecting-clients} -Both consensus and execution clients run in parallel. They need to be connected together so that the consensus client can provide instructions to the execution client and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. This communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share a ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). +Both consensus and execution clients run in parallel. They need to be connected so that the consensus client can provide instructions to the execution client, and the execution client can pass bundles of transactions to the consensus client to include in Beacon blocks. The communication between the two clients can be achieved using a local RPC connection. An API known as the ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md) defines the instructions sent between the two clients. Since both clients sit behind a single network identity, they share an ENR (Ethereum node record) which contains a separate key for each client (eth1 key and eth2 key). A summary of the control flow is shown below, with the relevant networking stack in brackets. From 2991e234d5c48bb47c19395aa1df295c6b47bee4 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 4 Aug 2022 09:47:53 +0100 Subject: [PATCH 083/183] rm link to mining forum --- src/content/community/online/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/content/community/online/index.md b/src/content/community/online/index.md index 32729d090e3..22edcec9e3e 100644 --- a/src/content/community/online/index.md +++ b/src/content/community/online/index.md @@ -15,7 +15,6 @@ Hundreds of thousands of Ethereum enthusiasts gather in these online forums to s r/ethfinance - the financial side of Ethereum, including DeFi r/ethdev - focused on Ethereum development r/ethtrader - trends & market analysis -r/EtherMining - focused on securing the Ethereum Network (mining) r/ethstaker - welcome to all interested in staking on Ethereum Fellowship of Ethereum Magicians - community oriented around technical standards in Ethereum Ethereum Stackexchange - discussion and help for Ethereum developers From add116dc7d846e7585c8d0ed472d5a8398a97254 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 4 Aug 2022 10:57:50 +0100 Subject: [PATCH 084/183] add consensus layer info to rpc page --- src/content/developers/docs/apis/json-rpc/index.md | 6 +++++- 1 file changed, 5 insertions(+), 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 69d9f7743f9..95004357e34 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -19,7 +19,11 @@ Ethereum clients each may utilize different programming languages when implement While you may choose to interact directly with Ethereum clients via the JSON-RPC API, there are often easier options for dapp developers. Many [JavaScript](/developers/docs/apis/javascript/#available-libraries) and [backend API](/developers/docs/apis/backend/#available-libraries) libraries exist to provide wrappers on top of the JSON-RPC API. With these libraries, developers can write intuitive, one-line methods in the programming language of their choice to initialize JSON-RPC requests (under the hood) that interact with Ethereum. -## Spec {#spec} +## Consensus Client APIs {#consensus-clients} + +This page deals mainly with the JSON-RPC API used by Ethereum execution clients. However, consensus clients also have an RPC API that allows users to query information about the node, request Beacon blocks, Beacon state and other consensus related information directly from a node. This API is documented on the [Beacon API webpage](https://ethereum.github.io/beacon-APIs/#/). There is also an internal API that is used for inter-client communication within a node - that is, it enables the consensus client and execution client to swap data. This is called the 'Engine API' and the specs are available on [Github](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). + +## Execution Client Spec {#spec} [Read the full JSON-RPC API spec on GitHub](https://github.com/ethereum/execution-apis). From 8fb556a190582d33df2511357c545ea0eac71a49 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 4 Aug 2022 11:20:58 +0100 Subject: [PATCH 085/183] add note on consensus client --- src/content/developers/docs/apis/javascript/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/content/developers/docs/apis/javascript/index.md b/src/content/developers/docs/apis/javascript/index.md index f3e381d0f14..7723101b918 100644 --- a/src/content/developers/docs/apis/javascript/index.md +++ b/src/content/developers/docs/apis/javascript/index.md @@ -11,6 +11,8 @@ For this purpose, every Ethereum client implements the [JSON-RPC](/developers/do If you want to use JavaScript to connect with an Ethereum node, it's possible to use vanilla JavaScript but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON RPC requests (under the hood) that interact with Ethereum. +Please note that since [The Merge](/upgrades/merge) two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. This page assumes that both clients are installed and running correctly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node). + ## Prerequisites {#prerequisites} As well as understanding JavaScript, it might be helpful to understand the [Ethereum stack](/developers/docs/ethereum-stack/) and [Ethereum clients](/developers/docs/nodes-and-clients/). From cb9d592a06a5ff5b710e182420123780db242ad8 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:06:57 +0100 Subject: [PATCH 086/183] Update src/content/developers/docs/apis/javascript/index.md --- src/content/developers/docs/apis/javascript/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/apis/javascript/index.md b/src/content/developers/docs/apis/javascript/index.md index 7723101b918..1dcdf6d56c9 100644 --- a/src/content/developers/docs/apis/javascript/index.md +++ b/src/content/developers/docs/apis/javascript/index.md @@ -11,7 +11,7 @@ For this purpose, every Ethereum client implements the [JSON-RPC](/developers/do If you want to use JavaScript to connect with an Ethereum node, it's possible to use vanilla JavaScript but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON RPC requests (under the hood) that interact with Ethereum. -Please note that since [The Merge](/upgrades/merge) two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. This page assumes that both clients are installed and running correctly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node). +Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. This page assumes that both clients are installed and running correctly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node/). ## Prerequisites {#prerequisites} From 80e8da07984e807d614bf7c6fa945d1b763ded36 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 4 Aug 2022 13:44:56 +0100 Subject: [PATCH 087/183] Update src/content/developers/docs/apis/json-rpc/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/apis/json-rpc/index.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index 95004357e34..ee60adc3921 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -19,11 +19,13 @@ Ethereum clients each may utilize different programming languages when implement While you may choose to interact directly with Ethereum clients via the JSON-RPC API, there are often easier options for dapp developers. Many [JavaScript](/developers/docs/apis/javascript/#available-libraries) and [backend API](/developers/docs/apis/backend/#available-libraries) libraries exist to provide wrappers on top of the JSON-RPC API. With these libraries, developers can write intuitive, one-line methods in the programming language of their choice to initialize JSON-RPC requests (under the hood) that interact with Ethereum. -## Consensus Client APIs {#consensus-clients} +## Consensus client APIs {#consensus-clients} -This page deals mainly with the JSON-RPC API used by Ethereum execution clients. However, consensus clients also have an RPC API that allows users to query information about the node, request Beacon blocks, Beacon state and other consensus related information directly from a node. This API is documented on the [Beacon API webpage](https://ethereum.github.io/beacon-APIs/#/). There is also an internal API that is used for inter-client communication within a node - that is, it enables the consensus client and execution client to swap data. This is called the 'Engine API' and the specs are available on [Github](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). +This page deals mainly with the JSON-RPC API used by Ethereum execution clients. However, consensus clients also have an RPC API that allows users to query information about the node, request Beacon blocks, Beacon state, and other consensus-related information directly from a node. This API is documented on the [Beacon API webpage](https://ethereum.github.io/beacon-APIs/#/). -## Execution Client Spec {#spec} +An internal API is also used for inter-client communication within a node - that is, it enables the consensus client and execution client to swap data. This is called the 'Engine API' and the specs are available on [Github](https://github.com/ethereum/execution-apis/blob/main/src/engine/specification.md). + +## Execution client spec {#spec} [Read the full JSON-RPC API spec on GitHub](https://github.com/ethereum/execution-apis). From 03aba3f7e8df8425e3914cc27e3100f989697181 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:25:16 +0100 Subject: [PATCH 088/183] Update src/content/developers/docs/apis/javascript/index.md Co-authored-by: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> --- src/content/developers/docs/apis/javascript/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/apis/javascript/index.md b/src/content/developers/docs/apis/javascript/index.md index 1dcdf6d56c9..1e7ccf4db80 100644 --- a/src/content/developers/docs/apis/javascript/index.md +++ b/src/content/developers/docs/apis/javascript/index.md @@ -11,7 +11,7 @@ For this purpose, every Ethereum client implements the [JSON-RPC](/developers/do If you want to use JavaScript to connect with an Ethereum node, it's possible to use vanilla JavaScript but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON RPC requests (under the hood) that interact with Ethereum. -Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. This page assumes that both clients are installed and running correctly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node/). +Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. Please ensure your node includes both an execution and consensus client. If your node is not on your local machine (e.g. your node is running on an AWS instance) update the IP addresses in the tutorial accordingly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node/). ## Prerequisites {#prerequisites} From b507c9a997b02d0c6b2ad8aedc30a0e5e463ef29 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:25:38 +0100 Subject: [PATCH 089/183] Update src/content/developers/docs/apis/javascript/index.md --- src/content/developers/docs/apis/javascript/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/apis/javascript/index.md b/src/content/developers/docs/apis/javascript/index.md index 1e7ccf4db80..39be9dba787 100644 --- a/src/content/developers/docs/apis/javascript/index.md +++ b/src/content/developers/docs/apis/javascript/index.md @@ -11,7 +11,7 @@ For this purpose, every Ethereum client implements the [JSON-RPC](/developers/do If you want to use JavaScript to connect with an Ethereum node, it's possible to use vanilla JavaScript but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON RPC requests (under the hood) that interact with Ethereum. -Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. Please ensure your node includes both an execution and consensus client. If your node is not on your local machine (e.g. your node is running on an AWS instance) update the IP addresses in the tutorial accordingly. For more information please see [Run a Node](/developers/docs/nodes-and-clients/run-a-node/). +Please note that since [The Merge](/upgrades/merge/), two connected pieces of Ethereum software - an execution client and a consensus client - are required to run a node. Please ensure your node includes both an execution and consensus client. If your node is not on your local machine (e.g. your node is running on an AWS instance) update the IP addresses in the tutorial accordingly. For more information please see our page on [running a node](/developers/docs/nodes-and-clients/run-a-node/). ## Prerequisites {#prerequisites} From 3173f7351514bfed28ee18db4b3bf353b01581b0 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:27:25 +0100 Subject: [PATCH 090/183] Update src/content/security/index.md --- src/content/security/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/security/index.md b/src/content/security/index.md index 77f88a0cbde..ad49d03482c 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -248,7 +248,7 @@ These fraudulent brokers find their targets by using fake accounts on YouTube to ### Crypto mining pool scams {#mining-pool-scams} -Ethereum mining was switched off in 2022. However, mining pool scams still exist. Mining pool scams involve people contacting you unsolicited, and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. +As of September 2022, mining on Ethereum is no longer possible. However, mining pool scams still exist. Mining pool scams involve people contacting you unsolicited and claiming that you can make large returns by joining an Ethereum mining pool. The scammer will make claims and stay in contact with you for however long it takes. Essentially, the scammer will try and convince you that when you join an Ethereum mining pool, your cryptocurrency will be used to create ETH and that you will be paid dividends in the form of ETH. What will end up happening is, you will notice that your cryptocurrency is making small returns. This is simply to bait you into investing more. Eventually, all of your funds will be sent to an unknown address, and the scammer will either disappear or in some cases will continue to stay in touch as has happened in a recent case. Bottom line, be wary of people who contact you on social media asking for you to be part of a mining pool. Once you lose your crypto, it is gone. From dc47671d924b38a96918cdb6faa0a1bbba3006ad Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:28:30 +0100 Subject: [PATCH 091/183] Update src/content/security/index.md --- src/content/security/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/security/index.md b/src/content/security/index.md index ad49d03482c..59a5e30c9af 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -218,7 +218,7 @@ As a general rule, staff will never communicate with you through private, unoffi In the run up to [The Merge](/upgrades/merge/), scammers took advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2' and no other legitimate token was introduced with The Merge. The ETH that you owned before The Merge is the same ETH now, there is **no need to take any action related to your ETH to account for the switch from proof-of-work to proof-of-stake**. -Scammers may appear in the form of "support" telling you if you deposit your ETH you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. +Scammers may appear as "support", telling you that if you deposit your ETH, you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. _Note: There are derivative tokens/tickers that may represent staked ETH (ie. rETH from Rocket Pool, stETH from Lido, ETH2 from Coinbase), but these are not something you need to "migrate to."_ From b77c243fd86898bdd058c0a95bbf0fb10a4b7a31 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:28:35 +0100 Subject: [PATCH 092/183] Update src/content/security/index.md --- src/content/security/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/security/index.md b/src/content/security/index.md index 59a5e30c9af..1df3a6edf35 100644 --- a/src/content/security/index.md +++ b/src/content/security/index.md @@ -216,7 +216,7 @@ As a general rule, staff will never communicate with you through private, unoffi ### 'Eth2' token scam {#eth2-token-scam} -In the run up to [The Merge](/upgrades/merge/), scammers took advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2' and no other legitimate token was introduced with The Merge. The ETH that you owned before The Merge is the same ETH now, there is **no need to take any action related to your ETH to account for the switch from proof-of-work to proof-of-stake**. +In the run-up to [The Merge](/upgrades/merge/), scammers took advantage of the confusion around the term 'Eth2' to try and get users to redeem their ETH for an 'ETH2' token. There is no 'ETH2', and no other legitimate token was introduced with The Merge. The ETH that you owned before The Merge is the same ETH now. There is **no need to take any action related to your ETH to account for the switch from proof-of-work to proof-of-stake**. Scammers may appear as "support", telling you that if you deposit your ETH, you will receive back 'ETH2'. There is no [official Ethereum support](/community/support/), and there is no new token. Never share your wallet seed phrase with anyone. From fa6ce17e8da82573bef6a1523d571c2e5cc4cdad Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:33:42 +0100 Subject: [PATCH 093/183] Update src/content/developers/docs/consensus-mechanisms/pow/mining/index.md --- .../developers/docs/consensus-mechanisms/pow/mining/index.md | 2 -- 1 file changed, 2 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 9bf4627c496..77f31871f26 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -67,8 +67,6 @@ Watch Austin walk you through mining and the proof-of-work blockchain. Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). -The algorithm is based around the provision of a large, transient, randomly generated dataset which forms a [Directed Acyclic Graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph) (the Dagger part), with miners attempting to solve a particular constraint on it, partly determined through a block’s header-hash. This has high memory-access bandwidth requirements but could be run using a modest processor, making it GPU-friendly but resistant to the type of ASIC-driven hardware arms race that could pose a centralization risk (more on [problems with ASICS](https://www.investopedia.com/investing/why-centralized-crypto-mining-growing-problem/)). ASICs for Ethereum mining were eventually developed, but the majority of mining on Ethereum was nevertheless done using GPUs. - More information on these mining algorithms is available at our [mining algorithms page](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). ## Further reading {#further-reading} From 4c64e2eaef9f81e045acfad4e3673b4f15d34041 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:34:19 +0100 Subject: [PATCH 094/183] 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 77f31871f26..07954ba3849 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -67,7 +67,7 @@ Watch Austin walk you through mining and the proof-of-work blockchain. Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). -More information on these mining algorithms is available at our [mining algorithms page](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). +[More on mining algorithms](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). ## Further reading {#further-reading} From 55ede771ae1d6ac1c8951a85fb9b24b6b4618625 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:34:55 +0100 Subject: [PATCH 095/183] 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 07954ba3849..7c92c9e1866 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -65,7 +65,7 @@ Watch Austin walk you through mining and the proof-of-work blockchain. ## The mining algorithm {#mining-algorithm} -Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). This was a successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). +Ethereum Mainnet only ever used one mining algorithm - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). Ethhash was the successor to an original R&D algorithm known as ['Dagger-Hashamoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashamoto). [More on mining algorithms](/developers/docs/consensus-mechanisms/pow/mining-algorithms/). From d513bd2f0b4f75880c19c29a3e44a8d571cbd8b9 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:37:57 +0100 Subject: [PATCH 096/183] 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 7c92c9e1866..a0480bc8056 100644 --- a/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -1,6 +1,6 @@ --- title: Mining -description: An explanation of how mining works in Ethereum and how it helps keep Ethereum secure and decentralized. +description: An explanation of how mining worked on Ethereum. lang: en sidebar: true --- From 48febd73b4cfa7cf3396cbbf0e205392129a6764 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:21:47 +0100 Subject: [PATCH 097/183] Update src/content/developers/docs/consensus-mechanisms/pos/index.md --- 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 2d29321ad7f..4cc9b880e5b 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/index.md @@ -67,7 +67,7 @@ Overall, proof-of-stake, as it is implemented on Ethereum, has been demonstrated - [The Beacon Chain Ethereum 2.0 explainer you need to read first](https://ethos.dev/beacon-chain/) _Ethos.dev_ - [Why Proof of Stake (Nov 2020)](https://vitalik.ca/general/2020/11/06/pos2020.html) _Vitalik Buterin_ - [Proof of Stake: How I Learned to Love Weak Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ -- [PoS Ethereum attack and defense](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Proof-of-stake Ethereum attack and defense](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) - [A Proof of Stake Design Philosophy](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ ## Related topics {#related-topics} From 656da21435feace66d622fd6ac4bf39777c4b2a8 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:03:03 +0100 Subject: [PATCH 098/183] Apply suggestions from code review Co-authored-by: Corwin Smith --- src/content/developers/docs/mev/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 3ea3eb129a6..4e31fc5bb8c 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -8,7 +8,7 @@ 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. -### Miner extractable value +### Maximal extractable value {#maximal-extractable-value} Maximal extractable value was first applied in the context of [proof-of-work](/developers/docs/consensus-mechanisms/pow/), and initially referred to as "miner extractable value". This is because in proof-of-work, miners control transaction inclusion, exclusion, and ordering. However, since the transition to proof-of-stake via [The Merge](/upgrades/merge) validators have been responsible for these roles, and mining is no longer part of the Ethereum protocol. The value extraction methods still exist, though, so the term "Maximal extractable value" is now used instead. @@ -104,7 +104,7 @@ At the network layer, generalized frontrunners and the gas-price auctions they o Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, validators may be incentivized to remine blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. -This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for validators to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. +This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for miners to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. ## State of MEV {#state-of-mev} @@ -112,7 +112,7 @@ MEV extraction ballooned in early 2021, resulting in extremely high gas prices i 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, 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 validators 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. -On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing effort to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guarantees block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user activity is ported away from Ethereum and onto its Layer-2 rollups and shards. +On the other hand, the transition from proof-of-work to proof-of-stake and the ongoing effort to scale Ethereum using rollups and sharding all change the MEV landscape in ways that are still somewhat unclear. It is not yet well known how having guaranteed block-proposers known slightly in advance changes the dynamics of MEV extraction compared to the probabilistic model in proof-of-work or how this will be disrupted when [single secret leader election](https://ethresear.ch/t/secret-non-single-leader-election/11789) and [distributed validator technology](https://github.com/ethereum/distributed-validator-specs) get implemented. Similarly, it remains to be seen what MEV opportunities exist when most user activity is ported away from Ethereum and onto its Layer-2 rollups and shards. ## Related resources {#related-resources} From 8f3aaff4e660e97abb14edab4a6b09bc826f640e Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 15 Aug 2022 12:31:00 +0100 Subject: [PATCH 099/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../consensus-mechanisms/pos/keys/index.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index 18e8697c000..f25af583ded 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -5,15 +5,15 @@ lang: en sidebar: true --- -Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address - that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that cryptography can prove that the holder approves some action of a specific private key. +Ethereum secures user's assets using public-private key cryptography. The public key is used as the basis for an Ethereum address—that is, it is visible to the general public and used as a unique identifier. The private (or 'secret') key should only ever be accessible to an account owner. The private key is used to 'sign' transactions and data so that cryptography can prove that the holder approves some action of a specific private key. Ethereum's keys are generated using [elliptic-curve cryptography](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). -However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before - there were no changes to the elliptic-curve-based keys securing accounts. However, users needed a new type of key for participating in proof-of-stake by staking ETH and running validators. This need arose from scalability challenges associated with many messages passing between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. +However, when Ethereum switched from [proof-of-work](/developers/docs/consensus-mechanisms/pow) to [proof-of-stake](/developers/docs/consensus-mechanisms/pos) a new type of key was added to Ethereum. The original keys still work exactly the same as before—there were no changes to the elliptic-curve-based keys securing accounts. However, users needed a new type of key for participating in proof-of-stake by staking ETH and running validators. This need arose from scalability challenges associated with many messages passing between large numbers of validators that required a cryptographic method that could easily be aggregated to reduce the amount of communication required for the network to come to consensus. This new type of key uses the [Boneh-Lyn-Shacham (BLS) signature scheme](https://wikipedia.org/wiki/BLS_digital_signature). BLS enables a very efficient aggregation of signatures but also allows reverse engineering of aggregated individual validator keys and is ideal for managing actions between validators. -## The two types of validator key {#two-types-of-key} +## The two types of validator keys {#two-types-of-keys} Before the switch to proof-of-stake, Ethereum users only had a single elliptic-curve-based private key to access their funds. With the introduction of proof-of-stake, users that wished to be solo stakers also required a **validator key** and a **withdrawal key**. @@ -26,15 +26,15 @@ The validator signing key consists of two elements: The purpose of the validator private key is to actively sign on-chain operations such as block proposals and attestations. Therefore these keys have to be held in a hot wallet. -This flexibility has the advantage to move validator signing keys very quickly from one device to another, however, if they have gotten lost or stolen, a thief may be able to **act maliciously** in the following ways: +This flexibility has the advantage of moving validator signing keys very quickly from one device to another, however, if they have gotten lost or stolen, a thief may be able to **act maliciously** in a few ways: -- Get the validator slashed) by: +- Get the validator slashed by: - Being a proposer and signing two different beacon blocks for the same slot - - Being an attester and signing an attestation that "surrounds" another one. - - Being an attester and signing two different attestations having the same target. -- Force a voluntary exit, which stops the validator from staking, and grants access to its ETH balance to the withdrawal key owner. + - Being an attester and signing an attestation that "surrounds" another one + - Being an attester and signing two different attestations having the same target +- Force a voluntary exit, which stops the validator from staking, and grants access to its ETH balance to the withdrawal key owner -The **validator public key** is included in the _deposit data_ which allows Ethereum to identify the validator. +The **validator public key** is included in the transaction data when a user deposits ETH to the staking deposit contract. This is known as the _deposit data_ and it allows Ethereum to identify the validator. ### The withdrawal key {#withdrawal-key} @@ -43,13 +43,13 @@ The withdrawal key will be required to move the validator balance after this is - Withdrawal **private** key - Withdrawal **public** key -Losing this key means losing access to the validator balance. However, the validator can still sign attestations and blocks since these actions require the validator private key, but there is little to no incentive to do so if the keys are lost. +Losing this key means losing access to the validator balance. However, the validator can still sign attestations and blocks since these actions require the validator's private key, but there is little to no incentive if the withdrawal keys are lost. -Separating out the validator keys from the Ethereum account keys enables multiple validators to be run by a single user. +Separating the validator keys from the Ethereum account keys enables multiple validators to be run by a single user. ![validator key schematic](validator-key-schematic.png) -## Deriving keys from other keys {#deriving-keys-from-keys} +## Deriving keys from a seed phrase {#deriving-keys-from-seed} If every 32 ETH staked required a new set of 2 completely independent keys to be created, key management would quickly become unwieldy especially for users running multiple validators. To get around this problem, multiple validator keys can be derived from a single common secret. Storing that single secret allows access to multiple validator keys. From 1a059f5e6f42745b5cc2a0405d9d24df91dd931f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 16 Aug 2022 00:11:29 +0200 Subject: [PATCH 100/183] Apply suggestions from code review Co-authored-by: Corwin Smith --- 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 68174231812..188e1852304 100644 --- a/src/content/upgrades/merge/index.md +++ b/src/content/upgrades/merge/index.md @@ -29,7 +29,7 @@ Throughout Ethereum's history, developers prepared for an eventual transition aw The Beacon Chain was not originally processing Mainnet transactions. Instead, it was reaching consensus on its own state by agreeing on active validators and their account balances. After extensive testing, it became time for the Beacon Chain to reach consensus on real world data. After The Merge, the Beacon Chain became the consensus engine for all network data, including execution layer transactions and account balances. -The Merge represented the official switch to using the Beacon Chain as the engine of block production. Mining is no longer be the means of producing valid blocks. Instead, the proof-of-stake validators have adopted this role and are now responsible for processing the validity of all transactions and proposing blocks. +The Merge represented the official switch to using the Beacon Chain as the engine of block production. Mining is no longer the means of producing valid blocks. Instead, the proof-of-stake validators have adopted this role and are now responsible for processing the validity of all transactions and proposing blocks. No history was lost in The Merge. As Mainnet merged with the Beacon Chain, it also merged the entire transactional history of Ethereum. @@ -69,7 +69,7 @@ title="Non-validating node operators and infrastructure providers" contentPreview="If you're operating a non-validating Ethereum node, the most significant change that came with The Merge was the requirement to run clients for BOTH the execution layer AND the consensus layer." id="node-operators"> -Up until The Merge, an execution client (such as Geth, Erigon, Besu or Nethermind) 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 now also also depends on the validity of the "consensus block" it is contained within. +Up until The Merge, an execution client (such as Geth, Erigon, Besu or Nethermind) 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 now also depends on the validity of the "consensus block" it is contained within. As a result, a full Ethereum node now requires both an execution client and a consensus 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. From 7f9127838cd0b9861b35f5d51856a9535e268677 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 17 Aug 2022 14:04:15 +0100 Subject: [PATCH 101/183] update block explorers page --- .../block-explorers/index.md | 40 +++++-------------- 1 file changed, 10 insertions(+), 30 deletions(-) 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 20149a2568b..f68d199d2cf 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,7 +4,6 @@ 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. @@ -25,46 +24,33 @@ You should understand the basic concepts of Ethereum so you can make sense of th ## Data {#data} -Ethereum is transparent by design so everything is verifiable. Block explorers provide an interface for getting this information. And this is for both the main Ethereum network and the testnets, should you need that data. +Ethereum is transparent by design so everything is verifiable. Block explorers provide an interface for getting this information. And this is for both the main Ethereum network and the testnets, should you need that data. Data is divided into execution data and consensus data. The execution data refers to the transactions that have been executed in a specific block. The consensus data refers to the blocks themselves and the validators who proposed them. Here's a summary of the types of data you can get from a block explorer. -### Blocks {#blocks} +### Execution data {#execution-data} -New blocks are added to Ethereum every ~12 seconds (this can fluctuate) so there's a near-constant stream of data that gets added to block explorers. Blocks contain a lot of important data that you may find useful: +New blocks are added to Ethereum every 12 seconds (unless a block proposer misses its cue) so there's a near-constant stream of data that gets added to block explorers. Blocks contain a lot of important data that you may find useful: **Standard data** - Block height – The block number and length of the blockchain (in blocks) on creation of the current block. - Timestamp – The time at which a miner mined the block. - Transactions – The number of transactions included within the block. -- Miner – The address of the miner who mined the block. -- Reward – The amount of ETH awarded to the miner for adding the block (standard 2ETH reward + any transaction fees of transactions included in the block). -- Difficulty – The difficulty associated with mining the block. +- Fee recipient – The address that received gas fee tips from transactions +- Block Reward – The amount of ETH awarded to the validator who proposed the block. - Size – The size of the data within the block (measured in bytes). - Gas used – The total units of gas used by the transactions in the block. - Gas limit – The total gas limits set by the transactions in the block. +- Base fee per gas - minimum multiplier required for a transaction to be included in a block +- Burnt fees - how much ether is burned in the block - Extra data – Any extra data the miner has included in the block. **Advanced data** - Hash – The cryptographic hash that represents the block header (the unique identifier of the block). - Parent hash – The hash of the block that came before the current block. -- Sha3Uncles – The combined hash of all uncles for a given parent. - StateRoot – The root hash of Merkle trie which stores the entire state of the system. -- Nonce – A value used to demonstrate proof-of-work for a block by the miner. - -**Uncle blocks** - -Uncle blocks are created when two miners create blocks at near-enough the same time – only one block can be validated across the nodes. They are not included but still receive a reward for the work. - -Block explorers provide information about uncle blocks like: - -- An uncle block number. -- A time they occurred. -- The block height at which they were created. -- Who mined it. -- The ETH reward. ### Gas {#gas} @@ -140,10 +126,8 @@ Tokens are a type of contract so they'll have similar data to a smart contract. ### Network {#network} -Of course there's some data that speaks to the health of the network. These are quite specific to Ethereum's proof-of-work consensus mechanism. When Ethereum transitions to proof-of-stake some of this data will be redundant +Of course there's some data that speaks to the health of the network. -- Difficulty – The current mining difficulty. -- Hash rate – An estimate of how many hashes are being generated by Ethereum miners trying to solve the current Ethereum block or any given block. - Total transactions – The number of transactions since Ethereum was created. - Transactions per second – The number of transactions processable within a second. - ETH price – The current valuations of 1 ETH. @@ -152,13 +136,9 @@ Of course there's some data that speaks to the health of the network. These are ## Consensus layer data {#consensus-layer-data} -The scalability upgrades are still in development but it's worth talking about some of the data points that explorers will be able to provide you. In fact, all of this data is available right now for the testnets. - -If you're not familiar with the road map, check out [our overview of the Ethereum upgrades](/upgrades/). - ### Epoch {#epoch} -The Beacon Chain will create committees of validators which are randomized at the end of every epoch (every 6.4 minutes) for security reasons. Epoch data includes: +Randomized committees of validators are created at the end of every epoch (every 6.4 minutes) for security reasons. Epoch data includes: - Epoch number. - Finalized status – Whether the epoch has been finalized (Yes/No). @@ -198,7 +178,7 @@ Slots are opportunities for block creation, the data available for each slot inc ### Blocks {#blocks-1} -Consensus layer blocks work differently because miners are replaced by validators and the Beacon Chain introduces slots and epochs to Ethereum. So that means new data! +Proof-of-stake divides time into slots and epochs. So that means new data! - Proposer – The validator that was algorithmically chosen to propose the new block. - Epoch – The epoch in which the block was proposed. From ae849f83b2f619e58ffa286554099ab4fc544203 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 17 Aug 2022 14:04:33 +0100 Subject: [PATCH 102/183] rm mining link --- .../developers/docs/data-and-analytics/block-explorers/index.md | 1 - 1 file changed, 1 deletion(-) 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 f68d199d2cf..7b6aef664b2 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 @@ -251,7 +251,6 @@ _Know of a community resource that helped you? Edit this page and add it!_ ## Related topics {#related-topics} -- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) - [Transactions](/developers/docs/transactions/) - [Accounts](/developers/docs/accounts/) - [Networks](/developers/docs/networks/) From 949c153cbd1b7e5181a72b6c4ed2fe9c434d6394 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 17 Aug 2022 14:53:04 +0100 Subject: [PATCH 103/183] update uniswap tutorial --- .../tutorials/uniswap-v2-annotated-code/index.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md index b30ec19e106..8fab4a11c44 100644 --- a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -27,12 +27,11 @@ When liquidity providers want their assets back they can burn the pool tokens an ### Why v2? Why not v3? {#why-v2} -As I'm writing this, [Uniswap v3](https://uniswap.org/whitepaper-v3.pdf) is almost ready. However, it is an upgrade that is much more complicated than the original. It is easier to first learn v2 and then go to v3. +[Uniswap v3](https://uniswap.org/whitepaper-v3.pdf) is an upgrade that is much more complicated than the v2. It is easier to first learn v2 and then go to v3. ### Core Contracts vs Periphery Contracts {#contract-types} -Uniswap v2 is divided into two components, a core and a periphery. This division allows the core contracts, which hold the assets and therefore _have_ to be secure, to be simpler and easier to audit. -All the extra functionality required by traders can then be provided by periphery contracts. +Uniswap v2 is divided into two components, a core and a periphery. This division allows the core contracts, which hold the assets and therefore _have_ to be secure, to be simpler and easier to audit. All the extra functionality required by traders can then be provided by periphery contracts. ## Data and Control Flows {#flows} @@ -1011,7 +1010,7 @@ For example, imagine a case where the exchange rate is one to one and the liquid As long as the exchange rate stays between 0.9 and 1.25, the transaction takes place. If the exchange rate gets out of that range, the transaction gets cancelled. -The reason for this precaution is that transactions are not immediate, you submit them and eventually a miner is going to include them in a block (unless your gas price is very low, in which case you'll need to submit another transaction with the same nonce and a higher gas price to overwrite it). You cannot control what happens during the interval between submission and inclusion. +The reason for this precaution is that transactions are not immediate, you submit them and eventually a validator is going to include them in a block (unless your gas price is very low, in which case you'll need to submit another transaction with the same nonce and a higher gas price to overwrite it). You cannot control what happens during the interval between submission and inclusion. ```solidity ) internal virtual returns (uint amountA, uint amountB) { From 9b14ba37ccc299d9b67ba7a1857a596bbdba5f59 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 09:45:42 +0100 Subject: [PATCH 104/183] update community support page --- src/content/community/support/index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/content/community/support/index.md b/src/content/community/support/index.md index b92b4fa5338..ebff5c4d5f8 100644 --- a/src/content/community/support/index.md +++ b/src/content/community/support/index.md @@ -107,4 +107,8 @@ Transactions on Ethereum can sometimes get stuck if you have submitted a lower t #### How do I mine Ethereum? {#mining-ethereum} -We do not recommend buying mining equipment if you are not already mining Ethereum. In ~Q3/Q4 2022, [The Merge](/upgrades/merge/) will happen, switching Ethereum from proof-of-work to proof-of-stake. This change means mining Ethereum will no longer be possible. If you are still interested in mining Ethereum, you can seek help from mining communities, such as [/r/EtherMining](https://www.reddit.com/r/EtherMining/). +Ethereum mining is no longer possible. Ethereum mining was switched off when the network moved from proof-of-work to proof-of-stake. Now, instead of miners, Ethereum has validators. Validators stake ether and receive staking rewards for securing the network. + +#### How do I become a staker/validator? + +To become a validator you are required to stake 32 ETH in the Ethereum deposit contract and set up a validator node. More information is available on our [staking pages](/staking) and at the staking [launchpad](https://launchpad.ethereum.org/). From d6a8bba5a2db1f2d07abe949589f0582d15d8ef4 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 09:49:33 +0100 Subject: [PATCH 105/183] rm difficulty/miner from json --- src/content/developers/tutorials/using-websockets/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/content/developers/tutorials/using-websockets/index.md b/src/content/developers/tutorials/using-websockets/index.md index 13ac73a98d4..100e9bd2bd9 100644 --- a/src/content/developers/tutorials/using-websockets/index.md +++ b/src/content/developers/tutorials/using-websockets/index.md @@ -145,13 +145,11 @@ Example: "method": "eth_subscription", "params": { "result": { - "difficulty": "0x15d9223a23aa", "extraData": "0xd983010305844765746887676f312e342e328777696e646f7773", "gasLimit": "0x47e7c4", "gasUsed": "0x38658", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "miner": "0xf8b483dba2c3b7176a3da549ad41a48bb3121069", "nonce": "0x084149998194cc5f", "number": "0x1348c9", "parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701", From a6a45c63de9fe97f90a6607f6eb1b7b5ca4b0f56 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 10:00:45 +0100 Subject: [PATCH 106/183] update naas page --- .../nodes-as-a-service/index.md | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) 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 21b63b6d2f4..77e155434e5 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 @@ -11,12 +11,18 @@ preMergeBanner: true 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/). +## Stakers + +Solo stakers are required torun their own infrastructure rather than relying on third party providers. This means running an execution client coupled to a consensus client. Before [The Merge](/upgrades/merge) it was possible to run a consensus client only and use a centralized provider for execution data. This is no longer possible - a solo staker must run both clients. There are services available to ease this process. + +Read more about [running a node](/developers/docs/nodes-and-clients/run-a-node/index.md). + +The node services described on this page generally offer non-staking node functionality. + ## How do node services work? {#how-do-node-services-work} Node service providers run distributed node clients behind the scenes for you, so you don't have to. @@ -199,16 +205,13 @@ Here is a list of some of the most popular Ethereum node providers, feel free to - Suitable for Developers to Enterprises - [**Rivet**](https://rivet.cloud/) - [Docs](https://rivet.readthedocs.io/en/latest/) - - Features - - Free tier option - - Scale as you go --[**SenseiNode**](https://senseinode.com) + - Features - Free tier option - Scale as you go -[**SenseiNode**](https://senseinode.com) - [Docs](https://docs.senseinode.com/) - - Features - - Dedicated and Share nodes - - Dashboard - - Hosting off AWS on multiple hosting providers accross different locations in Latin America - - Prysm and Lighthouse clients + - Features + - Dedicated and Share nodes + - Dashboard + - Hosting off AWS on multiple hosting providers accross different locations in Latin America + - Prysm and Lighthouse clients - [**SettleMint**](https://console.settlemint.com/) - [Docs](https://docs.settlemint.com/) - Features From ba68d98f58b013a122819884c63fcafbd9b2a0da Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 10:23:03 +0100 Subject: [PATCH 107/183] update data and analytics page --- .../developers/docs/data-and-analytics/index.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/data-and-analytics/index.md b/src/content/developers/docs/data-and-analytics/index.md index 0106aa3f3c7..ede8ea7662f 100644 --- a/src/content/developers/docs/data-and-analytics/index.md +++ b/src/content/developers/docs/data-and-analytics/index.md @@ -25,12 +25,23 @@ Using [GraphQL](https://graphql.org/), developers can query any of the curated o ## Block explorers {#block-explorers} -Many [Block Explorers](/developers/docs/data-and-analytics/block-explorers/) offer [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) gateways that will provide developers visibility into real-time data on blocks, transactions, miners, accounts, and other on-chain activity. +Many [Block Explorers](/developers/docs/data-and-analytics/block-explorers/) offer [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) gateways that will provide developers visibility into real-time data on blocks, transactions, validators, accounts, and other on-chain activity. Developers can then process and transform this data to give their users unique insights and interactions with the [blockchain](/glossary/#blockchain). +For example, [Etherscan](etherscan.io) provides execution and consensus data for every 6s slot. + +## Client diversity + +Client diversity is important for the overall health of the Ethereum network because it provides resilience to bugs and exploits. There are now several cl;eint diversity dashboards including [clientdiversity.org](https://clientdiversity.org/), [rated.network](rated.network), [pool.invis.cloud](pool.invis.cloud), [slashed.info](slahed.info) and [Ethernodes](https://ethernodes.org/). + +## Dune analytics + +[Dune analytics](https://docs.dune.com/) aggregates blockchain data into SQL databases that can be queried and used to create visualizations and dashboards. + ## Further Reading {#further-reading} - [Graph Network Overview](https://thegraph.com/docs/en/about/network/) - [Graph Query Playground](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) - [API code examples on EtherScan](https://etherscan.io/apis#contracts) +- [Beaconcha.in beacon chaion explorer](beaconcha.in) From 0f32a41fcda7295448e5a397206dbd6113c997fa Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 11:03:28 +0100 Subject: [PATCH 108/183] update guide to ethereum tutorial --- .../index.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index 969e69dc971..d841c004610 100644 --- a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -34,7 +34,6 @@ There are many ways to describe Ethereum, but at its heart is a blockchain. Bloc "number": 1234567, "hash": "0xabc123...", "parentHash": "0xdef456...", - "miner": "0xa1b2c3...", ..., "transactions": [...] } @@ -58,7 +57,7 @@ This new decentralized tech stack has spawned new developer tools. Such tools ex Python developers that want to interact with Ethereum are likely to reach for [Web3.py](https://web3py.readthedocs.io/). Web3.py is a library that greatly simplifies the way you connect to an Ethereum node, then send and receive data from it. -

+ [Ethereum clients](/developers/docs/nodes-and-clients/) can be configured to be reachable by [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP, or Websockets, so Web3.py will need to mirror this configuration. Web3.py refers to these connection options as **providers**. You’ll want to choose one of the three providers to link the Web3.py instance with your node. @@ -236,13 +235,13 @@ Out[9]: AttributeDict({ A lot of information gets returned about a block, but just a couple things to point out here: -- The block number is zero — no matter how long ago you configured the tester provider. Unlike the real Ethereum network, which mines a new block roughly every 15 seconds, this simulation will wait until you give it some work to do. +- The block number is zero — no matter how long ago you configured the tester provider. Unlike the real Ethereum network, which adds a new block every 12 seconds, this simulation will wait until you give it some work to do. - `transactions` is an empty list, for the same reason: we haven’t done anything yet. This first block is an **empty block**, just to kick off the chain. - Notice that the `parentHash` is just a bunch of empty bytes. This signifies that it's the first block in the chain, also known as the **genesis block**. ## Tour stop #3: [transactions](/developers/docs/transactions/) {#tour-stop-3-transactions} -We’re stuck at block zero until there’s a transaction to mine, so let’s give it one. Send a few test ether from one account to another: +We’re stuck at block zero until there’s a pending transaction, so let’s give it one. Send a few test ether from one account to another: ```python In [10]: tx_hash = w3.eth.send_transaction({ @@ -253,11 +252,11 @@ In [10]: tx_hash = w3.eth.send_transaction({ }) ``` -This is typically the point where you’d wait for several seconds for your transaction to get mined into a new block. The full process goes something like this: +This is typically the point where you’d wait for several seconds for your transaction to get included in a new block. The full process goes something like this: -1. Submit a transaction and hold on to the transaction hash. Until it gets mined, the transaction is “pending.” +1. Submit a transaction and hold on to the transaction hash. Until the block containing the transaction is created and broadcast, the transaction is “pending.” `tx_hash = w3.eth.send_transaction({ … })` -2. Wait for the transaction to be mined: +2. Wait for the transaction to be included in a block: `w3.eth.wait_for_transaction_receipt(tx_hash)` 3. Continue application logic. To view the successful transaction: `w3.eth.get_transaction(tx_hash)` From e0d57ffe8402c8629291fe02c2f2f99d276cea21 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 11:41:48 +0100 Subject: [PATCH 109/183] update sql tutorial --- .../index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index 6bc24ff3ad0..884a4a6b43e 100644 --- a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -91,8 +91,9 @@ A submitted transaction includes several pieces of information including ([sourc - **Signature**: While a sender's private keys signs a transaction, what we can query with SQL is a sender's public address ("from"). - **Value**: This is the amount of ETH transferred (see `ether` column). - **Data**: This is arbitrary data that's been hashed (see `data` column) -- **gasLimit**: The maximum amount of gas, or the cost of computation, that can be consumed by a transaction (see `gas_limit`). -- **gasPrice**: The fee the sender pays to sign a transaction to the blockchain. Gas is denominated in Gwei which is 0.000000001 ETH (nine decimal places). +- **gasLimit** – the maximum amount of gas units that can be consumed by the transaction. Units of gas represent computational steps +- **maxPriorityFeePerGas** - the maximum amount of gas to be included as a tip to the miner +- **maxFeePerGas** - the maximum amount of gas willing to be paid for the transaction (inclusive of baseFeePerGas and maxPriorityFeePerGas) We can query these specific pieces of information for transactions to the Ethereum Foundation public address: @@ -127,7 +128,6 @@ Here is the [query](https://duneanalytics.com/queries/44856/88292) on Dune Analy SELECT time, number, - difficulty, hash, parent_hash, nonce @@ -221,7 +221,7 @@ The average number of blocks produced per day since 2016 is slightly above that ### Gas {#gas} -Blocks are bounded in size. Each block has a gas limit which is collectively set by miners and the network to prevent arbitrarily large block size to be less of a strain on full node in terms of disk space and speed requirements ([source](/developers/docs/blocks/)). +Blocks are bounded in size. The maximum block size is dynamic and varies according to network demand between 12,500,000 and 25,000,000 units. Limits are required to prevent arbitrarily large block sizes putting strain on full nodes in terms of disk space and speed requirements ([source](/developers/docs/blocks/)). One way to conceptualize block gas limit is to think of it as the **supply** of available block space in which to batch transactions. The block gas limit can be queried and visualized from 2016 to present day: @@ -259,7 +259,7 @@ Finally, we may want to query average daily gas prices for the Ethereum chain, h ![ef_daily_gas](./ef_daily_gas.png) -We can see gas prices paid in transaction to the Ethereum Foundation address over the years. Here is the query: +We can see gas prices paid for all transactions made to the Ethereum Foundation address over the years. Here is the query: ```sql SELECT From dfcc1262b8c22858fb1eeb661236dee38437613b Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 11:59:49 +0100 Subject: [PATCH 110/183] update deprecated software page --- src/content/deprecated-software/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/deprecated-software/index.md b/src/content/deprecated-software/index.md index 26b6ab87966..a358039ecc1 100644 --- a/src/content/deprecated-software/index.md +++ b/src/content/deprecated-software/index.md @@ -12,6 +12,10 @@ This is a list of key Ethereum-related projects and resources which have been de This list is curated by our community. If there's something missing or incorrect, please edit this page! +## Proof-of-work {#pow} + +[Proof of work](/developers/docs/consensus-mechanisms/pow) is a consensus engine that was implemented in Ethereum until September 2022. It was deprecated when Ethereum swapped to a [proof-of-stake](/developers/docs/consensus-mechanisms/pos) based consensus mechanism. This was achieved by deprecating the parts of the client software related to proof-of-work mining, including [Ethhash](/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethhash) (the mining algorithm) and all the consensus logic and block gossiping functionality that was originally built in to execution clients. The clients themselves were not deprecated but several of their core components were. The concept of proof-of-work was deprecated as the total effect of removing the related components of the client software. + ## Software {#software} This section is for software for the desktop, command line, or server which has been deprecated. The main types are wallets, integrated development environments, languages, and Ethereum clients. Definitely be careful to not install deprecated software unless you are certain it is from the original source, e.g. a repo hosted under https://github.com/ethereum. From 85fbcdf3e43363625ba61bc022cb71d79d67f4ee Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 18 Aug 2022 13:35:19 +0100 Subject: [PATCH 111/183] update development networks page --- 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 8c9b0796255..c995bfad693 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -20,7 +20,7 @@ Development networks are essentially Ethereum clients (implementations of Ethere **Why not just run a standard Ethereum node locally?** -You _could_ [run a node](/developers/docs/nodes-and-clients/#running-your-own-node) (like Geth, Erigon, or Nethermind) but since development networks are purpose-built for development, they often come packed with convenient features like: +You _could_ [run a node](/developers/docs/nodes-and-clients/#running-your-own-node) but since development networks are purpose-built for development, they often come packed with convenient features like: - Deterministically seeding your local blockchain with data (e.g. accounts with ETH balances) - Instantly mining blocks with each transaction it receives, in order and with no delay @@ -57,9 +57,9 @@ 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-testchains} +### Public Ethereum Test-chains {#public-beacon-testchains} -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. +There are also currently three public test implementations of Ethereum. The recommended testnet with long-term support is Prater (which will eventually merge with the Goerli chain). Sepolia is also expected to be maintained for the foreseeable future, but the validator set is permissioned meaning there is no general access to new validators on this testnet. The Ropsten Chain is expected to be deprecated. - [Prater Staking Launchpad](https://prater.launchpad.ethereum.org/en/) - [Ropsten Staking Launchpad](https://ropsten.launchpad.ethereum.org/en/) From 53e0c1c6305af5508c31fa8fb8192049e582f0eb Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 18 Aug 2022 15:04:53 -0600 Subject: [PATCH 112/183] create PostMergeBanner component --- src/components/Banners/PostMergeBanner.tsx | 30 +++++++++++++++++++ .../{ => Banners}/PreMergeBanner.tsx | 6 ++-- src/intl/en/page-upgrades.json | 3 +- src/pages/developers/index.tsx | 2 +- src/pages/index.tsx | 2 +- src/templates/docs.tsx | 5 +++- src/templates/tutorial.tsx | 5 +++- src/templates/use-cases.tsx | 2 +- 8 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 src/components/Banners/PostMergeBanner.tsx rename src/components/{ => Banners}/PreMergeBanner.tsx (88%) diff --git a/src/components/Banners/PostMergeBanner.tsx b/src/components/Banners/PostMergeBanner.tsx new file mode 100644 index 00000000000..75c18282d07 --- /dev/null +++ b/src/components/Banners/PostMergeBanner.tsx @@ -0,0 +1,30 @@ +import React from "react" +import styled from "styled-components" +import BannerNotification from "../BannerNotification" +import Link from "../Link" +import Translation from "../Translation" + +const StyledBannerNotification = styled(BannerNotification)` + display: flex; + z-index: 1; + justify-content: center; + p { + max-width: 100ch; + margin: 0; + padding: 0; + } + a { + text-decoration: underline; + } + text-align: center; +` + +const PostMergeBanner: React.FC = () => ( + +

+ +

+
+) + +export default PostMergeBanner diff --git a/src/components/PreMergeBanner.tsx b/src/components/Banners/PreMergeBanner.tsx similarity index 88% rename from src/components/PreMergeBanner.tsx rename to src/components/Banners/PreMergeBanner.tsx index 41afc6b0021..161465f7533 100644 --- a/src/components/PreMergeBanner.tsx +++ b/src/components/Banners/PreMergeBanner.tsx @@ -1,8 +1,8 @@ import React from "react" import styled from "styled-components" -import BannerNotification from "./BannerNotification" -import Link from "./Link" -import Translation from "./Translation" +import BannerNotification from "../BannerNotification" +import Link from "../Link" +import Translation from "../Translation" const StyledBannerNotification = styled(BannerNotification)` display: flex; diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index eb1036db228..ed36d0d3328 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -6,5 +6,6 @@ "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 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." + "page-upgrades-merge-banner-developers-landing": "Some docs have a banner indicating they are out-of-date. Updates coming soon.", + "page-upgrades-post-merge-banner": "This page has outdated content because of the Merge. If you notice any outdated content, please open a PR to update it." } diff --git a/src/pages/developers/index.tsx b/src/pages/developers/index.tsx index bee7e2e3248..1daeac1f18d 100644 --- a/src/pages/developers/index.tsx +++ b/src/pages/developers/index.tsx @@ -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 PreMergeBanner from "../../components/Banners/PreMergeBanner" import ButtonLink from "../../components/ButtonLink" import PageMetadata from "../../components/PageMetadata" import { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 2dcecb09e4e..1cd761a5f09 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -24,7 +24,7 @@ import { LeftColumn, } from "../components/SharedStyledComponents" import { translateMessageId, isLangRightToLeft } from "../utils/translations" -import PreMergeBanner from "../components/PreMergeBanner" +import PreMergeBanner from "../components/Banners/PreMergeBanner" const Hero = styled(GatsbyImage)` width: 100%; diff --git a/src/templates/docs.tsx b/src/templates/docs.tsx index ca1b483e7ce..9de47a3f43a 100644 --- a/src/templates/docs.tsx +++ b/src/templates/docs.tsx @@ -33,7 +33,8 @@ import { Header4, ListItem, } from "../components/SharedStyledComponents" -import PreMergeBanner from "../components/PreMergeBanner" +import PreMergeBanner from "../components/Banners/PreMergeBanner" +import PostMergeBanner from "../components/Banners/PostMergeBanner" import { ZenModeContext } from "../contexts/ZenModeContext.js" import { isLangRightToLeft } from "../utils/translations" @@ -188,6 +189,7 @@ const DocsPage = ({ const absoluteEditPath = `${editContentUrl}${relativePath}` const isDevelopersHome = relativePath.endsWith("/developers/docs/index.md") const showMergeBanner = !!mdx.frontmatter.preMergeBanner || isDevelopersHome + const showPostMergeBanner = !!mdx.frontmatter.postMergeBanner return ( @@ -207,6 +209,7 @@ const DocsPage = ({ )} )} + {showPostMergeBanner && }

{mdx.frontmatter.title}

diff --git a/src/templates/tutorial.tsx b/src/templates/tutorial.tsx index 0c4cb8a4724..ac11e3e0cf1 100644 --- a/src/templates/tutorial.tsx +++ b/src/templates/tutorial.tsx @@ -29,7 +29,8 @@ import { } from "../components/SharedStyledComponents" import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" -import PreMergeBanner from "../components/PreMergeBanner" +import PreMergeBanner from "../components/Banners/PreMergeBanner" +import PostMergeBanner from "../components/Banners/PostMergeBanner" import FeedbackCard from "../components/FeedbackCard" import { isLangRightToLeft } from "../utils/translations" @@ -162,6 +163,7 @@ const TutorialPage = ({ const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) const showMergeBanner = !!mdx.frontmatter.preMergeBanner + const showPostMergeBanner = !!mdx.frontmatter.postMergeBanner const tocItems = mdx.tableOfContents?.items @@ -170,6 +172,7 @@ const TutorialPage = ({ return (
{showMergeBanner && } + {showPostMergeBanner && } Date: Fri, 19 Aug 2022 09:41:29 +0100 Subject: [PATCH 113/183] Update src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md --- .../tutorials/a-developers-guide-to-ethereum-part-one/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index d841c004610..6e70d0f12b7 100644 --- a/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/src/content/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -57,7 +57,7 @@ This new decentralized tech stack has spawned new developer tools. Such tools ex Python developers that want to interact with Ethereum are likely to reach for [Web3.py](https://web3py.readthedocs.io/). Web3.py is a library that greatly simplifies the way you connect to an Ethereum node, then send and receive data from it. - + [Ethereum clients](/developers/docs/nodes-and-clients/) can be configured to be reachable by [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP, or Websockets, so Web3.py will need to mirror this configuration. Web3.py refers to these connection options as **providers**. You’ll want to choose one of the three providers to link the Web3.py instance with your node. From fa9103cf69186ad3dcf59cd396550f0320b1820a Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:52:45 +0100 Subject: [PATCH 114/183] Update src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md --- .../learn-foundational-ethereum-topics-with-sql/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index 884a4a6b43e..d89e8910a87 100644 --- a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -257,7 +257,7 @@ Therefore we can understand gas prices as a function of demand for Ethereum bloc Finally, we may want to query average daily gas prices for the Ethereum chain, however, doing so will result in an especially long query time, so we’ll filter our query to the average amount of gas paid per transaction by the Ethereum Foundation. -![ef_daily_gas](./ef_daily_gas.png) +![](./ef_daily_gas.png) We can see gas prices paid for all transactions made to the Ethereum Foundation address over the years. Here is the query: From 9be09ed824513793fc686aa08ea586dc524d4e25 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:56:09 +0100 Subject: [PATCH 115/183] Fix typo and remove bad alts --- .../index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index d89e8910a87..690c73852e4 100644 --- a/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/src/content/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -73,13 +73,13 @@ This will yield the same information as provided on Etherscan's transaction page #### Etherscan {#etherscan} -![etherscan_view](./etherscan_view.png) +![](./etherscan_view.png) [EF's contract page on Etherscan.](https://etherscan.io/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) #### Dune Analytics {#dune-analytics} -![dune_view](./dune_view.png) +![](./dune_view.png) You can find dashboard [here](https://duneanalytics.com/paulapivat/Learn-Ethereum). Click on the table to see the query (also see above). @@ -157,7 +157,7 @@ ORDER BY block_time DESC` Here's the SQL output on Dune: -![list_of_txn](./list_of_txn.png) +![](./list_of_txn.png) This single block being added to the chain changes the state of the Ethereum virtual machine ([EVM](/developers/docs/evm/)). Dozens sometimes, hundreds of transactions are verified at once. In this specific case, 222 transactions were included. @@ -176,19 +176,19 @@ FROM temp_table For block 12396854, out of 222 total transactions, 204 were successfully verified: -![successful_txn](./successful_txn.png) +![](./successful_txn.png) Transactions requests occur dozens of times per second, but blocks are committed approximately once every 15 seconds ([source](/developers/docs/blocks/)). -To see that there is one block produced approximately every 15 seconds, we could take the number of seconds in a day (86400) divided by 15 to get an _estimate_ average number of blocks per day (~ 5760). +To see that there is one block produced approximately every 15 seconds, we could take the number of seconds in a day (86400) divided by 15 to get an estimated average number of blocks per day (~ 5760). The chart for Ethereum blocks produced per day (2016 - present) is: -![daily_blocks](./daily_blocks.png) +![](./daily_blocks.png) The average number of blocks produced daily over this time period is ~5,874: -![avg_daily_blocks](./avg_daily_blocks.png) +![](./avg_daily_blocks.png) The queries are: @@ -225,7 +225,7 @@ Blocks are bounded in size. The maximum block size is dynamic and varies accordi One way to conceptualize block gas limit is to think of it as the **supply** of available block space in which to batch transactions. The block gas limit can be queried and visualized from 2016 to present day: -![avg_gas_limit](./avg_gas_limit.png) +![](./avg_gas_limit.png) ```sql SELECT @@ -238,7 +238,7 @@ OFFSET 1 Then there is the actual gas used daily to pay for computing done on the Ethereum chain (i.e., sending transaction, calling a smart contract, minting an NFT). This is the **demand** for available Ethereum block space: -![daily_gas_used](./daily_gas_used.png) +![](./daily_gas_used.png) ```sql SELECT From e2b1e69d8a22b6b163fe8bd447e659f7ae072ceb Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 19 Aug 2022 11:16:13 +0100 Subject: [PATCH 116/183] update sharding page --- src/content/upgrades/sharding/index.md | 36 +++++--------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/src/content/upgrades/sharding/index.md b/src/content/upgrades/sharding/index.md index 6279c07bc65..16b4f8fcfbb 100644 --- a/src/content/upgrades/sharding/index.md +++ b/src/content/upgrades/sharding/index.md @@ -8,11 +8,11 @@ image: ../../../assets/upgrades/newrings.png summaryPoint1: Sharding is a multi-phase upgrade to improve Ethereum’s scalability and capacity. 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. +summaryPoint4: This upgrade has become more of a focus since Ethereum moved to proof-of-stake. --- - 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. + Sharding could ship sometime in 2023. 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} @@ -31,31 +31,25 @@ Sharding is a good way to scale if you want to keep things decentralized as the Sharding will eventually let you run Ethereum on a personal laptop or phone. So more people should be able to participate, or run [clients](/developers/docs/nodes-and-clients/), in a sharded Ethereum. This will increase security because the more decentralized the network, the smaller the attack surface area. -With lower hardware requirements, sharding will make it easier to run [clients](/developers/docs/nodes-and-clients/) on your own, without relying on any intermediary services at all. And if you can, consider running multiple clients. This can help network health by further reducing points of failure. [Run a Beacon Chain client](/upgrades/get-involved/) +With lower hardware requirements, sharding will make it easier to run [clients](/developers/docs/nodes-and-clients/) on your own, without relying on any intermediary services at all. And if you can, consider running multiple clients. This can help network health by further reducing points of failure.
- 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. + At first, you'll need to run a Mainnet (execution layer) client at the same time as your consensus layer 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. + 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 roadmap.
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 transitioning to proof-of-stake ahead of sharding. Sharding will be the focus following The Merge. - -[More on rollups](/developers/docs/scaling/#rollups) - - ## Shard chains version 2: code execution {#code-execution} The plan was always to add extra functionality to shards, to make them more like the [Ethereum Mainnet](/glossary/#mainnet) today. This would allow them to store and execute code and handle transactions, as each shard would contain its unique set of smart contracts and account balances. Cross-shard communication would allow for transactions between shards. @@ -92,25 +86,9 @@ This is still an active discussion point. We’ll update these pages once we kno The Ethereum upgrades are all somewhat interrelated. So let’s recap how the shard chains relate the other upgrades. -### Shards and the beacon chain {#shards-and-beacon-chain} - -The Beacon Chain contains all the logic for keeping shards secure and synced up. The Beacon Chain will coordinate the stakers in the network, assigning them to shards they need to work on. And it will also facilitate communication between shards by receiving and storing shard transaction data that is accessible by other shards. This will give shards a snapshot of Ethereum’s state to keep everything up-to-date. - - - The Beacon Chain - - -### Shards and The Merge {#shards-and-docking} - -By the time additional shards are added, Ethereum Mainnet will already be secured by the Beacon Chain using proof-of-stake. This enables a fertile Mainnet to build shard chains off of, powered by layer 2 solutions that supercharge the scalability. - -It remains to be seen whether Mainnet will exist as the only “smart” shard that can handle code execution – but either way, the decision to expand shards can be revisited as needed. - - - The Merge - +### Shards and the Ethereum blockchain {#shards-and-blockchain} - +The logic for keeping shards secure and synced up is all integrated into the Ethereum clients that build the blockchain. Stakers in the network will be assigned to shards to work on. Shards will have access to snapshots of other shards so they can build a view of Ethereum’s state to keep everything up-to-date. ### Read more {#read-more} From fb16b398d2da4864ff2ff5963fddda6934a741c2 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 19 Aug 2022 11:25:47 +0100 Subject: [PATCH 117/183] update /eth for post-merge --- src/intl/en/page-eth.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/intl/en/page-eth.json b/src/intl/en/page-eth.json index 57a223f4d3b..83bc38dd4e1 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -16,9 +16,9 @@ "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-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-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-desc-2": "Validators are like the record-keepers of Ethereum—they check and prove that no one is cheating. They are randomly selected to propose a block of transactions. Validators who do this work are also rewarded with small amounts of newly-issued ETH.", + "page-eth-fuels-desc-3": "The work validators do, and the capital they stake, keeps Ethereum secure and free of centralized control.", + "page-eth-fuels-staking": "When you stake your ETH, you help secure Ethereum and earn rewards. In this system, the threat of losing 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 eff9868eb7f7fb6a295ecbe816236f7b0216ae14 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 19 Aug 2022 11:26:05 +0100 Subject: [PATCH 118/183] uk -> us english --- 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 83bc38dd4e1..2d2814f9560 100644 --- a/src/intl/en/page-eth.json +++ b/src/intl/en/page-eth.json @@ -22,7 +22,7 @@ "page-eth-fuels-more-staking": "More on staking", "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.", + "page-eth-gov-tokens-desc": "Tokens that represent voting power in decentralized organizations.", "page-eth-has-value": "Why does ETH have value?", "page-eth-has-value-desc": "ETH's valuable in different ways to different people.", "page-eth-has-value-desc-2": "For users of Ethereum, ETH is valuable because it lets you pay transaction fees.", From 5d39babf772bf852c94c2716ab6c5bf4aac79eaa Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 19 Aug 2022 11:54:21 +0100 Subject: [PATCH 119/183] update upgrades/vision page --- src/intl/en/page-upgrades-vision.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/intl/en/page-upgrades-vision.json b/src/intl/en/page-upgrades-vision.json index 33a5125a005..53ea72b07a0 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -18,11 +18,11 @@ "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. 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.", - "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 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": "The planned upgrades improve Ethereum's security against coordinated attacks.", + "page-upgrades-vision-security-desc-3": "In proof-of-stake additional security comes from greater crypto-economic 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": "However, it is also important that upgrades that protect validators against denial-of-service attacks, enhance their anonymity and separate block building and block propagation are implemented soon. These upgrades protect individual validators and the network as a whole against liveness attacks and censorhip.", + "page-upgrades-vision-security-desc-5-link": "More on proof of stake", + "page-upgrades-vision-security-desc-8": "Ethereum's security model also enables sharding. Validators who will be responsible for asserting that all data has been made available, but individual nodes 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", "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.", @@ -30,11 +30,11 @@ "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 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-sustainability-desc-1": "Ethereum is now a green blockchain. The energy consumption was reduced by ~99.95% when proof-of-work was swapped for proof-of-stake.", + "page-upgrades-vision-sustainability-desc-2": "Ethereum is now secured via staking, not computing power.", + "page-upgrades-vision-sustainability-desc-3": "This sustainability boost also brings security benefits - staked ether makes it much more expensive to attack the chain than under proof-of-work, but cheaper to secure it as less new ETH has to be issued to pay validators than miners.", + "page-upgrades-vision-sustainability-desc-8": "The move to proof-of-stake made Ethereum greener and more secure. It is a low-carbon platform for building apps and organizations.", + "page-upgrades-vision-sustainability-subtitle": "Ethereum is a green blockchain with strong crypto-economic security.", "page-upgrades-vision-title": "The Ethereum Vision", "page-upgrades-vision-title-1": "Clogged network", "page-upgrades-vision-title-2": "Disk space", From 9efed94fd2b155a9a231169fd594d129937ae352 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 19 Aug 2022 12:15:08 +0100 Subject: [PATCH 120/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Co-authored-by: Alex Stokes --- src/content/developers/docs/mev/index.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 4e31fc5bb8c..4477eb0ec0d 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -36,7 +36,7 @@ Rather than programming complex algorithms to detect profitable MEV opportunitie ### Flashbots {#mev-extraction-flashbots} -Flashbots is an independent project which extends the go-ethereum client with a service that allows searchers to submit MEV transactions to validators without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. +Flashbots is an independent project which extends execution clients with a service that allows searchers to submit MEV transactions to validators without revealing them to the public mempool. This prevents transactions from being frontrun by generalized frontrunners. ## MEV examples {#mev-examples} @@ -102,7 +102,7 @@ At the application layer, some forms of MEV, like sandwich trading, result in an At the network layer, generalized frontrunners and the gas-price auctions they often engage in (when two or more frontrunners compete for their transaction to be included in the next block by progressively raising their own transactions' gas price) result in network congestion and high gas prices for everyone else trying to run regular transactions. -Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, validators may be incentivized to remine blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. +Beyond what's happening _within_ blocks, MEV can have deleterious effects _between_ blocks. If the MEV available in a block significantly exceeds the standard block reward, validators may be incentivized to reorg blocks and capture the MEV for themselves, causing blockchain re-organization and consensus instability. This possibility of blockchain re-organization has been [previously explored on the Bitcoin blockchain](https://dl.acm.org/doi/10.1145/2976749.2978408). As Bitcoin's block reward halves and transaction fees make up a greater and greater portion of the block reward, situations arise where it becomes economically rational for miners to give up the next block's reward and instead remine past blocks with higher fees. With the growth of MEV, the same sort of situation could occur in Ethereum, threatening the integrity of the blockchain. @@ -116,6 +116,7 @@ On the other hand, the transition from proof-of-work to proof-of-stake and the o ## Related resources {#related-resources} +- [Flashbots docs](https://docs.flashbots.net/) - [Flashbots GitHub](https://github.com/flashbots/pm) - [MEV-Explore](https://explore.flashbots.net/) _Dashboard and live transaction explorer for MEV transactions_ From 24f2abd2e6d7879d382e840f2e658031fa694818 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 19 Aug 2022 12:19:28 +0100 Subject: [PATCH 121/183] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../docs/consensus-mechanisms/pos/keys/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md index f25af583ded..1eabc9e0cad 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -1,6 +1,6 @@ --- title: Keys in proof-of-stake Ethereum -description: An explanation of keys used in Ethereum since the transition to proof-of-stake. +description: An explanation of keys used in Ethereum's proof-of-stake consensus mechanism lang: en sidebar: true --- @@ -51,11 +51,11 @@ Separating the validator keys from the Ethereum account keys enables multiple va ## Deriving keys from a seed phrase {#deriving-keys-from-seed} -If every 32 ETH staked required a new set of 2 completely independent keys to be created, key management would quickly become unwieldy especially for users running multiple validators. To get around this problem, multiple validator keys can be derived from a single common secret. Storing that single secret allows access to multiple validator keys. +If every 32 ETH staked required a new set of 2 completely independent keys, key management would quickly become unwieldy, especially for users running multiple validators. Instead, multiple validator keys can be derived from a single common secret and storing that single secret allows access to multiple validator keys. [Mnemonics](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) and paths are a well-known feature that users often encounter when [they access](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) their hardware wallets. The mnemonic is a sequence of words that act as an initial seed for a private key. When combined with additional data, the mnemonic is used to generate a hash known as the 'master key'. This can be thought of as the root of a tree. Branches from this root can then be drived using a heirarchical path, so that child nodes can exist as combinations of their parent node's hash and their index in the tree. -These paths have the following structure which will be familiar to users who have interacted with hardware wallets: +These paths have the following structure, which will be familiar to users who have interacted with hardware wallets: ``` m/44'/60'/0'/0` @@ -67,7 +67,7 @@ The slashes in this path separate components of the private key as follows: master_key / purpose / coin_type / account / change / address_index ``` -This logic enables a user to attach as many validators to a single **withdrawal key** as they want, because the root of the tree can be common and differentiation can happen at the branches. The user can **derive any number of keys** from the Mnemonic phrase. +This logic enables users to attach as many validators as possible to a single **mnemonic phrase** because the tree root can be common, and differentiation can happen at the branches. The user can **derive any number of keys** from the mnemonic phrase. ``` [m / 0] From eb389fe5a40f0045e3888697c40c741867d54312 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 19 Aug 2022 14:43:01 +0100 Subject: [PATCH 122/183] 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 53ea72b07a0..9f1fa56ffc5 100644 --- a/src/intl/en/page-upgrades-vision.json +++ b/src/intl/en/page-upgrades-vision.json @@ -21,7 +21,7 @@ "page-upgrades-vision-security-desc": "The planned upgrades improve Ethereum's security against coordinated attacks.", "page-upgrades-vision-security-desc-3": "In proof-of-stake additional security comes from greater crypto-economic 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": "However, it is also important that upgrades that protect validators against denial-of-service attacks, enhance their anonymity and separate block building and block propagation are implemented soon. These upgrades protect individual validators and the network as a whole against liveness attacks and censorhip.", - "page-upgrades-vision-security-desc-5-link": "More on proof of stake", + "page-upgrades-vision-security-desc-5-link": "More on proof-of-stake", "page-upgrades-vision-security-desc-8": "Ethereum's security model also enables sharding. Validators who will be responsible for asserting that all data has been made available, but individual nodes 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", "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", From 5ce010a0ee0ceba0525737cff62d84b34b569658 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Fri, 19 Aug 2022 12:18:03 -0600 Subject: [PATCH 123/183] Remove premerge banner --- src/components/Banners/PreMergeBanner.tsx | 46 ------------------- src/content/developers/docs/blocks/index.md | 1 - .../pow/mining-algorithms/index.md | 3 +- src/content/developers/docs/dapps/index.md | 1 - .../block-explorers/index.md | 1 - .../docs/development-networks/index.md | 1 - src/content/developers/docs/gas/index.md | 1 - .../developers/docs/intro-to-ether/index.md | 1 - .../docs/intro-to-ethereum/index.md | 2 - src/content/developers/docs/mev/index.md | 1 - .../developers/docs/networking-layer/index.md | 1 - src/content/developers/docs/networks/index.md | 2 - .../client-diversity/index.md | 1 - .../docs/nodes-and-clients/index.md | 1 - .../nodes-as-a-service/index.md | 16 +++---- .../nodes-and-clients/run-a-node/index.md | 1 - .../developers/docs/transactions/index.md | 1 - .../tutorials/run-light-node-geth/index.md | 1 - .../tutorials/run-node-raspberry-pi/index.md | 1 - src/content/nft/index.md | 1 - src/pages/developers/index.tsx | 4 -- src/pages/developers/tutorials.tsx | 1 - src/pages/index.tsx | 2 - src/schema/sdls/Frontmatter.ts | 1 - src/templates/docs.tsx | 10 ---- src/templates/tutorial.tsx | 4 -- src/templates/use-cases.tsx | 25 ++++------ 27 files changed, 16 insertions(+), 115 deletions(-) delete mode 100644 src/components/Banners/PreMergeBanner.tsx diff --git a/src/components/Banners/PreMergeBanner.tsx b/src/components/Banners/PreMergeBanner.tsx deleted file mode 100644 index 161465f7533..00000000000 --- a/src/components/Banners/PreMergeBanner.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react" -import styled from "styled-components" -import BannerNotification from "../BannerNotification" -import Link from "../Link" -import Translation from "../Translation" - -const StyledBannerNotification = styled(BannerNotification)` - 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 = ({ - announcementOnly = false, - className, - children, -}) => ( - -

- {" "} - {!announcementOnly && ( - - )}{" "} - {children}{" "} - - - -

-
-) - -export default PreMergeBanner diff --git a/src/content/developers/docs/blocks/index.md b/src/content/developers/docs/blocks/index.md index 473138a3eed..707b1f30cff 100644 --- a/src/content/developers/docs/blocks/index.md +++ b/src/content/developers/docs/blocks/index.md @@ -3,7 +3,6 @@ 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/consensus-mechanisms/pow/mining-algorithms/index.md b/src/content/developers/docs/consensus-mechanisms/pow/mining-algorithms/index.md index b5dbd3016da..a14096d619d 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,13 +3,12 @@ title: Mining algorithms description: A detailed look at the algorithms used for Ethereum mining. lang: en sidebar: true -preMergeBanner: true --- Proof-of-work is no longer underlying Ethereum's consensus mechanism, meaning mining has been switched off. Instead, Ethereum is secured by validators who stake ETH. You can start staking your ETH today. Read more on [The Merge](/upgrades/merge/), [proof-of-stake](/developers/docs/consensus-mechanisms/pos/), and [staking](/staking/). This page is for historical interest only. - + diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index 5275cdc09e4..d33e5b29331 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -3,7 +3,6 @@ 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 20149a2568b..2506f4dd60c 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,7 +4,6 @@ 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/development-networks/index.md b/src/content/developers/docs/development-networks/index.md index 8c9b0796255..17e4890c3c9 100644 --- a/src/content/developers/docs/development-networks/index.md +++ b/src/content/developers/docs/development-networks/index.md @@ -3,7 +3,6 @@ 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/gas/index.md b/src/content/developers/docs/gas/index.md index 29d5e01ca70..b069851c3fd 100644 --- a/src/content/developers/docs/gas/index.md +++ b/src/content/developers/docs/gas/index.md @@ -3,7 +3,6 @@ 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-ether/index.md b/src/content/developers/docs/intro-to-ether/index.md index 8b72d2eeaba..61f61f91dd5 100644 --- a/src/content/developers/docs/intro-to-ether/index.md +++ b/src/content/developers/docs/intro-to-ether/index.md @@ -3,7 +3,6 @@ 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/intro-to-ethereum/index.md b/src/content/developers/docs/intro-to-ethereum/index.md index 2f54854b5c6..08141eabdb4 100644 --- a/src/content/developers/docs/intro-to-ethereum/index.md +++ b/src/content/developers/docs/intro-to-ethereum/index.md @@ -3,7 +3,6 @@ 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} @@ -18,7 +17,6 @@ Every computer in the network must agree upon each new block and the chain as a Ethereum uses a [proof-of-stake-based consensus mechanism](/developers/docs/consensus-mechanisms/pos/). Anyone who wants to add new blocks to the chain must stake at least 32 ETH into the deposit contract and run validator software. They then can be randomly selected to propose blocks that other validators check and add to the blockchain. In this model, there is usually only one chain, but network latency and dishonest behavior can cause multiple blocks to exist at the same position near the head of the chain. To resolve this, a fork-choice algorithm selects one canonical set of blocks. The blocks selected are the ones that form the heaviest possible chain, where 'heavy' refers to the number of validators that have endorsed the blocks (weighted by the ETH they have staked). There is a system of rewards and penalties that strongly incentivize participants to be honest and online as much as possible. - If you want to see how blockchain hashes data and then the previous block references all the past blocks, be sure to check out [this demo](https://andersbrownworth.com/blockchain/blockchain) by Anders Brownworth and watch the accompanying video below. Watch Anders explain hashes in blockchains: diff --git a/src/content/developers/docs/mev/index.md b/src/content/developers/docs/mev/index.md index 65ea0f9f728..d1f5bc83471 100644 --- a/src/content/developers/docs/mev/index.md +++ b/src/content/developers/docs/mev/index.md @@ -3,7 +3,6 @@ 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 fa91247c55f..04d8c6f5953 100644 --- a/src/content/developers/docs/networking-layer/index.md +++ b/src/content/developers/docs/networking-layer/index.md @@ -4,7 +4,6 @@ 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 a909353079e..5b9318f68f3 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -3,7 +3,6 @@ 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. @@ -62,7 +61,6 @@ Sepolia is a proof-of-stake testnet. Although Sepolia is still running, it is no - [Sepolia faucet](https://faucet.sepolia.dev/) - [FaucETH](https://fauceth.komputing.org) - #### 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 Goerli._ 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 f17e541d618..b7ccfc5b45b 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,7 +4,6 @@ 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 648404df3d3..098bf427238 100644 --- a/src/content/developers/docs/nodes-and-clients/index.md +++ b/src/content/developers/docs/nodes-and-clients/index.md @@ -4,7 +4,6 @@ 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 (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. 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 21b63b6d2f4..ca1def781fd 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,7 +4,6 @@ description: An entry-level overview of node services, the pros and cons, and po lang: en sidebar: true sidebarDepth: 2 -preMergeBanner: true --- ## Introduction {#Introduction} @@ -199,16 +198,13 @@ Here is a list of some of the most popular Ethereum node providers, feel free to - Suitable for Developers to Enterprises - [**Rivet**](https://rivet.cloud/) - [Docs](https://rivet.readthedocs.io/en/latest/) - - Features - - Free tier option - - Scale as you go --[**SenseiNode**](https://senseinode.com) + - Features - Free tier option - Scale as you go -[**SenseiNode**](https://senseinode.com) - [Docs](https://docs.senseinode.com/) - - Features - - Dedicated and Share nodes - - Dashboard - - Hosting off AWS on multiple hosting providers accross different locations in Latin America - - Prysm and Lighthouse clients + - Features + - Dedicated and Share nodes + - Dashboard + - Hosting off AWS on multiple hosting providers accross different locations in Latin America + - Prysm and Lighthouse clients - [**SettleMint**](https://console.settlemint.com/) - [Docs](https://docs.settlemint.com/) - Features 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 88cd75aefbb..4cf976f829b 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,7 +4,6 @@ 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/docs/transactions/index.md b/src/content/developers/docs/transactions/index.md index 99450221a1c..58ebacdd744 100644 --- a/src/content/developers/docs/transactions/index.md +++ b/src/content/developers/docs/transactions/index.md @@ -3,7 +3,6 @@ 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. 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 6f398363d8e..772eafc4ff8 100644 --- a/src/content/developers/tutorials/run-light-node-geth/index.md +++ b/src/content/developers/tutorials/run-light-node-geth/index.md @@ -7,7 +7,6 @@ skill: beginner lang: en sidebar: true published: 2022-03-04 -preMergeBanner: true --- **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.** 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 f1c6719f176..5b2060707e8 100644 --- a/src/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/src/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -9,7 +9,6 @@ skill: intermediate published: 2022-06-10 source: Ethereum on ARM sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html -preMergeBanner: true --- **Ethereum on Arm is a custom Linux image that can turn a Raspberry Pi into an Ethereum node.** diff --git a/src/content/nft/index.md b/src/content/nft/index.md index e311a1dc430..0ea49c711e8 100644 --- a/src/content/nft/index.md +++ b/src/content/nft/index.md @@ -11,7 +11,6 @@ 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/pages/developers/index.tsx b/src/pages/developers/index.tsx index 1daeac1f18d..ae96742c333 100644 --- a/src/pages/developers/index.tsx +++ b/src/pages/developers/index.tsx @@ -9,7 +9,6 @@ import Card from "../../components/Card" import Callout from "../../components/Callout" import Link from "../../components/Link" import Translation from "../../components/Translation" -import PreMergeBanner from "../../components/Banners/PreMergeBanner" import ButtonLink from "../../components/ButtonLink" import PageMetadata from "../../components/PageMetadata" import { @@ -248,9 +247,6 @@ const DevelopersPage = ({ title={translateMessageId("page-developer-meta-title", intl)} description={translateMessageId("page-developers-meta-desc", intl)} /> - - - diff --git a/src/pages/developers/tutorials.tsx b/src/pages/developers/tutorials.tsx index 9c2f210dcbe..c43310168ec 100644 --- a/src/pages/developers/tutorials.tsx +++ b/src/pages/developers/tutorials.tsx @@ -562,7 +562,6 @@ export const query = graphql` skill published lang - preMergeBanner } } } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1cd761a5f09..4add5e8aba1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -24,7 +24,6 @@ import { LeftColumn, } from "../components/SharedStyledComponents" import { translateMessageId, isLangRightToLeft } from "../utils/translations" -import PreMergeBanner from "../components/Banners/PreMergeBanner" const Hero = styled(GatsbyImage)` width: 100%; @@ -705,7 +704,6 @@ contract SimpleDomainRegistry { title={translateMessageId("page-index-meta-title", intl)} description={translateMessageId("page-index-meta-description", intl)} /> -