A questions about the sns_init.yml parameter

Hey guys, I have a question of sns_init.yml parameter to get confirmation on

  1. If this is set up how should the rewards be calculated. For example, if the initial tokens are 100 million, how many token rewards will be released in total during this 4 year period?
        # The initial reward rate at which the SNS voting rewards will increase
        # per year. This field is specified as a percentage. For example: "15%".
        initial: 2.5%

        # The final reward rate at which the SNS voting rewards will increase
        # per year. This rate is reached after transition_duration and remains
        # at this level unless changed by an SNS proposal. This field is
        # specified as a percentage. For example: "5%".
        final: 0%

        # The voting reward rate falls quadratically from initial to final
        # over the time period defined by transition_duration.
        # Values of 0 result in the reward rate always being final.
        # This field is specified as a duration. For example: "8 years".
        transition_duration: 4 years

That would require some math.

If nobody votes, then there are no voting rewards. If only one neuron with negligible voting power votes, then the overall change is also negligible. So let’s instead assume that everyone votes for all the proposals during those 4 years.

Let’s also assume that your SNS configured its reward round to be 1 day in length. (This does not make a huge difference to the final result, but it allows me to use concrete values below.)

So, since the total supply in your example is 100e6, each day, the amount of rewards is

(1 day / 1 year) * 100e6 * reward_rate(t)

The three parameters that you mentioned determine reward_rate(t). Here are some properties of reward_rate:

  1. reward_rate(SNS genesis) = 2.5%
  2. reward_rate(SNS genesis + 4 years) = 0%
  3. decreases quadratically
  4. the slope at (SNS genesis + 4 years) is 0

(This actually uniquely defines reward_rate.) Thus, reward_rate ends up looking like this:

So, if you sum up all the rewards at time t for t in {SNS genesis, 1 day after, 2 days after, … , 4 years after}, then that’s the total amount of rewards over the 4 years.

Interesting places in the implementation:

This is also described in our wiki, so you might want to check that out too.

Special thanks to @aterga for helping me draft this post.


One additional thing to consider for real-world scenarios is that tokens may be minted for voting rewards over time, increasing the total supply and thus increasing overall voting rewards. That obviously can’t be predicted, just as Daniel pointed out that voting participation can’t be predicted, but it’s something to consider when performing these types of calculations.