Public, daily-refreshing ledger of Aleph Cloud's token flow: credit purchases (Credit API) and on-chain ALEPH conversion — market buys, distribution, burns — decoded from the AlephPaymentProcessor contract on Ethereum mainnet.
Implements aleph-coordination/BUYFLOW_DASHBOARD_SPEC.md (v1).
pipeline/fetch.mjs zero-dependency Node ≥18 pipeline → web/data/flow.json
web/index.html static single-page dashboard (no build step)
web/data/flow.json generated cache — committed so the static site has data
.github/workflows/ hourly refresh + GitHub Pages deploy
node pipeline/fetch.mjs # fetch + aggregate (incremental after first run)
npx serve web # or: python3 -m http.server -d web 8000Env overrides: ETH_RPC_URL (default publicnode), CREDIT_API_URL
(default https://credit.aleph.im).
- AlephPaymentProcessor —
0x6b55F32Ea969910838defd03746Ced5E2AE8cB8B(Ethereum mainnet, deployed block 24,270,182).TokenPaymentsProcessedevents, topic00x3db36cd2…cbbc: one event per processing run with swap, burn, distribution and developer amounts. Decoded againstaleph-contract-eth-credit/src/AlephPaymentProcessor.sol(the repo-rootabi.jsonthere is stale — fewer fields than deployed). - Credit API —
GET https://credit.aleph.im/api/v0/payment(paginated). USD figures = credits granted minus bonus credits, atcredit_price_usdc; onlyCOMPLETEDpayments count.
Field nuance: for stable-token payments the developers cut stays in the source
token (e.g. USDC) and only the remainder is swapped to ALEPH; for direct ALEPH
payments no swap occurs (marketBuy: false, not counted as market-bought).
- Never render zeros on failure. The pipeline exits non-zero on any source
error and refuses to overwrite a good cache with an emptier one; the frontend
shows an explicit error panel if
flow.jsonis missing and a stale banner if the cache is >24 h old. - Transparency framing, not scale. Numbers are small (~$1.7K cumulative, 2 processing runs as of 2026-06-10). Copy stays mechanism-first; no "massive buy pressure" language.
- Burn lever shown explicitly: "burn 0% — governance lever, unactivated".
The hourly workflow refreshes web/data/flow.json, commits it, and deploys to
two targets:
-
Aleph Cloud web3 hosting (canonical, dogfood) —
web/is pinned to IPFS viaaleph-im/web3-hosting-actionand linked to flow.aleph.cloud. Uses theALEPH_PRIVATE_KEYrepo secret (dedicated deploy wallet0x246B97e5Ce59E445C6206cE5BB8663e2Bae06a50). Required DNS at thealeph.cloudzone (OVH):flowCNAME →ipfs.public.aleph.sh._control.flowTXT →0x246B97e5Ce59E445C6206cE5BB8663e2Bae06a50
-
GitHub Pages (mirror/staging) — https://aleph-im.github.io/aleph-buyflow-dashboard/
-
Aleph aggregate (data contract for other consumers, e.g. the network dashboard) — the flow data, minus run timestamps and rounded to 6 decimals, is published as a signed aggregate under the deploy wallet, only when the content changes (
pipeline/publish-aggregate.mjsdiffs against the live aggregate first):https://api2.aleph.im/api/v0/aggregates/0x246B97e5Ce59E445C6206cE5BB8663e2Bae06a50.json?keys=buyflowFreshness semantics: the aggregate updates on distributions/buys, not on a clock — use
web/data/flow.json'sgeneratedAt(refreshed hourly) to check pipeline liveness.