Blockchain utils for 3ID
This package contains a bunch of utilities that is used by 3ID and 3Box in order to create and verify links from blockchain addresses.
$ npm install --save 3id-blockchain-utils
`Usage
Import the package into your project
`js
import { createLink, validateLink, authenticate } from '3id-blockchain-utils'
`Use the library to create and verify links:
`js
const did = 'did:3:bafypwg9834gf...'
const proof = await createLink(did, '0x123abc...', ethereumProvider)
console.log(proof)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:
`js
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 |
Maintainers
@oedAdding 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/. 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 deterministicIt 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.$3
Test the code by running:
`
$ npm test
``