did:x Method Specification

Author

Preface

The did:x method specification conforms to the requirements specified in the DID specification, currently published by the W3C Credentials Community Group. For more information about DIDs and DID method specifications, please see the DID Primer

Abstract

Decentralized Identifier (DID, see [1]) implementations are, by and large, not meant to be human-readable or memorable. For the most part, this is both deliberate and useful. It allows for the identifiers to be uniformly generated and ultimately be most directly used by machines for verification. But it does suffer the same issues that IP addresses did on the early internet. Ultimately, people are who these tools will serve, and people don’t deal well with long IP addresses, long hexadecimal, or base58 strings.

did:x aims to be for DIDs what DNS was for IP addresses. It accomplishes this by being an alias-only DID method that can point to any other valid DID. It provides personalizable, memorable names that can be fully owned by the controller(s) of an Ethereum (or EVM-compatible) address.

The described DID method allows any Ethereum smart contract or key pair account to own the names in the registry. Further, it allows for associated services to be declared for the did:x DID name (i.e., linked domains, messaging endpoints, etc).

For a reference implementation of this DID method specification see [3].

Target System

The target system is the Ethereum network where the registry is deployed. In the meantime, this only includes Polygon. There are plans in the future to expand this to other EVM-compatible chains.

JSON-LD Context Definition

Since this DID method still supports publicKeyHex and publicKeyBase64 encodings for verification methods, it requires a valid JSON-LD context for those entries.

To enable JSON-LD processing, the @context used when constructing DID documents for did:ethr should be:

"@context": [
  "<https://www.w3.org/ns/did/v1>",
  "<https://w3id.org/security/suites/secp256k1recovery-2020/v2>"
]

You will also need this @context if you need to use EcdsaSecp256k1RecoveryMethod2020 in your apps.

DID Method Name

The namestring that shall identify this DID method is x

A DID that uses this method MUST begin with the following prefix: did:x. Per the DID specification, this string MUST be in lowercase. The remainder of the DID, after the prefix, is specified below.