This is an advanced guide for those who want to develop applications that directly interact with the ledger code.
Most developers should start with our pre-built SDKs such as Veramo SDK for cheqd or the cheqd-node Cosmos CLI.
The ledger code package cheqd-node
is based on Cosmos SDK and uses the same module-based approach that is does.
There are two custom modules on cheqd ledger related to identity functionality:
cheqd
module, for everything related to Decentralized Identifiers (DIDs)resource
module, for DID-Linked Resources
If your application is Golang-based, it's extremely easy to consume cheqd-node
as a Golang module.
Just as in Cosmos SDK, cheqd-node uses Protobufs to encode and exchange information. These can be found in the proto
directory on cheqd-node
repository.
Generated/built Protobuf for repeatable builds are also published to the cheqd
repository on Buf.build.
Types and utilities are available for re-use for each module as well. The utils
include functions for working with these custom modules, validation logic, etc.
cheqd
(DID) moduleresource
module
After compiling a message (in your custom application), you can make a gRPC call to the ledger with your message.
cheqd DID Resolver is a real-world example of a Golang app built using
cheqd-node
primitivesThis allowed us to decouple DID Resolution logic from the ledger, while re-utilising existing code.
In general, the process building applications that work with cheqd in other languages follows very similar logic as described above for Golang apps.
Example 1: Veramo SDK for cheqd
Veramo SDK for cheqd combines the base NPM packages mentioned above to integrate cheqd ledger functionality into the 3rd party Veramo SDK.
The high-level steps are:
- Consume Protobofs for cheqd: Our Buf.build packages for cheqd can make this take simpler for many languages. A real-world example of this is the
@cheqd/ts-proto
TypeScript NPM package. - Prepare and sign the message correctly: This relies partly on understanding general Cosmos SDK message format and transaction signing, as well as any cheqd-specific bits. A real-world example of this is the
@cheqd/sdk
NPM package that consumes@cheqd/ts-proto
NPM package. - Send the message to ledger using gRPC/RPC: Once a message/transaction is correctly compiled and signed, standard transport libraries can be used to target the gRPC/RPC endpoints for a
cheqd-node
instance.
Example 2: Evernym VDR Tools
Evernym's VDR Tools SDK is an independent implementation written in Rust that integrates some cheqd ledger functionality.