# How Contracts Work

<figure><img src="/files/GSMi6BGzDTrWbhqshOuf" alt=""><figcaption></figcaption></figure>

The sequence of events is:

1. Call `QuestFactory.createQuest(rewardType: [erc20]` defined as:

   ```
    function createQuest(
        address rewardTokenAddress_,
        uint256 endTime_,
        uint256 startTime_,
        uint256 totalParticipants_,
        uint256 rewardAmountOrTokenId_,
        string memory contractType_,
        string memory questId_
    )
   ```

   * `rewardTokenAddress_`is the contract address for the ERC20 token reward
   * `endTime` is the end time in unix for the Quest.
   * `startTime` is the start time in unix for the Quest.
   * `totalParticipants` is the total number of accounts that can participate in the Quest.
   * `rewardAmountOrTokenId_` is the reward amount if it's an ERC-20 token (ie. 1 UNI token out of the 1,000 total)
   * `contractType_` will be either an ERC-20 token.
   * `questId` is an internal UUID that connects multiple systems and acts as a universal UUID
2. Transfer rewards to the newly created Quest. You can just transfer in rewards directly.
3. The Quest Factory will keep track of receipts for a given user and quest. There is a finite amount of participants allowed which is calculated by taking the totalRewards / rewardAmountOrTokenId.
4. Execute the start function. This will validate that the Quest is ready for public and upon reaching the effective StartDate, will be ready for use.&#x20;


---

# 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://help.rabbithole.gg/for-developers/how-contracts-work.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.
