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

# Fee Delegation

> Transaction type 0x16 separates who signs a transaction from who pays gas — enabling gasless user experiences without changing contract logic.

> Fee delegation lets your application pay gas on behalf of users. Users interact with your dApp without holding any WKRC.

## The two roles

A fee-delegated transaction (type `0x16`) has two independent signers:

| Role                   | Signs                              | Pays                  |
| ---------------------- | ---------------------------------- | --------------------- |
| Sender (`From`)        | Transaction intent (`v`, `r`, `s`) | Transfer value only   |
| Fee Payer (`FeePayer`) | Gas consent (`fv`, `fr`, `fs`)     | `gasLimit × gasPrice` |

Both signatures are required before the transaction can be submitted. Neither party can act unilaterally — the sender cannot assign fees without the fee payer's signature, and the fee payer cannot change the transaction contents.

## What stays the same

`tx.origin` is always the sender. Contracts that check `msg.sender` or `tx.origin` behave identically to standard transactions — no contract code changes are required.

Unused gas is refunded to the fee payer, not the sender.

## Why this matters

On standard EVM chains, every user must hold the native gas token. Fee delegation removes this requirement:

* **Gasless onboarding** — new users interact with your app before they hold any WKRC
* **Subsidized actions** — your backend sponsors gas for specific flows (first mint, daily claim, etc.)
* **Batch relayer** — one fee payer account handles gas for many users

## How it works (high level)

1. The sender builds the transaction with the `feePayer` field set
2. The sender signs → produces `v`, `r`, `s`
3. The fee payer reviews the transaction and signs → produces `fv`, `fr`, `fs`
4. The fully signed transaction is submitted via `eth_sendRawTransaction`

The node validates both signatures before accepting it into the mempool. If either is missing or invalid, the transaction is rejected.

## Developer benefits

* No changes to existing contract logic
* Flexible — fee payer can be a backend wallet, a smart contract, or any address
* Balance isolation — fee payer funds can only cover gas, not the transfer value

## Related

* [Fee Delegation Use Case](/en/v0.3/fee-delegation) — full implementation with ethers.js code
* [Fee Delegation Tutorial](/en/v0.3/build/tutorials/fee-delegation) — step-by-step build guide
* [Transaction Types](/en/v0.3/reference/transaction-types) — type 0x16 field reference
