EIPs/EIPS/eip-3198.md
Abdelhamid Bakhta 8a059638d7
Create BASEFEE opcode EIP (#3198)
Add a `BASEFEE (0x48)` that returns the value of the base fee of the current block it is executing in.
2021-01-14 15:59:57 +08:00

2.6 KiB

eip title author discussions-to status type category created requires
3198 BASEFEE opcode Abdelhamid Bakhta (@abdelhamidbakhta), Vitalik Buterin (@vbuterin) https://ethereum-magicians.org/t/eip-3198-basefeeopcode/5162 Draft Standards Track Core 2021-01-13 1559

Simple Summary

Add a BASEFEE (0x48) that returns the value of the base fee of the current block it is executing in.

Abstract

Motivation

The intended use case would be for contracts to get the value of the base fee. This feature would enable or improve existing use cases, such as:

  • Contracts that need to set bounties for anyone to "poke" them with a transaction could set the bounty to be BASEFEE + x, or BASEFEE * (1 + x). This makes the mechanism more reliable, because they will always pay "enough" regardless of market conditions.
  • Gas futures can be implemented based on it. This would be more precise than gastokens.
  • Improve the security for state channels, plasma, optirolls and other fraud proof driven solutions. Having the BASEFEE as an input allows you to lengthen the challenge period automatically if you see that the BASEFEE is high.

Specification

Add a BASEFEE opcode at (0x48), with gas cost G_base.

Op Input Output Cost
0x48 0 1 2

Attempted execution of a BASEFEE prior to eip-1559 fork causes an abort: terminate execution with an Invalid Operation exception.

Rationale

Backwards Compatibility

This EIP is backwards-compatible.

Test Cases

Nominal case

Assuming current block base fee is 7 wei. This should push the value 7 (left padded byte32) to the stack.

Bytecode: 0x4800 (BASEFEE, STOP)

Pc Op Cost Stack RStack
0 BASEFEE 2 [] []
1 STOP 0 [7] []

Output: 0x Consumed gas: 2

Failure 1: No base fee in current block

Assuming a block header with no base fee (prior to eip-1559 fork block). This should fail, since no base fee is present in current block header.

Bytecode: 0x4800 (BASEFEE, STOP)

Pc Op Cost Stack RStack
0 BASEFEE 2 [] []
1 STOP 0 [] []

Expected behaviour: Terminate execution with an Invalid Operation exception.

Security Considerations

Copyright and related rights waived via CC0.