JSPM

did-safe-resolver

0.0.4
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q26003F
  • License (Apache-2.0 OR MIT)

DID Resolver for the Safe method

Package Exports

  • did-safe-resolver

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (did-safe-resolver) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Gnosis Safe DID Resolver

Safe is a DID method that uses the Ceramic network to resolve DID documents for Gnosis Safe See CIP-101

Getting started

This implementation is still a prototype. Contributions are welcome!

Installation

$ npm install safe-did-resolver

Usage

import SafeResolver from 'safe-did-resolver'
import { Resolver } from 'did-resolver'
import Ceramic from '@ceramicnetwork/http-client'

const ceramic = new Ceramic() // connects to localhost:7007 by default

const config: NftResolverConfig = {
  ceramic,
  chains: {
    // Ethereum Mainnet
    'eip155:1': {
      blocks: 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks',
      skew: 15000,
      gnosisSafe: 'https://api.thegraph.com/subgraphs/name/gjeanmart/gnosis-safe-mainnet',
    },
    // Ethereum Ropsten
    'eip155:3': {
      blocks: 'https://api.thegraph.com/subgraphs/name/yyong1010/ethereumblocks',
      skew: 15000,
      gnosisSafe: 'https://api.thegraph.com/subgraphs/name/gjeanmart/gnosis-safe-ropsten',
    },
    // Ethereum Rinkeby
    'eip155:4': {
      blocks: 'https://api.thegraph.com/subgraphs/name/billjhlee/rinkeby-blocks',
      skew: 15000,
      gnosisSafe: 'https://api.thegraph.com/subgraphs/name/radicle-dev/gnosis-safe-rinkeby',
    },
  },
}

// getResolver will return an object with a key/value pair of { 'safe': resolver }
// where resolver is a function used by the generic did resolver.
const safeResolver = SafeResolver.getResolver(config)
const didResolver = Resolver(safeResolver)

const safeResult = await didSafeResolver.resolve(
  'did:safe:eip155:1:0x00044c87ddc54536ee05047c6f4f6f831aba988b'
)
console.log(safeResult)

The resolver supports the following networks by default:

  • Ethereum mainnet (eip155:1),
  • Ethereum Rinkeby (eip155:4),

Testing

$ npm test

DID Specs

The token DIDs are prefixed with did:safe:, followed by method specific identifier, which is simply a CAIP-10 Account ID.

DID: did:safe:{chainId}:{safeAddress}

CAIP-10: {chainId}:{safeAddress}

Conversions

DID->CAIP

const caip = did.substr(8).replace(/_/g, '/')

CAIP->DID

const did = `did:safe:${caip.replace(/\//g, '_')

There are helpers that help you with the conversion:

import { caipToDid, didToCaip, createSafeDidUrl } from 'safe-did-resolver'
import { AccountId } from 'caip'

// CAIP -> DID URL
const didUrl = createSafeDidUrl({
  chainId: 'eip155:1',
  address: '0x1234567891234567891234567891234596351156',
})
// If you use `caip` library in your app, consider using sister `caipToDid` function to
// convert `AccountId` to Safe DID URL.

// DID URL -> CAIP
const accountId = didToCaip(didUrl) // eip155:1/erc721:0x1234567891234567891234567891234596351156/1

License

Apache-2.0 OR MIT