# Welcome Degens

**Project 02 is the on-chain fun company.** We're focused on building highly experimental, playable crypto experiences—fast-moving drops, degen games, and on-chain mechanics that hide alpha in plain-sight.

Our first release, *Degen Fusion*, is a fully on-chain merging game where players burn tokens to mint NFTs, take risks to upgrade them, and race toward the finish line.

Everything happens transparently on-chain, powered by verifiable randomness and real token sinks.

We ship fun, not roadmaps.


# Overview

Degen Fusion is a smart-contract-based merging game where fungible and non-fungible tokens form the foundational economy. Players use tokens to mint NFTs, merge them to climb through increasingly rare tiers, or dismantle them to reclaim a portion of their value.

$MATS Token&#x20;

* 469,420 initial supply
* Exists on both Solana and Ethereum
* Solana $MATS must be bridged to Ethereum to play
  * Debridge is the recommended bridge: <https://app.debridge.finance/deport?inputChain=7565164&outputChain=1&inputCurrency=BfzdNbV6pgLSs7KunQrhPBP1n8BYyF3d3op5xKzf9noK&outputCurrency=>

The supply of both tokens is aggressively burned through minting, merging, and upgrade fees—creating real risk, real scarcity, and real stakes. On-chain Bounties are available to claim for the fastest groups or individuals.

All gameplay is on-chain using decentralized smart contracts, and merging outcomes are determined by Chainlink VRF for provable fairness.

## Pre-sale, Airdrop & Referral-based distribution

* Contributors of ETH or SOL during the pre-sale receive tokens.
* Allocation is based on:
  * Dollar value at the time of contribution
  * A player’s **X-Score is** based on referrals and on-chain activity, specifically Solana Pump.fun buys and NFT purchases across all ETH NFT marketplaces.
* The X-Score influences token distribution but does not guarantee any form of return.
* **The Pre-sale is now closed.**&#x20;


# Mechanics

Each mechanic is designed to create meaningful risk, token burn, and strategic decision-making as players climb toward the top tier.

Initial values—such as minting costs, merge fees, dismantle returns, and supply caps—will be shared once the smart contract is revealed. Balancing mechanics will also be revealed at this time.

#### Minting

ERC-20 Tokens are used to mint Tier-1 NFTs

* Minting Cost: 50 tokens per Tier-1 NFT

Pairing Requirement: Each merge requires two NFTs of the same tier.

Random Outcome: Each merge has a 50% chance of successfully upgrading.

On Success: One NFT of the next tier is returned to the player.&#x20;

On Failure: One NFT is lost; the other is returned to the player.

VRF Integration: Merge outcomes are resolved using Chainlink VRF for transparent, tamper-proof randomness.

#### Merging

Merge Fees: Players pay a fee per merge attempt, increasing by tier. All fees are burned.

* Tier 1: 15 tokens
* Tier 2: 45 tokens
* Tier 3: 135 tokens
* Tier 4: 405 tokens
* Tier 5: 1215 tokens

Maximum Tier: 6

Tier Unlocking:

* Each tier beyond Tier 1 unlocks 24 hours after game start
* Tier 2 unlocks 24 hours after game start
* Tier 3 unlocks 48 hours after game start
* And so on...

#### Dismantling

Players can dismantle NFTs of any tier to reclaim a portion of their original token cost.

Returned value increases with NFT tier based on predefined dismantle values:

* Tier 1: 50 tokens (100% of minting cost)
* Tier 2: 115 tokens
* Tier 3: 275 tokens
* Tier 4: 685 tokens
* Tier 5: 1775 tokens
* Tier 6: 4765 tokens

The NFT is burned, and tokens are minted back to the player.

#### ERC-1155 - The NFT

\
ERC-1155 NFTs: Each NFT tier is represented by a unique ID (1+) with its own tracked supply.

* Tier Progression:
  * Tier‑1 NFTs are minted with tokens.
  * Players merge two NFTs of the same tier to attempt upgrading to the next tier.
* NFT Sink Mechanisms:
  * Success rate: Failed merges burn 50% of NFTs used in merge (one NFT from each pair)
  * Dismantling: Returns predefined token values as listed above

#### ERC-20 - The Token

Dynamic Supply: The circulating supply is dynamically adjusted through gameplay actions.

Minting Tier‑1 NFTs: Players burn tokens to mint Tier‑1 NFTs.

* Token Sink Mechanisms:
  * Merge fees: Tokens are burned to attempt NFT upgrades.
* Additional Mechanics:
  * Merge Request Reclaiming: If a merge hasn't been fulfilled after 15 minutes, players can reclaim their merge request


# Bounties

Bounties in Project 02 Degen Fusion are high-risk, high-reward objectives woven into the fabric of our games. They're fully decentralized, on-chain claimable, and designed for the boldest players or most-persevering teams.

Whether through collaboration, whaling out, strategic gameplay or sheer luck, players race to unlock these rare opportunities—knowing that only a few will ever succeed. Each bounty is significant, but nothing is guaranteed. The path is public. The game is open. The stakes are real.

#### Initial Bounty

* 222 ETH for the first claimant
* (2) Tier-6's are required
* BountyId: 0


# Smart Contracts

