-
Notifications
You must be signed in to change notification settings - Fork 830
New Voting Strategy: Weighted Historical Token Holding #1324
Description
Description:
Summary:
I propose a new voting strategy for Snapshot that determines the weight of an account based on its ERC20 token balance over a given period. This approach aims to reward and recognize long-term token holders and create incentives for users to maintain consistent token balances over time.
Motivation:
Many projects value long-term holders and supporters, seeing them as core pillars of their communities. A voting strategy that considers not just the current token balance but also the historical holding pattern can be a game-changer for DAOs and projects that want to give voice to these consistent supporters.
Technical Specification:
- Period Definition: Define a start and end block number for the period of interest.
- Token Activity Points Identification: Detect all blocks where a Transfer, Mint, or Burn event occurred for the ERC20 token within the timeframe.
- Weight Calculation Over Static Periods: For each static period between two consecutive activity points, compute:
weight_{period} = balance_{start_of_period} * delta_time_{period} - Summation: Aggregate all the
weight_{period}values to get the total weight for the account over the timeframe. - Proportional Weighting:
The core idea is to determine the "token-time" for an account. Think of "token-time" as the product of the number of tokens held and the duration for which they're held. For instance, if you hold 100 tokens for 10 days, that results in 1,000 token-days.
Steps:
-
Calculate Account's Token-Time Weight:
- For each static period between two consecutive activity points, compute the token-time:
token_time_for_period = balance_at_start_of_period * duration_of_period - Sum all the
token_time_for_periodvalues for the account to determine its total token-time weight over the entire timeframe:
total_token_time_account = SUM(token_time_for_period over all periods)
- For each static period between two consecutive activity points, compute the token-time:
-
Calculate Total Token-Time Weight for All Addresses:
- For each static period, calculate the total token-time for all token holders:
token_time_total_for_period = total_supply_at_start_of_period * duration_of_period - Sum the
token_time_total_for_periodvalues across all periods to get the overall token-time weight for the entire supply over the timeframe:
total_token_time_all = SUM(token_time_total_for_period over all periods)
- For each static period, calculate the total token-time for all token holders:
-
Determine Account's Proportional Weight:
- With the token-time weight of the account and the total token-time weight known, the account's proportional weight can be calculated as:
proportion = total_token_time_account / total_token_time_all - This proportion represents the fraction of the total token-time weight attributed to the specific account over the timeframe.
- With the token-time weight of the account and the total token-time weight known, the account's proportional weight can be calculated as:
Illustrative Example:
Let's use a simple example:
- During period 1: Account A holds 100 tokens for 10 days, resulting in 1,000 token-days. The total supply held by all addresses results in 10,000 token-days.
- During period 2: Account A holds 150 tokens for 5 days, resulting in 750 token-days. The total supply held by all addresses results in 6,000 token-days.
The account's total token-time weight is 1,750 token-days, while the total token-time weight for all tokens is 16,000 token-days. Therefore, the account's proportional weight is 1,750 divided by 16,000, or 10.9375%.
Benefits:
- Incentivizes Long-Term Holding: This strategy can act as a natural incentive for community members to hold tokens over longer periods.
- Fair Representation: It ensures that the influence in voting isn't just limited to large token holders at a given moment, but also considers the commitment over time.
- Flexibility: Projects can choose their look-back period based on their community's preference, ensuring adaptability.
Concerns & Mitigations:
- Efficiency: Processing events over an extended period could be resource-intensive. However, by considering only periods between activity points (Transfer, Mint, Burn events), we reduce computational overhead.
- Security: Care must be taken to ensure the strategy doesn't introduce potential vulnerabilities. Thorough testing and community reviews can mitigate this.
Integration with Snapshot:
This strategy can be integrated as an optional feature for DAOs and projects. They can select this alongside or in place of the standard ERC20 balance-based strategies depending on their community's preference.
Conclusion:
A voting strategy that considers historical token holdings can offer a unique and fair approach to DAO decision-making. By recognizing the commitment of long-term holders, we can foster stronger community alignment and engagement.