Skip to content

ProjectLibertyLabs/dsnp-did-resolver-frequency

Repository files navigation

Overview

This package contains a plugin for the @dsnp/did-resolver library which enables resolution of did:dsnp:* DIDs on the Frequency blockchain.

Usage

The plugin must be initialized with Frequency connection information.

import { pluginInit, pluginDestroy } from "@dsnp/did-resolver-plugin-frequency";

await pluginInit({
  providerUri: "ws://127.0.0.1:9944",
  frequencyNetwork: "local",
});

The plugin will automatically register itself with the DSNP DID resolver when initialized.

The following options must be provided:

Configuration option Description
providerUri Provider URI for Frequency RPC node
frequencyNetwork One of local, testnet, mainnet

See .env.example for example configuration.

Here's a full usage example with the DID resolver framework:

import { Resolver } from "did-resolver";
import dsnp from "@dsnp/did-resolver"; 
import { pluginInit, pluginDestroy } from "@dsnp/did-resolver-plugin-frequency";

await pluginInit({
  providerUri: "wss://rpc.rococo.frequency.xyz",
  frequencyNetwork: "testnet"
});

const resolver = new Resolver(dsnp.getResolver());
const myDid = "did:dsnp:13972";
const result = await resolver.resolve(myDid);
console.log(JSON.stringify(result, null, 2));

await pluginDestroy();

/* Example output:
{
  "didResolutionMetadata": {
    "contentType": "application/did+ld+json"
  },
  "didDocument": {
    "@context": [
      "https://www.w3.org/ns/did/v1"
    ],
    "id": "did:dsnp:13972",
    "assertionMethod": [
      {
        "@context": [
          "https://w3id.org/security/multikey/v1"
        ],
        "id": "did:dsnp:13972#z6MkuzE4hBVHTmwFff37ZuPQs9sbkdJo8jifN9sZ1jXbgyMp",
        "type": "Multikey",
        "controller": "did:dsnp:13972",
        "publicKeyMultibase": "z6MkuzE4hBVHTmwFff37ZuPQs9sbkdJo8jifN9sZ1jXbgyMp"
      }
    ]
  },
  "didDocumentMetadata": {}
}
*/

CLI

The example above is provided as a command line script.

cp .env.example .env
npm run resolve -- 13972

Features

Currently this plugin implements the minimal functionality required to support lookup of public keys by DSNP applications.

  • DSNP public keys with keyType 1 are listed in the keyAgreement array.
  • DSNP public keys with keyType 2 are listed in the assertionMethod array.

Public keys are encoded using the Multikey type. The id consists of the DSNP DID and a URL fragment that is the same as the publicKeyMultibase value, which is a multicodec value in base58btc encoding. The decoded value for ed25519-pub keys will be 34 bytes, including the two-byte multicodec identifier.

Known issues

  • The resolver currently responds with a DID document for any valid-looking DSNP DID. It should return a notFound error if there is no corresponding Frequency MSA.