EIP-1559: Fee market change for ETH 1.0 chain

My proposal: Set a minimum value of at least 1 wei to MINFEE, PARENT_MINFEE, and block.gas_used.

Using these assumptions:

delta = block.gas_used - TARGET_GASUSED
TARGET_GASUSED = 8,000,000
MINFEE_MAX_CHANGE_DENOMINATOR = 8

There is also way to simplify the MINFEE formula:

MINFEE = PARENT_MINFEE + PARENT_MINFEE * delta // TARGET_GASUSED // MINFEE_MAX_CHANGE_DENOMINATOR

For the rest of this comment, I will be using abbreviated variable names:

MF = MINFEE
MF_P = PARENT_MINFEE
MF_MCD = MINFEE_MAX_CHANGE_DENOMINATOR
GU_B = block.gas_used
GU_T = TARGET_GASUSED
delta = GU_B - GU_T

Note: I’m also using / for division instead of //

  1. Substitute original formula with new variable names
MF = MF_P + MF_P * delta / GU_T / MF_MCD
  1. Separate MF_P
MF = MF_P * (1 + delta / GU_T / MF_MCD)
  1. Instead of dividing by MF_MCD, multiply by the reciprocal
MF = MF_P * (1 + (delta / GU_T) * (1 / MF_MCD))
  1. Substitute in the variables for delta
MF = MF_P * (1 + ((GU_B - GU_T) / GU_T) * (1 / MF_MCD))
  1. Separate the delta variables from the numerator and divide both delta variables
    by the same denominator
MF = MF_P * (1 + ((GU_B / GU_T) - (GU_T / GU_T)) * (1 / MF_MCD))
  1. GU_T / GU_T == 1, so replace GU_T / GU_T with 1
MF = MF_P * (1 + ((GU_B / GU_T) - 1) * (1 / MF_MCD))
  1. Multiply 1 / MF_MCD with both GU_B / GU_T and -1
MF = MF_P * (1 + (GU_B / (GU_T * MF_MCD)) - (1 / MF_MCD))
  1. Replace the first 1 with MF_MCD / MF_MCD
MF = MF_P * ((MF_MCD / MF_MCD) + (GU_B / (GU_T * MF_MCD)) - (1 / MF_MCD))
  1. Since MF_MCD / MF_MCD and 1 / MF_MCD have the same denominator, we can combine the numerators
MF = MF_P * (((MF_MCD - 1) / MF_MCD) + (GU_B / (GU_T * MF_MCD)))
  1. Replace MF_MCD and GU_T with their static values
MF = MF_P * (((8 - 1) / 8) + (GU_B / (8,000,000 * 8)))
  1. Simplify
MF = MF_P * (7 / 8) * (GU_B / 64,000,000)
MF = MF_P * ((7 * GU_B) / 512,000,000)

or

MF = MF_P * ((7 * GU_B) / (2^9 * 10^6))

My conclusion:

  • MINFEE, PARENT_MINFEE, and block.gas_used can never be equal to 0.
  • If MINFEE, PARENT_MINFEE, or block.gas_used equal 0, all three variables
    will equal 0.

Additional question:

  • Can a bad actor to intentionally mine a block with 0 gas used?