Docs
Supported ChainsFlow EVM GatewayJSON-RPC APITransaction Methods

eth_estimateGas - Flow EVM RPC Method

Estimate gas required for transactions on Flow EVM Gateway. Essential for optimizing transaction costs for consumer NFTs (NBA Top Shot, Disney Pinnacle), gaming dApps, and hybrid Cadence-EVM applications.

Estimates the gas necessary to execute a transaction on Flow EVM Gateway.

Why Flow EVM? Build on the EVM-equivalent layer on Flow blockchain enabling Cadence+Solidity composability with full EVM equivalence on Flow, atomic multi-operation transactions, 40% lower gas fees, and 473% contract growth in 2025.

Use Cases

The eth_estimateGas method is essential for:

  • Transaction preparation - Set appropriate gas limits
  • Cost estimation - Calculate transaction costs before sending
  • Error detection - Identify reverts before spending gas
  • DeFi operations - Estimate costs for consumer NFTs (NBA Top Shot, Disney Pinnacle), gaming dApps, and hybrid Cadence-EVM applications

Request Parameters

Request
fromDATA

Sender address

toDATA

Recipient address

gasQUANTITY

Gas limit

gasPriceQUANTITY

Gas price

valueQUANTITY

Value in wei

dataDATA

Transaction data

Response Body

Response
resultQUANTITY

Estimated gas amount in hexadecimal

Code Examples

Bash
curl -X POST https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_estimateGas",
    "params": [{
      "from": "0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e",
      "to": "0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e",
      "value": "0x1"
    }],
    "id": 1
  }'
JavaScript
import { JsonRpcProvider, parseEther } from 'ethers';

const provider = new JsonRpcProvider('https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY');

// Estimate simple transfer
async function estimateTransfer(to, value) {
  const gasEstimate = await provider.estimateGas({
    to: to,
    value: parseEther(value)
  });

  console.log('Estimated gas:', gasEstimate.toString());
  return gasEstimate;
}

// Estimate contract call
async function estimateContractCall(contract, method, args) {
  const gasEstimate = await contract[method].estimateGas(...args);
  console.log('Estimated gas:', gasEstimate.toString());

  // Add 20% buffer for safety
  return gasEstimate * 120n / 100n;
}
Python
from web3 import Web3

w3 = Web3(Web3.HTTPProvider('https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY'))

def estimate_transfer(to, value_in_ether):
    gas_estimate = w3.eth.estimate_gas({
        'to': to,
        'value': w3.to_wei(value_in_ether, 'ether')
    })

    print(f'Estimated gas: {gas_estimate}')
    return gas_estimate

def estimate_contract_call(contract, method, args):
    func = getattr(contract.functions, method)
    gas_estimate = func(*args).estimate_gas()

    # Add 20% buffer
    return int(gas_estimate * 1.2)

# Estimate simple transfer
gas = estimate_transfer('0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e', 0.1)
Go
package main

import (
    "context"
    "fmt"
    "log"
    "math/big"

    "github.com/ethereum/go-ethereum"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)

func main() {
    client, err := ethclient.Dial("https://api-flow-evm-gateway-mainnet.n.dwellir.com/YOUR_API_KEY")
    if err != nil {
        log.Fatal(err)
    }

    toAddress := common.HexToAddress("0xd3bF53DAC106A0290B0483EcBC89d40FcC961f3e")
    msg := ethereum.CallMsg{
        To:    &toAddress,
        Value: big.NewInt(1000000000000000000),
    }

    gasLimit, err := client.EstimateGas(context.Background(), msg)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("Estimated gas: %d\n", gasLimit)
}

Error Handling

Error CodeMessageDescription
-32000Execution revertedTransaction would fail
-32602Invalid paramsInvalid transaction parameters

Tip: If estimation fails, the transaction would likely revert if sent.