EIP-2930: Optional access lists

Since this has gone live on Ropsten, I’ve been tinkering with it, and was surprised to find increased gas costs in places where I expected savings.

Digging in, I’ve found that the ACCESS_LIST_ADDRESS_COST is charged even for the contract being called in a transaction. This is at a “discounted” rate relative to making a CALL from one contract to another, but since there is no CALL opcode charged for the initial transaction, this is 2,400 additional gas being charged by including an access list. This means that the only scenario in which a transaction can save gas by including an access list for the contract invoked by a transaction is if it makes at least 25 SLOAD operations from its own data - a fairly rare occurrence from my sampling of transactions.

It strikes me as an oversight that the 2,400 gas cost is included for calls to the first contract invoked by a transaction, given that there is no equivalent cost absent access lists, and there is no way to specify storage slots in an access list without incurring this cost. And given that the contract targeted by a transaction is going to be loaded no matter what, there’s not really any additional computational cost that this 2,400 gas is needed to cover.

I’m assuming it’s too late for Berlin, but for London might it make sense to exclude the 2,400 gas cost for access lists for the “to” address of a contract?