Direct interaction with ledger code

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:

  1. cheqd module, for everything related to Decentralized Identifiers (DIDs)

  2. resource module, for DID-Linked Resources

Developing Golang apps for cheqd

If your application is Golang-based, it's extremely easy to consume cheqd-node as a Golang module.

Encoding & Utilities

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

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.

Sending transactions to ledger

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 primitives

This allowed us to decouple DID Resolution logic from the ledger, while re-utilising existing code.

Developing in other languages for cheqd

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:

  1. Consume Protobofs for cheqd: Our 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.

  2. 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.

  3. 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.

Last updated