6529, for developers / Part 2 · What I found
I went looking for a specification of TDH — the number that decides who can see, post and vote across 6529.io. There isn't one. What follows is what I found instead: three attempts at decentralizing that calculation, only one of which ever ran, a registry of thirty-seven independent operators, and a divergence between the two implementations that neither repository would detect.
This page is my reading of those findings, not an official account. The figures are dated and the method is at the bottom so you can check every one of them. You are encouraged to go to the source — the official FAQ, the code, and the team — and to join the community and ask directly.
api.6529.io, and the team's public dev channelThree attempts, and how they relate to what runs today
This is the part that takes longest to reconstruct from the outside, because the repository names suggest a progression that did not happen. There are three distinct things, and only one of them has ever served traffic.
6529seize-backend computes TDH in src/tdhLoop — about
2,580 lines of TypeScript, dominated by tdh.ts (1,142 lines), plus
consolidation, editions, memes, merkle and upload modules. It has run continuously and
receives commits daily.
6529-Prenode is not a reimplementation. Its
src/tdhLoop shares file names with production — index.ts,
tdh.ts, tdh_consolidation.ts, tdh_merkle.ts — and
the same serverless configuration shape. It is the production calculation, trimmed and
wrapped so a third party can run it on their own AWS account and serve TDH over REST.
Its README states the purpose plainly:
"The 6529 Prenode decentralizes access to TDH data… it uses the same calculation logic as the 6529 websites. Standardized setup through a provided CloudFormation script means anyone can run on their AWS account."
"Most important: the immediate use of the Prenode is to enable multiple parties to independently serve as TDH providers to the on-chain TDH oracle contract that will be launching soon™. This will allow for on-chain composable TDH that is not dependent on any single party." — 6529-Prenode README
Note what this design gives and does not give. Many operators running one codebase is operator diversity. It is not implementation diversity: if the shared logic has a defect, every prenode agrees on the same wrong answer, and an oracle consuming them sees unanimity.
6529node is Go, and its internals are config, db, eth, mempool,
network, rpc with a cmd/node entrypoint. Mempool and a network layer
are the vocabulary of an actual peer-to-peer node, not a REST service. It is a ground-up
attempt at the real thing, 94 commits, last touched 7 March 2025. It has
never served production traffic.
Production has always been the main line and never stopped. The Prenode is a slice of
it, meant to run beside it, never to replace it. 6529node is a separate,
more ambitious bet that stopped early. Nothing that was abandoned was ever in
production, and nothing in production was ever abandoned.
Thirty-seven operators answered the call
There is a live registry at api.6529.io/oracle/prenodes, surfaced at
6529.io/network/prenodes. Read on
1 August 2026:
| Prenodes registered | Ping green | Ping orange | Ping red | TDH status |
|---|---|---|---|---|
| 37 | 1 | 1 | 35 | null on all 37 |
The registered hosts are community-run and self-funded — decentralizationmaxi.com,
node.freedomtotransact.xyz, regularnode.com and others. The oldest
registration is 27 June 2024; its last update was April 2025.
The reading that fits the evidence: participation was not the constraint. Thirty-seven operators is a strong response for a project this size. The on-chain TDH oracle that gave prenodes their purpose has not launched, and the prenode code stopped tracking production in July 2025.
Verified: the two implementations no longer compute the same TDH
The README's claim that the Prenode "uses the same calculation logic as the 6529
websites" was true when written. It is not true now. Diffing the two
tdhLoop trees, the per-token hold rate is computed differently:
// production — src/tdhLoop/tdh.ts
const hodlRate = equalIgnoreCase(nft.contract, MEMES_CONTRACT)
? MEMES_HODL_INDEX / (memesCalculationEditionSizes[nft.id]
?? getCalculationEditionSize(nft))
: nft.hodl_rate;
// Prenode — src/tdhLoop/tdh.ts
const hodlRate = HODL_INDEX / nft.edition_size;
The denominator. Production uses
max(supply, edition_size_floor), where the floor is the Manifold
totalMax capped at 310. The Prenode uses raw supply. Any Meme whose supply
sits below its floor — a freshly minted card before its research airdrop, or a card that
has had tokens burned — gets a smaller denominator on the Prenode and therefore a higher
TDH per token. That is exactly the burn-driven inflation the July 2026 change was written
to prevent. In a 23 July snapshot of all 525 cards, one was in that state: card #525, at
supply 163 against a floor of 310, which the Prenode would value at 1.90× the
production rate.
The numerator. Production's index is the maximum across Memes only, using floored sizes. The Prenode's is the maximum across Memes, Gradients and NextGen combined, using raw sizes. Whether that yields a different number depends on whether any Gradient or NextGen edition exceeds the largest Meme (3,941) — not tested here.
The narrow conclusion is enough on its own: production applies a rule the Prenode does not, so the two do not agree, and nothing in either repository would detect it. This is the class of drift a conformance contract exists to prevent, and no such contract covers TDH.
Where the protocol is written down, and where it is only code
| Layer | Formal spec? | Where |
|---|---|---|
| Stream (the new contract) | extensive | ADRs 0010–0015+, spec-policy.md organising documents by permanence class
(Permanent / Replaceable / Operational) with a Draft→Review→Final lifecycle. Actively
worked on. |
| Group eligibility (authorization) | new | docs/eligibility-spec.md — 562 lines, plus 61 golden test vectors in
JSON across 8 dimensions, plus a conformance harness that runs every vector against
both existing implementations. Still in an open pull request as of this
snapshot. |
| REST API (the surface, not the maths) | official | OpenAPI 3.0.3 at api.6529.io/openapi.json,
289 paths under the /api base, with a Swagger UI at /docs/ and a
terminology and auth walkthrough at 6529.io/tools/api.
Two things stand out reading it. The ten /oracle/* routes — the ones that
serve TDH — do not appear in it at all. And it documents an entire
/api/xtdh/* surface: a grant system where a holder assigns an
xtdh_rate to another contract's tokens on a target chain, revocable or
irrevocable, with its own loop in src/xTdhLoop. It specifies request and
response shapes, and says nothing about how any value is computed.
Added 4 August 2026, after this page was first published. |
| TDH | none found | No specification, no test vectors, no conformance contract located in any public
repository. TDH is defined by what tdhLoop does. The OpenAPI document
above does not change this: it describes the shape of the responses, not the
calculation that fills them. |
| Meme Card distribution | documentation | thememecards |
| Allowlists | library | allowlist-lib |
It is the first artifact in this codebase that treats a rule set as a protocol rather than as behaviour. The format is worth stealing: a normative document, golden vectors as language-neutral JSON, and a harness that runs them against every implementation.
It also demonstrates the value immediately. When the vectors were first run against the two existing implementations — both written by the same team, in the same language, in the same repository — they disagreed in nine reproducible cases. Two of those were plain defects; the rest needed a human ruling on what the semantics should be. The spec's section 12 records each decision.
A vector is a term borrowed from cryptography: known inputs plus the exact output any correct implementation must produce. Because they are JSON and not test code, an implementation in any language can be checked against the same file.
So you can check everything here, or correct it
6529-Collections organisation — languages, last push,
licences, file trees, pull request state.
api.6529.io: /oracle/prenodes,
/api/identities/{handle}, /api/groups/{id},
/api/waves/{id}.
The scripts in this repository fetch the channel and build a local reader from it. The archive itself is not republished here — read it at the source.
Part 3 · 2 August 2026
The gap that mattered most was the one with no specification and no second implementation: TDH. The day after writing this, I started building one.