---
# System prepended metadata

title: InfinityKeys - NFT Raffle

---

# InfinityKeys - NFT Raffle

## Requirements

- Draw opened to holders of arbitrary infinity keys achievement nft
- Smart contact should escrow an ERC721 when a draw is created
- Raffle should be conducted based on list of holders of the IKAchievementNFT snapshoted at the moment raffle is triggered
    - draw should be based on addresses holding at least one token from an arbitrary set of key Ids
- Contract should integrate Chainlink VRF2 to get a trustless source of randomness
- Simple interface for winner to check if they won and claim the prize
    - This will be handled by InfinitKeys frontend team
    - Instead, write Contract Unit tests and E2E tests so they can be used as a guide to build a UI to create new raffles and inform draw winners

## Milestones


| No | Objective | Est. Time (Hours) |
| -- | --------- | --------- |
| 1  | **Key holder snaphost logic**          | -          |
| 1.1  | Build a TS script to get an off-chain snapshot of IkAchievementNFT key holders that qualify for a raffle (using Flipside SDK)         | 4          |
| 1.2  | Build a TS script to build a Merkle tree from Key holder snapshot          | 4          |
| 2  | **Create a `VRF NFT Drawing` contract project using hardhat**     | -     |
| 2.1  | Setup project + Implement ERC721 escrow logic          | 4          |
| 2.2  | Integrate Chainlink VRF2 to get a trustles source of entrophy          | 6         |
| 2.3  | Implement Draw and claiming logic based on VRF2 and Merkle tree snapshot           | 5          |
| 2.4  | Write Proxy Factory contract to create new raffles          | 3          |
| 2.5  | Write Unit tests          | 5          |
| 3  | Deploy both InfiniteKeys and `VRF NFT Drawing` contracts on Sepolia and run integration tests with Chainlink VRF2          | 5          |
| 4  | Write E2E tests and README file explaining how to deploy and use contracts on a frontend          | 4          |
|    | **TOTAL**                 | **40**     |

## Deliverables

- Hardhat project repository
    - `VRF NFT Drawing` contract
    - Raffle Proxy Factory contract
    - Key Holder Snapshot + Merkle Tree scripts
    - Unit / E2E tests
    - README File with setup instructions

## Estimated Time

- 40 Hours (~2 weeks mid-time work)

## Payout

- 1600 US Dollars (DAI/USDC/RAI accepted)


