---
title: "Fees and Transaction Policy"
description: "GenLayer apps should treat fees as a measured application policy, not as ad hoc math at submission time. Whether you are building a web frontend, a backend…"
source: https://docs.genlayer.com/developers/decentralized-applications/fees-and-transaction-kit
last_updated: 2026-06-16
---

# Fees and Transaction Policy

GenLayer apps should treat fees as a measured application policy, not as ad hoc math at submission time. Whether you are building a web frontend, a backend service, a CLI or an automation script, the transaction must include fee parameters that are large enough for the path it can execute.

The suggested fee parameters come from a developer fee profile generated by the contract test suite. `@genlayer/transaction-kit` is the recommended frontend integration, but the profile itself is not tied to transaction-kit.

## The model

Every transaction makes one deposit up front. The deposit covers:

- consensus work: leader and validator time units, priced in GEN per time unit
- execution budget: receipt, storage and rollup writes
- message budget: child transactions emitted by the contract
- user value: any value intentionally sent to the contract

Unused fee budget is refunded automatically when the transaction finalizes. Price caps are locked at submission time; if network prices rise above a cap before execution, the transaction is rejected and nothing is charged.

## The pieces

| Page | Use it for |
| --- | --- |
| [Transaction Kit Integration](./transaction-kit-integration) | Add the fee approval, signing and tracking flow to a React, Vue or headless frontend. |
| [Fee Profiling and Estimation](./fee-profiling-and-estimation) | Measure deploy and method fee requirements from representative contract tests and use `fee-profile.json` from JS, Python, CLI or transaction-kit. |
| [Fee Outcomes and Debugging](./fee-outcomes-and-debugging) | Interpret transaction outcomes, gasless networks, refunds and Explorer fee panels. |

## Recommended workflow

1. Write normal contract tests for the app paths users can trigger.
2. Add fee-profile coverage for each economically meaningful branch.
3. Run the profile tests against a fee-reporting Studio or network.
4. Commit the generated `fee-profile.json` where your app or tool can load it.
5. Use the profile entry for the deploy or method you are submitting.
6. Estimate with the current network fee policy and submit the returned `distribution` and `feeValue`.

This avoids live simulation before every user transaction. GenLayer transactions can include LLM calls, web requests, appeals and emitted messages, so per-click simulation would make the app slow and expensive. The profile gives the app a reproducible, test-backed estimate; the SDK still reads current prices and caps from the network when the user is about to sign.

## Tooling

| Tool | Role |
| --- | --- |
| `genlayer-js` v2 | SDK methods for fee estimation, deploy/write submission, receipt waiting and success checks. |
| `genlayer-py` | Python SDK methods for the same estimate and submit flow in scripts, services and CLIs. |
| `@genlayer/transaction-kit` | Core estimate, submit, track and verification flow. |
| `@genlayer/transaction-kit-react` / `-vue` | Drop-in UI for fee receipt, preset selection, price protection, signing and status tracking. |
| GenLayer CLI | `estimate-fees`, `deploy` and `write` commands that accept `fee-profile.json` for terminal workflows. |
| `gltest --fee-profile` | Measures fee usage from contract tests and writes the profile consumed by apps and tools. |
| GenLayer Explorer | Shows transaction fee allocation, consumption, refunds and settlement details. |
