EIP-3651 COINBASE Starts Warm (Warm COINBASE)
Final · Fees & gas · EIP status Final · created 2021-07-12
Makes the COINBASE block proposer reward address warm from the start of a transaction, lowering the gas cost of accessing this address to match its actual cost.
Why it is needed
Payments that send ETH directly to COINBASE, the reward address of the block proposer, are increasingly common. They allow conditional payments that happen only when conditions are met, and if the transaction fails and reverts, the payment is automatically cancelled as well. However, under the access list scheme introduced by EIP-2929, the COINBASE address is classified as cold (not yet read) at the start of a transaction, so the first access incurs an expensive gas cost. Since the node must always read this address anyway, the price is higher than the actual cost. If this price mismatch continues, it creates an incentive to pay with other means such as ERC-20 tokens instead of ETH, and this proposal is motivated by the view that ETH should be the primary means of paying for transactions on Ethereum.
What changes
Today
- The COINBASE address is cold at the start of a transaction, so the first access costs a high amount of gas
- Sending ETH directly to the block proposer costs more than the actual cost of the read
- This creates an incentive to use other payment means such as ERC-20 instead of ETH
After EIP-3651
- The COINBASE address is initialized as warm from the start of the transaction
- Only the cheap warm cost applies from the first access
- Paying the proposer directly in ETH no longer suffers a price penalty
Who is affected
- App and bot developers: Gas costs drop for conditional payment logic that sends ETH directly to the block proposer.
- Validators (block proposers): Direct ETH payments to their reward address become cheaper, making it easier to receive ETH-based payments.
- Client teams: The COINBASE address must be added to the initialization of accessed_addresses at the start of transaction execution.
In depth
Specification: add COINBASE to accessed_addresses
When transaction execution starts, accessed_addresses is initialized to also include the address returned by the COINBASE opcode (0x41). Under the EIP-2929 scheme, addresses in this set are treated as warm, and the warm cost applies to later accesses. This is a small EIP whose specification change is this single line.
Rationale: an address that is always loaded anyway
The addresses initialized as warm from the start are the addresses that must already be loaded when transaction validation begins. The ORIGIN address is always loaded to check the balance against the gas limit and gas price, and the tx.to address is always loaded to start execution. The COINBASE address is also the address that receives the block reward and transaction fees, so it must always be loaded. Treating it as warm therefore matches the actual read cost.
Motivation: direct COINBASE payments and the price mismatch
Paying directly to COINBASE is increasingly used because it enables conditional payments and implicitly cancels the payment of a transaction that would revert. However, under the access list scheme of EIP-2929, COINBASE starts cold, so the access price is overstated. The original text states that this mismatch can create an incentive to use alternative payment means such as ERC-20 instead of ETH, and that ETH should be the primary means of transaction payment on Ethereum.
Compatibility and security
The original text states that this change has no known backward compatibility issues and no known security considerations.
Status and prerequisites
The status of this EIP is Final, meaning its content is settled. It lists EIP-2929 as a prerequisite (requires) and works on top of the cold and warm access cost scheme.