eth_estimateGas
Estimates the gas necessary to execute a transaction on Moonbase Alpha.
Why Moonbase? Build on the Moonbeam testnet for risk-free EVM dApp development and deployment testing with free testnet tokens, full EVM compatibility, XCM testing capabilities, and identical feature set to Moonbeam mainnet.
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 EVM dApp testing, XCM integration validation, and pre-mainnet deployment verification
Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
from | DATA | No | Sender address |
to | DATA | No | Recipient address |
gas | QUANTITY | No | Gas limit |
gasPrice | QUANTITY | No | Gas price |
value | QUANTITY | No | Value in wei |
data | DATA | No | Transaction data |
Request#
{
"jsonrpc": "2.0",
"method": "eth_estimateGas",
"params": [{
"from": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"to": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"value": "0x1"
}],
"id": 1
}
Returns#
| Type | Description |
|---|---|
QUANTITY | Estimated gas amount in hexadecimal |
Response#
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x5208"
}
Note: 0x5208 = 21000 gas (standard ETH transfer)
Code Examples#
- cURL
- JavaScript
- Python
- Go
curl -X POST https://api-moonbase-alpha.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_estimateGas",
"params": [{
"from": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"to": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"value": "0x1"
}],
"id": 1
}'
import { JsonRpcProvider, parseEther } from 'ethers';
const provider = new JsonRpcProvider('https://api-moonbase-alpha.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;
}
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-moonbase-alpha.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('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 0.1)
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-moonbase-alpha.n.dwellir.com/YOUR_API_KEY")
if err != nil {
log.Fatal(err)
}
toAddress := common.HexToAddress("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY")
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 Code | Message | Description |
|---|---|---|
| -32000 | Execution reverted | Transaction would fail |
| -32602 | Invalid params | Invalid transaction parameters |
Tip: If estimation fails, the transaction would likely revert if sent.
Related Methods#
eth_gasPrice- Get current gas priceeth_sendRawTransaction- Send transaction