Think of a DID method as a unique recipe for creating and managing DIDs. Each recipe, or DID method, is defined by a specific set of instructions, which we call a DID method specification. Now, let's talk about the specification of the ZK DID Method.

DID Method Name

To create a valid ZK DID, you need a method name, which in this case is 'zk'. Remember, this method name should always be in lowercase.

DID Method Specific Identifiers

Once you have your method name, you combine it with specific identifiers to form a ZK DID. There are two main types of DIDs you can create: Ethereum Virtual Machine(EVM)-based DIDs and Non-EVM-based DIDs.

ZK DID FORMAT.png

EVM Based DIDs in ABNF Language:

For an EVM-based DID, the structure looks like this:

zk-did  = "did:zk:" + <user-ethereum-address>
user-ethereum-address = "0x" 40*HEXDIG

Here is an example: did:zk:0x51fA67337...82EB6a9B22A

Non-EVM-Based DIDs in ABNF Language:

For a Non-EVM-based DID, the structure is slightly different:

zk-did  = "did:zk:" + <non-evm-chain-name>  + [ ":" + <user-address> ]
non-evm-chain-name = "sui" | "aptos" | ...
user-address = [a-zA-Z0-9]{1,64}

Here's an example: did:zk:sui:0xd5059a902ad02b...7ceaf7d6