Skip to content

Integrate Polygon DID

This is a startup guide for users who wish to use the implementation packages published by Polygon team, to generate and publish a Polygon Decentralized Identifier (DID) on the Polygon ledger.

The Polygon DID method implementation comprises of 3 packages:

  • polygon-did-registrar
  • polygon-did-resolver
  • polygon-did-registry-contract

A user who wants to incorporate the functionality to register or read a DID on the Polygon network can follow the guide provided below.

A DID is essentially a unique identifier, that has been created without the presence of a central authority. DID in context of Verifiable Credentials is used to sign documents, thereby facilitating the user to prove ownership of the document when required.

Polygon DID method

The Polygon DID method definition conforms to the DID-Core specifications and standards. A DID URI is composed of three components separated by colons, the scheme, followed by the method name and finally a method specific identifier. For Polygon the URI looks like:

did:polygon:<Ethereum address>

Here the scheme is did, method name is polygon and method specific identifier is an ethereum address.

Polygon DID implementation

Polygon DID can be implemented with help of two packages, user can import the respective npm libraries and use them to incorporate Polygon DID methodologies in their respective applications. Details for implementation are provided in next section.

To get started, one first needs to create a DID. Creation in case of Polygon DID is an encapsulation of two steps, first where a user needs to generate a DID uri for themselves and next register it on the Polygon chain.

Create DID

In your project to create a polygon DID URI one first needs to install:

npm i @ayanworks/polygon-did-registrar --save

Once the installation is completed, the user can use it as follows:

import { createDID } from "@ayanworks/polygon-did-registrar";

The createdDID function helps user generate a DID URI. While creating a DID, there can be two scenarios.

  1. The user already owns a wallet and wishes to generate a DID corresponding to the same wallet.

    const {address, publicKey58, privateKey, DID} = await createDID(network, privateKey);
  2. If the user does not have an existing wallet and wants to generate one, the user can use:

    const {address, publicKey58, privateKey, DID} = await createDID(network);

The network parameter in both cases refers to whether the user wants to create the DID on Polygon Amoy testnet or Polygon mainnet.

Sample input:

network :"testnet | mainnet"
privateKey? : "0x....."

After creating DID, you will have a DID URI generated.

DID mainnet: did:polygon:0x...
DID testnet: did:polygon:testnet:0x...

Register DID

To register the DID URI and the corresponding DID document on ledger, the user first needs to use polygon-did-registrar as follows:

import { registerDID } from "@ayanworks/polygon-did-registrar";

As a prerequisite to registering DID, the user needs to make sure that the wallet corresponding to the DID has the necessary tokens balance available. Once the user has a token balance in the wallet, a call can be made to the registerDID functionality as shown below:

const txHash = await registerDID(did, privateKey, url?, contractAddress?);

Parameters did and privateKey are mandatory, while it is optional to enter the url and the contractAddress. If the user does not give the last two parameters, the library picks up the default configurations of the network from the DID URI.

If all the parameters match the specifications and everything is given in correct order, the registerDID function returns a transaction hash, a corresponding error is returned otherwise.

And with this, you have successfully completed your task of registering a DID on the Polygon Network.

Resolve DID

To start, install the following libraries:

npm i @ayanworks/polygon-did-resolver --save
npm i did-resolver --save

To read a DID document registered on ledger, any user with a DID polygon URI can first in their project import,

import * as didResolvers from "did-resolver";
import * as didPolygon from '@ayanworks/polygon-did-resolver';

After importing the packages, the DID document can be retrieved by using:

const myResolver = didPolygon.getResolver()
const resolver = new DIDResolver(myResolver)

const didResolutionResult = this.resolver.resolve(did)

where the didResolutionResult object is as follows:


Resolve DIDs for free

No gas cost will be entailed by the user while trying to resolve a DID.

Update DID document

To encapsulate the project with the ability to update the DID document, the user first needs to use polygon-did-registrar as follows:

import { updateDidDoc } from "@ayanworks/polygon-did-registrar";

Next, call the function:

const txHash = await updateDidDoc(did, didDoc, privateKey, url?, contractAddress?);

It should be noted that to update the DID document, only the owner of DID can send the request. The private key here should also hold some corresponding MATIC tokens.

If the user does not provide the configuration with url and contractAddress, the library picks up the default configurations of the network from the DID URI.

Delete DID document

With Polygon DID implementation a user can also revoke his DID Document from the ledger. The user first needs to use polygon-did-registrar as follows:

import { deleteDidDoc } from "@ayanworks/polygon-did-registrar";

Then use,

const txHash = await deleteDidDoc(did, privateKey, url?, contractAddress?);

Amongst the parameters it is notable that, url and contractAddress are optional parameters, which if not provided by the user, a default configuration will be picked up by the function based on the DID URI.

It is important for the private key to hold the necessary Matic tokens, as per the network configuration of DID, or the transaction would fail.

Contributing to the repository

Use the standard fork, branch, and pull request workflow to propose changes to the repositories. Please make branch names informative by including the issue or bug number for example.