> ## Documentation Index
> Fetch the complete documentation index at: https://companyname-a7d5b98e-gas-usage.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Gas benchmarks

export const Aside = ({type = "note", title = "", icon = "", iconType = "regular", children}) => {
  const asideVariants = ["note", "tip", "caution", "danger"];
  const asideComponents = {
    note: {
      outerStyle: "border-sky-500/20 bg-sky-50/50 dark:border-sky-500/30 dark:bg-sky-500/10",
      innerStyle: "text-sky-900 dark:text-sky-200",
      calloutType: "note",
      icon: <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="w-4 h-4 text-sky-500" aria-label="Note">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 10.14 10.14 12.7 7 12.7C5.48908 12.6974 4.0408 12.096 2.97241 11.0276C1.90403 9.9592 1.30264 8.51092 1.3 7C1.3 3.86 3.86 1.3 7 1.3ZM7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7C14 3.14 10.86 0 7 0ZM8 3H6V8H8V3ZM8 9H6V11H8V9Z"></path>
        </svg>
    },
    tip: {
      outerStyle: "border-emerald-500/20 bg-emerald-50/50 dark:border-emerald-500/30 dark:bg-emerald-500/10",
      innerStyle: "text-emerald-900 dark:text-emerald-200",
      calloutType: "tip",
      icon: <svg width="11" height="14" viewBox="0 0 11 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="text-emerald-600 dark:text-emerald-400/80 w-3.5 h-auto" aria-label="Tip">
          <path d="M3.12794 12.4232C3.12794 12.5954 3.1776 12.7634 3.27244 12.907L3.74114 13.6095C3.88471 13.8248 4.21067 14 4.46964 14H6.15606C6.41415 14 6.74017 13.825 6.88373 13.6095L7.3508 12.9073C7.43114 12.7859 7.49705 12.569 7.49705 12.4232L7.50055 11.3513H3.12521L3.12794 12.4232ZM5.31288 0C2.52414 0.00875889 0.5 2.26889 0.5 4.78826C0.5 6.00188 0.949566 7.10829 1.69119 7.95492C2.14321 8.47011 2.84901 9.54727 3.11919 10.4557C3.12005 10.4625 3.12175 10.4698 3.12261 10.4771H7.50342C7.50427 10.4698 7.50598 10.463 7.50684 10.4557C7.77688 9.54727 8.48281 8.47011 8.93484 7.95492C9.67728 7.13181 10.1258 6.02703 10.1258 4.78826C10.1258 2.15486 7.9709 0.000106649 5.31288 0ZM7.94902 7.11267C7.52078 7.60079 6.99082 8.37878 6.6077 9.18794H4.02051C3.63739 8.37878 3.10743 7.60079 2.67947 7.11294C2.11997 6.47551 1.8126 5.63599 1.8126 4.78826C1.8126 3.09829 3.12794 1.31944 5.28827 1.3126C7.2435 1.3126 8.81315 2.88226 8.81315 4.78826C8.81315 5.63599 8.50688 6.47551 7.94902 7.11267ZM4.87534 2.18767C3.66939 2.18767 2.68767 3.16939 2.68767 4.37534C2.68767 4.61719 2.88336 4.81288 3.12521 4.81288C3.36705 4.81288 3.56274 4.61599 3.56274 4.37534C3.56274 3.6515 4.1515 3.06274 4.87534 3.06274C5.11719 3.06274 5.31288 2.86727 5.31288 2.62548C5.31288 2.38369 5.11599 2.18767 4.87534 2.18767Z"></path>
        </svg>
    },
    caution: {
      outerStyle: "border-amber-500/20 bg-amber-50/50 dark:border-amber-500/30 dark:bg-amber-500/10",
      innerStyle: "text-amber-900 dark:text-amber-200",
      calloutType: "warning",
      icon: <svg className="flex-none w-5 h-5 text-amber-400 dark:text-amber-300/80" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-label="Warning">
          <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
        </svg>
    },
    danger: {
      outerStyle: "border-red-500/20 bg-red-50/50 dark:border-red-500/30 dark:bg-red-500/10",
      innerStyle: "text-red-900 dark:text-red-200",
      calloutType: "danger",
      icon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor" className="text-red-600 dark:text-red-400/80 w-4 h-4" aria-label="Danger">
          <path d="M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zm41.6-48c-4.3 7.4-4.3 16.6 0 24l88.3 152.9c4.3 7.4 12.2 12 20.8 12l176.6 0c8.6 0 16.5-4.6 20.8-12L453.4 268c4.3-7.4 4.3-16.6 0-24L365.1 91.1c-4.3-7.4-12.2-12-20.8-12l-176.6 0c-8.6 0-16.5 4.6-20.8 12L58.6 244zM256 128c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path>
        </svg>
    }
  };
  let variant = type;
  let gotInvalidVariant = false;
  if (!asideVariants.includes(type)) {
    gotInvalidVariant = true;
    variant = "danger";
  }
  const iconVariants = ["regular", "solid", "light", "thin", "sharp-solid", "duotone", "brands"];
  if (!iconVariants.includes(iconType)) {
    iconType = "regular";
  }
  return <>
      <div className={`callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border ${asideComponents[variant].outerStyle}`} data-callout-type={asideComponents[variant].calloutType}>
        <div className="mt-0.5 w-4" data-component-part="callout-icon">
          {}
          {icon === "" ? asideComponents[variant].icon : <Icon icon={icon} iconType={iconType} size={14} />}
        </div>
        <div className={`text-sm prose min-w-0 w-full ${asideComponents[variant].innerStyle}`} data-component-part="callout-content">
          {gotInvalidVariant ? <p>
              <span className="font-bold">
                Invalid <code>type</code> passed!
              </span>
              <br />
              <span className="font-bold">Received: </span>
              {type}
              <br />
              <span className="font-bold">Expected one of: </span>
              {asideVariants.join(", ")}
            </p> : <>
              {title && <p className="font-bold">{title}</p>}
              {children}
            </>}
        </div>
      </div>
    </>;
};

