Blockchain utils for 3ID

Usage no npm install needed!

<script type="module">
  import idBlockchainUtils from 'https://cdn.skypack.dev/3id-blockchain-utils';



standard-readme compliant CircleCI npm npm Codecov

This package contains a bunch of utilities that is used by 3ID and 3Box in order to create and verify links from blockchain addresses.

Tabel of Contents


$ npm install --save 3id-blockchain-utils


Import the package into your project

import { createLink, validateLink, authenticate } from '3id-blockchain-utils'

Use the library to create and verify links:

const did = 'did:3:bafypwg9834gf...'
const proof = await createLink(did, '0x123abc...', ethereumProvider)

const verified = await validateLink(proof)
if (verified) {
  console.log('Proof is valid', proof)
} else {
  console.log('Proof is invalid')

Use the library for 3ID authenticate:

await authenticate(message, '0x123abc...', ethereumProvider)

Supported blockchains

Below you can see a table which lists supported blockchains and their provider objects.

Blockchain CAIP-2 namespace Supported providers
Ethereum eip155 metamask-like ethereum provider
Filecoin fil Filecoin Wallet Provider



Adding support for a blockchain

If you want to add support for a new blockchain to 3ID this is the place to do so. This library uses CAIP-10 to represent accounts in a blockchain agnostic way. If the blockchain you want to add isn't already part of the CAIP standards you shold make sure to add it there.

To begin adding support for a given blockchain add a file with the path: src/blockchains/<blockchain-name>.js. This module needs to export three functions:

  • createLink - creates a LinkProof object which associates the specified AccountID with the DID
  • validateLink - validates the given LinkProof
  • authenticate - signs a message and returns some entropy based on the signature. Needs to be deterministic

It also needs to export a constant called namespace. This constant is a string which contains the CAIP-2 chainId namespace.

Please see src/blockchains/ethereum.js for an example of how this is implemented for the eip155 (ethereum) CAIP-2 namespace.

Finally add support for your blockchain in src/index.js. Simply add it to the handlers array.


Test the code by running:

$ npm test


Apache-2.0 OR MIT