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",
}),
],
});