whistlegraph/codes #
The WhistlegraphCodes ERC-721 — the token surface of the Funding Codes
architecture (RFC: papers/arxiv-funding-codes/, proposal:
reports/whistlegraph-org-funding-codes.md).
The code IS the token: a bare lowercase string (imab, grow, ppl) packs
left-aligned into a bytes32 and that word is the tokenId. Same string = URL
slug (whistlegraph.org/imab) = ENS subname (imab.whistlegraph.eth).
No $ sigil — that belongs to KidLisp and its Tezos story.
Layout #
src/WhistlegraphCodes.sol— self-contained ERC-721 + EIP-2981 (10% default royalty), owner-published codes, payable mint,mintTofor first-edition claims and the reserve set,ownerOfCode(string)for funding-code drop tooling. No external dependencies; every line reviewable.test/WhistlegraphCodes.t.sol— 21 Foundry tests (bijection, publish/ mint/payment, transfers/approvals, safe-receiver, royalties, withdraw, interfaces, owner handoff).forge test— all green as of scaffold.script/Deploy.s.sol,script/PublishTen.s.sol— deployment + seeding the Ten Whistlegraphs codes (imab l8ly grow idni ppl wiyh lonr sdog w0w puzz).lib/forge-std— vendored plain clone (NOT a submodule; keep it out of the AC repo index).
Deploy path #
- Base Sepolia rehearsal:
forge script script/Deploy.s.sol --rpc-url https://sepolia.base.org --broadcastwithPRIVATE_KEYfrom the vault wallet export (never stored here). Mint a couple of codes, check them on the testnet explorer. - Base mainnet: same with
https://mainnet.base.org; deployer should be whistlegraph.eth (0x238c9c645c6EE83d4323A2449C706940321a0cBf), which becomes owner + royalty receiver. PublishTenat the chosen price; verify on Basescan (forge verify-contract).
OrgStar — the patronage sibling #
src/OrgStar.sol — the ORGSTARS open edition (RFC: ORGSTARS-RFC.md). Same
house style: self-contained, no libraries, ERC-721 + EIP-2981. Flat price, no
cap, no utility; a star does nothing but shine.
The art is fully on-chain — tokenURI returns a base64 data URI wrapping
an SVG built from the minting wallet, so there is no host to rot the way
rdp.whistlegraph.com did, and no IPFS pin to keep alive. The birth wallet is
recorded at mint and never changes, so a star keeps its face after it trades.
whistlegraph.org/stars draws the same sky from mint logs using the same
FNV-1a hash of the same lowercase 0x… string. test_StarHashMatchesThePage
pins the three reference values the page produces — if that test ever fails,
the sky and the chain have drifted apart.
test/OrgStar.t.sol— 24 Foundry tests (minting, open edition, birth-wallet permanence, page/chain hash agreement, self-contained art, constellation year boundaries, transfers/approvals, safe-receiver, royalties, withdraw, interfaces, owner handoff).forge test— 46 green across both suites.script/DeployStar.s.sol—STAR_PRICE(default 0.01 ether), prints the address and deploy block to paste intostars.html.- Runtime size 11,745 B — roughly 3M gas, about $0.04 on Base at the 0.005 gwei base fee measured 2026-09-01.
After deploying, set contract and deployBlock in the CHAINS block of
system/public/whistlegraph.org/stars.html. Until then the page renders an
honest empty sky and says the contract is not deployed.
Still to build (next passes) #
tokenURIendpoint:https://whistlegraph.org/api/codes/{code}serving ERC-721 metadata JSON from the site'sgraphs.json(1,084 coded works)- canonical score image. Needs a lith route for the whistlegraph.org host.
- Mint page on
whistlegraph.org/{code}: wallet-connect +mint(code)withpriceOfread. Static JS; the site is static files on lith. - ENS:
url/avatar records on whistlegraph.eth (mainnet gas needed), then per-code subnames — evaluate a CCIP-read offchain resolver served by lith so subnames are free. - Funding-code drops: per-release claim + 0xSplits wiring (separate contracts; this one stays minimal).
Human steps before mainnet #
- Fund whistlegraph.eth: ~$50 ETH mainnet gas (ENS) + ~$20 on Base (deploys + publishes).
- builderscore.xyz signup with the same wallet (Base Builder Rewards).
- Per-transaction approval on every broadcast — nothing signs unattended.