> For the complete documentation index, see [llms.txt](https://docs.fuul.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fuul.xyz/core-concepts/budgets-and-smart-contracts.md).

# Budgets & Smart Contracts

To run an incentive program that distributes onchain token rewards, projects deploy a smart contract that holds funds and manages payouts. This contract is **fully controlled by the project** — Fuul has no access to or control over it.

{% hint style="info" %}
Budgets are only required for **token rewards**. Points-only programs don't need a smart contract or budget.
{% endhint %}

## How it works

| Step           | What happens                                                                                                   |
| -------------- | -------------------------------------------------------------------------------------------------------------- |
| **Deploy**     | Initialize your program through the Fuul webapp — this deploys a smart contract you fully own                  |
| **Fund**       | Deposit tokens into the contract via the webapp, or send funds directly from any wallet or multisig            |
| **Distribute** | When users earn rewards, Fuul generates signed claim checks (vouchers) that users redeem against your contract |
| **Recover**    | Set expiration periods on claim checks to recover unclaimed rewards and reallocate them                        |

## Key properties

| Property                      | Description                                                                                              |
| ----------------------------- | -------------------------------------------------------------------------------------------------------- |
| **Non-custodial**             | Your project is the sole administrator of the smart contract. Fuul never has access to your funds.       |
| **One budget per program**    | All active payout rules draw from the same budget                                                        |
| **Multi-chain**               | Deploy on any supported EVM chain (Arbitrum, Base, Optimism, HyperEVM, and more)                         |
| **Direct transfers**          | Funds can be sent directly to the contract address from any source — no additional approval steps needed |
| **Withdraw anytime**          | Funds can be withdrawn at any time through the webapp                                                    |
| **Unclaimed reward recovery** | Define expiration periods for claim checks. Expired, unclaimed rewards can be recovered and reused.      |
| **Claim on behalf**           | Projects can claim rewards on behalf of users — no action required from end users, improving UX          |

{% hint style="warning" %}
If the smart contract does not have sufficient balance, reward claims will fail. Monitor your budget and top up as needed.
{% endhint %}

## Supported tokens

You can distribute rewards in any whitelisted ERC-20 token or native tokens (ETH, etc.) on supported chains.

{% hint style="info" %}
To use your token for onchain payouts, Fuul requires a token whitelisting process. Contact <ecosystem@fuul.xyz> for details.
{% endhint %}

For contract addresses and technical details, see [Smart Contracts](/protocol-reference/smart-contracts.md).
