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