This library is intended to be used in conjunction with the did-stellar-registry smart contract, to resolve stllr DIDs into a DID Document.
It supports the Decentralized Identifiers Specification.
The full did method specification is outlined in docs/did-method-spec.md
This library is currently in development and is not yet ready for production use.
The library relies on the did-resolver library.
Since soroban is currently not on mainnet, the resolver will only work on futurenet.
To encode a DID for a Stellar account, the following format is used, since the app is currently only on the futurenet network, if the network identifier is not included it defaults to futurenet.
did:stllr:<stellar_address>
for example:
did:stllr:GAICHJM4OUNAVKALCO2ANSXVSOD7Z2UTXE55R5RY3RX352LSJC6SYZXV
Multiple networks are also supported by adding the network identifier after the stllr
method name:
did:stllr:03:GAICHJM4OUNAVKALCO2ANSXVSOD7Z2UTXE55R5RY3RX352LSJC6SYZXV
uses the futurenet network.
Stellar currently only uses Ed25519 Keys, so the verification method is always of type JsonWebKey2020
and the publicKeyJwk
field is always present, with a type of OKP
and a curve of Ed25519
.
{
'@context': ['https://www.w3.org/ns/did/v1', 'https://w3id.org/security/suites/jws-2020/v1'],
id: did,
verificationMethod: [
{
id: `${did}`,
type: 'JsonWebKey2020',
controller: `did:stllr:${owner.toString()}`,
publicKeyJwk: {
kty: 'OKP',
crv: 'Ed25519',
x: '9GXjPGGvmRq9F6Ng5dQQ_s31mfhxrcNZxRGONrmH30k'
}
}
]
}
To use this library you can pass it to the did-resolver library:
import { Resolver } from "did-resolver";
import { getResolver } from "stllr-did-resolver";
const stllrDidResolver = getResolver();
const didResolver = new Resolver(stllrDidResolver);
didResolver
.resolve("did:stllr:GAICHJM4OUNAVKALCO2ANSXVSOD7Z2UTXE55R5RY3RX352LSJC6SYZXV")
.then((doc) => console.log(doc));
To use a different network, you can pass in the network identifier as the second parameter:
import { Resolver } from "did-resolver";
import { getResolver } from "stllr-did-resolver";
const stllrDidResolver = getResolver();
const didResolver = new Resolver(stllrDidResolver);
didResolver
.resolve("did:stllr:2:GAICHJM4OUNAVKALCO2ANSXVSOD7Z2UTXE55R5RY3RX352LSJC6SYZXV")
.then((doc) => console.log(doc));