Proof of Hold
A fair, transparent, and automated reward protocol for long-term $POH holders on Solana.
Abstract
Proof of Hold ($POH) introduces a trustless reward mechanism that continuously distributes tokens to holders based on their commitment to the protocol. There is no staking interface, no lock-up period, and no manual claiming β the system scores every wallet automatically and runs a weighted lottery every 15 minutes using on-chain data. This document describes the scoring algorithm, draw mechanics, prize distribution, cooldown system, and fairness guarantees in full detail.
Table of Contents
01π¦ Treasury & Supply
At launch, 10% of the total $POH supply was allocated directly to the treasury wallet β no dev buy, no hidden bags.
The treasury is fully transparent and its balance can be verified on-chain at any time via the dashboard.
The POH Bot uses creator rewards to buy back $POH on the open market every 10 minutes, continuously growing the treasury.
02π Hold Score β How Points Work
Every holder is assigned a Hold Score that determines their chance of winning rewards. The formula is:
holdHours Γ β(% of supply) Γ 10 Γ (1 β βsellRatio)Β²holdHoursTotal hours you've held $POH. The longer you hold, the higher your score grows β linearly, no cap.% of supplyYour wallet balance as a percentage of total supply. Larger bags = higher score, but the square root keeps it fair β a 4Γ bigger bag only gives 2Γ more score.sellRatioRatio of tokens sold or transferred out vs. total bought. Selling tanks your score hard: sell 25% β lose ~50% score. Sell 100% β score drops to zero.03π² Weighted Lottery Draw
Every 15 minutes, the system runs a weighted random draw from all eligible holders.
Your win chance = your Hold Score Γ· sum of all eligible Hold Scores. This means the draw is proportional β not winner-take-all.
Example: if your Hold Score is 500 and the total eligible score pool is 10,000, you have a 5% chance per draw.
// ββ Weighted random selection (actual production code) ββ
function weightedRandom(
items: { walletAddress: string; holdScore: number }[],
): string | null {
if (items.length === 0) return null;
const totalWeight = items.reduce((sum, h) => sum + h.holdScore, 0);
if (totalWeight <= 0) {
return items[Math.floor(Math.random() * items.length)].walletAddress;
}
let rand = Math.random() * totalWeight;
for (const item of items) {
rand -= item.holdScore;
if (rand <= 0) return item.walletAddress;
}
return items[items.length - 1].walletAddress;
}
// ββ Eligibility filter ββ
const eligible = holders.filter(
(h) =>
(h.holdScore ?? 0) >= MIN_HOLD_SCORE && // score β₯ 1
!EXCLUDED_WALLETS.has(h.walletAddress), // not treasury/system/bonding-curve
);
// Remove wallets still in cooldown
const drawPool = eligible.filter((h) => !coolingDown.has(h.walletAddress));
// Pick winner β probability β holdScore
const winnerWallet = weightedRandom(
drawPool.map((h) => ({
walletAddress: h.walletAddress,
holdScore: h.holdScore ?? 0,
})),
);
// Prize = random 0.1%β5% of treasury token balance
const prizePct = MIN_PRIZE_PCT + Math.random() * (MAX_PRIZE_PCT - MIN_PRIZE_PCT);
const prizeTokens = Math.floor(treasureTokenBalance * prizePct);04π° Prizes
Each draw distributes between 0.1% and 5% of the current treasury balance to the winner.
The prize percentage scales with the winner's Hold Score β stronger holders earn a larger slice.
Prizes are sent as $POH tokens directly to the winner's wallet on-chain.
05β³ Cooldown System
After winning, a holder enters a 2-hour cooldown period (equivalent to 8 draw cycles).
During cooldown, the holder is temporarily ineligible for the lottery β giving others a fair shot.
Once the cooldown expires, the holder is automatically re-entered into the draw pool.
06π‘οΈ Fairness & Exclusions
The treasury wallet itself is excluded from all draws β it can never win its own rewards.
Liquidity pool wallets (LP) are automatically detected and excluded β only real holders participate.
Known system wallets (e.g. bonding curve) are excluded via a public exclusion list.
The sell penalty ensures that flippers and dumpers are naturally deprioritized β diamond hands are rewarded.
The square root on % supply prevents whales from dominating. A wallet holding 1% of supply doesn't get 10Γ the score of someone holding 0.1% β they get ~3.16Γ.
07π Transparency
All holder scores, win chances, and draw history are displayed publicly on the dashboard β nothing is hidden.
Treasury wallet balance (SOL + $POH) is fetched from on-chain data and shown in real time.
Every draw result, winner address, prize amount, and cooldown status is fully visible.
The scoring formula is open and deterministic β you can verify your own score at any time.
08π Score Examples
| Scenario | Hours | % Supply | Sold | Hold Score |
|---|---|---|---|---|
| Diamond hands, small bag | 168 | 0.05% | 0% | 37.5 |
| Whale, never sold | 168 | 1.00% | 0% | 168.0 |
| Sold 25% | 168 | 0.50% | 25% | 57.2 |
| Flipper, sold 80% | 24 | 0.10% | 80% | 0.5 |
Scores calculated using: holdHours Γ β(pct) Γ 10 Γ (1 β βsellRatio)Β²
Conclusion
Proof of Hold establishes a fully automated, on-chain reward loop: buy $POH, hold it in your wallet, and your Hold Score grows every hour. Every 15 minutes, a weighted draw selects one winner from the eligible pool and distributes tokens from the treasury. The longer and larger you hold β without selling β the higher your probability of winning.
The treasury is self-sustaining: creator rewards continuously buy back $POH, ensuring the reward pool never depletes. All data β scores, win chances, draw history, treasury balance β is publicly visible on the dashboard. No hidden mechanics, no insider advantages.
Diamond hands win. It's that simple.