Every account is scored by the same published function. Nothing is weighted by hand. Plug in any profile and you get exactly what the indexer computes.
Sway score
60/100
$9.1K
reach value
6,000 points
score.ts
Runs in the indexer and hereexport function score({ followers, er, ppw, age, verified }) {
const reach = Math.min(1, Math.log10(followers + 1) / Math.log10(5e7));
const eng = 1 - Math.exp(-er * 40); // (likes + 2·reposts + 3·replies) / followers
const cons = Math.min(1, ppw / 21);
const auth = 0.6 * Math.min(1, age / 6) + 0.4 * (verified ? 1 : 0);
const raw = 0.35*reach + 0.35*eng + 0.10*cons + 0.20*auth;
return { score: Math.round(raw * 100), value: 0.42 * followers * raw ** 1.6 * (0.6 + eng) };
}
Key contract
SwayKeys.solCurveK × (supply + 2)², K = 0.0000175
First key0.00016 ETH ($0.54)
10th / 100th key$8.62 / $622.68
Minimum trade0.01 key
Anti-snipemax 10 keys, first 5 min
Creator’s first keycan’t be sold
Where the 10% fee goes
Creator 6%
Protocol 2%
Holders 1%
Ref 1%
The 1% holder share is new compared with friend.tech: it streams to everyone holding that creator’s keys, pro rata, claimable onchain. The protocol fee goes half to $SWAY stakers and half to the treasury, and staking levels cut it by up to 75%.
Repository
sway/
├─ contracts/ SwayKeys, SwayStaking, GenesisPass, FanEscrow, Launchpad
├─ scoring/ score.ts, the function above
├─ indexer/ chain mirror, 1 min refresh
├─ battles/ X API reader, engagement scoring
└─ web/ this app