First, we had status updates from the Calaveras devnet. It was spammed with transactions this week, and uncovered some minor issues in Besu and Nethermind, which either have already been fixed or are being done so today/early next week πͺπ»
Then, we went through a bunch of open issues related to JSON RPC support for EIP-1559. The first was where the "effective gas price" of a transaction (the amount actually paid by the txn) should be stored. We agree to have that in the txn receipt, and updated the JSON RPC spec.
The second was how to adapt eth_call to the various parameters that are introduced by EIP-1559. @peter_szilagyi had a PR for Geth which was very thorough and other clients agreed to follow a similar approach: github.com/ethereum/go-etβ¦
For reference, here are all the cases/behaviours that are considered, which barely fit in a single screenshot π
Lastly, there was an open question about how client should return estimates for the priority fee (a.k.a. tip). Right now, a lot of wallets rely on the suggested gas prices returned by clients, but post-1559 a simple return value may not be the best approach.
If we return a single value, as was suggested by adding an `eth_maxPriorityFeePerGas` endpoint, it may lead to people overpaying because they rely on a value which may be out of date or biased by recent high prices.
Instead, clients can return data about the gas used and priority fees paid in recent blocks, which will allow wallets to know whether the network is in a state of congestion or not, and what the minimum acceptable priority fees are if there is no congestion.
We agreed to go forward with this approach, described in more details here gist.github.com/zsfelfoldi/473β¦, with one change: we will cap the number of blocks for which this data can be returned, in order for the API to be light-client friendly.
And that was the last of the JSON RPC issues for 1559 (*touches wood*) - clients should all be on the same page now π
Then, @dankrad brought up an issue w.r.t. an underspecification in the Yellowpaper. The current behaviour around how a transaction initiated with a private key for a non-EOA is currently undefined.
In other words, _if_ someone had the private key to an address where a smart contract was, they could initiate a transaction for it. While the odds of this are very low (2^80), they are much higher than the odds of finding a specific private key (2^160).
In the worst case, someone could "mine" for a key + contract pair, deploy a contract which would look innocent, and eventually steal the funds from it. While this attack is _possible_, it is estimate to require the same hashrate as ~1 year of BTC mining, or ~10B$
Luckily, the fix is simple: we can reject transactions from senders if their address has bytecode associated to it. The fix is described in EIP-3607: github.com/ethereum/EIPs/β¦
Along with being simple, the fix does not require a hard fork, as it only restricts the current validity rules (i.e. is a soft fork). Clients agreed that this behaviour should be implemented and made canonical.
Before it is implemented, we will run a full sync of the chain to be sure such an attack has never happened before, and update the test suite + yellowpaper to support this. Then, clients will implement it when they see fit. Geth said they may implement it prior to London, but TBD
There was strong pushback against this affecting London timelines, which was our next subject π
With all clients comfortable with their 1559 implementation, we agreed it made sense to set testnet blocks now. Some of the JSON RPC changes mentioned at the beginning may come after the testnet forks, but all the consensus-related changes for 1559 are ready to go!
Clients all think they can have a release ready sometime next week, so we'll have the first testnet fork 7-10 days after that. The fork blocks + dates have been added to the London spec: github.com/ethereum/eth1.β¦ π¬π§π
You can expect a post on blog.ethereum.org next week with the versions for each client which will support London on testnets.
IMPORTANT NOTE: the mainnet block will be chosen after we see testnets forking smoothly, and hence will require another client upgrade.
And that was it for London π¬π§ Next on the call we had an update on the EIP-3074 audits π
First, @lightclients gave some background on EIP-3074. I recommend watching the livestream for it, or reading his excellent tweet thread:
@LeastAuthority then shared the findings from their audit. The report is not available yet, but should be shortly.
The whole commentary is worth watching, but one conclusion was that 3074 invokers, if we can assume them to be safe (i.e. simple, formally verified, audited, etc.) can be thought of as "wallet extensions" and have a similar security profile as wallets.
Then, the second auditing firm, @dedaub, who analyzed the impact on current smart contracts, shared their thoughts. They had previously also done so on Twitter:
The audits seem to address some of the security concerns that had previously been raised by @mhswende and others. Given that London is not done yet, and that the picture is unclear for what comes after with the merge and/or Shanghai, it is still to decide on 3074's next steps.
To be clear, though, there is still some pushback (e.g. see this exchange:
) and the EIP's champions explicitly said they don't want this to be included because everyone ends up exhausted from debating it.
Once we are a bit farther along with planning future upgrades and that people have had time to read + digest the audits, we'll be discussing this again on the call.
And with this, we were at time. We had time for two quick announcements. First, it seems there were some issues on Goerli. It seems like they may have been caused by Nethermind and were being fixed on the call. Last block seems recent (goerli.etherscan.io/block/4951357), which is good!
Lastly, the @EthCatHerders and @nethermindeth are running a survey to better understand the future requirements of client developers in terms of tools and documentation.
We started with a lot of action as @mhswende identified an issue in EIP-1559 yesterday where the new fields introduced in transactions (maxFee & maxPriorityFee) did not have an explicit cap. This meant that an attacker could create arbitrarily large transactions.
Prior to 1559, this is not possible because if you want to create a transaction with a huge gas price, you actually _need_ to have that amount of ETH, and if your txn is included, you will _pay_ that amount.
First up, I gave a summary of my conversation with the various client teams over the past week. I had pasted a text version in the agenda as well:
TL;DR: client teams prefer a tighter-scoped London upgrade, London in July would be best, and if we keep London small + the Merge work goes according to plan, we should be able to do another feature fork this fall without delaying the merge.
You can see the current numbers for yourself here: beaconcha.in/pools. One important thing to note is that Ethereum's PoS algorithm uses penalties that are correlated with how many other people do something wrong along with you.
This means that while we can't stop people from staking on AWS, or using the most popular client, etc. we can give them an economic incentive to setup their staking node in a way where their failures are uncorrelated from the rest of the network.