Create DID-Linked Resources (DLRs) linked to Decentralized Identifiers (DIDs) on cheqd using Veramo.
"DID-Linked Resources" are identified with a did:cheqd Decentralized Identifier with a Universally Unique Identifier (UUID) that acts as a permanently-accessible link to fetch the resources from the cheqd ledger. We refer to this as the "resource ID". Through the "resource ID" or a set of DID URL query parameters, applications are able to persistently access a digital resource on the cheqd network.
Use the tutorials below to start creating DID-Linked Resoures using Veramo.
Below are a list of alternatives for creating cheqd DID-Linked Resources.
Create a new DID-Linked Resource (DLR) within an existing collection of DLRs, through specifying the same resourceName and resourceType.
Follow this tutorial to generate keys and create a DID.
Follow this tutorial to create the first version of the resource.
Follow exactly the same steps as the first resource. Note that to create a new resource version which belongs to the same set as a previous resource, in the you must specify the same:
collectionId
name
resourceType
Each resource in such a set has a link to the previous version (except the first version) and the next version (if it's not the most recent version).
New versions have dedicated unique IDs and can be referenced and retrieved as any other resources.
Follow the same tutorial as for resource creation, but use the same collectionId, name and resourceType as for the previous Resource version.

cheqd Cosmos CLI
Cosmos-native CLI for creating transactions on cheqd. Should be used for testing purposes only.

Follow this tutorial to generate keys and create a DID.
DID-Linked Resources can be any type of file or content that is below ~200kb in size.
For the purpose of an example, lets use an AnonCreds schema (JSON file) as the resource:
Save this file locally and call it something like resource.json.
UUIDs are used to identify DID-Linked Resources. On Unix systems, the uuidgen tool can be used to generate a new UUID:
Prepare a file with resource and encode it into base64. On Unix systems, you can use the following command input:
Expected output:
You will need to paste the output of the Base64 into the data field of the payload.json file as shown in step 5.
Once you have saved your Resource file locally, you can copy the path and enter it in the file field of the payload.json file as shown in step 5.
Before carrying out a Resource transaction, you will need to prepare the payload.json file. This file can be saved wherever you choose, but the location must be specified in the create Resource command. (By default, it will be saved under the project root directory.)
kms (default local): Key Management System (KMS) to be used for storage;
payload: Resource definition
collectionId: The last fragment of the corresponding DIDDoc
id: Use output from the previous step here
name: Arbitrary human-readable string used to identify the resource
resourceType: Resource type, such as CL-Schema, JSONSchema2020, etc
version: (Optional) client-given resource version
alsoKnownAs: (Optional) alternative URI(s) provided for the resource
data: (Optional) base64 encoded data of resource file
signInputs: Keys used to sign the corresponding DIDDoc. These must match the ones specified in the DIDDoc, otherwise an error will be thrown
verificationMethodId: Verification method ID from DIDDoc where key is published
keyType should match values that you used to create the DIDDoc
file: (Optional) path to resource file
fee:
amount: An array of coins, coins are represented as an object with 2 fields
denom: ncheq (smallest denomination classification)
The Payload file can include a Resource passed either as a file or a base64 encoded string:
The fee for a resource transaction changes depending on the file type being passed to the ledger. Currently there are three different variations on the fee:
Note that transaction fees are paid by the cheqd account set in the
agent.ymlconfiguration file, setup here. If you do not specify a fee in the transaction, the ledger will automatically deduct the appropriate fee from the account set in youragent.ymlconfiguration. Each of cheqd's on-ledger identity transactions has a fixed fee, the pricing for cheqd DIDs and DID-Linked Resources can be found here. If your account has insufficient balance the transaction will fail.
If you do not specify the --argsFile in the previous step, you can also paste a JSON inline argument object by using the --argsJSON flag followed by the JSON payload.
{
"kms": "local",
"payload": {
"collectionId": "d3e515cf-81af-40cb-9ac1-154827986d29", // unique ID of associated 'parent' DID
"id": "e7b662f8-d3f8-4a83-bd00-2cdcd6cc50ab",
"name": "TestResource",
"resourceType": "JsonDocument",
"version": "",
"alsoKnownAs": [],
"data": "SGVsbG8sIHdvcmxk" // note that the base64 encoded content is passed here
},
"network": "testnet",
"signInputs": [{
"verificationMethodId": "did:cheqd:testnet:d3e515cf-81af-40cb-9ac1-154827986d29#key-1",
"keyType": "Ed25519",
"privateKeyHex": "0f5c124886178037952e87e0cdc55d185732577fca19ae877e64ac9ab24a0cc534e5326e70f1a42d785d93048aee806c359ec75a7b06f39253befd1746708438"
}],
"fee": {
"amount": [{
"denom": "ncheq",
"amount": "2500000000" // 2.5 CHEQ is the fixed fee for a JSON transaction
}],
"gas": "1000000",
"payer": "cheqd1rnr5jrt4exl0samwj0yegv99jeskl0hsxmcz96" // must match the account set in the agent.yaml file
}
}{
"kms": "local",
"payload": {
"collectionId": "d3e515cf-81af-40cb-9ac1-154827986d29",
"id": "e7b662f8-d3f8-4a83-bd00-2cdcd6cc50ab",
"name": "TestResource",
"resourceType": "JsonDocument"
"version": "",
"alsoKnownAs": []
},
"network": "testnet",
"signInputs": [{
"verificationMethodId": "did:cheqd:testnet:d3e515cf-81af-40cb-9ac1-154827986d29#key-1",
"keyType": "Ed25519",
"privateKeyHex": "0f5c124886178037952e87e0cdc55d185732577fca19ae877e64ac9ab24a0cc534e5326e70f1a42d785d93048aee806c359ec75a7b06f39253befd1746708438"
}],
"file": "/path/to/resource.json", // note that the resource passed as file is inputted here
"fee": {
"amount": [{
"denom": "ncheq",
"amount": "2500000000" // 2.5 CHEQ is the fixed fee for a JSON transaction
}],
"gas": "1000000",
"payer": "cheqd1rnr5jrt4exl0samwj0yegv99jeskl0hsxmcz96" // must match the account set in the agent.yaml file
}
}{
"name": "degreeSchema",
"version": "1.5.7",
"attrNames": ["name", "age", "degree", "grade"]
}$ uuidgen
e7b662f8-d3f8-4a83-bd00-2cdcd6cc50ab$ base64 -w 0 resource.json
<path-to-the-resource-file>$ base64 -w 0 resource.json
SGVsbG8sIHdvcmxkveramo execute -m cheqdCreateLinkedResource --argsFile path/to/payload.jsonprivateKeyHex should match values that you used to create the DIDDoc
amount: See section below on fees
gas: Each transaction must specify the maximum amount of gas it may consume.
payer (Optional): The cheqd fee payer address
granter (Optional): The cheqd fee granter address, Provided the grantee has an allowance by the granter