# estimateGas

Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction will not be added to the blockchain. Note that the estimate may be significantly more than the amount of gas actually used by the transaction, for a variety of reasons including EVM mechanics and node performance.

#### Method Limitations

To prevent abusive of the API, the `gas` parameter to `eth_estimateGas` and `eth_call` are capped at 10x (1000%) the current block gas limit. You can recreate this behavior in your local test environment (ganache, besu, geth, or other client) via the `rpc.gascap` command-line option.

### REQUEST

```
POST https://mainnet-slice-rpc.com
```

#### HEADER

```
Content-Type: application/json
```

#### REQUEST PAYLOAD

* `TRANSACTION CALL OBJECT` _\[required]_
  * `from`: _\[optional]_ 20 Bytes - The address the transaction is sent from.
  * `to`: 20 Bytes - The address the transaction is directed to.
  * `gas`: _\[optional]_ Integer of the gas provided for the transaction execution. eth\_estimateGas consumes zero gas, but this parameter may be needed by some executions.
  * `gasPrice`: _\[optional]_ Integer of the gasPrice used for each paid gas
  * `value`: _\[optional]_ Integer of the value sent with this transaction
  * `data`: _\[optional]_ Hash of the method signature and encoded parameters. For details see Ethereum Contract ABI

If no gas limit is specified geth uses the block gas limit from the pending block as an upper bound. As a result the returned estimate might not be enough to executed the call/transaction when the amount of gas is higher than the pending block gas limit.

#### EXAMPLE

```
## JSON-RPC over HTTPS POST
curl https://mainnet-slice-rpc.com \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc":"2.0","method":"eth_estimateGas","params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x9184e72a","data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}'

## JSON-RPC over WSS
wscat -c ws://mainnet-slice-rpc.com
>{"jsonrpc":"2.0","method":"eth_estimateGas","params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x9184e72a","data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}
```

### RESPONSE

#### RESULT FIELDS

* `GAS USED` - the amount of gas used.

#### BODY

```
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": "0x5cec"
}
```

On Mainnet, if this call causes the EVM to execute a `REVERT` operation, an error response of the following form is returned, with the revert reason pre-decoded as a string.

```json
{
    "jsonrpc": "2.0",
    "id": 1,
    "error": {
        "code": 3,
        "message": "execution reverted: Dai/insufficient-balance",
        "data": "0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000184461692f696e73756666696369656e742d62616c616e63650000000000000000"
    }
}
```