<Aside type="caution">
  On-chain TVM global version 12, sandbox TVM global version 11.
</Aside>

This page provides gas consumption benchmarks for TON wallet contracts,\
measured in both sandbox (local testing) and on-chain (testnet) environments.

## Single transfers

Gas costs vary between sandbox and on-chain due to different VM configurations, but the relative comparison between wallet versions remains consistent.

| Wallet Version  | Sandbox (gas) | On-chain (gas)       | Notes                                         |
| --------------- | ------------- | -------------------- | --------------------------------------------- |
| **V3**          | 2,994         | [2,494][V3-single]   | Baseline, most efficient for single transfers |
| **V4**          | 3,308         | [2,808][V4-single]   | +10% vs V3, adds plugin support               |
| **V5**          | 4,939         | [4,439][V5-single]   | +65% vs V3, supports gasless & batch          |
| **Highload V3** | 6,200         | [6,200][HLv3-single] | +107% vs V3, but highly efficient for batches |

[HLv3-single]: https://testnet.tonviewer.com/transaction/e4a5bc1851b709260146999dd402fc7e6640b98505536b127fea3dcd9d46086d

[HLv3-batch]: https://testnet.tonviewer.com/transaction/ad6298ff8edf063224bc54a34a39294a44f4a0595e65d73ff4c3511f9f37dacb

[V5-single]: https://testnet.tonviewer.com/transaction/6677ea2a3d0cdccf335bb9856089e8c8986a9a7ff08cbafb8bcb4c8b768bb82e

[V5-batch]: https://testnet.tonviewer.com/transaction/3337c38f131d336b2b7462207cdee1af9171873ec5958ea4565051064a1de4eb

[V4-single]: https://testnet.tonviewer.com/transaction/bb8cfe3748c30e36d63c28871829d0e6dc9f6fdfd715f0623c1f563249737045

[V3-single]: https://testnet.tonviewer.com/transaction/427c5ace7a87c968510daeea2b53a34f56dc9a4ae0397213047d8bcbf51cfed7

## Batch transfers

