💰Rewards Summary

豚林vitalik.eth

There are 2 types of rewards in DegenReborn --

  1. The Hourly Airdrop

🥇 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. 🙏

The $DEGEN you tribute will be automatically burned.

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

  • 😘 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. 🙌

💩About Buff & Curse

Curse also earns you rewards 🤩

  • Cursing is another form of tributing.

  • If the incarnation you cursed wins airdrop & jackpot, you can also receive your share of rewards

Curse will be more effective than Buff 🤡

  • With an equal amount of $DEGEN, Curse has a greater impact on the TVL than the Buff does.

  • This is to encourage leaderboard shuffle. By cursing, even little wojak can challenge the big whales!

Self-Buff Mega Effect 🐮

  • 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!

🎲 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 --

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 --

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

Hourly airdrops will be determined by daily ranking.

Jackpot will be determined by seasonal ranking.

Last updated