Skip to main content
Gas estimation helps avoid failed transactions and provides transparency into expected costs.

Implementations

1

Initialize Relayer Client

import { createGelatoEvmRelayerClient } from '@gelatocloud/gasless';
import { createPublicClient, encodeFunctionData, formatUnits, http } from 'viem';
import { baseSepolia } from 'viem/chains';

const relayer = createGelatoEvmRelayerClient({
  apiKey: process.env.GELATO_API_KEY,
  testnet: true
});

const publicClient = createPublicClient({
  chain: baseSepolia,
  transport: http()
});
2

Estimate Gas

const data = encodeFunctionData({
  abi: [{ type: 'function', name: 'increment', inputs: [], outputs: [] }],
  functionName: 'increment'
});

const gasEstimate = await publicClient.estimateGas({
  to: '0xE27C1359cf02B49acC6474311Bd79d1f10b1f8De',
  data
});

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

Get Fee Quote (ERC-20)

Get the fee quote in an ERC-20 token like USDC:
const USDC_ADDRESS = '0x036CbD53842c5426634e7929541eC2318f3dCF7e'; // Base Sepolia

const quote = await relayer.getFeeQuote({
  chainId: baseSepolia.id,
  gas: gasEstimate,
  token: USDC_ADDRESS
});

console.log('Fee:', formatUnits(quote.fee, 6), 'USDC');
console.log('Expiry:', new Date(quote.expiry * 1000).toISOString());
4

Get Fee Data

Get current gas price and token rate:
const feeData = await relayer.getFeeData({
  chainId: baseSepolia.id,
  token: USDC_ADDRESS
});

console.log('Gas Price:', feeData.gasPrice.toString(), 'wei');
console.log('Rate (token/ETH):', feeData.rate);

Additional Resources