A Proposal for Voting Stake Calculation

Your feedback is appreciated!


It seems logical, that user stake should be dependent on the time interval of Algo’s held, too,
not only the amount of Algos. I support this!

1 Like

Out of curiosity, what exactly are the reasons why older tokens should be given more weight in the consensus?

I understand the reason given in the github link (“strong attacker may be able to obtain a considerable amount of system tokens, for example by borrowing from a DEFI application”), and that to mitigate against it, it may be worth setting the weight to (near) zero for some predefined time.

But why would there be a difference in weight whether someone has held the tokens for 1 year vs 10 years for example? Because unless the parameters were chosen so that the difference is negligible, wouldn’t it just artificially bias the system towards a specific group of users (the early adopters), and further centralize the consensus rather that decentralizing it? And decrease the trust the general public would have on Algorand (at least relative to competing cryptocurrencies without similar token age bias)?

1 Like

Good point!

That’s why I’ve used exponential moving average instead of arithmetic mean. Unlike arithmetic mean, EMA has a limited memory, and its memory can be controlled by the alpha parameter. As a rule of thumb we can say that EMA only remembers the last 3 / alpha data values.

For example, if our time step is equal to one month and our alpha is 0.1 the voting stake for a newly created account with 10 ALGOs will change with this function:

stake(n) = (1-0.9n)10

you can see the interactive plot here.

As you can see after 30 months the new user’s stake has reached almost 10. 10 is the maximum possible stake for a user who has 10 ALGOs. So, after only 30 months the new user is like an old user who has held 10 ALGOS since the start of the Algorand blockchain.


Perfect explanation @aybehrouz, and a nice solution indeed. Thank you.

1 Like

And what do you think about calculating rewards based on users’ voting stake instead of their raw ALGO balance?

In my humble opinion (meaning I may be wrong), even though at first it may seem to make sense to tie the rewards to the voting stake (i.e. what are you really being rewarded for if not for contributing to the consensus?), I’m actually against the idea for the following reasons.

I liked your proposal as a solution to a specific problem: The risk of an attacker temporarily getting hold of a large number of tokens (and specifically by transferring the tokens first, as it still wouldn’t help if the attacker gained control of existing wallets).

Especially the way your example was initially written, with the time steps being days instead of months, it was indeed a very targeted solution to a clearly defined risk. (I’m less certain how to justify the impact of the formula lasting for months and years, as it does in the updated example with time steps changed to months.)

Now, from an economic standpoint, if the rewards were tied to a similar weighting function with longer holding times increasing the rewards, especially if the impact of the weighting function lasts for years, it would only discourage existing Algo holders from using their tokens. I.e. it would incentivize hoarding and disincentivice economic activity, which is the exact opposite of what I’m hoping to see.

Also, it would add to the same issue I raised in my previous reply about biasing the system to favor a specific group of users. By further increasing the “token inequality” between the early adopters and the rest (which in itself is not desirable for the economy), the increased inequality would also increase the centralization of the consensus (not desirable for Algorand).

What good arguments exist in the other direction?

1 Like

Thanks for sharing your opinion.

When I was writing the example I just wanted to explain the behavior of the EMA. After posting it I realized that having a one day time step in that example could be misleading so I changed it.

I don’t think that having a short time step could be helpful. An attacker who managed to buy billions of ALGOs could hold them for a few days too. On the other hand, if we require holding ALGOs for several years that could have some benefits:

  • If an exchange acquires more than 1/3 of all ALGOs, The community have enough time to react before that exchange’s stake reaches the dangerous 1/3 level.
  • If a multi billionaire decides to attack the agreement protocol by buying ALGOs he will have to hold them for years before attacking. This would be costly and require planning.

Currently, we have no rewards in Algorand!

What you might think is a reward is just a change in the unit of currency. The currency is inflating in some rate and all users balances inflate with the exact same rate. No one is getting anything!

So if you want to give people real money by minting (inflating) the currency, you must exclude some users from receiving the rewards. For example in bitcoin only the new block proposer gets the newly created bitcoins, not all users.

