@indexas/key-did-provider-secp256k1-with-lit
v0.0.32
Published
secp256k1 key did provider
Downloads
6
Readme
secp256k1 key did provider with Lit Actions x PKP powered by Lit Protocol
This is a DID
provider which integrated Lit Actions x PKP powered by Lit Protocol for did:key
using secp256k1
. It does not support encryption / JWE. It's a fork from symfoni/key-did-provider-secp256k1 and was designed to be used with Ceramic Network.
What it does?
Instead of manually providing a
PUBLIC_KEY
to get theDID
(decentralised identifier), this SDK gets thePUBLIC_KEY
from thePKP
NFTThe
DID
that we got is then passed into a resolver, which would allow us to run methods such asdid.authenticate()
.To authenticate, instead of providing a
PRIVATE_KEY
to sign a message to verify the signature from the signed message matches the correspondingPUBLIC_KEY
, we will ask the Lit nodes, who hold thePRIVATE_KEY
collectively of thePKP
NFT, to execute some static Javascript code that is hosted on IPFS and use the output signature to verify.So now that
PKP
NFT owns the decentralised identifierDID
, we can use thisDID
in Ceramic to read & write stream that only thisPKP
NFT owner can do.
Installation
yarn add @indexas/key-did-provider-secp256k1-with-lit
Usage
import {
encodeDIDWithLit,
Secp256k1ProviderWithLit,
} from "key-did-provider-secp256k1-with-lit";
import { CeramicClient } from "@ceramicnetwork/http-client";
import { TileDocument } from "@ceramicnetwork/stream-tile";
import { getResolver } from "key-did-resolver";
import { DID } from "dids";
const ceramic = new CeramicClient("https://ceramic-clay.3boxlabs.com");
const PKP_PUBLIC_KEY = "30eceb963993d467ca197f3fd9fe3073b8b224ac2c9068d9a9caafcd5e20cf983";
// -- get your encode did with your PKP public key
const encodedDID = await encodeDIDWithLit(PKP_PUBLIC_KEY);
// -- static lit action code hosted on https://ipfs.io/ipfs/QmYrfiMf6TDuU3NiTbZANiELNBCyn2f66Zok3gEuzRTYmL
const provider = new Secp256k1ProviderWithLit({
did: encodedDID,
ipfsId: "QmYrfiMf6TDuU3NiTbZANiELNBCyn2f66Zok3gEuzRTYmL",
});
const did = new DID({ provider, resolver: getResolver() });
// -- authenticate
await did.authenticate();
ceramic.did = did;
console.log("DID:", did);
// -- write to ceramic stream
const doc = await TileDocument.create(ceramic, "Hola hola ¿Cómo estás?");
console.log("Doc/StreamID:", doc.id.toString());
// -- read a ceramic stream
var loadDoc = await TileDocument.load(ceramic, doc.id.toString());
console.log("Specific doc:", loadDoc.content);
License
Apache-2.0 OR MIT