* [DEGENFUSION](https://etherscan.io/address/0xa95f46a4251cbc11f9fb86021cd060c7ad13fdf6): 0xA95f46a4251CbC11F9FB86021cD060C7aD13fdF6
* [BOUNTY](https://etherscan.io/address/0x80d5c4e7a3b2fd6c376b2ab058e0a3d88931962e): 0x80d5C4E7A3B2FD6C376b2AB058e0a3d88931962e
* [TOKEN](https://etherscan.io/address/0xe062e38d16d949ffb0bd6b62ae2f7a3c930be1c4): 0xe062e38d16d949FFB0bD6b62ae2f7a3c930bE1C4
* [SOL TOKEN](https://solscan.io/token/BfzdNbV6pgLSs7KunQrhPBP1n8BYyF3d3op5xKzf9noK): BfzdNbV6pgLSs7KunQrhPBP1n8BYyF3d3op5xKzf9noK

### DEGENFUSION Contract

#### Core Game Actions

**`mintTier1(uint256 amountToMint)`**

* **Description**: Mints new Tier-1 NFTs by burning ERC-20 tokens
* **Parameters**:
  * `amountToMint`: Number of Tier-1 NFTs to mint
* **Requirements**:
  * User must have sufficient ERC-20 tokens (50 tokens per Tier-1 NFT)
  * Game must be started
* **Effects**:
  * Burns ERC-20 tokens from user
  * Mints Tier-1 NFTs to user
  * Updates Tier-1 supply

**`startMerge(uint256 _tier, uint256 pairsToMerge)`**

* **Description**: Initiates the merging of NFTs of the same tier to attempt upgrading to the next tier
* **Parameters**:
  * `_tier`: The tier of NFTs to merge
  * `pairsToMerge`: Number of NFT pairs to merge
* **Requirements**:
  * Tier must be valid (between 1 and maxTier-1)
  * User must have sufficient NFTs of the specified tier
  * For tiers 2+, tier must be unlocked based on time
  * User must have sufficient tokens for merge fees
* **Effects**:
  * Burns the specified NFTs from user
  * Burns tokens for merge fees
  * Initiates a VRF request for randomness
  * Registers the merge request

**`dismantle(uint256 _tier, uint256 amountToDismantle)`**

* **Description**: Dismantles NFTs of a specified tier to reclaim tokens
* **Parameters**:
  * `_tier`: Tier of NFTs to dismantle
  * `amountToDismantle`: Number of NFTs to dismantle
* **Requirements**:
  * Tier must be valid (between 1 and maxTier)
  * User must have sufficient NFTs of the specified tier
* **Effects**:
  * Burns the specified NFTs
  * Mints tokens to the user based on the dismantle value

**`reclaimMerge(uint256 requestId)`**

* **Description**: Reclaims NFTs from a pending merge that hasn't been fulfilled within the timeout period
* **Parameters**:
  * `requestId`: ID of the merge request to reclaim
* **Requirements**:
  * Merge must not be already fulfilled
  * User must be the initiator of the merge request
  * At least 15 minutes must have passed since the merge request
* **Effects**:
  * Returns the original NFTs to the user
  * Removes the pending merge request

#### View Functions

**`getUnlockTime(uint256 tier)`**

* **Description**: Returns the timestamp when a specified tier will be unlocked
* **Parameters**:
  * `tier`: The tier to check unlock time for
* **Returns**: Timestamp when the tier will be unlocked

**`uri(uint256 tierId)`**

* **Description**: Returns the URI for the metadata of a specific tier
* **Parameters**:
  * `tierId`: The tier ID to get the URI for
* **Returns**: String URI pointing to the metadata JSON

#### Public State Variables

* `gameStartTime`: Timestamp when the game started
* `gameStarted`: Boolean indicating if the game has started
* `keyHash`: Hash used for VRF
* `subId`: Subscription ID for VRF
* `callbackGasLimit`: Gas limit for VRF callbacks
* `baseURI`: Base URI for NFT metadata
* `reclaimTimer`: Constant for the time required before reclaiming (15 minutes)
* `tierUnlockTimer`: Constant for the time between tier unlocks (24 hours)
* `tier1Cost`: Constant for the cost of minting Tier-1 NFTs (50 tokens)
* `maxTier`: Constant for the maximum tier (6)
* `mergeFees`: Array of merge fees for each tier
* `dismantleValue`: Array of token values returned when dismantling each tier
* `supply`: Mapping of current supply for each tier
* `pendingMerges`: Mapping of pending merge requests
* `requestTimestamps`: Mapping of timestamps for merge requests
* `lastMergeRequest`: Mapping of the last merge request for each user
* `mergeResults`: Mapping of merge results

### Project02BountyV1 Contract

#### User Actions

**`claimBounty(uint256 bountyId)`**

* **Description**: Claims a bounty by transferring the required ERC-1155 tokens
* **Parameters**:
  * `bountyId`: ID of the bounty to claim
* **Requirements**:
  * setApprovalForAll (operator: 0x80d5C4E7A3B2FD6C376b2AB058e0a3d88931962e, approved: true) must be called on [DEGENFUSION contract](https://etherscan.io/address/0xa95f46a4251cbc11f9fb86021cd060c7ad13fdf6)
  * Bounty must exist
  * Bounty must not be already claimed
  * User must have the required tokens
* **Effects**:
  * Transfers the specified tokens from user to contract
  * Marks the bounty as claimed
  * Sends the reward to the user

#### View Functions

**`getBountyDetails(uint256 bountyId)`**

* **Description**: Returns the details of a specific bounty
* **Parameters**:
  * `bountyId`: ID of the bounty to get details for
* **Returns**:
  * `tokenContract`: Address of the ERC-1155 token contract
  * `tokenId`: ID of the required token
  * `quantity`: Number of tokens required
  * `reward`: Amount of ETH as reward
  * `available`: Boolean indicating if the bounty is still available

**`getBountyCount()`**

* **Description**: Returns the total number of bounties
* **Returns**: Total number of bounties created

#### Public State Variables

* `admin`: Address of the admin who can create and manage bounties
* `bounties`: Array of all bounties


