Skip to content

xProof: output integrity layer built on MX-8004 - live implementation report #679

@jasonxkensei

Description

@jasonxkensei

Context

We built xProof as a proof primitive for AI agents and humans on MultiversX. The service is live at xproof.app and implements the full MX-8004 validation lifecycle. This document shares our implementation details and what we learned building on the standard - feedback from the team is welcome.

What we built - Technical flow

xProof implements the complete MX-8004 validation loop. Every certification triggers an asynchronous 5-step on-chain registration via a PostgreSQL-backed transaction queue with exponential backoff retry:

Step 1: init_job(jobId, agentNonce)
  → Registers the certification as a new job in the Validation Registry
  → Links to xProof's soulbound agent identity (NFT nonce)

Step 2: submit_proof(jobId, proof)
  → proof = "hash:{fileHash}|tx:{transactionHash}"
  → Submits the SHA-256 hash + MultiversX transaction reference as job evidence

Step 3: validation_request(jobId, validatorAddress, requestUri, requestHash)
  → requestUri = "https://xproof.app/proof/{certificationId}.json"
  → requestHash = SHA-256(proof)
  → xProof self-validates (the certifying agent is also the validator)

Step 4: validation_response(requestHash, 100, responseUri, responseHash, "xproof-certification")
  → response score = 100 (fully validated)
  → responseUri = "https://xproof.app/proof/{certificationId}"
  → responseHash = SHA-256("verified:{fileHash}")
  → tag = "xproof-certification"
  → Job reaches "Verified" status on-chain

Step 5: append_response(jobId, responseUri)
  → responseUri = "https://xproof.app/api/certificates/{certificationId}.pdf"
  → Attaches the PDF certificate as a permanent response artifact

Smart retry

The transaction queue persists currentStep in PostgreSQL. If any step fails (nonce collision, gateway timeout, contract revert), the job retries from the failed step — not from the beginning. This saves gas and time.

MX-8004 contracts used

Contract Environment variable Role
Identity Registry MX8004_IDENTITY_REGISTRY Soulbound NFT agent identity
Validation Registry MX8004_VALIDATION_REGISTRY Job lifecycle (init → submit → validate → verify)
Reputation Registry MX8004_REPUTATION_REGISTRY On-chain reputation scoring + ERC-8004 feedback

API endpoints exposed for MX-8004 data

Endpoint Description Auth
GET /api/mx8004/status MX-8004 configuration status + agent identity Public
GET /api/agent/{nonce}/reputation Agent reputation score + total jobs Public
GET /api/mx8004/job/{jobId} Job data from Validation Registry Public
GET /api/mx8004/validation/{requestHash} Validation response details Public
GET /api/mx8004/feedback/{agentNonce}/{clientAddress}/{index} ERC-8004 feedback signals Public

ERC-8004 feedback methods implemented

  • giveFeedback(agentNonce, value, valueDecimals, tag1, tag2, endpoint, feedbackUri, feedbackHash) - Full ERC-8004 raw feedback
  • giveFeedbackSimple(jobId, agentNonce, rating) - Simplified feedback
  • revokeFeedback(agentNonce, feedbackIndex) - Revoke previous feedback
  • readFeedback(agentNonce, clientAddress, feedbackIndex) - Query feedback

Where xProof fits in the MultiversX agent stack

┌─────────────────────────────────────────────────┐
│            MultiversX Agent Stack                │
├─────────────────────────────────────────────────┤
│                                                  │
│  MX-8004 Identity Registry                       │
│    └─ Agent identity (soulbound NFT)             │
│                                                  │
│  MX-8004 Validation Registry                     │
│    └─ Job orchestration + validation lifecycle   │
│                                                  │
│  MX-8004 Reputation Registry                     │
│    └─ On-chain scoring + feedback signals        │
│                                                  │
│  ┌─────────────────────────────────────────┐     │
│  │  xProof — Output Integrity Layer        │     │
│  │                                         │     │
│  │  What it adds:                          │     │
│  │  • Output-level proof (SHA-256 on-chain)│     │
│  │  • Tamper detection post-production     │     │
│  │  • Timestamped proof of existence       │     │
│  │  • Cross-agent output verification      │     │
│  │  • Webhook notifications on confirmation│     │
│  │  • Verification badges (SVG)            │     │
│  │  • x402 payment (USDC on Base)          │     │
│  │                                         │     │
│  │  What it does NOT replace:              │     │
│  │  • Agent identity (MX-8004 does this)   │     │
│  │  • Job orchestration (MX-8004 does this)│     │
│  │  • Reputation scoring (MX-8004 does this│     │
│  │                                         │     │
│  │  How it integrates:                     │     │
│  │  Each certification → full MX-8004      │     │
│  │  validation loop (5 on-chain txs)       │     │
│  │  → Job reaches "Verified" status        │     │
│  │  → Builds agent reputation              │     │
│  └─────────────────────────────────────────┘     │
│                                                  │
└─────────────────────────────────────────────────┘

What we learned building on MX-8004

  • The 5-step validation loop works well for certification use cases. The separation between submit_proof and validation_request lets us decouple the proof payload from the validation logic cleanly.
  • Nonce management across 5 sequential transactions required a persistent queue with step-level retry. Our implementation uses PostgreSQL with exponential backoff - happy to share specifics if useful for other builders.
  • Self-validation (where the certifying agent is also the validator) is a valid pattern for proof-of-existence. For cross-agent validation scenarios, we expose public endpoints so external validators can query job and proof data.
  • The Reputation Registry creates a natural incentive loop: agents that certify more build verifiable track records. We see this as a foundation for trust-based agent discovery.

Try it

The service is live. You can test the full flow, from certification to on-chain verification, without an account using x402 (USDC on Base):

curl -X POST https://xproof.app/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"discover_services","arguments":{}}}'

Links

We'd appreciate any feedback on our MX-8004 usage — especially around validation patterns, reputation integration, or areas where we could align more closely with the standard's direction.


Document generated from xProof codebase — server/mcp.ts, server/mx8004.ts, server/txQueue.ts, server/routes.ts
Version 1.2.0 — February 19, 2026

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions