https://github.com/ceramicstudio/safe-did-resolver
Resolver for Gnosis Safe as DID
https://github.com/ceramicstudio/safe-did-resolver
Last synced: 12 months ago
JSON representation
Resolver for Gnosis Safe as DID
- Host: GitHub
- URL: https://github.com/ceramicstudio/safe-did-resolver
- Owner: ceramicstudio
- License: other
- Created: 2021-10-06T11:57:51.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-03-13T21:54:28.000Z (over 3 years ago)
- Last Synced: 2025-05-25T20:18:49.056Z (about 1 year ago)
- Language: TypeScript
- Size: 5.77 MB
- Stars: 3
- Watchers: 5
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
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](https://github.com/ceramicnetwork/CIP/blob/main/CIPs/CIP-101/CIP-101.md)
## Getting started
This implementation is still a prototype. Contributions are welcome!
### Installation
```bash
$ npm install safe-did-resolver
```
### Usage
```typescript
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
```bash
$ 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](https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-10.md).
DID: `did:safe:{chainId}:{safeAddress}`
CAIP-10: `{chainId}:{safeAddress}`
### Conversions
**DID->CAIP**
```typescript
const caip = did.substr(8).replace(/_/g, '/')
```
**CAIP->DID**
```typescript
const did = `did:safe:${caip.replace(/\//g, '_')
```
There are helpers that help you with the conversion:
```typescript
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