Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

Setting Up a Verifiable Credentials System for Supplier Certifications

A technical tutorial for implementing a system to issue and verify tamper-proof digital credentials for supplier attributes using W3C standards and blockchain.
Chainscore © 2026
introduction
IMPLEMENTATION GUIDE

Setting Up a Verifiable Credentials System for Supplier Certifications

A technical walkthrough for integrating decentralized identity and verifiable credentials into supply chain supplier onboarding and compliance workflows.

Verifiable Credentials (VCs) are a W3C standard for creating cryptographically secure, privacy-preserving digital attestations. In supply chains, they enable suppliers to hold and present tamper-proof proofs of certifications—like ISO standards, organic labels, or safety audits—directly to buyers. Unlike traditional paper-based or centralized database systems, VCs put control of the data with the supplier (the holder) while allowing the issuer (certification body) and verifier (buyer) to trust its authenticity without needing to contact a central authority. This architecture is built on Decentralized Identifiers (DIDs), which provide unique, self-sovereign identifiers for all parties involved.

The core technical stack involves three roles and a shared data model. First, the Issuer (e.g., a certification agency) creates a credential schema defining the required fields (e.g., certificateId, standard, expiryDate). They then sign a credential instance for a specific supplier's DID. The Holder (the supplier) stores this signed credential in a digital wallet. The Verifier (a purchasing company) requests proof, and the holder presents a Verifiable Presentation—a package containing the credential and a proof of control over their DID. Verification happens by checking the issuer's signature and the credential's status against a verifiable data registry, often a blockchain, without revealing unnecessary personal data.

To implement this, start by choosing a DID method and VC data model. For enterprise supply chains, the did:web or did:ion methods are practical starting points. You'll need libraries like did-jwt-vc (JavaScript) or vc-js to create and verify credentials. A basic issuance flow in code involves: 1) Generating DIDs for issuer and supplier, 2) Creating a credential payload, and 3) Signing it with the issuer's private key. Here's a simplified Node.js example using did-jwt-vc:

javascript
const vc = await createVerifiableCredential({
  issuer: issuerDid,
  subject: supplierDid,
  credential: {
    '@context': ['https://www.w3.org/2018/credentials/v1'],
    type: ['VerifiableCredential', 'SupplierCertification'],
    credentialSubject: {
      id: supplierDid,
      standard: 'ISO 9001:2015',
      issuedDate: '2024-01-15',
      expiryDate: '2027-01-15'
    }
  }
}, issuerSigner);

Integration into existing procurement systems requires designing the presentation and verification workflow. A buyer's ERP or vendor portal can embed a verification SDK. When a supplier applies, the portal requests a Verifiable Presentation for specific credential types. The supplier approves the request from their wallet (e.g., a mobile app), and the portal cryptographically verifies the proof. For revocation checks, implement status list 2021 or query a smart contract on a chain like Ethereum or Polygon to ensure the credential hasn't been revoked by the issuer. This on-chain check provides a trustless mechanism for status verification, a critical component for compliance.

Key considerations for production systems include credential revocation scalability, interoperability between different wallet providers, and key management for issuers. Using JSON-LD signatures with BBS+ can enable selective disclosure, allowing a supplier to prove they are certified without revealing the exact certificate number. Pilot projects in industries like fair-trade coffee or automotive parts have shown VCs can reduce audit costs by up to 60% and cut onboarding time from weeks to hours. The system's success hinges on aligning the credential schema with industry standards like GS1 for product identifiers and ensuring all parties agree on the trust framework.

prerequisites
VERIFIABLE CREDENTIALS

Prerequisites and Setup

This guide outlines the technical foundation required to build a verifiable credentials system for managing supplier certifications on-chain.

A verifiable credential (VC) system for supplier certifications requires a clear understanding of the core components and their interactions. You will need an issuer (the certification body), a holder (the supplier), and a verifier (the buyer or auditor). The system's trust is anchored in decentralized identifiers (DIDs), which provide cryptographically verifiable, self-sovereign identities for all participants, eliminating reliance on a central database. The credentials themselves are W3C-compliant Verifiable Credentials, signed JSON-LD or JWT documents containing the claim (e.g., "ISO 9001 Certified") and metadata.

