Farcaster vote, counted
On 15 Oct Network School (NS), which is buying Farcaster, asked farcaster.xyz users to vote: stay under its new rules, or leave. A stay vote mints a VOTE token on Base, Coinbase’s blockchain, so stays can be counted in full. A leave vote writes nothing on-chain that I can find. It could only be read through the app’s API, and since 19 Oct the API no longer returns it.
Farcaster counts IDs called fids. One person can hold several, and many belong to bots or were never used. This page counts what can be counted from outside and shows where the count stops. No opinion, just public facts I haven’t seen in one place.
moderated_out at the last read, 20 Oct. Every fid that has cast was read, bar 1,125 failed reads and the 942 newestThe four overlap: the 263 restricted and the 424 leavers without a token are inside the 99.3%, and 57 of the 481 now hold VOTE. The app’s API reports each fid as opted_in (signed), opted_out (voted to leave), moderated_out (restricted; no reason is given, so spam and conduct cases share it) or pending (no answer, the default).
Who was restricted, and who left, by hub followers
Restricted: last read 20 Oct; 276 fids were ever read as restricted, 10 have since signed and 3 now read pending; 5 of the 263 carry the operator’s test-account names. Left: read as leaving by 19 Oct, a minimum, without VOTE on 20 Oct. Hub followers run ~2.9× the app’s. verified
Disclosure: I voted stay on 16 Oct; NS accepted me on 17 Oct, I haven’t booked yet; I’m in the Telegram of Hypersnap, a fork of the Farcaster node software.
24,578 stay votes, all on-chain; three in four came in the first 48 hours
Stay is the only vote written on-chain, so this count is complete: every mint and burn of the token, pulled twice from two providers. By the last day about 120 fids signed per hour.
- 1Vote announced.
- 2@balajis.eth: “94.4% support” with “10,000+ votes counted”. 13,287 fids held VOTE at that moment.
- 319 Oct, 09:36–09:44 UTCThe app’s API stops returning leave votes. Next section.
New accounts675 signers (2.7%) registered after the announcement. 343 of them, 1.4% of all signers, come from one address’s batch of 758 fids. Who registered them, and why, can’t be told from outside. verified for 675, one method for 343
Who signedIn a sample of 800 of the first 17,817 signers, 57% had not cast since before July (interval 53.5–60.4%, 17 Oct). Among fids with 100+ app followers, 14% of 300 sampled signers had been idle for 60+ days, against 95% of 300 sampled non-voters (18 Oct). samples
Signing mints a VOTE token, tokenId = fid. Every Transfer event, pulled twice from two providers: 24,596 mints, 18 burns (tokens later removed), 0 transfers. No mints on 16 Oct between and ; the cause isn’t visible from outside. verified
Signers per day, as a table
| Day | Signed that day | Holding VOTE at day’s end |
|---|
Since 19 Oct, leave votes can’t be seen from outside
On 19 Oct, 09:36–09:44 UTC the farcaster.xyz API stopped returning leave votes. Leaving writes nothing on-chain that I can find, so nobody outside can count leavers now.
481 fids had voted to leave. On 20 Oct the API shows none of them as leavers
pending, like non-voters: 425Now opted_in: 56Still opted_out: 0Re-read 20 Oct, 03:23–03:26 UTC. 57 of the 481 hold VOTE: the 56, plus one who signed at , after the re-read. verified
in 417,518 status reads, 19 Oct, 09:36 – 20 Oct, 04:39 UTC. verified
Before the change there was about one leave answer for every 45 opted_in answers (299 in 743,532 reads of the 300k–1.55M scan). Reads after it were mostly of quieter fids and returned 1,137 opted_in answers, so ~25–29 leave answers were due; about 6 even at the most cautious rate. estimate
- Re-reads of known leavers
- 60+none turned pending
- Former leavers in my own logged-in session
- 5 of 5pending, 20 Oct, 10:08–10:11 UTC
opted_inandmoderated_out- still returned
481 is a minimum: most fids with casts above ~1.43M were read only after the change, so more leave votes were likely cast by 19 Oct than I could read. 57 have since signed, 34 of them before the change.
The change was on the server. The app’s opt-in endpoints and the vote page text are the same as on 16 Oct, and none of those endpoints lets a user turn a leave vote into pending. I found no announcement (team casts, /farcaster, web; Hypersnap Telegram to 19 Oct, 15:54 UTC). I can’t tell whether the stored leave votes changed or the API only stopped showing them. A leaver’s own view is untested.
About half of all fids never had a farcaster.xyz key
The vote ran only in farcaster.xyz and needed its key. A key is what lets an app post for a fid. Hubs, the public servers that store every Farcaster message whichever app sent it, record which apps ever held a key for a fid.
All 3,356,242 fids
Only ever had Base App keys (estimate 1.59M–1.70M). None signed. estimate
One operator’s keyless registration of 13 Oct 2023. No key, so no casts and no vote. verified
Everything else that hasn’t signed, active or not.
VOTE holders, 20 Oct. verified
Above fid 1.5M, the 12 signers whose first key came from Base App had all added a farcaster.xyz key (census of all 1,841 signers there, 19 Oct). @suji pointed out on 17 Oct that fids 1.5M–3M are likely Base App accounts.
What the data gives each side
For NS
- These are app rules on an open protocol: public hubs keep the casts the app doesn’t show, and some restricted fids still post through other clients. ↑ Hidden in the app
- Of the votes I could see, at most 98.3% are stay. ↑ Shares
- Formal restrictions run in the hundreds: 263 at the last read, 5 of them carrying the operator’s test-account names. ↑ Hidden in the app
- About half of all fids never had a farcaster.xyz key, and none of those signed. Among fids with 100+ app followers, 95% of sampled non-voters had been idle for 60+ days. ↑ Keys
- Status can change: 10 fids once read restricted, and 57 of the 481 leavers, have since signed. ↑ Leave votes
For the Hypersnap fork
- Signing puts your past posts under the rules (vote page) and is one-way for the signer. The vote page says you can change your vote later, but the app’s code shows no leave button after a stay vote, and revoking the token needs the operator’s signature. ↓ Method
- Since 19 Oct, 09:36–09:44 UTC the API returns no leave votes (0 in 417,518 reads); the change was on the server and I found no announcement. ↑ Leave votes
- In every case checked, the app shows no new casts from fids that haven’t signed, restricted or not. ↑ Hidden in the app
- Where the key existed, few signed: ~1.7% of the ~1.1M fids above 300k with a farcaster.xyz key. Two thirds of fids with 10k+ hub followers show no vote. ↑ Shares
- Restricted accounts include active ones: 81% of the 194 restricted on 18 Oct had cast in the 60 days before. ↑ Hidden in the app
Open343 signers come from one address’s batch of 758 fids. Who registered them, and why, can’t be told from public data.
Method and limits
Every VOTE Transfer event on Base, pulled twice from two providers. tokenId = fid. I found no public source for the VOTE contract. Its revoke reverts unless the operator signs, tested from the holder, the owner and a random address; 5 of its functions are unresolved.
client.farcaster.xyz/v2/user?fid=N, logged out, latest read wins, read-only, one scanner at a time, ~7 requests/s in total. Plus 5 profile views in my own logged-in session, 20 Oct.
Every fid that has cast, bar 1,125 failed reads and the 942 newest. 0 restricted among 42,849 never-cast fids read. 5,437 fids gave only 404s and are counted apart: the API gives no reason for a 404 or a restriction.
haatz.quilibrium.com (Hypersnap’s public node) and snap.farcaster.xyz (a validator labelled Merkle).
The farcaster.xyz web bundle and the vote page text, saved on 16, 19 and 20 Oct and compared. The opt-in endpoints are the same, and none resets or cancels a vote; after a stay vote the app offers no leave button.
Verified: two of my own methods or passes agree; no outside re-check yet. Estimate: a range or “~”. Status values in code type are the API’s own.
@suji flagged fids 1.5M–3M as likely Base App accounts (17 Oct). @0xael.eth (Allthing) and @duckfacts.eth showed the status endpoint before me.
@guy-do-or-die on Farcaster, fid 321301. AI-assisted analysis.
Every number on this page is in the repo with its date, method and status: data/final-numbers.json, data/page-figures.json and data/vote-hourly.json. Aggregates only, no per-account lists.
Every headline number, with its time and how it was counted
| Figure | Value | As of (UTC) | How counted |
|---|---|---|---|
| Signed | 24,578 | 20 Oct, 04:28 | Verified: every VOTE Transfer, pulled twice: 24,596 mints, 18 burns, 0 transfers |
Restricted (moderated_out) | 263 | 20 Oct, 03:23–03:39 | Verified, one API; the recheck and a separate sampler agree on 29 of 29 shared fids; none holds VOTE |
Left by 19 Oct (opted_out) | 481 | 17 Oct, 03:00 – 19 Oct, 09:36 | Verified minimum |
| Not signed | 99.3% | 20 Oct, 04:28–04:42 | Verified: 3,331,664 of 3,356,242 fids (two RPCs); includes the 424 read as leaving by 19 Oct with no VOTE, and the 263 restricted |
| Stay share of the votes seen | ≤98.3% | 20 Oct, 04:28 | Estimate and ceiling: 24,578 of 25,002 |
| Signers registered after the announcement | 675 | 20 Oct, 04:28 | Verified: 2.7% of signers; 343 from one address’s 758-fid batch (one method, a minimum) |
| Turnout, fids above 300k with a farcaster.xyz key | ~1.7% | 20 Oct; keys 19 Oct | Estimate: 18,858 of ~1.1M (1.62–1.77%) |
| Base App keys only | ~1.65M | 19 Oct | Estimate from hub keys: 1.59M–1.70M |
| 2023 bulk registration | 163,299 | 19 Oct | Verified: one operator’s keyless registration of 13 Oct 2023 |