Add a `BASEFEE (0x48)` that returns the value of the base fee of the current block it is executing in.
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
, orBASEFEE * (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 theBASEFEE
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
Copyright and related rights waived via CC0.