# Rewards Summary

{% hint style="info" %}
**There are 2 types of rewards in DegenReborn --**

1. [**The Hourly Airdrop**](broken://pages/vx3r3nUWGwQF11Wyjl2d)
2. [**The Degen Jackpot**](/litepaper/game/seasonal-ranking-and-jackpot.md)
   {% endhint %}

## 🥇 Leaderboard & Hall of Fame

To be eligible for any reward (Airdrop or Jackpot), your incarnation have to be among the top 50 incarnations by lifescore. 😎

We call the top 50 incarnations by lifescore - the Hall of Fame **(HoF)**. HoF changes constantly, and high lifescore incarnations will squeeze out low lifescore ones. 😭

## 🚀 Tributing - Buff or Curse

You can **stake** your $DEGEN on top incarnations to share the Airdrop & Jackpot. Like **tributing** to a tombstone. 🙏&#x20;

The $DEGEN you tribute will be automatically burned.

**There are two types of tributing -- Buff & Curse.**

![](/files/Z219Xfpe8lDElLA0XvUO)

* 😘 When you **buff** a incarnation with you $DEGEN, its TVL and ranking will **increase** ⬆️
* 🤬 When you **curse** a incarnation with your $DEGEN, its TVL and ranking will **decrease**. ⬇️

You can still switch your $DEGEN stake to other incarnations anytime, with a 5% burn. 🪦

For all rewards, owner of the incarnation gets 20% of the rewards. Stakeholders get 80%, and it's distributed according to your shares of the pool. 🙌

{% hint style="info" %}
**💩About Buff & Curse**

<mark style="background-color:orange;">**Curse also earns you rewards 🤩**</mark>

* Cursing is another form of tributing.
* If the incarnation you cursed wins airdrop & jackpot, **you can also receive your share of rewards**&#x20;

<mark style="background-color:orange;">**Curse will be more effective than Buff 🤡**</mark>

* With an equal amount of $DEGEN, Curse has a greater impact on the TVL than the Buff does.&#x20;
* This is to encourage leaderboard shuffle. By cursing, even little wojak can challenge the big whales!

<mark style="background-color:orange;">**Self-Buff Mega Effect 🐮**</mark>

* Buffing your own pool will give you mega impact on TVL.
* This is to encourage little wojak from giving it up, buff your own pool and challenge the big whales!
  {% endhint %}

## 🎲 How Random?

Onchain random airdrop and jackpot is a big topic. 🤔

As much as possible, we use **Chainlink Automation and VRF**. ✔️

We also open source the raffle source code so that anyone can run the raffle source code with random seed generated by predefined procedure, and verify the result themselves. 🫡

More measures are being added in subsequent seasons to make the game more fully onchain. 🐾

See below --

```haskell
import System.Random

raffleWinners :: Int -> [Int] -> Int -> [Int]
raffleWinners numCandidates weights seed = take 10 $ pickWinners candidatesWithWeights sortedWeights (mkStdGen seed)
  where
    candidates = [1..numCandidates]
    candidatesWithWeights = zip candidates weights
    sortedWeights = map snd $ reverse $ sort candidatesWithWeights

pickWinners :: [(Int, Int)] -> [Int] -> StdGen -> [Int]
pickWinners [] _ _ = []
pickWinners _ [] _ = []
pickWinners candidatesWeights (x:xs) gen = winner : pickWinners remainingCandidatesWeights xs newGen
  where
    (index, newGen) = randomR (0, totalWeights - 1) gen
    (winner, remainingCandidatesWeights, totalWeights) = pickWinner candidatesWeights [] 0 index

pickWinner :: [(Int, Int)] -> [(Int, Int)] -> Int -> Int -> (Int, [(Int, Int)], Int)
pickWinner ((candidate, weight):xs) acc cumIndex index
  | cumIndex + weight > index = (candidate, reverse acc ++ xs, cumIndex + weight)
  | otherwise = pickWinner xs ((candidate, weight):acc) (cumIndex + weight) index
```

Also in JavaScript --

```javascript
const seedrandom = require('seedrandom');

function getRaffleWinners(candidates, weights, numWinners, seed) {
  const rng = seedrandom(seed);
  const weightedCandidates = candidates.flatMap((c, i) => Array.from({ length: weights[i] }).fill(c));
  const winners = [];
  while (winners.length < numWinners && weightedCandidates.length > 0) {
    const randomIndex = Math.floor(rng() * weightedCandidates.length);
    winners.push(weightedCandidates.splice(randomIndex, 1)[0]);
  }
  return winners;
}

const candidates = Array.from({ length: 100 }, (_, i) => `Candidate ${i + 1}`);
const weights = Array.from({ length: 100 }, () => Math.ceil(Math.random() * 10));
const numWinners = 10;
const seed = 'myRandomSeed';

const winners = getRaffleWinners(candidates, weights, numWinners, seed);
console.log('Winners:', winners);
```

## ♻️ TVL

TVL here refers to the amount of $DEGEN staked - buff and curse. When picking winners from Hall of Famers, TVL is the most important factor.

## **⏰ Daily & Seasonal Ranking**

**Daily Ranking:** refers to the reset of TVLs & Tribute data everyday

**Seasonal Ranking:** refers to the overall ranking associated with Jackpot allocation

{% hint style="info" %}
Hourly airdrops will be determined by **daily ranking**.&#x20;

Jackpot will be determined by **seasonal ranking**.
{% endhint %}


---

# 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://degenreborn.gitbook.io/litepaper/game/rewards-summary.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.
