Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Voting Strategy: Weighted Historical Token Holding #1324

Open
mshakeg opened this issue Oct 17, 2023 · 0 comments
Open

New Voting Strategy: Weighted Historical Token Holding #1324

mshakeg opened this issue Oct 17, 2023 · 0 comments

Comments

@mshakeg
Copy link

mshakeg commented Oct 17, 2023

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:

  1. Period Definition: Define a start and end block number for the period of interest.
  2. Token Activity Points Identification: Detect all blocks where a Transfer, Mint, or Burn event occurred for the ERC20 token within the timeframe.
  3. Weight Calculation Over Static Periods: For each static period between two consecutive activity points, compute:
    weight_{period} = balance_{start_of_period} * delta_time_{period}
  4. Summation: Aggregate all the weight_{period} values to get the total weight for the account over the timeframe.
  5. 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:

  1. 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_period values 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)
  2. 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_period values 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)
  3. 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.

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:

  1. Incentivizes Long-Term Holding: This strategy can act as a natural incentive for community members to hold tokens over longer periods.
  2. 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.
  3. Flexibility: Projects can choose their look-back period based on their community's preference, ensuring adaptability.

Concerns & Mitigations:

  1. 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.
  2. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant