🗳️ GVote Voting Power: Weighted Snapshot Strategy
To ensure fair and manipulation-resistant voting power calculation in the GVote hybrid governance system, we adopt a weighted snapshot mechanism using multiple historical blocks.
🔧 Snapshot Parameters
Total Snapshots:
12
Snapshot Interval: Fixed block gap (e.g. every 86400 blocks or every 24 hours)
Snapshot Range: From the most recent block
X
toX - 11×gap
Calculation Rule: Weighted average of all snapshots
EffectiveVotingPower = sum(votes[i] × weight[i]) / sum(weights)
📊 Snapshot Weights
1
X
3
Reflects most recent activity
2
X - 1×gap
3
3
X - 2×gap
3
4
X - 3×gap
3
5
X - 4×gap
3
6
X - 5×gap
2
Mid-term holding
7
X - 6×gap
2
8
X - 7×gap
2
9
X - 8×gap
2
10
X - 9×gap
1
Long-term support
11
X -10×gap
1
12
X -11×gap
1
📈 Weight Contribution Summary
Recent
5
15
57.7%
Mid-Term
4
8
30.8%
Long-Term
3
3
11.5%
Total
12
26
100%
✅ Why This Matters
Prevents vote manipulation via short-term token acquisition
Rewards consistent holders across both short and long terms
Encourages long-term alignment with the GooDog ecosystem
Maintains fairness by using a clear, auditable snapshot schedule
🛠️ Notes for Developers
Snapshots are pulled using
getPastVotes(address, blockNumber)
The block numbers are calculated automatically at the start of each GVote round
Off-chain scripts may be used to batch-process snapshot reads
Voting power is saved to the database as:
interface GVotePower {
user: string
round_id: string
voting_power: number
block_snapshots: number[] // optional for traceability
}
📚 Future Upgrades
Community can propose changes to:
Snapshot count
Block interval
Weight distribution
Last updated