For the on-chain component, you must select a blockchain that supports your requirements for cost, finality, and programmability. Ethereum and its Layer 2s (like Arbitrum or Polygon) are common for their robust smart contract ecosystems and tools. Alternatively, purpose-built chains like Veramo-compatible networks or Hyperledger Indy/Aries frameworks offer specialized VC tooling. Your choice will dictate the available SDKs and libraries, such as ethers.js for EVM chains or the Veramo CLI and SDK for a more framework-driven approach.

The development environment setup involves installing Node.js (v18 or later) and a package manager like npm or yarn. You will need to install core libraries for creating and managing DIDs and VCs. For a flexible, plugin-based approach, initialize a Veramo project: npm create veramo@latest. For a more direct EVM-centric method, install libraries like @veramo/core, @veramo/data-store, and ethr-did-resolver. You must also configure a database (SQLite for development, PostgreSQL for production) for the agent to store private keys, DIDs, and credential states.

A critical prerequisite is setting up a DID resolver and configuring at least one DID method. For testing, you can use the did:ethr method on a testnet like Sepolia, which allows you to create DIDs anchored to a blockchain address. Configure your Veramo agent or custom service to resolve DIDs by specifying a provider RPC URL from a service like Infura or Alchemy. This enables your system to publicly resolve a supplier's DID to a DID Document containing their public keys, which is essential for verifying credential signatures.

Finally, you will need to design the Verifiable Credential schema for your certifications. This defines the structure of the data you will issue. Using a tool like the Schema.org editor or defining a custom JSON schema, you specify the exact fields (e.g., certificationStandard, issueDate, expiryDate, accreditationBody). This schema's URI is embedded in every credential, allowing verifiers to understand its meaning. With the environment configured, DIDs resolvable, and schemas defined, you are ready to proceed with issuing your first on-chain verifiable credential to a supplier.

key-concepts-text
CORE CONCEPTS

W3C Verifiable Credentials and DIDs for Supplier Certification

This guide explains how to implement a decentralized supplier certification system using the W3C Verifiable Credentials (VC) Data Model and Decentralized Identifiers (DIDs).

The W3C Verifiable Credentials Data Model provides a standardized format for creating cryptographically secure, machine-verifiable digital credentials. For supplier certifications, this means an auditor (the issuer) can issue a credential—like an ISO 9001 compliance certificate—directly to a supplier (the holder). The credential is a JSON-LD document containing the claim, issuer signature, and metadata, enabling the supplier to present it to any third party (a verifier) for instant, trustless verification without contacting the original auditor. This shifts trust from centralized databases to cryptographic proofs.

Decentralized Identifiers (DIDs) are the foundational identity layer. A DID is a unique, self-sovereign identifier (e.g., did:ethr:0xabc123...) controlled by the entity it identifies, not a central registry. In our system, each supplier and auditor generates their own DID using a DID method like did:ethr (Ethereum) or did:key. The DID document, resolvable from a blockchain or other decentralized network, contains public keys and service endpoints. This allows the auditor to sign the VC with their private key, and the verifier to fetch the corresponding public key from the auditor's DID document to validate the signature autonomously.

