⁉️Frequent Issues

U64::max

Currently most variables are stored inside the program as U64s.

This means the larger the numbers you use for your farm, the higher the chance you'll hit the U64::max limit and cause an overflow. This in turn will cause your transaction to fail, typically with code 0x1770.

In simple terms what I'm saying is - if at any point in your program's math journey there is a number bigger than 18,446,744,073,709,551,615 (1.8 * 10^19) - you'll get an error.

So what are the numbers that matter?

  • Decimals for your token - if you have 9 decimals, you should add * 10^9 to all math operations.

  • Rarity points assigned to each NFT (remember default is 1, but you can assign up to 65,535 per item)

  • Number of NFTs staked

  • Duration the reward is funded for

  • Amount of promised reward per unit of time

Let's go through an example

  • You have a collection of 10,000 NFTs and you suspect the max a single user might want to stake is 100

  • You've added rarities and the most rare one has a rarity of 5,000

  • You want to let your users stake NFTs on a fixed schedule, promising them 1,000 tokens per day

  • You've funded your reward for 365 days

  • Your token has 9 decimals

  • Let's see what we get:

    • Number of NFTs staked * Max rarity * Rewards/day promised * Days promised * Token decimals

    • 100 * 5000 * 1000 * 365 * 10^9 = 1.82 * 10^20

    • Uh oh! That's about 10 times bigger than u64::max. You'll get an error.

Last updated