Tyron's W3C DID Scheme

A DID Scheme is the formal syntax of a Decentralized Identifier.

It is a URI scheme conformant with RFC3986, Uniform Resource Identifier (URI): Generic Syntax.

The following is the ABNF definition using the syntax in RFC5234, "Augmented BNF for Syntax Specifications: ABNF":

Generic rule names not defined there, are defined in RFC3986.

did                     = "did:" method-name ":" method-specific-id

method-name             = 1*method-char

method-char             = %x61-7A / DIGIT

method-specific-id      = *( *idchar ":" ) 1*idchar

idchar                  = HEXDIG

HEXDIG                  = DIGIT / "a" / "b" / "c" / "d" / "e" / "f"

DIGIT                   = %x30-39

Both the scheme identifier (did) and the method name MUST be an ASCII lowercase string.

This DID Method defines its method-name as "tyron" and the method-specific-id syntax as hierarchically partitioned:

method-name             = "tyron"

method-specific-id      = blockchain-namespace ":" network-namespace ":" did-suffix

blockchain-namespace    = "zil:"

network-namespace       = "main:" / "test:"

did-suffix              = 1*idchar

Example of a Tyron Decentralized Identifier:


DID Suffix

The DID Suffix MUST be globally unique. A Tyron DID Suffix is the Zilliqa hex-encoded address of the corresponding DID smart contract.

Every Zilliqa address is unique. As explained in Zilliqa's white-paper, the "address for a contract account is computed from the address of its creator and how many transactions the creator account has sent, aka account nonce":

contract_address = LSB160(SHA3-256(address||nonce))


  • LSB160() returns the rightmost 160 bits of the input;
  • SHA3-256() is the SHA-3 hash function that produces 256-bit digests;
  • address is the address of the creator account; and
  • nonce is the creator’s nonce value.


The Tyron DID Scheme gets implemented by the DidScheme procedure of the DID smart contract that generates the Decentralized Identifier and its Tyron Hash.

On testnet:

procedure DidScheme()
    this_did =
        let did_prefix = "did:tyron:zil:test:" in
        let did_suffix = builtin to_string _this_address in
        builtin concat did_prefix did_suffix;
    decentralized_identifier := this_did;
    this_th =
        let hash = builtin sha256hash this_did in
        builtin to_bystr hash;
    th = Some{ByStr} this_th;
    tyron_hash := th


  • The DID Scheme name (did) MUST be lowercase.
  • The DID Method name (tyron) MUST be lowercase.
  • Tyron's specific-id MUST follow the rules stated above.


A Tyron DID is bound exclusively and permanently to a single subject, known as the contract_owner, even after deactivation.