To set up the system, you first establish the trust triangle. The supplier generates a DID and shares its DID URI with the auditor. The auditor, using a VC SDK like veramo or ssi-sdk, creates a credential payload. A minimal example in JSON-LD includes the @context, id, type (e.g., "SupplierCertification"), issuer, issuanceDate, credentialSubject (the supplier's DID and claim data), and a proof section. The auditor signs this payload, generating a JWT or JSON-LD Proof, resulting in the final Verifiable Credential, which is delivered to the supplier.

The supplier stores this VC in a digital wallet—a secure app that manages their DIDs and credentials. When a manufacturer (the verifier) requests proof of certification, the supplier presents the VC, typically as a Verifiable Presentation. This is a wrapper, often signed by the supplier, that contains the original credential. The verifier's system performs a multi-step check: it resolves the auditor's DID to get the public key, verifies the credential's cryptographic proof, checks the credential hasn't been revoked (via a status list), and validates that the credential subject's DID matches the supplier's DID. This entire process occurs peer-to-peer.

For production, key decisions involve selecting a DID method suitable for your consortium (e.g., did:ethr for Ethereum-based participants, did:web for hosted identities), choosing a signature suite (Ed25519Signature2018 for JSON-LD, JWT for simplicity), and implementing revocation. The W3C VC standard supports status list credentials or revocation registries. Governance is critical: your consortium must agree on accepted DID methods, trusted issuers (auditor DIDs), and the schema for the certification claims to ensure interoperability across the supply chain network.

system-components
VERIFIABLE CREDENTIALS

System Architecture Components

A verifiable credentials (VC) system for supplier certifications requires a modular architecture. These are the core components you need to build or integrate.

05

Credential Schemas & Templates

Standardized data structures that define the fields within a credential. Schemas ensure interoperability between issuers and verifiers. They are published to a registry (like a schema registry or IPFS) and referenced by a unique URI in the credential. For supplier certifications, schemas define fields like certificationStandard, issueDate, expiryDate, and accreditationBody.

  • Example Schema: SupplierComplianceCredentialV1
  • Tools: Use JSON Schema to define the structure before publishing.
step-issuer-setup
FOUNDATION

Step 1: Setting Up the Issuer Agent

The issuer agent is the core component that creates and signs verifiable credentials for your suppliers. This guide walks through deploying a production-ready agent using the open-source Aries Framework JavaScript.

An issuer agent is a dedicated service that manages the cryptographic keys and protocols required to issue verifiable credentials (VCs). It acts as your organization's trusted digital notary, signing credential data with a Decentralized Identifier (DID) that suppliers can cryptographically verify. For this setup, we'll use the Aries Framework JavaScript (AFJ), a production-grade, open-source toolkit for implementing the W3C Verifiable Credentials and Decentralized Identifiers standards.

Start by initializing a new Node.js project and installing the core dependencies. You'll need @aries-framework/core and @aries-framework/node for the agent runtime, along with a storage module like @aries-framework/indy-sdk-to-askar-migration for persistence. A basic agent configuration requires a wallet for key management, an inbound/outbound transport for communication, and a DID registrar. The following code snippet shows a minimal setup using the Askar wallet:

javascript
import { Agent } from '@aries-framework/core';
import { AskarModule } from '@aries-framework/askar';
import { agentDependencies } from '@aries-framework/node';

const agent = new Agent({
  config: {
    label: 'Supplier-Cert-Issuer',
    walletConfig: { id: 'issuer-wallet', key: 'your-wallet-key' },
  },
  modules: { askar: new AskarModule() },
  dependencies: agentDependencies,
});
await agent.initialize();

After initialization, your agent must create and publish its public DID to a Verifiable Data Registry (VDR), such as an Indy ledger (e.g., Sovrin StagingNet) or the cheqd network. This public DID is the anchor for trust, allowing anyone to fetch the associated public keys to verify your signatures. Use the agent's dids module to create a DID with a key type like ed25519 and register it. The agent will now be ready to establish DIDComm connections with supplier-held wallets (holders) and issue credentials using schemas and credential definitions defined on the ledger.

For production deployments, you must secure the agent's environment. Store the wallet encryption key and any API secrets using environment variables or a secrets manager. Configure the agent's admin API (often via @aries-framework/rest) behind a secure gateway with authentication. Implement logging and monitoring to track credential issuance events and connection states. Consider using a containerized deployment (Docker) for consistency and scalability, allowing you to easily manage multiple issuer agents for different certification programs or regions.

Finally, test the agent's issuance flow end-to-end before onboarding suppliers. Use a testing framework to simulate a holder agent (e.g., the AFJ agent in another process) to request a connection, receive a credential offer, and store the issued VC. Verify that the credential's proof is valid using a public verification library. This setup establishes the technical foundation for your supplier certification system, enabling you to move to the next step: defining the credential schema for your specific compliance requirements.

step-create-credential
IMPLEMENTATION

Step 2: Creating and Signing a Credential

This step details the process of defining a credential's data structure, issuing it to a holder, and cryptographically signing it to create a tamper-proof, verifiable document.

A Verifiable Credential (VC) is a standardized data model defined by the W3C. At its core, it is a JSON-LD document containing three essential components: the credential metadata (issuer, issuance date, expiration), the credential subject (the claims about the holder, e.g., a supplier's ISO 9001 certification ID and audit date), and the proof (the cryptographic signature). You define this structure using a JSON Schema or a custom context. For supplier certifications, the subject would include fields like certificationStandard, certificationId, issueDate, auditor, and validUntil.

To create the credential, you populate this data model. Using a library like didkit or veramo, you construct a JSON object adhering to the VC data model. The issuer's Decentralized Identifier (DID) is set in the issuer field, and the supplier's DID is set as the id of the credentialSubject. This creates an unsigned credential payload. It's crucial that all data is accurate, as this payload will be permanently signed and recorded. The payload itself is not yet verifiable.

Signing is the critical step that transforms a data payload into a Verifiable Credential. The issuer uses their private key, associated with their DID, to generate a cryptographic proof. Common proof types include Ed25519Signature2020 or JsonWebSignature2020. The signing process creates a digital signature over the entire credential payload, which is then appended to the document in a proof section. This signature allows any verifier to cryptographically confirm that the credential was issued by the stated DID and that the data has not been altered since issuance.

Here is a simplified example of a signed VC for a supplier certification using the Ed25519Signature2020 proof format (signature value abbreviated):

json
{
  "@context": ["https://www.w3.org/2018/credentials/v1"],
  "id": "urn:uuid:9876-5432",
  "type": ["VerifiableCredential", "SupplierCertificationCredential"],
  "issuer": "did:key:z6Mkf5rGM...",
  "issuanceDate": "2024-01-15T00:00:00Z",
  "credentialSubject": {
    "id": "did:ethr:0x1234...",
    "certificationStandard": "ISO 9001:2015",
    "certificationId": "SC-78910",
    "auditor": "Global Certifications Inc."
  },
  "proof": {
    "type": "Ed25519Signature2020",
    "created": "2024-01-15T10:30:00Z",
    "verificationMethod": "did:key:z6Mkf5rGM...#z6Mkf5rGM...",
    "proofPurpose": "assertionMethod",
    "proofValue": "z58DAdFfa9SkqZMVPxAQp..."
  }
}

After signing, the credential is typically issued to the holder by transmitting the signed JSON document. The holder then stores this VC in their digital wallet. The presence of the embedded proof enables the next step: verification. Any party, such as a procurement officer, can request this credential and use the issuer's public key (resolvable from their DID) to verify the signature's validity and the integrity of the data, establishing trust without contacting the original issuer directly.

step-holder-wallet
WALLET ARCHITECTURE

Building the Holder's Wallet

This step involves creating the digital wallet application where suppliers (holders) will store and manage their verifiable credentials.

The holder's wallet is a secure, user-controlled application where suppliers store their Verifiable Credentials (VCs). Unlike a cryptocurrency wallet, its primary function is to manage identity data, not tokens. A well-designed wallet must allow users to receive, store, present, and revoke credentials. For supplier certifications, this means a supplier can receive a CertificateOfCompliance VC from an issuer, store it privately, and selectively share proof of it with a verifier (like a manufacturer) without revealing unnecessary personal data.

Architecturally, the wallet consists of a user interface (UI) and a secure storage backend. The UI handles user interactions, while the backend manages cryptographic keys and credential data. The most critical component is the Decentralized Identifier (DID), which serves as the wallet's unique, self-sovereign identity. You'll generate a DID for each supplier, such as did:key:z6Mkf5rGM..., and its associated private keys. These keys are used to sign presentations, proving the holder controls the credentials.

For development, you can use SDKs and libraries to handle the complex cryptography. The W3C Verifiable Credentials Data Model is the standard specification. Consider using did:key or did:ethr for simple DIDs, or did:web for more managed identities. Libraries like did-jwt-vc (JavaScript/TypeScript), vc-js, or aries-framework-javascript provide tools for creating, signing, and verifying credentials and presentations, abstracting away much of the cryptographic complexity.

Here is a simplified code example for initializing a wallet and generating a DID using the dids and key-did-provider-ed25519 libraries in a Node.js environment:

javascript
import { DID } from 'dids'
import { Ed25519Provider } from 'key-did-provider-ed25519'
import { getResolver } from 'key-did-resolver'
// Generate or import a seed (private key)
const seed = new Uint8Array(32) // In practice, generate securely
const provider = new Ed25519Provider(seed)
const did = new DID({ provider, resolver: getResolver() })
await did.authenticate()
console.log('Holder DID:', did.id)
// The DID object (e.g., did:key:z6Mk...) is now ready to create presentations.

The wallet must also implement the presentation flow. When a verifier requests proof of a certification, the wallet creates a Verifiable Presentation (VP). This VP contains the relevant credential, is signed by the holder's DID, and can include a challenge and domain from the verifier to prevent replay attacks. The supplier should be able to review exactly what data is being shared before authorizing the presentation, ensuring selective disclosure and user consent.

Finally, consider deployment and security. The wallet can be a web app, mobile app, or browser extension. Private keys should never be stored on a central server; they must remain under the user's control, ideally in secure local storage or a hardware module. For a production supplier system, integrate with existing enterprise authentication (like OAuth) and ensure the UI is intuitive for non-technical users to manage their professional credentials.

step-selective-disclosure
PRIVACY AND EFFICIENCY

Step 4: Enabling Selective Disclosure

Implement selective disclosure to allow suppliers to share only the specific, necessary claims from their credentials, protecting sensitive business data.

Selective disclosure is a core privacy feature of Verifiable Credentials (VCs). It allows a credential holder—in this case, a supplier—to prove specific claims from their credential without revealing the entire document. For supplier certifications, this means a company can prove it holds an ISO 9001:2015 certification and its valid date, without exposing its full corporate address, auditor details, or other unrelated claims contained in the same VC. This minimizes data exposure and aligns with data minimization principles under regulations like GDPR.

The technical foundation for this is often BBS+ (Boneh-Boyen-Shacham) signatures or similar zero-knowledge proof schemes. Unlike a simple digital signature that verifies an entire signed document, BBS+ allows the derivation of a proof for a subset of the signed claims. In practice, you would use a library like @mattrglobal/bbs-signatures. After issuing a full credential, you create a presentation where the supplier generates a proof for only the disclosed attributes, while the undisclosed attributes are cryptographically hidden but still verifiable as part of the original signature.

Here is a simplified code example using a hypothetical SDK to create a selective disclosure presentation from a supplier's credential:

javascript
// credential contains: {"id": "supplier123", "standard": "ISO 9001:2015", "issueDate": "2024-01-15", "auditor": "AuditCorp Inc."}
const credential = await issueCredential(supplierDid, credentialData, issuerPrivateKey);

// Supplier creates a presentation, disclosing only 'standard' and 'issueDate'
const presentation = await createPresentation(
  credential,
  {
    disclosedAttributes: ['standard', 'issueDate'], // What to reveal
    nonce: verifierProvidedNonce // Prevents replay attacks
  },
  supplierPrivateKey
);

// The verifier checks the proof without seeing 'id' or 'auditor'
const isVerified = await verifyPresentation(presentation, issuerPublicKey, verifierProvidedNonce);

This proof convinces the verifier that the disclosed claims are authentic and unaltered, without leaking the hidden data.

For your supplier system, define a presentation policy for each verification scenario. A request for a tender might only require proof of certification type and validity period. A deeper audit might require additional claims like accreditation body. The W3C's Verifiable Credentials Data Model defines the standard structures for these interactions. Using selective disclosure transforms your system from a simple credential checker into a privacy-preserving platform that builds trust while respecting supplier confidentiality.

step-verifier-service
IMPLEMENTATION

Step 5: Creating the Verifier Service

Build the core service that cryptographically verifies supplier credentials against the on-chain registry and business logic.

The verifier service is the central logic engine of your system. It performs the critical task of checking a supplier's presented credential—such as a W3C Verifiable Credential (VC)—against the on-chain registry and your defined validation rules. This service is typically a backend API that your procurement platform calls before approving a supplier for a tender. Its primary functions are to parse the credential, verify the cryptographic proof (e.g., an EIP-712 signature), and check the credential's status and issuer against the smart contract registry.

Start by setting up a Node.js or Python service with the necessary libraries. For Ethereum-based credentials, you'll need libraries like ethers.js or web3.py to interact with your CredentialRegistry contract, and a VC/VP library such as did-jwt-vc or vc-js for handling the credential data model. The core verification flow involves three steps: 1) Proof Verification: Validate the digital signature on the credential to ensure it hasn't been tampered with and was issued by a trusted entity. 2) Registry Check: Call the isCredentialValid(credentialId, issuer) view function on your smart contract to confirm the credential is not revoked and was issued by an authorized entity. 3) Business Logic Validation: Check the credential's claims (like certificationType and expiryDate) meet your specific requirements.

