CommBank ID + income

Design · README.md

CBA Hackathon: income-verified CommBank ID via CDR Data Pods

A renter scans a QR code on a listing and lands in a mock CommBank app. The app sets up a CommBank ID with income verification. Income comes from the customer's own CommBank accounts (CBA core banking) and, if they choose, from Westpac, NAB or ANZ through the Consumer Data Right, with CBA acting as the Accredited Data Recipient. CDR data only lands in a pod, and only once another bank is brought in. The data lands in a self-managing CDR Data Pod, which works out income, issues zero-knowledge income proofs and deletes itself in line with CDR rules. MATTR VII issues the credential into the mock CommBank app's wallet, built on MATTR's mDocs Holder SDK.

Internal hackathon demo. All customer data is synthetic.

Layout

Path What
participants/register Mock CDR Register
participants/dh-westpac, dh-nab, dh-anz Data Holders (each holds its own config)
participants/adr-cba CBA as ADR: PingFederate + CDR Kit orchestration + consent screens
participants/cba-issuer Eligible-offers API, PingAuthorize gateway, CBA core banking mock + total-income prover, MATTR config
packages/pod-runtime, pod-programs CDR Data Pods: actor runtime, adapters, income, ZKP, retention
packages/zk-circuits circom circuits: income ≥ threshold, and CBA + CDR income ≥ threshold
apps/ios Mock CommBank iOS app with embedded wallet
apps/qr-landing, apps/zk-verifier Listing QR page and agent-facing proof verifier
data/customers.json Demo customers (placeholder mobiles), source of every seed (DH seeds, and the cba blocks → core banking seed)

End to end over Railway (CBA-only, CBA + Westpac via CDR, add another bank, total-income proofs, MATTR issuance): PLAYWRIGHT_CORE=… node deploy/e2e-income-sources.mjs (see the script header).