| Wallet Version  | Sandbox (gas) | On-chain (gas)      | Notes (12 messages are chosen for simplicity)                                                         |
| --------------- | ------------- | ------------------- | ----------------------------------------------------------------------------------------------------- |
| **V3**          | 14,760        | -                   | Supports [up to 4 messages](/standard/wallets/history#external-message-body-layout-3) per transaction |
| **V5**          | 11,392        | [10,892][V5-batch]  | Efficient with batch compared to V3/V4                                                                |
| **Highload V3** | 7,956         | [7,911][HLv3-batch] | Less gas, but uses 2 transactions for batch                                                           |

### Total cost

| Wallet Version  | Single Transfer | 4 Messages                                                           | 12 Messages                                                            | 50 Messages   |
| --------------- | --------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------- |
| **V3**          | 0.0022648 TON   | 0.0048448 TON                                                        | <Tooltip tip="Untested, approximated by hand.">0.0145344 TON</Tooltip> | N/A           |
| **V4**          | 0.0023872 TON   | 0.0049704 TON                                                        | <Tooltip tip="Untested, approximated by hand.">0.0149112 TON</Tooltip> | N/A           |
| **V5**          | 0.0031356 TON   | 0.0059768 TON                                                        | 0.0137208 TON                                                          | 0.05052 TON   |
| **Highload V3** | 0.0036404 TON   | <Tooltip tip="Untested, approximated by hand.">\~0.025 TON</Tooltip> | 0.0158308 TON                                                          | 0.0521892 TON |

<Aside>
  Keep in mind that Highload V3 is using two transactions for batch transfers, this incur additional fwd fee costs.
  For example, if we use 12 messages for simplicity, total cost is:

  `0.0137208 TON` for Wallet V5 (1 transaction with 12 messages).\
  `0.0145344 TON` for Wallet V3 (3 transactions with 4 messages each).\
  `0.0158308 TON` for Highload V3 (2 transactions with 12 messages).
</Aside>

**Key insights:**

* V5 has higher gas overhead for single transfers (+65% vs V3) but becomes efficient with batch operations. Supports up to 255 messages per transaction.
* Highload V3 is expensive for single transfers but becomes highly efficient at scale:
  * Gas cost doesn't change with the number of messages in a batch
  * 100 messages: \~79 gas/msg
  * Designed for handling thousands of transactions

```json expandable theme={null}
"Wallet V3 batch 4 messages": {
    "gas": 4920,
    "compute_fee_nanoton": 1968000,
    "storage_fee_nanoton": 0,
    "import_fee_nanoton": 1276800,
    "total_fwd_fees_nanoton": 1600000,
    "forward_only_nanoton": 1066676,
    "action_fee_nanoton": 533324,
    "total_fee_nanoton": 3778124,
    "reported_total_nanoton": 3778124,
    "true_network_total_nanoton": 4844800,
    "transactions": 1
}

"Wallet V5 batch 12 messages": {
    "gas": 12826,
    "compute_fee_nanoton": 5130400,
    "storage_fee_nanoton": 0,
    "import_fee_nanoton": 3790400,
    "total_fwd_fees_nanoton": 4800000,
    "forward_only_nanoton": 3200028,
    "action_fee_nanoton": 1599972,
    "total_fee_nanoton": 10520772,
    "reported_total_nanoton": 10520772,
    "true_network_total_nanoton": 13720800,
    "transactions": 1
}

"Highload V3 batch 12 messages": {
    "gas": 7956,
    "compute_fee_nanoton": 3182400,
    "storage_fee_nanoton": 0,
    "import_fee_nanoton": 4096400,
    "total_fwd_fees_nanoton": 8552000,
    "forward_only_nanoton": 5701381,
    "action_fee_nanoton": 2850619,
    "total_fee_nanoton": 10129419,
    "reported_total_nanoton": 10129419,
    "true_network_total_nanoton": 15830800,
    "transactions": 2
}
```

## Methodology

#### Sandbox measurements:

Framework: Blueprint + @ton/sandbox\
Wallets: implementations from **@ton/ton** (V3R2, V4, V5R1)
and [Highload V3 sources](https://github.com/ton-blockchain/highload-wallet-contract-v3)\
Test scenario: Simple transfer of 0.01 TON with `PAY_GAS_SEPARATELY` mode

#### On-chain measurements:

Network: TON testnet\
Wallets: Same implementations as sandbox\
Measurement: Actual transaction gas consumption from explorer data

<Aside type="note">
  Absolute gas numbers may vary slightly due to:

  * VM configuration differences (sandbox vs on-chain)
  * Message size or the way you construct the message

  The relative comparison between wallet versions remains consistent across environments.
</Aside>

## Use case recommendations

Based on cost-effectiveness:

**For retail users (1-10 transactions/day):**

* Use **V3** or **V4** — most cost-effective for single transfers (2,994 gas baseline)
* V5 adds 65% gas overhead for single transfers but provides modern features
* Total cost difference negligible for low volume; choose based on feature needs

**For moderate volume (10-100 transactions/day):**

* Use **V5** for batch operations — 6% savings vs V3 for 12-message batches
* Single V5 batch (255 msgs) more efficient than multiple V3/V4 batches
* V5 supports up to 255 messages per transaction vs V3/V4 limit of 4

**For high volume (100+ transactions/day):**

* **Highload V3** becomes efficient with large batches
* Designed for exchanges and payment processors (different processing approach)
* Gas cost remains constant regardless of batch size (unlike V3/V4/V5)
* **Note:** Uses 2-transaction approach resulting in \~1.8x higher forward fees

**Gas comparison for batching:**

* Highload V3: 7956 gas per batch (flat cost regardless of batch size)
* V5: \~1,069 gas/message for 12 messages (scales down with larger batches)
* V3/V4: \~1,230 gas/message (limited to 4 messages per batch)

## Code examples

Check [gas-research](https://github.com/memearchivarius/gas-research) and [tolk-bench](https://github.com/ton-blockchain/tolk-bench) projects for code examples.

**Key features of the gas-research testing suite:**

* Comprehensive gas and fee breakdown analysis
* Automated benchmarking across all wallet versions
* Fee calculation helpers for precise cost analysis