Here is a simplified Node.js example using ethers and a hypothetical VC library:

javascript
async function verifySupplierCredential(vcJwt, supplierAddress) {
  // 1. Verify the JWT proof and decode the VC
  const verifiedVC = await vcLibrary.verifyJWT(vcJwt, resolver);
  
  // 2. Check the on-chain registry
  const registry = new ethers.Contract(registryAddress, abi, provider);
  const isValidOnChain = await registry.isCredentialValid(
    verifiedVC.id,
    verifiedVC.issuer.id
  );
  
  // 3. Apply business logic
  const isNotExpired = new Date(verifiedVC.credentialSubject.expiryDate) > new Date();
  const hasRequiredCert = verifiedVC.credentialSubject.certificationType === 'ISO_9001';
  
  return isValidOnChain && isNotExpired && hasRequiredCert;
}

For production, your service must handle errors gracefully—such as network issues with the blockchain RPC provider, malformed credentials, or revoked statuses. Implement clear error responses (e.g., PROOF_INVALID, CREDENTIAL_REVOKED, CLAIM_EXPIRED) so your frontend can guide users appropriately. Consider adding a caching layer for the contract's view functions to improve performance for frequently checked credentials, but ensure revocation checks remain timely. The service should be stateless and designed to scale horizontally as verification request volume grows.

