# Transaction fees & speed

## Fees selection strategy for transactions

When creating a transaction, for most currencies you need to select a transaction speed (See below for exceptions).\
\
The selected speed will determine the **final fees**. At this stage, the exact amount is unknown so only the **total max fees** is displayed. That is the *highest* amount you will pay for the transaction to be approved. The fee can be lower but will never go above that amount.

*Note: Choosing a normal speed may result in longer confirmation times, potentially taking several days.*

{% hint style="success" %}
The **final fee** is determined and applied only after the transaction has received its final approval from the last Operator.
{% endhint %}

<figure><img src="https://3559080615-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FapjLO0A6xJKWicwzV6aG%2Fuploads%2FJQvTeVUEpIAuVO0fRxxd%2Fimage.png?alt=media&#x26;token=d0afe42f-1900-4eca-bbc7-1773662034aa" alt=""><figcaption></figcaption></figure>

<details>

<summary>Ethereum</summary>

For Ethereum and ERC20 transactions, you can select the transaction speed and set a maximum gas price. To account for potential gas price fluctuations between transaction creation and final submission (after all approvals), the platform automatically applies a **400% buffer** to the base price in the recommended path. This helps ensure successful execution.

If you prefer full control and want to remove the buffer, you can switch to **custom mode** and manually set the gas price and gas limit (see [Custom fees](https://app.gitbook.com/o/fFY5hMNJlbYJQ0megQCu/s/apjLO0A6xJKWicwzV6aG/~/changes/48/core/transactions/transaction-fees-and-speed#custom-fees)).

**Note for Direct Access EVM Accounts:**\
Only one estimated speed is available, but you can still switch to custom mode if needed.

</details>

<details>

<summary>Polkadot</summary>

Polkadot transactions do not use processing speed options. Fees are **fixed and determined by the network**, so users cannot adjust them manually.

</details>

<details>

<summary>Solana &#x26; SPL tokens</summary>

Solana & SPL tokens transactions do not use speed options but have optional priority fees.&#x20;

[Priority fees](https://solana.com/developers/guides/advanced/how-to-use-priority-fees) are optional extra fees added to Solana transactions to increase their chances of being included in a block. They are paid in addition to the base transaction fee. Using a priority fee helps ensure your transaction is processed quickly, especially when the network is busy. Transactions without priority fees may be delayed or dropped during congestion.\
\
\&#xNAN;*Note: the priority fees and buffer will only be used if necessary*

<figure><img src="https://3559080615-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FapjLO0A6xJKWicwzV6aG%2Fuploads%2Fi02qMLOuUPx99SRrSPRo%2Fimage.png?alt=media&#x26;token=4873fff7-bb73-4105-9949-1ca9f772237d" alt=""><figcaption><p>Solana &#x26; SPL token transaction recommended fees</p></figcaption></figure>

</details>

<details>

<summary>XRP additional field</summary>

Enter the recipient's **Destination tag** or select one from the drop-down list if a whitelist has been linked to the account.

</details>

<details>

<summary>Tron</summary>

Tron introduces two resource conceptions: Bandwidth & Energy. \
\
Ordinary transactions consume Bandwidth, Smart contract related transactions not only consumes Bandwidth points, but also Energy. If wallets do not own enough Bandwidth or Energy, TRX is consumed instead.\
\
More info on Bandwidth & Energy model can be found [here](https://developers.tron.network/v3.7/docs/resource-model).

</details>

<details>

<summary>XLM additional field</summary>

(optional) Select the recipient's **Memo type** from the drop-down list and enter the **Memo**. A *slow* speed is selected by default for XLM transactions. This is to ensure you never pay more than what the network requires when creating the request.

</details>

## Total max fees

When a transaction request is created, the system calculates an estimated **maximum total fee**. It may vary depending on the crypto asset & speed selected, the size of the transaction, and the state of the network.

<details>

<summary>Bitcoin</summary>

| speed  | Network fees                | Max fees |
| ------ | --------------------------- | -------- |
| Slow   | Fees to confirm in 6 blocks | + 50%    |
| Medium | Fees to confirm in 3 blocks | + 50%    |
| Fast   | Fees to confirm in 1 blocks | + 50%    |

</details>

<details>

<summary>Ethereum</summary>

| Speed  | Network fees                                     | Max fees                |
| ------ | ------------------------------------------------ | ----------------------- |
| Slow   | Fee amount when creating the transaction request | + 400% on the gas price |
| Medium | Fee amount when creating the transaction request | + 400% on the gas price |
| Fast   | Fee amount when creating the transaction request | + 400% on the gas price |

Ethereum (ETH) transaction fees are based on two components:

* **Gas price:** A variable amount that changes frequently based on network demand.
* **Gas limit:** A standardized value representing the maximum computational effort required.

Because the gas price can fluctuate between the time a transaction is created and when it’s finally submitted (after all approvals), the platform automatically applies a 4**00% buffer** to the gas price for ETH and ERC20 transactions. This helps ensure the transaction succeeds when broadcasted.

**Max Fees = Gas Limit × (Gas Price + 400% Buffer)**

It’s important to understand the difference between **gas price** and **max gas price**:

* The **gas price** is what you actually pay to get your transaction confirmed within a desired time frame.
* The **max gas price** is a safety cap — not necessarily the final amount you'll pay — used to increase the likelihood of successful broadcasting.

**Want full control?**\
You can disable the buffer by switching to **custom mode**, where you can manually set the gas price and gas limit.

</details>

<details>

<summary>Polkadot</summary>

Fees are **fixed and determined by the network.**

</details>

<details>

<summary>XRP</summary>

Refer to the [XRP ledger](https://xrpl.org/docs/concepts/transactions/transaction-cost/) for additional information.

| speed  | Network fees                                    | Max fees |
| ------ | ----------------------------------------------- | -------- |
| Slow   | 10 drops                                        | + 50%    |
| Medium | 10 drops + load cost                            | + 50%    |
| Fast   | 10 drops + (load cost + open ledger cost) \*1.5 | + 50%    |

</details>

<details>

<summary>Tezos</summary>

| speed  | Network fees                                                                          | Max fees |
| ------ | ------------------------------------------------------------------------------------- | -------- |
| Slow   | Initial Fee\*75%                                                                      | + 50%    |
| Medium | Initial Fee: standard network fee level estimated for the transaction’s storage & gas | + 50%    |
| Fast   | Initial Fee\*125%                                                                     | + 50%    |

</details>

<details>

<summary>Solana &#x26; SPL tokens</summary>

The total estimated fees on Solana network includes the estimated base fee plus the priority fee plus the (default) Ledger 100% buffer.

[Priority fees](https://solana.com/developers/guides/advanced/how-to-use-priority-fees) are optional extra fees added to Solana transactions to increase their chances of being included in a block. They are paid in addition to the base transaction fee. Using a priority fee helps ensure your transaction is processed quickly, especially when the network is busy. Transactions without priority fees may be delayed or dropped during congestion.\
\
\&#xNAN;*Note: the priority fees and buffer will only be used if necessary*

<figure><img src="https://3559080615-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FapjLO0A6xJKWicwzV6aG%2Fuploads%2Fi02qMLOuUPx99SRrSPRo%2Fimage.png?alt=media&#x26;token=4873fff7-bb73-4105-9949-1ca9f772237d" alt=""><figcaption><p>Solana &#x26; SPL token transaction recommended fees</p></figcaption></figure>

</details>

## Custom fees

This feature is available for **Bitcoin, Ethereum, ERC20 tokens, XRP, Solana, and SPL token transactions**.

* **Bitcoin, Ethereum, ERC20, and XRP:**\
  You can set a **maximum fee** you're willing to pay by enabling the **Custom** toggle. This helps you control costs, but keep in mind that setting the fee too low may delay confirmation.
* **Solana and SPL tokens:**\
  You can set **priority fees** by enabling the **Custom** toggle to increase the likelihood of your transaction being processed.

## How transaction fees are handled at broadcast time

Once the final approval for a transaction request is collected, the transaction is created and immediately broadcasted to the network. At this point, the fees are recalculated and compared to the maximum fees set during request creation:

* **If the recalculated fees are lower than the max fees**, the transaction is sent with the lower amount. The unused portion of the max fees becomes available again in your account.

**Example:**

1. Kathy Sanchez creates an Ethereum transaction request at 1:00 PM with a "fast" speed setting. The estimated maximum fee is **ETH 0.005**.
2. At 7:00 PM, after all approvals are completed, the transaction is broadcasted. The system recalculates the fast-speed fee at that time and determines it to be **ETH 0.003**.
3. Since this is below the max fee, the transaction is sent using **ETH 0.003**, and the remaining **ETH 0.002** is released back to the account.

You can view the final fee in the **Transaction Details** dialog, accessible from your account's dashboard.

## Failing transactions

If a transaction fails to send, Ledger Vault will automatically retry up to three times. If all attempts are unsuccessful, the transaction will be marked as *Failed to Broadcast*. You can mouse over the "failed to broadcast" error message to see more details about the reason of failure. &#x20;