I think a good way for reward distribution is to reward the long time holders more than new comers. The holders of a cryptocurrency are helping the growth of the ecosystem while they are exposed to several types of risks. (protocol attacks, hacks, price crashes, …)

It should be noted that this will not encourage low liquidity because the EMA will not react to temporary changes of a user balance. In other words if you spend 1000 ALGOS today and then you transfer 1000 ALGOs back to your account one week later, the EMA will notice almost nothing and you won’t lose anything.

1 Like

Thank you again for the very clear explanation, @aybehrouz, and I agree with most of the points you made.

You may be totally right, as I don’t know much about what the realistic attack vectors are (or the unrealistic ones that also needs to be considered given how high the stakes are).

My main point was just that if the time frame is months and years, then there will be other side effects that come into play and need to be considered as well (which would have been easier to ignore if we were talking about days).

For example, what if your multi-billionaire was not planning to attack the network, but just wanted to get involved with a large “investment”. Wouldn’t this mean that the security of the network gets significantly more concentrated and weakened, when the users from whom the token were purchased from lose their say in the consensus, and the billionaire’s new tokens would also have no meaningful weight in the consensus for quite some time?

Your proposal with the shorter time step would allow the billionaire to overcome this risk easier by building the full position over a short period of time (instead of buying it all at once), but it might not be a practical solution if the time step was a lot longer.

True, that I was thinking of those as “rewards” given that that’s what the Algorand foundation calls them, “Participation Rewards” as described in the FAQ (https://algorand.foundation/faq). And absolutely correct that if everyone is “rewarded” equally, proportionally to their existing holdings, then it is the same as if no-one gets anything.

But I was also trying to make a general statement that would apply to any kind of rewards, e.g. if separate rewards were given for running a node.

I completely agree that when someone contributes to a cryptocurrency security model or ecosystem, the way miners do in the case of proof of work currencies, or stakers do in some other proof of stake designs where the stake gets locked up for a period of time, they deserve to be rewarded for these direct contributions.

However, I have a fundamental problem with the idea, that just because someone has held tokens for longer, they are somehow contributing more to the cryptocurrency economy from this moment forward (assuming everything else is the same, and the only difference is the time the tokens were held).

Perhaps there is some merit to the idea that “long term investors” are more invested in the security of the network and better equipped to participate in the consensus compared to all others, but I would need some convincing before believing that.

And even then the economic incentives of such design should not be ignored, as it would disincentivize late adopters from getting involved, which slows down the growth of the Algorand economy, and over long term, increases the concentration of the tokens and the consensus.

Of course the impact of such incentives largely depend on the parameters chosen, which is also why I was happy with your initial example that I didn’t think would create any meaningful negative incentives.

That is what I liked about your EMA design. But what about permanent transfers, or loans that are not quickly repaid? Due to the reduced rewards they would immediately drop in value, which creates incentives for hoarding and disincentives for spending.

1 Like

That’s a very good point and this issue is worth discussing.

The problem of low total stake arise in other situations too. For example, when a large number of users go offline and we don’t have enough online stake, or when in a locked staking system we can not register enough stakers for a staking period.

However, with a good implementation this problem will not threaten the security of the system. Because we can easily design an emergency shut down mechanism which halts the operation of the blockchain when it detects that the total active stake of the system is too low.

So, the problem of missing stake is a threat for the liveliness of our protocol and not its security. Also, we should note that when the total stake of our system goes down due to ALGO transferring the attacker needs to already have a considerable amount of stake or he needs to somehow corrupt existing stakers. He can not attack the system by buying ALGOs from the market because the new ALGOs wont give him any stake. (In the current version of Algorand, when we have low total stake because many users are offline, the same thing does not apply.)

As a solution, I don’t think short time step would be a good idea. We can not accept the halting of the system for several days either, and if we let the system run the weakened security is not acceptable even if it lasts only for few days.

In my opinion the best solution would be to have a minimum amount for the user’s trust value as I’ve described in the updated version of the document.

One reason that I suggested the stake based reward distribution was that I noticed I had to some how incentivize people to always use their old accounts and discourage them from creating new accounts. If users create new accounts with no reason and transfer their balance to them, that may halt the system due to low total stake.

1 Like