Finally, secure your verifier API. Authenticate calls from your internal procurement application using API keys or JWT tokens. Log all verification attempts for audit trails, recording the credential ID, issuer, verifier (supplier address), timestamp, and result. This log is crucial for compliance and for analyzing the system's usage patterns. By completing this step, you establish the trusted, automated gatekeeper that enables your platform to make permissionless yet verified decisions about supplier eligibility.

CORE PROTOCOLS

Credential Format and Signature Comparison

A comparison of common formats and cryptographic methods for issuing verifiable credentials, highlighting trade-offs for supplier certification use cases.

Feature / MetricW3C Verifiable Credentials (JSON-LD)JWT-based CredentialsAnonCreds (CL-Signatures)

Standardization Body

W3C

IETF (RFC 7519)

Hyperledger Foundation

Primary Signature Type

Linked Data Proofs (Ed25519, ES256K)

JSON Web Signatures (JWS)

Camenisch-Lysyanskaya (CL) Signatures

Selective Disclosure

Requires BBS+ signatures

Not natively supported

âś… Built-in

Zero-Knowledge Proofs

âś… With BBS+

❌

âś… Core feature

Credential Revocation

Status List 2021, Bitstring

Custom JWT blacklist

âś… Built-in accumulators

Average Issuance Latency

