XENLOOK C2PAPrüfen

NFT · blockchain status

Media NFT — the picture on the wall, the deed at the registry

An NFT is closer to a registry document that records ownership than to ‘the picture file itself’. The picture stays on the XenLook CDN, signed with C2PA, and only the address (tokenURI) and a hash go on the chain.

Plain words · exact workings

An ownership deed (NFT)

Not the picture file itself, but closer to a registry record that names ‘the owner of this work’.

The simple story

  1. A house stands on its land, and its title record sits at the registry office. An NFT is similar.
  2. The picture stays on the XenLook CDN with its C2PA, and only the address (tokenURI) and hash go on chain.
  3. Minting (actual issuance) is still being prepared. For now this is a metadata preview.

How it works, exactly

  1. NFT = tokenId → tokenURI (metadata JSON). The metadata holds the media URL, sha256 and a C2PA link.
  2. An OpenZeppelin ERC-721 (MIT) skeleton is ready. Mainnet minting is still to do.
  3. Proof of time (OTS) is an optional layer.

Easy to mix up

  • The original media is not put on chain in full.
  • This demo page is about trust in media, not about payments or points.

Open the NFT metadata preview on the demo card to see its structure.

Demo · see it for yourself

Samples you can try

Play photos, video, music and documents, take their fingerprint number, and check their Content Credentials (C2PA). XenLook holds thousands of character media files; these few samples were picked to show the idea and the check simply.

Already-signed photo (C2PA)

Already-signed photo (C2PA)

A real sample with Content Credentials attached. Press check and it is really checked.

signature = Hash(file) + certificate

  • 2 Fingerprint
  • 4 C2PA
  • 5 NFT
Open in the generator demo

NFT metadata preview (stub before minting)

{
  "name": "Already-signed photo (C2PA)",
  "image_or_animation_url": "/generator/conformance/image_webp/sample.webp",
  "mime": "image/webp",
  "sha256": "(filled in after the fingerprint check)",
  "c2pa": "/generator/demo?tab=verify&sample=image_webp",
  "xmse_pipeline": "watermark→forensic→fingerprint→c2pa→chain"
}

The arithmetic, as an analogy

  1. Work file F → sha256(F) = H (fingerprint number)
  2. A C2PA signature attaches a certificate of authenticity to F
  3. Metadata JSON M = { name, image URL, H, c2pa link }
  4. NFT mint: tokenId → tokenURI(M) (belongs to the owner's address)
  5. Optional: OpenTimestamps ties H to a Bitcoin time

Proof of ownership = NFT(tokenId) + metadata(M) + media(F, C2PA) + (optional) time proof(H)

Blockchain · XMSE today (plain report)

LayerNowOSS
Linked rails (Ethereum · Ripple · Solana)3-rail SSOT fixed · no live connection (OSS and patterns only)ETH=EVM prep · XRP/SOL=catalog · owner decision 2026-08-06
Media soft layersDGX·214 encode_live · fleet WM manifest 2677/2678VideoSeal·AudioSeal·Sigil·PDQ (MIT/Apache)
C2PA (certificate of authenticity)c2pa.xenlook.com generator running · review manifest untouchedexisting XMSE / c2patool
NFT (ownership deed)ERC-721 compiled · 1 local mint measured on Anvil · Sepolia waits for a keyOpenZeppelin Contracts (MIT) · testnet-mint-record.json
Time anchor (registration time)OTS `/digest` submitted · .ots saved · Bitcoin anchor pendingalice calendar 200 · upgrade 404=pending (expected)
Ledger anchor (optional)separate from the media demo · Merkle root only, when needed (no raw balances)OZ MerkleProof (MIT)
Certificates XenLook issuesC2PA CA · XLMC · AI/compliance badges — to be anchored on-chain · cert hash onlydomains.xenlook_credentials · no raw text, PII or conversations
Sensitive data · conversationsraw PII or chat history on-chain is never allowed · HMAC/hash commitment onlychairman pillar · shared by all 3 rails

Not finished. Mainnet minting, real OTS anchoring and Seal encode are still to do.

What we do / don't do

  • Do: ownership NFT + C2PA media link
  • Do: only hashes and Merkle roots on-chain
  • Don't: upload whole original media to the chain
  • Don't: put raw balances or personal data on the chain
  • Don't: TruFor, LGPL OTS, NC weights

OSS we chose

OpenZeppelin ERC-721/1155 (MIT), viem (MIT), ancre (MIT), IPFS Kubo (optional).

OpenZeppelin GitHub