# 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).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fuul.xyz/core-concepts/budgets-and-smart-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
