Skip to content

eth_estimateGas result may not be enough #61

@davidmurdoch

Description

@davidmurdoch

Gas estimation is tricky.

  1. A transactions gasUsed amount is not the same as the amount of gas required for a transaction.
  2. Gas refunds are deducted from the gasUsed amount, but the refunded amount must be available when running the transactions
  3. For some OPCODES (like CALL) 1/64th of the current gasLeft is withheld from the CALL. This has a strange side effect that can cause the CALL (et al) opcode's internal context to run out of gas, even if the transaction itself DOES have enough gas (i.e., gasLeft - gasUsed >= 0).
  4. Since istanbul, some opcodes, under certain circumstances, actually require more gas to run than they actually spend.
  5. The gasLimit of a transaction can cause the transaction's gasUsed as well as the required gas to vary.

@nicholasjpaterno, did I miss any other tricky cases?

Take a look at ganache-core's gas estimation algorithm for implementation details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions