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

72 lines
2.6 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: Draft
type: Standards Track
category: Core
created: 2021-01-13
requires: 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
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).