DCIPs/EIPS/eip-3198.md

63 lines
2.4 KiB
Markdown

---
eip: 3198
title: BASEFEE opcode
author: Abdelhamid Bakhta (@abdelhamidbakhta), Vitalik Buterin (@vbuterin)
discussions-to: https://ethereum-magicians.org/t/eip-3198-basefeeopcode/5162
status: Final
type: Standards Track
category: Core
created: 2021-01-13
requires: 1559
---
## Simple Summary
Adds an opcode that gives the EVM access to the block's base fee.
## Abstract
Add a `BASEFEE (0x48)` that returns the value of the base fee of the current block it is executing in.
## 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 |
## Rationale
### Gas cost
The value of the base fee is needed to process transactions. That means it's value is already available before running the EVM code.
The opcode does not add extra complexity and additional read/write operations, hence the choice of `G_base` gas cost.
## Backwards Compatibility
There are no known backward compatibility issues with this opcode.
## 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`
## Security Considerations
The value of the base fee is not sensitive and is publicly accessible in the block header. There are no known security implications with this opcode.
## Copyright
Copyright and related rights waived via [CC0](../LICENSE.md).