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.
Live numbers from the public API, alongside the receipts for the completed mainnet payout.
Reading the live numbers…
MYCEL community HRkBN4…XbRX and vault AC3zkG…oG86K are created on mainnet.
aens…ghNX mainnetThe vault receives 1.5 SOL for epoch 2.
5spB…rjtj mainnetThe Ledger publishes the root: 1.238881509 SOL allocated to 4 wallets; 0.045 SOL goes to the MYCEL Treasury.
4qhK…EnLm mainnetThe founder claims 0.36375 SOL.
5iBb…Zn55 mainnetA member claims 0.223351074 SOL.
2gbA…k1tK mainnetA member claims 0.36375 SOL.
59kN…ZvSy mainnetA member claims 0.288030435 SOL. All 4 are paid; unclaimed is 0.
63tu…CHzq mainnet3 of 4 payees are non-founder wallets. The IDL is published. Read the mainnet receipts and decoded accounts or the program status. The repeat-claim refusal was demonstrated on devnet.
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.
Security and trust, in full: what the admin can and cannot do, the keys, the reviews, privacy, and how to report a problem.
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);
}Live numbers from the public API, alongside the receipts for the completed mainnet payout.
From the public read API. Data as of 2026-10-18 13:16 UTC.
MYCEL community HRkBN4…XbRX and vault AC3zkG…oG86K are created on mainnet.
aens…ghNX mainnetThe vault receives 1.5 SOL for epoch 2.
5spB…rjtj mainnetThe Ledger publishes the root: 1.238881509 SOL allocated to 4 wallets; 0.045 SOL goes to the MYCEL Treasury.
4qhK…EnLm mainnetThe founder claims 0.36375 SOL.
5iBb…Zn55 mainnetA member claims 0.223351074 SOL.
2gbA…k1tK mainnetA member claims 0.36375 SOL.
59kN…ZvSy mainnetA member claims 0.288030435 SOL. All 4 are paid; unclaimed is 0.
63tu…CHzq mainnet3 of 4 payees are non-founder wallets. The IDL is published. Read the mainnet receipts and decoded accounts or the program status. The repeat-claim refusal was demonstrated on devnet.