How it works
Four steps. One trust anchor. Zero trust in us.
Every credential issued through LearnCoin goes through the same four-step pipeline. The verifier — a recruiter, an HR system, an AI agent, or the recipient themselves — never has to trust LearnCoin. The cryptography and the public chain do the trusting.
Issue
Tenants call POST /v1/batches
An issuer — a university, an employer, a training platform like Ewance — sends a batch of credentials to the REST API with a lrn_live_ API key. Each credential carries the recipient pseudonymous ID, the achievement, alignment to skill frameworks, and optional evidence metadata.
The call returns 202 Accepted with a batch ID instantly. Signing and anchoring happen asynchronously — the tenant is unblocked the moment the request lands.
Sign
Per-tenant keys in HSM-protected GCP KMS
Each tenant has a dedicated secp256k1signing key held inside Google Cloud KMS, never exported. LearnCoin's signing worker canonicalizes each credential with URDNA2015, hashes the N-Quads output to SHA-256, and submits the digest to KMS for signing.
The signing key is exposed publicly only as a verificationMethod fragment inside the LearnCoin DID document at /.well-known/did.json. The private side never leaves the HSM.
Anchor
Merkle batch → Ethereum L2 (Base — OP Stack)
Signed credentials within a batch are hashed into a binary Merkle tree, the root is written to a single transaction on Base — Coinbase's open-source Ethereum L2 built on Optimism's OP Stack.
Per-credential anchoring cost at scale is effectively zero: one transaction commits the whole batch. The on-chain footprint is only the Merkle root plus issuer DID reference plus timestamp plus transaction ID — never PII, never the credential content itself.
Base settles back to Ethereum L1 via the OP Stack's withdrawal bridge. That chain of settlements is the trust anchor — Ethereum, not any single company, is the root.
Verify
Any Blockcerts-compatible tool, any time, forever
Each credential gets a shareable public URL at learncoin.me/c/{id}. The public verification page runs the blockcerts-verifierWeb Component client-side — the verification happens in the viewer's browser, not on a LearnCoin server.
The verifier walks the proof path from the credential's canonical hash up to the Merkle root, confirms the anchoring transaction landed on Base, resolves the issuer DID, and validates the signature. Five green checks: schema, signature, issuer, revocation, erasure.
Because the proof is a Linked Data Proof on a self-contained JSON-LD document, verification continues to work even if LearnCoin shuts down tomorrow. The recipient's own copy of the credential, the Base chain, and the DID document are sufficient.
Ten lines of code. Your first credential on testnet.
Test mode is free, forever. When you're ready for real credentials on Base mainnet, upgrade to Starter.