@ethereum@christine_dkim We kicked off the call with a recap of the fourth mainnet shadow fork, by @parithosh_j. TL;DR: it went pretty well! We did see a few bugs, some of which weren't merge related. The chain did finalize very smoothly ๐๐ป
@ethereum@christine_dkim@parithosh_j The main issue we saw was empty blocks being produced by some EL clients because some CL clients were asking for them "too quickly".
@ethereum@christine_dkim@parithosh_j To expand on this: the way blocks get created post-merge is that a validator who is chosen to produce the next block has their CL sends a first API call to the EL to let them know about the latest head, and have them start building a candidate block on top of that head.
@ethereum@christine_dkim@parithosh_j The CL must then another call to the EL for it to return its candidate block. If the first and second call are two close to one another, the EL returns an empty block to the CL because it didn't have time to create one from the transactions in its txn pool.
@ethereum@christine_dkim@parithosh_j Affected CL teams are working on a fix for this (basically delaying the time between the two calls), and @prylabs already had it out by the ACD call.
@ethereum@christine_dkim@parithosh_j@prylabs One thing worth noting is that while this obviously isn't ideal behaviour, the chain still progresses as the EL returns a block with 0 transactions, rather than an empty block, like we sometimes see on PoW.
@ethereum@christine_dkim@parithosh_j@prylabs Additionally, given EIP-1559's slack mechanism, if these blocks don't happen twice in a row, the throughput of the chain stays constant (although inclusion time worsens for txns who could have been in the empty block).
@ethereum@christine_dkim@parithosh_j@prylabs Aside from this, a sync issue on Erigon nodes, which were using a new sync mechanism (more on that here: erigon.substack.com/p/erigon-2-thrโฆ), prevented them from catching up to the tip of the chain in time for the fork. It's worth noting that Erigon's previous sync mode still works as usual
@ethereum@christine_dkim@parithosh_j@prylabs All in all, this was a very smooth shadow fork. The next one, planned for next week, will have a different configuration: instead of using client shares comparable to mainnet (see:
), we'll have an equal split across EL & CL clients for validators.
@ethereum@christine_dkim@parithosh_j@prylabs Next up on the call, we discussed a clarification to the Engine API for how an EL should respond if it receives an invalid candidate merge block from the CL. Usually, when the EL receives an invalid block, it tells the CL what the last valid parent block it has seen is.
@ethereum@christine_dkim@parithosh_j@prylabs In this case, though, because the parent would be a PoW block, the CL won't have it in its block tree, and so it's useless to return a specific block hash. We simply agreed to return 0x00..00 as the hash instead. More details here: github.com/ethereum/execuโฆ
@ethereum@christine_dkim@parithosh_j@prylabs After this, we also discussed when we should expect the Engine API, as well as other specs, to be frozen. In short, basically now ๐ฅถ
@ethereum@christine_dkim@parithosh_j@prylabs We don't expect to make more substantive changes to either the Engine API, EL or CL specs. There are a few clarifications we want to add to them, but expect to have release candidates cut for all of them next week.
@ethereum@christine_dkim@parithosh_j@prylabs After this, we covered additions to JSON RPC block tags. In short, at The Merge, a `finalized` tag will be added, which allows users to get the last finalized block on the chain (or an error if there isn't one, meaning The Merge hasn't happened yet).
@ethereum@christine_dkim@parithosh_j@prylabs Along with this, we'll also introduce a `safe` tag. For simplicity, now it will likely alias to `finalized` across client implementations. That said, we can eventually upgrade it to return a block which we expect to not revert under normal network conditions, usually ~4s old.
@ethereum@christine_dkim@parithosh_j@prylabs After this, we had a long conversation about the pros/cons of setting a specific Fork ID on the EL for The Merge. Recommend the livestream for all the back and forth, but I'll try and summarize here!
@ethereum@christine_dkim@parithosh_j@prylabs Fork ID is taken by creating a checksum from the genesis hash of the network and all the fork blocks which the node has already passed. Nodes also store a value if they are aware of a future fork happening for them, called FORK_NEXT.
@ethereum@christine_dkim@parithosh_j@prylabs This way, if you see a peer who has a FORK_NEXT for a block you've already passed locally and haven't forked on, you can know to disconnect them as they are or will be on another chain.
@ethereum@christine_dkim@parithosh_j@prylabs We always use this during network upgrades, but the challenge with this one is that we are *not* using a block height to trigger The Merge, but a Total Difficulty value, which isn't compatible with this scheme.
@ethereum@christine_dkim@parithosh_j@prylabs So, we have a few options: 1. Re-arrange the Fork ID scheme to support difficulty 2. Use a FORK_NEXT block which we estimate happens _before_ the merge and disconnect peers before TTD 3. Use a FORK_NEXT block which we estimate happens _after_ the merge, and disconnect after TTD
@ethereum@christine_dkim@parithosh_j@prylabs (2) is hard to get right because there's a fairly short window between releasing clients and hitting the merge. We could end up with (3) accidentally! Even if that isn't the case, it's also bad because we may disconnect peers who have not upgraded _yet_ but will do so.
@ethereum@christine_dkim@parithosh_j@prylabs Even more so, miners may choose to not upgrade their software for The Merge (why would they?), so it could lead to nodes disconnecting from miners, before the merge... not great.
@ethereum@christine_dkim@parithosh_j@prylabs (3) could work, but if you try and time it for "soon" after the merge, then you may have the same problems as with (2): you get it wrong, it happens before TTD, and you disconnect the miners then. Bad!
@ethereum@christine_dkim@parithosh_j@prylabs And then, if you put (3) very far out, it means that it's basically useless, as until you hit FORK_NEXT, you're still connected to bad peers.
@ethereum@christine_dkim@parithosh_j@prylabs We'll go with that and see if the number of bad peers is manageable. If it is on Ropsten, where nodes have little incentive to update, it should also be on mainnet, where infrastructure providers, validators and users have a strong incentive to upgrade their nodes.
@ethereum@christine_dkim@parithosh_j@prylabs If we find any issues on Ropsten with this, then we can spend more time trying to estimate a good value for a FORK_NEXT soon after hitting TTD (option 3), and test it on other testnets before going to mainnet.
@ethereum@christine_dkim@parithosh_j@prylabs Next up, we discussed if and when to fork Ropsten! This was debated for a while so, again, I strongly recommend watching the livestream.
@ethereum@christine_dkim@parithosh_j@prylabs The gist of it is that while clients have code that works, there are still edge cases and bugs and, consequently, what is ready today is *not* what would go on mainnet.
@ethereum@christine_dkim@parithosh_j@prylabs The question is then: do we want to wait to deploy on Ropsten, or is it better to do it sooner and have the broader ecosystem run through the upgrade and get ready for releases across other testnets (and eventually mainnet!).
@ethereum@christine_dkim@parithosh_j@prylabs The Merge is a bit more complex for stakers/infra providers/node operators than other upgrades because they need to do more than just upgrade one piece of software: they need to add a CL to their EL or vice-versa, and make sure their setup still works as expected.
@ethereum@christine_dkim@parithosh_j@prylabs It's also worth noting that Ropsten isn't expected to be maintained post-merge, and is generally pretty unstable, so it is the testnet with the lowest stakes to upgrade.
@ethereum@christine_dkim@parithosh_j@prylabs After some back and forth, we decided to go ahead with it! This will be a good chance for the community to experience the transition, and learnings from this can be incorporated into the next testnet merges (Goerli & Sepolia), which would happen when we have "final" client code.
@ethereum@christine_dkim@parithosh_j@prylabs We expect to have client releases out in about two weeks, along with information about what stakers, node operators, tooling/infra providers need to do for the upgrade. Ropsten is expected to merge around June 8th!
The Merge has already happened on it, but the general node architecture is the same as it will be on Ropsten, other testnets, and mainnet ๐
@ethereum@christine_dkim@parithosh_j@prylabs A quick note about the difficulty bomb ๐ฃ If, after the Ropsten fork, we don't feel ready to move to other testnets, we can still push back the bomb on mainnet at that point. The quality bar for Goerli/Sepolia will be higher than for Ropsten which, again, is being deprecated.
@ethereum@christine_dkim@parithosh_j@prylabs One thing astute readers may notice is that Ropsten (and Sepolia) currently *don't* have beacon chains associated with them! We also discussed how to approach launching these (before the Ropsten TTD stuff, actually, my notes are out of order ๐ ).
@ethereum@christine_dkim@parithosh_j@prylabs First things first, we decided to just name them the Ropsten and Sepolia beacon chains, with an eye to aliasing Prater to Goerli eventually.
Bobsten, Bepolia and Boerli unfortunately did not make it ๐
@ethereum@christine_dkim@parithosh_j@prylabs There are a few things we wanted to consider when launching these beacon chains: how many validators to have, who runs them, when do they run through Genesis/Altair/Bellatrix. Again, livestream has the nuance, but I'll summarize the outcomes.
@ethereum@christine_dkim@parithosh_j@prylabs For Ropsten, we'll have a set of 100k validators controlled by client & testing teams, but also provide a faucet for community members who want to run a validator to have the option to do so. This way, they can run through The Merge in a relatively stable PoS context.
@ethereum@christine_dkim@parithosh_j@prylabs For Sepolia, we'll go with a much smaller validator set which is controlled mostly by client/infra/testing teams, a bit like Clique networks today. The idea is that these can provide a more stable testing environment for application developers.
@ethereum@christine_dkim@parithosh_j@prylabs And, for Goerli, we'll obviously maintain Prater, which has a great mix of community participation, but also a large % of validators run by client teams which ensure general stability for the network.
@ethereum@christine_dkim@parithosh_j@prylabs It's worth noting that for Ropsten at least, we'll be using an ERC20 version of the deposit contract (thanks @protolambda!) which is a bit easier to manage. It doesn't affect testing, either for The Merge or subsequent features such as withdrawals.
@ethereum@christine_dkim@parithosh_j@prylabs@protolambda Finally, it's expected that for Ropsten and Sepolia, we'll have the beacon chains run through Genesis -> Altair -> Bellatrix in quick succession. For Prater, a separate Bellatrix upgrade will need to be scheduled.
If we're happy with the client code quality & testing coverage at that point, we may move forward to other testnets, otherwise, we can still delay the bomb ๐ฃ
This simply proposes a new networking protocol version which drops GetNodeData, used as a part of fast sync but no longer necessary for snap sync.
@ethereum@christine_dkim@parithosh_j@prylabs@protolambda Supporting this protocol means that we can start to lay the groundwork for deprecating previous eth/xx versions which support them. All clients are supportive of introducing the new version, but most teams shared they need quite some time before they can deprecate eth/66.
@ethereum@christine_dkim@parithosh_j@prylabs@protolambda@xinbenlv The general feedback was that while the DoS risks may not be as big of a concern as expected, there have been several expiring transaction proposals in the past and typically they don't end up as the #1 thing on our priority list, so don't get included in forks.
Will give 1.2M Sepolia ETH to the first reliable RPC endpoint that's maintained long-term ๐ 100k SepETH per month for the next 12 months as long as it works smoothly โจ
plz help
This has to be easier for me than waiting around for my node to sync, so the criteria for payment is you send me an RPC URL, I add it to MetaMask and It Just Worksโข๏ธ
@ethereum First on the call, we discussed the Ropsten Merge, which happened earlier this week. @dannyryan gave an update, based in part on @parithosh_j's analysis from earlier this week:
@ethereum@dannyryan@parithosh_j Pre-merge, some CL clients had issues tracking deposits to the beacon chain. This was because they made specific assumptions around block times which did not hold under Ropsten's chaotic block times due to its variable hash rate as a testnet.
@go_ethereum 2. @ProtocolGuild is here again: gitcoin.co/grants/4832/prโฆ โ๐ก With over 110 members across 20 teams, if you're unsure about where to send ๐ฐ but want to support the protocol, PG has got you covered!
@go_ethereum@ProtocolGuild 3. A ton of client teams also have their grants directly on Gitcoin - if you're a happy user of them, or just want to tip them for the merge work, your funds will get matched for doing so ๐๐ป
Ethereum's longest lived PoW testnet is moving to Proof of Stake! A new beacon chain has been launched today, and The Merge is expected around June 8th on the network.
Node Operators: this is the first dress rehearsal๐
For The Merge to happen, we now need two things on Ropsten. First, its beacon chain must activate the Bellatrix upgrade, scheduled for June 2. Then, a PoW total difficulty value, the Terminal Total Difficulty (TTD) will be chosen to trigger the transition.
The TTD should be chosen by June 2/3 (to avoid miners messing with the transition again ๐ ), and will also be announced at blog.ethereum.org. We'll pick a value we expect to hit around June 8 or so. PoW on testnets is hard to estimate, so keep an eye out ๐
@ethereum TL;DR of the issue is that the Ropsten TTD was hit before the Beacon Chain for the testnet was live and Bellatrix, the CL fork which activates merge functionality, had gone live.
We'll discuss this more on ACD tomorrow, but TL;DR it's not an issue which could affect mainnet, and has to do with PoW testnets having very low hashrates. If you've already downloaded a Ropsten Merge client release, you will unfortunately need to upgrade again.
Worth adding that this is "malicious" in that the Ropsten miner isn't just adding hashrate (which could happen by accident/someone not knowing), but also driving down the gas limit as low as possible. Again, this isn't something we'd see on mainnet, but worth noting.
Thanks for the "support" I guess, malicious miner 0xd197?
@Butta_eth thinks they are also using McDonalds' wifi as a VPN ๐