# Estimate Fees

Find out how to estimate fees before executing contracts on-chain

## When you may need to estimate fees?

* Before deploy to find out how much it will cost
* Before contract execution to find out how much will it cost
* To calculate how much will it cost to store a contract for a period of time

## Estimate deploy and run fees

The steps you need to complete to estimate fees of deploy and run:

1. Encode a message you will locally execute with [encode\_message](/ever-sdk/reference/types-and-methods/mod_abi.md#encode_message)
2. Download account boc the same way you did in [Run ABI Get method](/ever-sdk/guides/work_with_contracts/run_abi_get_method.md)
3. Run the message on the downloaded state with [run\_executor](/ever-sdk/reference/types-and-methods/mod_tvm.md#run_executor) function
4. Retrieve `result.fees` object. You need **`result.fees.account_fees`** for total account fees value.

## Fees object detailed explanation

Here is the structure of fees object.

* `storage_fee`: *bigint* – Fee for account storage
* `gas_fee`: *bigint* – Fee for processing
* `in_msg_fwd_fee`: *bigint* – Deprecated. Left for backward compatibility.
* `ext_in_msg_fee`: *bigint* – Fee for inbound external message import.
* `total_fwd_fees`: *bigint* – Total fees the account pays for message forwarding
* **`account_fees`: \_bigint**\_\*\* – Total account fees for the transaction execution. Compounds of storage\_fee + gas\_fee + ext\_in\_msg\_fee + total\_fwd\_fees\*\*

#### Deprecated fields. Left for backward compatibility.

* `out_msgs_fwd_fee`: *bigint* – Deprecated. Left for backward compatibility.
* `total_account_fees`: *bigint* – Deprecated. Left for backward compatibility.\
  This is the field that is named as `total_fees` in GraphQL API Transaction type. `total_account_fees` name is misleading, because it does not mean account fees, instead it means validators total fees received for the transaction execution. It does not include some forward fees that account actually pays now, but validators will receive later during value delivery to another account (not even in the receiving transaction but along the way of a chain of transactions processing).\
  Because of all of this, this field is not interesting for those who want to understand\
  the real account fees, this is why it is deprecated and left for backward compatibility.
* `total_output`: *bigint* – Deprecated. Left for backward compatibility.

```graphql
type TransactionFees = {
    in_msg_fwd_fee: bigint,
    storage_fee: bigint,
    gas_fee: bigint,
    out_msgs_fwd_fee: bigint,
    total_account_fees: bigint,
    total_output: bigint,
    ext_in_msg_fee: bigint,
    total_fwd_fees: bigint,
    account_fees: bigint
}
```

## Estimate storage fee

Use [calc\_storage\_fee](/ever-sdk/reference/types-and-methods/mod_utils.md#calc_storage_fee) method.

## Sample source code

**Core**

<https://github.com/everx-labs/sdk-samples/tree/master/core-examples/node-js/run_executor>

**AppKit**

<https://github.com/everx-labs/sdk-samples/blob/master/appkit-examples/fee-calculation/index.js>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.everos.dev/ever-sdk/guides/work_with_contracts/estimate_fees.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
