> ## Documentation Index
> Fetch the complete documentation index at: https://developers.fireblocks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EVM Gasless (Universal Gasless)

> Send EVM token transfers and contract calls from vault accounts with no ETH. Set up a relay and Policy rules, send with useGasless, and read gaslessInfo.

## Overview

New to EVM Gasless? See [Universal Gasless](https://support.fireblocks.io/hc/en-us/articles/19948199000092) in the Help Center for a product introduction, then use this guide for the setup and API behavior.

EVM Gasless, also known as Universal Gasless, lets a vault account on an EVM chain send tokens and call contracts without holding the native asset. The vault account signs a meta-transaction, and a relay vault account submits it on-chain and pays the gas. It supports any ERC-20, ERC-721, or ERC-1155 token on the [Universal Gasless integrated chains](https://support.fireblocks.io/hc/en-us/articles/21285504712988). It does not relay native asset transfers such as ETH.

For how gasless compares across chains, see the [Gasless Transactions Overview](/docs/gasless-transactions).

## How it works

EVM Gasless uses EIP-7702 to upgrade a vault account's address into a smart contract wallet that accepts relayed calls. The upgrade happens once per vault account per chain, during that account's first gasless transaction. That first transaction carries one additional action (the delegation), and later transactions from the same account are single meta-transactions.

The upgrade does not change the vault account's address, keys, or balances. After the upgrade, the Console shows an indicator next to the vault account.

```mermaid theme={"system"}
flowchart LR
  A[Choose a relay] --> B[Configure in the Console]
  B --> C[Add Policy rules]
  C --> D[Send a transaction]
  D --> E[Confirm the relay paid]
```

## Choose a relay

The relay is the vault account that pays gas for your gasless transactions.

| Console option         | Who pays gas                                    | Setup                                                                                                                  |
| ---------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **This workspace**     | A vault account in your own workspace           | Self-serve. You keep the relay vault account funded with the native asset.                                             |
| **External workspace** | A vault account in another Fireblocks workspace | Requested through your Customer Success Manager and approved by the other workspace's Admin.                           |
| **Fireblocks**         | A Fireblocks-operated relay                     | Paid add-on. See [Using the Fireblocks Gasless Relay](https://support.fireblocks.io/hc/en-us/articles/23508430639516). |

### Use a Wallet Pool as the relay

A single relay vault account has one nonce stream, so it becomes a bottleneck as gasless volume grows. With **This workspace** as the relay, you can select a [Wallet Pool](/docs/wallet-pools) instead of a single vault account, and Fireblocks spreads relaying across the pool's members.

A relay pool needs more native-asset headroom per member than a transfer pool, because the first transaction from each vault account also pays for the EIP-7702 upgrade. See [Wallet Pools use cases](/docs/wallet-pools#use-cases).

### Relay for other workspaces

To pay gas for other workspaces, go to **Settings** > **Become a gasless relayer**. A relay workspace must use an [API Co-signer](/docs/cosigner-architecture-overview) to sign relay transactions. See [Configuring your workspace as a relay provider](https://support.fireblocks.io/hc/en-us/articles/14773041139868).

## Step 1. Configure EVM Gasless in the Console

Go to **Settings** > **Initiate gasless transactions**, turn on **EVM**, select **Universal gasless** and the relay, then select the default mode. See [Configuring Universal Gasless transactions](https://support.fireblocks.io/hc/en-us/articles/19948348855964) for the full steps.

| Mode               | Behavior                                                                        |
| ------------------ | ------------------------------------------------------------------------------- |
| **On by default**  | Eligible transactions are gasless unless the request sets `useGasless: false`.  |
| **Off by default** | Transactions pay their own fee unless the request sets `useGasless: true`.      |
| **None**           | Gasless is off for every vault account and cannot be requested per transaction. |

## Step 2. Add Policy rules

EVM Gasless adds transactions that your Policy must allow:

| Rule                                                                                                               | Where                 | Needed for                      |
| ------------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------- |
| **Vault account upgrade**, source = the vault accounts that send gasless, action = Allow                           | Your workspace        | Every relay option              |
| **Contract call**, initiator = **Gasless-Orchestrator**, designated signer = **Single user** or **Multiple users** | The relay's workspace | **This workspace** as the relay |

For the Contract call rule:

* **Initiator.** Select **Gasless-Orchestrator** explicitly. This rule is required even if you already have a Contract call rule whose initiator is *any*, because a rule that generalizes the initiator does not cover Gasless-Orchestrator.
* **Designated signer.** Gasless-Orchestrator cannot sign, so the designated signer cannot be the initiator. Set **Designated signer** to **Single user** or **Multiple users**, not **Initiator**.

## Step 3. Send a transaction

Submit a standard transfer with [Create a new transaction](/reference/createtransaction). When the mode is **On by default**, you need no extra fields.

`POST /v1/transactions`

```jsonc theme={"system"}
{
  "assetId": "USDC",
  "amount": "250",
  "source": {
    "type": "VAULT_ACCOUNT",
    "id": "42"
  },
  "destination": {
    "type": "ONE_TIME_ADDRESS",
    "oneTimeAddress": {
      "address": "0x..."
    }
  },
  "useGasless": true // Optional - Overrides the workspace default for this transaction
}
```

**Field notes:**

* `useGasless`: set `true` to request gasless when the mode is **Off by default**, or `false` to pay the fee directly when it is **On by default**. Omit it to follow the workspace default. It has no effect when the mode is **None**.
* `source`: the vault account needs the token balance only. It does not need the native asset.
* `assetId`: a token on a supported chain. Native asset transfers are not relayed.

## Step 4. Confirm the relay paid

[Get a transaction](/api-reference/transactions/get-a-specific-transaction-by-fireblocks-transaction-id) or read the [transaction webhook](/reference/monitoring-transaction-status). A gasless transaction carries `gaslessInfo`, and `feeInfo` reports who paid.

```json theme={"system"}
{
  "id": "5c1f...",
  "status": "COMPLETED",
  "assetId": "USDC",
  "gaslessInfo": {
    "isMetaTx": true,
    "relayTenantId": "8a2e...",
    "relayTenantName": "Acme Treasury",
    "relayVaultAccountId": "7"
  },
  "feeInfo": {
    "paidByRelay": true,
    "relayType": "LOCAL",
    "relayId": "7"
  }
}
```

| Field                             | Description                                                                                             |
| --------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `gaslessInfo.isMetaTx`            | `true` when the transaction was relayed. `gaslessInfo` is returned only for relayed transactions.       |
| `gaslessInfo.relayVaultAccountId` | The relay vault account that paid the gas.                                                              |
| `feeInfo.paidByRelay`             | `true` when the relay paid the fee.                                                                     |
| `feeInfo.relayType`               | `LOCAL` for a relay in your workspace, `THIRD_PARTY` for an external workspace or the Fireblocks relay. |
| `feeInfo.relayName`               | The relay's workspace name. Returned for `THIRD_PARTY` relays only.                                     |

For relayed transactions, the deprecated top-level `fee` field is omitted. Read `feeInfo` instead.

## Troubleshooting

| Symptom                                                       | Cause                                                                                                | Fix                                                                      |
| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| Error `1455` "Missing Gasless configuration"                  | Gasless is not set up for this workspace or asset                                                    | Configure a relay in the Console, or send without `useGasless: true`.    |
| First transaction from a vault account is blocked by Policy   | No **Vault account upgrade** rule covers the account                                                 | Add the rule from [Step 2](#step-2-add-policy-rules).                    |
| Relay transaction is blocked by Policy in the relay workspace | The Contract call rule does not name Gasless-Orchestrator, or its designated signer is **Initiator** | Fix the relay workspace's rule as in [Step 2](#step-2-add-policy-rules). |

See [API error codes](/reference/api-error-codes) for the full list.

## Related

* [Gasless Transactions Overview](/docs/gasless-transactions): compare gasless mechanisms across chains.
* [Wallet Pools](/docs/wallet-pools): spread relaying across several vault accounts.
* [Sweep to omnibus](/reference/sweep-to-omnibus-1#fueling): use EVM Gasless to sweep tokens from deposit vault accounts.
* [Work with Gas Station](/docs/work-with-gas-station): fund vault accounts for native asset transfers.
