Skip to main content

Interoperability with Other Decentralized Identity Frameworks

danger

TODO: Are these good interoperability targets? Are there better ones? Is this tutorial useful? Needs complete rethinking. Not tested at all

Introduction​

In this tutorial, we will explore how to achieve interoperability between Veramo and other decentralized identity frameworks such as Hyperledger Indy, Sovrin, or uPort.

Steps​

Prerequisites​

Before you begin, follow the prerequisites for installation and configuration instructions.

1. Integrate with Hyperledger Indy​

To integrate with Hyperledger Indy, you need to use the @veramo/did-provider-hyperledger plugin:

npm install @veramo/did-provider-hyperledger

Configure your Veramo agent to use the Hyperledger Indy provider:

import { createAgent } from "@veramo/core";
import { KeyManager } from "@veramo/key-manager";
import { DIDManager } from "@veramo/did-manager";
import { DIDResolverPlugin } from "@veramo/did-resolver";
import { CredentialIssuer } from "@veramo/credential-w3c";
import { DataStore, DataStoreORM } from "@veramo/data-store";
import { HyperledgerIndyDIDProvider } from "@veramo/did-provider-hyperledger";

export const agent = createAgent({
plugins: [
new KeyManager(),
new DIDManager(),
new DIDResolverPlugin(),
new CredentialIssuer(),
new DataStore(),
new DataStoreORM(),
new HyperledgerIndyDIDProvider({
indyNamespace: "sovrin",
genesisPath: "/path/to/indy-genesis.txn",
poolName: "mainnet",
}),
],
});

2. Integrate with Sovrin​

Sovrin is based on Hyperledger Indy, so the integration process is similar. Ensure you use the appropriate network configuration for Sovrin:

import { HyperledgerIndyDIDProvider } from "@veramo/did-provider-hyperledger";

export const agent = createAgent({
plugins: [
new HyperledgerIndyDIDProvider({
indyNamespace: "sovrin",
genesisPath: "/path/to/sovrin-genesis.txn",
poolName: "mainnet",
}),
],
});

3. Integrate with uPort​

For integrating with uPort, you can use the did:ethr method, as uPort is built on Ethereum:

import { createAgent } from "@veramo/core";
import { KeyManager } from "@veramo/key-manager";
import { DIDManager } from "@veramo/did-manager";
import { DIDResolverPlugin } from "@veramo/did-resolver";
import { CredentialIssuer } from "@veramo/credential-w3c";
import { DataStore, DataStoreORM } from "@veramo/data-store";
import { EthrDIDProvider } from "@veramo/did-provider-ethr";

export const agent = createAgent({
plugins: [
new KeyManager(),
new DIDManager(),
new DIDResolverPlugin(),
new CredentialIssuer(),
new DataStore(),
new DataStoreORM(),
new EthrDIDProvider({
defaultKms: "local",
network: "mainnet",
rpcUrl: "https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID",
}),
],
});