hey guys, Davide here from Vechain Foundation,
sorry for the late reply on this,
we discussed this proposal a lot internally, and we have technical concerns about how to implement it:
What cannot be done
-
You cannot create a rank on-chain, grouping only the best 500 wallets: itās resource heavy, cannot be enforced during reward distribution since it could easily increase the gas usage by a lot, and probably the transaction will revert because out of gas.
-
You cannot ask the blockchain to return āonly the best 500 walletsā, because contracts do not have ranking capabilities.
Sorry but it canāt be implemented like it is, and VeChain Foundation cannot act as a middleman for such a feature.
We suggest paths for a new proposal:
What we can do
-
We already use the VeBetterPassport every time a reward is distributed, so we can store: the number of actions a user did in a round, and the number of different apps a user used in a round
-
We already know how many VOT3 tokens and what GM NFT a user held at the start of the round
Alternative proposal
-
Every action the user performs (triggered by the app via
distributeRewards) registers in the contract, through 2 mappings, the userās score for that round (derived from the formula) and the total score generated in that round:
gmUserScore[userAddress][roundId] += actionScore
totalScore[roundId] += actionScore -
Non-GM holders get zero score
-
When the round ends, a technique already used in VoterRewards is adopted, using a simple formula to calculate the userās reward share:
userRewardsShare = gmUserScore[userAddress][roundId] / totalScore[roundId] * roundRewards -
Thatās it
This means that there is no ranking, and all users having a gm nft and doing actions can get rewards. -
If a user is signaled, we remove the points both from the user and from the total accumulated score. Another approach can be: donāt subtract from total. Just block claim if signaled. The ālostā rewards stay in the pool for next round or go to treasury.
Trade off
New model: everyone with GM + actions gets proportional rewards.
Original proposal: only top 500 get rewards, with steep power-law favoring top ranks.
These are fundamentally different incentives. In the new model, a whale with 1M VOT3 doing 3 actions dominates. In the original, activity matters more because ranking is competitive.
The new version is simpler and more inclusive, but may not achieve the ādrive upgradesā goal as effectively.
A solution to this could be to introduce tired caps per GM levels:
uint256 cap = tierCap[gmLevel]; // Moon: 10k, Mercury: 15k, ... Galaxy: 100k
baseScore = min(vot3Points + actionPoints, cap);
finalScore = baseScore * tierMultiplier;
The effect would be:
-
Higher tiers get both higher caps AND higher multipliers
-
Double incentive to upgrade
-
Still prevents infinite whale dominance
-
Tunable per tier