The program is its source
The program on mainnet and on devnet is byte for byte what its public repository builds in Anchor's pinned Docker image.
solana-verify hash
7e902d1b…43acReading the audit data…
For coin communities that want to pay the people doing their work, from a community vault, by published rules anyone can check.
Built solo for Colosseum's Crypto World's Fair. Source available (BUSL 1.1).
Four steps, from a reply on X to a payout anyone can verify.
A member replies to or quotes the community's post on X, then sends the link to the Telegram bot.
An AI grades it against the community's published rubric and posts its reasoning back. The credit rules run in code, after the model answers.
When the week closes, every member's payout goes into one merkle root, published on-chain with the hash of the full audit record.
Each member claims their share from the community's vault with a merkle proof, signed by their own wallet, once.
The rubrics are public and versioned: read them on GitHub.
Numbers read from Hyphae's public API as this page loads, and every transaction of a full run on Solana devnet.
Reading the live numbers…
A community and its vault are created, signed by Hyphae's admin key on a Ledger.
2xkf…sENo devnetThe vault is funded with 0.05 SOL.
2Af9…aoof devnetThe epoch is published as one merkle root: 0.030460365 SOL allocated to 3 members, and the 3% fee.
3oJ4…y6DD devnetA member claims 0.012125 SOL with a merkle proof.
5ccG…3SmK devnetThe same claim, sent again, is refused on-chain.
5ob9…EknP devnetThese transactions are on devnet. The program's README says what is deployed where, and lists this run.
The program, the custody rules and the grading rubrics are all public.
The program on mainnet and on devnet is byte for byte what its public repository builds in Anchor's pinned Docker image.
solana-verify hash
7e902d1b…43acPilot policy. Hyphae's publisher key sets each epoch's payout list, so you trust it with that epoch's pot. We keep that key on a hardware wallet and fund one epoch at a time, just before it pays. The program has no withdraw instruction: SOL leaves the vault only through member claims and the 3% fee. The program can still be upgraded. The upgrade key is held the same way, and any upgrade is announced here before it is used.
Custody during the pilot, in the README.
To be paid, a member proves their wallet by signing a message. Pasting an address isn't enough. A closed week always pays the wallet that was verified at its close.
The program and every rubric are on GitHub, so you can rebuild one and read the other before you do the work.
Everything on this site is in a public API, and any project can fund a community's vault.
Public, read-only JSON: communities, weeks, every score with its reasons, and every claim with its proof. A section the API cannot confirm is marked unavailable, never a zero. A wallet with no leaf in a published epoch gets an empty list, not an error.
A vault's address comes from the coin and its admin, so any project can find it and fund it with an ordinary SOL transfer. SOL leaves the vault only through the program: the 3% fee, and one claim per leaf of a published root. The program is on mainnet and on devnet at the same address, and a vault exists only on a network where its community was created. Check that the community exists on the network you use before sending anything.
const API = process.env.HYPHAE_API ?? "https://hyphae-api.fly.dev/v1";
const wallet = process.argv[2];
const { claims } = await (await fetch(`${API}/wallets/${wallet}/claims?limit=100`)).json();
import { createHash } from "node:crypto";
import { getAddressEncoder } from "@solana/kit";
const sha = (...parts) => createHash("sha256").update(Buffer.concat(parts)).digest();
const u64 = (v) => { const b = Buffer.alloc(8); b.writeBigUInt64LE(BigInt(v)); return b; };
for (const c of claims) {
let node = sha(Buffer.of(0), Buffer.from(getAddressEncoder().encode(wallet)), u64(c.epoch.index),
u64(c.score), u64(c.amount_lamports), Buffer.from(c.evidence_hash, "hex"));
for (const p of c.proof.map((h) => Buffer.from(h, "hex")))
node = sha(Buffer.of(1), ...(Buffer.compare(node, p) <= 0 ? [node, p] : [p, node]));
console.log(c.community.mint, c.epoch.index, c.amount_lamports, c.payment.status, node.toString("hex") === c.root);
}Numbers read from Hyphae's public API as this page loads, and every transaction of a full run on Solana devnet.
From the public read API. Data as of 2026-10-05 09:03 UTC.
A community and its vault are created, signed by Hyphae's admin key on a Ledger.
2xkf…sENo devnetThe vault is funded with 0.05 SOL.
2Af9…aoof devnetThe epoch is published as one merkle root: 0.030460365 SOL allocated to 3 members, and the 3% fee.
3oJ4…y6DD devnetA member claims 0.012125 SOL with a merkle proof.
5ccG…3SmK devnetThe same claim, sent again, is refused on-chain.
5ob9…EknP devnetThese transactions are on devnet. The program's README says what is deployed where, and lists this run.