Decentralized
Digital Credentials.

Ethereum Credential Service (ECS) is a simplified, decentralized registry for trusted credential resolvers. Built with ENS Hooks integration and standard ENS resolvers for seamless credential verification.

9:41
Vitalik Buterin

vitalik.eth

Canadian Flag

Ethereum Co-founder

12K

4K Followers

vitalik.eth.limo
@VitalikButerin

Credentials

EthStars

eth.ecs.ethstars.stars

EFP Followers

eth.ecs.efp.followers

NationalitE

eth.ecs.nationalite.state

Powered by ECS Protocol

About ECS Protocol

Ethereum Credential Service (ECS) is a simplified, decentralized registry for "known" credential resolvers. Entities can register a unique namespace (e.g., my-service.ecs.eth) and point it to a standard ENS resolver that serves credential data.

ECS is built to be fully compatible with the ENS Hooks standard, enabling ENS names to "jump" to these known resolvers to securely resolve onchain or offchain records. Credentials are resolved through service subdomains using specific keys to fetch trusted data for any identity.

The protocol features a simplified architecture: a flat, single-label registry with standard ENSIP-10 Extended Resolver contracts, ensuring compatibility with existing ENS tooling while maintaining decentralized trust through resolver freshness tracking.

⚠️ Version 0.2.0-beta - Breaking Changes

ECS has been updated with major architectural changes. This version is not compatible with previous releases.

Deployed on Ethereum Sepolia Testnet

Simplified Architecture

Flat, single-label registry for easy integration

Standard Resolvers

ENSIP-10 compatible with existing ENS tooling

ENS Hooks Integration

Secure redirects to trusted resolvers

Resolver Trust

Freshness tracking for security-conscious clients

Flexible Data

Define your own schema and credential keys

Namespace Ownership

Guaranteed control of credential domains

Built for Developers

ECS provides a simplified infrastructure to register trusted resolvers, integrate with ENS Hooks, and resolve credentials with standard ENS tooling.

ENS Hooks Integration

Enable ENS names to redirect queries to known resolvers. Users set hooks on their ENS names to securely resolve credentials through trusted resolvers. Learn more →

Standard ENS Resolvers

Credential resolvers are standard ENSIP-10 Extended Resolver contracts. Compatible with all existing ENS tooling and infrastructure.

Resolver Trust & Freshness

Track resolver update timestamps to make security-conscious trust decisions. Enforce policies based on resolver age and stability.

Simplified Architecture

Flat, single-label registry replaces complex multi-level structures. Register namespaces like my-service.ecs.eth with straightforward ownership.

Learn ECS

Get started with ecs.js to integrate simplified credential resolution, ENS Hooks support, and standard resolver compatibility into your applications.

Quick Start Example

// Install the ecs.js client
npm install @nxt3d/ecsjs@0.2.2-beta

// Example: Resolve credentials
import {
  createECSClient,
  sepolia,
  resolveCredential
} from '@nxt3d/ecsjs';

const client = createECSClient({
  chain: sepolia,
  rpcUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY'
});

// Resolve credential from known resolver
const credential = await resolveCredential(
  client,
  '0x9773397bd9366D80dAE708CA4C4413Abf88B3DAa',
  'eth.ecs.name-stars.starts:vitalik.eth'
);

console.log(`Credential: ${credential}`);
// Returns: "100"

Resources

ecs.js GitHub Repository

View the source code, documentation, and examples for the ecs.js library.

View on GitHub →

ecs.js NPM Package

Install the ecs.js client directly from the NPM registry.

View on NPM →

Build with ECS

Install @nxt3d/ecsjs@0.2.2-beta to integrate ECS with standard ENS resolvers, Hooks support, and simplified credential resolution.

ECS Client Example

// Using @nxt3d/ecsjs v0.2.2-beta
import {
  createECSClient,
  sepolia,
  getResolverInfo,
  resolveCredential
} from '@nxt3d/ecsjs'

// Create client
const client = createECSClient({
  chain: sepolia,
  rpcUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY'
})

// Get resolver info from address (for Hooks)
const { label, resolverUpdated } = await getResolverInfo(
  client,
  '0x9773397bd9366D80dAE708CA4C4413Abf88B3DAa'
)

// Resolve credential directly
const credential = await resolveCredential(
  client,
  '0x9773397bd9366D80dAE708CA4C4413Abf88B3DAa',
  'eth.ecs.name-stars.starts:vitalik.eth'
)
// Returns: "100"

Development Steps

1

Install ECS.js

Install @nxt3d/ecsjs@0.2.2-beta to access the simplified client with ENS Hooks support.

2

Create Standard Resolver

Deploy an ENSIP-10 compatible resolver that serves your credential data.

3

Register Label

Register your label (e.g., my-service) via the ECS Registrar with commit/reveal.

4

Integrate with Hooks

Users can set ENS Hooks to redirect queries to your registered resolver.

ECS GitHub Repository

View the source code, documentation, and examples for the ECS protocol.

View on GitHub →

Testnet Contracts (Sepolia)

Deployment Date: December 5, 2025 |Network: Sepolia (Chain ID: 11155111) |Status: ✅ Live (Deployment 03)

✨ New: Resolvers use EIP-1167 minimal clones (91% gas savings)

Example Resolver (Minimal Clone)

Example Credential:
eth.ecs.name-stars.starts:vitalik.eth
Value: "100"

Supported by

Full Logo