~500-800ms

< 200ms

~1-2 seconds

Schema Flexibility

âś… JSON-LD context linking

âś… Arbitrary JSON payload

❌ Fixed schema structure

Interoperability Focus

âś… High (Web standard)

âś… High (JWT ecosystem)

Medium (Hyperledger stack)

DEVELOPER FAQ

Frequently Asked Questions

Common technical questions and troubleshooting for implementing a blockchain-based verifiable credentials system for supplier certifications.

A verifiable credential (VC) is a tamper-proof, cryptographically signed digital attestation. Unlike a scanned PDF or database entry, a VC's authenticity and integrity can be automatically verified by any party without contacting the original issuer.

Key differences:

  • Cryptographic Proof: Uses digital signatures (e.g., EdDSA, ECDSA) to prove the issuer's identity and that the credential hasn't been altered.
  • Decentralized Identifiers (DIDs): Issuers and holders are identified by DIDs, not just email addresses, enabling self-sovereign identity.
  • Selective Disclosure: Holders can prove specific claims (e.g., "is certified for ISO 9001") without revealing the entire credential.
  • Interoperability: Built on W3C standards, allowing credentials to be used across different systems and blockchains.

In a supplier context, this means a certification body issues a VC to a supplier, who can then present it to multiple buyers. Each buyer can instantly verify it on-chain or via a verifier service.