The purpose of this document is to outline how someone can create a Resource on the cheqd network using cheqd Cosmos CLI . The process that's followed is similar to what's described in the high-level Resource creation flow .
Pre-requisites
Creating a new Resource linked to a DID
1. Create a new DID + DIDDoc
Note: If you already have a DIDDoc and corresponding keys, you can skip this step.
To create a DIDDoc, you can follow the instructions to create a DID with cheqd Cosmos CLI .
Let's assume the DID for the DIDDoc is as follows:
did:cheqd:mainnet:6h7fjuw37gbf9ioty633bnd7thf65hs1
2. Create a UUID for the Resource
UUIDs are used to identify Resources . On Unix systems, the uuidgen
tool can be used to generate a new UUID:
Copy $ uuidgen
e7b662f8-d3f8-4a83-bd00-2cdcd6cc50ab
3. Prepare a file with Resource content
Resource content should be placed in a file and stored locally.
Command
Copy cheqd-noded tx resource create [payload-file] [resource-data-file] [flags]
Understanding Resource Fees
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:
JSON fileWithin the payload file the amount should be specified as:
This equates to 2.5 CHEQ.
Image fileWithin the payload file the amount should be specified as:
This equates to 10 CHEQ.
Default (any other) fileWithin the payload file the amount should be specified as:
This equates to 5 CHEQ.
Parameters
payload-file
- file with JSON formatted payload. The format and structure can be found in example
resource-data-file
- file which will be sent to the ledger as a data
. Can be a picture or an image or whatever you want.
flags
- additional parameters like, --gas
or --from
.
Example input:
Copy cheqd-noded tx resource create \
--chain-id cheqd \
--keyring-backend test \
--output json \
--fees 2500000000ncheq \
--gas auto \
--gas-adjustment 1.8 \
--from base_account \
[payload.json] [resource.json]
where payload.json
is:
Copy {
"payload" : {
"data" : null ,
"collectionId" : "b0ca0b75-ca6a-4674-a261-45f6dd0c9c77" ,
"id" : "5e16a3f9-7c6e-4b6b-8e28-20f56780ee25" ,
"name" : "TestResource" ,
"version" : "1.0" ,
"resourceType" : "TestType" ,
"alsoKnownAs" : []
} ,
"signInputs" : [
{
"verificationMethodId" : "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1" ,
"privKey" : "y4B5qis9BXUq/mODsrWtS3q5ejOk/okSIXlX1/a9HvuG3PgYmekfQmq3QhJ4JSzN/rkiGCQDNKoTXMmxuXDHbg=="
}
]
}
After you execute the command, you will receive "code": 0"
if the resource was successfully written to the ledger.
Otherwise, the raw_logs
field in the response can help figure out why something went wrong. For example:
Copy {
"code" : 1201 ,
"data" : "" ,
"raw_log" : "failed to execute message; message index: 0: id:cheqd:testnet:fcbarcelona: DID Doc not found"
}
4. Check that new Resource version was successfully written to the ledger
Finally, to check that the resource was successfully written, we can use the following query:
Copy cheqd-noded query resource specific-resource \
< collection-i d > \
< resource-i d > \
--node https://rpc.cheqd.network:443
Parameters
<collection-id>
: The same unique identifier as that after the namespace of the corresponding DID created in step 1
<resource-id>
: Unique ID of the resource within the collection of resources associated with the DIDDoc
Example input:
Copy cheqd-noded query resource specific-resource \
c82f2b02-bdab-4dd7-b833-3e143745d612 \
3e6bd814-6851-4c8a-b114-c64f035ef590 \
--node https://rpc.cheqd.net:443 --output json
Ouput:
Copy {
"resource" : {
"resource" : {
"data" : "..."
} ,
"metadata" : {
"collectionId" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"name" : "EventBrite Logo" ,
"version" : "" ,
"resourceType" : "image/png" ,
"alsoKnownAs" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"description" : "did-url"
}
] ,
"mediaType" : "image/svg+xml" ,
"created" : "2022-11-17T10:35:23Z" ,
"checksum" : "a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559" ,
"previousVersionId" : "" ,
"nextVersionId" : ""
}
}
}
Notice that both previous_version_id
and next_version_id
are empty now cause there is only one resource in such collection c82f2b02-bdab-4dd7-b833-3e143745d612
.
5. Additional queries to the ledger
There are also 2 annother commands for getting resource from ledger depending what the actual info is needed.
Get metadata
Here is the command which allows to get only metadata information without getting the whole resource. The format of call is:
Copy cheqd-noded query resource metadata [collection-id] [resource-id] [flags]
Parameters collection-id
and resource-id
have the same meaning as before.
Example input:
Copy cheqd-noded query resource metadata \
c82f2b02-bdab-4dd7-b833-3e143745d612 \
3e6bd814-6851-4c8a-b114-c64f035ef590 \
--node https://rpc.cheqd.net:443 --output json
Output:
Copy {
"resource" : {
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"name" : "EventBrite Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"description" : "did-url"
}
] ,
"media_type" : "image/svg+xml" ,
"created" : "2022-11-17T10:35:23Z" ,
"checksum" : "a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559" ,
"previous_version_id" : "" ,
"next_version_id" : ""
}
}
Get collection of resources
For querying all the resources but only metadata there is a special command:
Copy cheqd-noded query resource collection-metadata [collection-id] [flags]
As the main parameter it requires only collection-id
.
Example input:
Copy cheqd-noded query resource collection-metadata c82f2b02-bdab-4dd7-b833-3e143745d612 --node https://rpc.cheqd.net:443 --output json
Ouput:
Copy {
"resources" : [
{
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"name" : "EventBrite Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/3e6bd814-6851-4c8a-b114-c64f035ef590" ,
"description" : "did-url"
}
] ,
"media_type" : "image/svg+xml" ,
"created" : "2022-11-17T10:35:23Z" ,
"checksum" : "a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559" ,
"previous_version_id" : "" ,
"next_version_id" : ""
} ,
{
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "9447c669-0ba1-4989-bd10-a85cc298aace" ,
"name" : "Discord Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/9447c669-0ba1-4989-bd10-a85cc298aace" ,
"description" : "did-url"
}
] ,
"media_type" : "image/png" ,
"created" : "2022-11-17T10:35:51Z" ,
"checksum" : "b2939df5a48f422fc9d62f270c182f07b5fd5a7a334478ea73af4fdb5eb12d3b" ,
"previous_version_id" : "" ,
"next_version_id" : ""
} ,
{
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "ba4d1a8b-6395-4b96-8492-aaf2800d5727" ,
"name" : "Twitter Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/ba4d1a8b-6395-4b96-8492-aaf2800d5727" ,
"description" : "did-url"
}
] ,
"media_type" : "image/png" ,
"created" : "2022-11-17T10:36:26Z" ,
"checksum" : "aeb8f203a6a21cca668c5c8983dfe86b3cf95add102305da8208100595d69800" ,
"previous_version_id" : "" ,
"next_version_id" : ""
} ,
{
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "cb3f5f64-c138-4309-b9ea-8d658b0ae28e" ,
"name" : "IIW Event Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/cb3f5f64-c138-4309-b9ea-8d658b0ae28e" ,
"description" : "did-url"
}
] ,
"media_type" : "image/png" ,
"created" : "2022-11-17T10:36:37Z" ,
"checksum" : "d48e158b915eae31ba2db640bd4aac7f82179ee5ca0263a8fe99012d4b02cf48" ,
"previous_version_id" : "" ,
"next_version_id" : ""
} ,
{
"collection_id" : "c82f2b02-bdab-4dd7-b833-3e143745d612" ,
"id" : "e2651dd2-7ca7-44f1-9ba5-57a77747d9b4" ,
"name" : "GitHub Logo" ,
"version" : "" ,
"resource_type" : "image/png" ,
"also_known_as" : [
{
"uri" : "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612/resources/e2651dd2-7ca7-44f1-9ba5-57a77747d9b4" ,
"description" : "did-url"
}
] ,
"media_type" : "image/png" ,
"created" : "2022-11-17T10:36:09Z" ,
"checksum" : "22ed95ff774cee8427c86b60288af4077b3b26424c758bec95a34aa8b7a88937" ,
"previous_version_id" : "" ,
"next_version_id" : ""
}
] ,
"pagination" : null
}
Congratulations! You've successfully created a resource on cheqd ledger; hopefully, the first of many.