Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add EIP: Increase Gas Utilization Target #9354

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions EIPS/eip-7881.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
eip: 7881
title: Increase Gas Utilization Target
description: Increase the gas utilization target from 50% to 75%
author: Storm Slivkoff (@sslivkoff), Toni Wahrstätter (@nerolation)
discussions-to: <URL>

Check failure on line 6 in EIPS/eip-7881.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `discussions-to` is not a valid URL

error[preamble-discussions-to]: preamble header `discussions-to` is not a valid URL --> EIPS/eip-7881.md:6:16 | 6 | discussions-to: <URL> | ^^^^^^ relative URL without a base | = help: see https://ethereum.github.io/eipw/preamble-discussions-to/

Check failure on line 6 in EIPS/eip-7881.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `discussions-to` should point to a thread on ethereum-magicians.org

error[preamble-re-discussions-to]: preamble header `discussions-to` should point to a thread on ethereum-magicians.org --> EIPS/eip-7881.md:6:16 | 6 | discussions-to: <URL> | ^^^^^^ required pattern was not matched | = info: the pattern in question: `^https://ethereum-magicians.org/t/[^/]+/[0-9]+$` = help: see https://ethereum.github.io/eipw/preamble-re-discussions-to/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link to ethmagicians

status: Draft
type: Standards Track
category: Core
created: 2025-02-10
requires: <1559>

Check failure on line 11 in EIPS/eip-7881.md

View workflow job for this annotation

GitHub Actions / EIP Walidator

preamble header `requires` items must be unsigned integers

error[preamble-uint-requires]: preamble header `requires` items must be unsigned integers --> EIPS/eip-7881.md:11:10 | 11 | requires: <1559> | ^^^^^^^ not a non-negative integer | = help: see https://ethereum.github.io/eipw/preamble-uint-requires/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
requires: <1559>
requires: 1559

---

## Abstract

This proposal changes the gas utilization target from 50% to 75%. This will increase mean network throughput without increasing the worst case resource utilization for Denial of Service (DoS) attacks.

## Motivation

The current parameterization of [EIP-1559](./eip-1559.md) creates a large separation between Ethereum’s average computational load and its worst case computational load. The gas utilization target is defined as 50% of the gas limit, currently 18M gas and 36M gas respectively. This relationship amplifies the worst case load to always be at least twice as large as the average load. This forces the network to accommodate burstier loads and overprovision by an extra factor of two.

Closing the gap between the average case and worst case will improve the efficiency, scalability, safety of the network.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Closing the gap between the average case and worst case will improve the efficiency, scalability, safety of the network.
Closing the gap between the average case and worst case will improve the efficiency, scalability, and safety of the network.


## Specification

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.

Increase the gas target from 50% to 75% of the block gas limit.

The base fee update rule is:
`b_new = b_old * (1 + f(gas_used_old))`

[EIP-1559](./eip-1559.md) currently specifies:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add empty line before lists

- `gas_target = 0.5 * gas_limit`

Check failure on line 34 in EIPS/eip-7881.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Lists should be surrounded by blank lines [Context: "- `gas_target = 0.5 * gas_limi..."]

EIPS/eip-7881.md:34 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "- `gas_target = 0.5 * gas_limi..."]
- `f(gas_used_old) = (1 / 8) * (gas_used_old - gas_target) / gas_target`

Change these functions to:
- `gas_target = 0.75 * gas_limit`

Check failure on line 38 in EIPS/eip-7881.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Lists should be surrounded by blank lines [Context: "- `gas_target = 0.75 * gas_lim..."]

EIPS/eip-7881.md:38 MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "- `gas_target = 0.75 * gas_lim..."]
- `f(gas_used_old) = slope * (gas_used_old - gas_target) / gas_target`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `f(gas_used_old) = slope * (gas_used_old - gas_target) / gas_target`
- `f(gas_used_old) = slope * (gas_used_old - gas_target) / gas_target` where

- if `gas_used_old <= gas_target`: `slope = 1 / 8`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- if `gas_used_old <= gas_target`: `slope = 1 / 8`
- `slope = 1 / 8` when `gas_used_old <= gas_target`

Minor nitpick, I think this reads a bit better though

- if `gas_used_old >= gas_target`: `slope = 3 / 8`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- if `gas_used_old >= gas_target`: `slope = 3 / 8`
- `slope = 3 / 8` when `gas_used_old > gas_target`

Two definitions for slope when gas_used_old = gas_target


## Rationale

Increasing the gas target from 50% to 75% would have the same effect on mean throughput as raising the gas limit from 36M to 54M. However, the gas target approach is much safer against DoS attacks because it does not increase the size of the worst case computational load.

It would be desirable to target an even higher level of utilization than 75%. However, [EIP-1559](./eip-1559.md) requires that utilization must be able to freely move above and below the gas target, in order for utilization to be a useful indicator of demand. Putting the target near 100% makes it difficult to use utilization as an indicator of demand.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It would be desirable to target an even higher level of utilization than 75%. However, [EIP-1559](./eip-1559.md) requires that utilization must be able to freely move above and below the gas target, in order for utilization to be a useful indicator of demand. Putting the target near 100% makes it difficult to use utilization as an indicator of demand.
It would be desirable to target an even higher level of utilization than 75%. However, [EIP-1559](./eip-1559.md) requires that utilization must be able to freely move above and below the gas target in order for utilization to be a useful indicator of demand. Putting the target near 100% makes it difficult to use utilization as an indicator of demand.

Could you quantify what 'near' is, is 75% not near?


The piecewise modification to the update rule is to maintain that base fee updates remain within the range [-12.5%, +12.5%]. Empirically, this range has proven effective, and maintaining this range should preserve current base fee dynamics as much as possible. This update rule still produces a linear output between -12.5% and 0%, and between 0% and +12.5%.

## Backwards Compatibility

No backward compatibility issues found.

## Security Considerations

This proposal does not increase the worst case load for node clients. This allows the network to scale more safely against the threat of DoS attacks.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No mention of state and history growth? Could reference state and history expiry as possible solutions. I think more should be added to this section as it is really the main concern of this EIP.


This proposal does however come with a one-time increase in the average load that a node must be able to sustain at equilibrium. If this proposal is passed while maintaining the current gas limit, it will be important to ensure that nodes can sustain this increased average load. This is likely to already be the case, as nodes have been tested to resist DoS attacks at least twice the size of the current average load.

## Copyright

Copyright and related rights waived via [CC0](../LICENSE.md).

Loading