The purpose of this document is to describe how an existing DID (and associated DIDDoc) can be updated using the cheqd-node
Cosmos CLI.
NOTE: The procedures below are only recommended for development purposes!
Using
cheqd-node
Cosmos CLI for real-world production usage is not recommended, since the identity keys are passed in raw form to the CLI. This is fine in development/testing usage, but is not recommend for mainnet.Developers are encouraged to use production-grade CLI tools such as Veramo SDK for cheqd or look at our developer guide on how to integrate custom applications.
- Learn how to create a DID with cheqd Cosmos CLI
- Query an existing DID/DIDDoc with cheqd Cosmos CLI
- Given this procedure below is intended for development/training purposes, we assume that the user stores their public/private keys safely during the DID creation process and has access to it.
- Updating a DIDDoc requires the full updated DIDDoc to be sent. Only the updated/changed parts cannot be sent. This accounts for scenarios where the DIDDoc may have been updated on ledger, but the local copy is not synced with the latest changes.
Use a text editor like nano
to edit the body of the DIDDoc (the example below assumes it's saved in a file called payload.json
).
nano payload.json
For example, we can take the DIDDoc created previously and change the Service Endpoint from bar.example.com
to foo.example.com
:
{
"id": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77",
"verificationMethod": [
{
"id": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1",
"type": "Ed25519VerificationKey2018",
"controller": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77",
"publicKeyBase58": "4Q41kvWsd1JAuPFBff8Dti7P6fLbPZe3Nmod35uua9TE"
}
],
"authentication": [
"did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1"
],
"service": [{
"id":"did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#linked-domain",
"type": "LinkedDomains",
"serviceEndpoint": [
"https://foo.example.com"
]
}]
}
As in flow with creating DID-Document we need to compile payload.json
file with private key inside and pass it to the CLI. The result JSON in our example will look liks:
{
"payload": {
"id": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77",
"verificationMethod": [
{
"id": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1",
"type": "Ed25519VerificationKey2018",
"controller": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77",
"publicKeyBase58": "4Q41kvWsd1JAuPFBff8Dti7P6fLbPZe3Nmod35uua9TE"
}
],
"authentication": [
"did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1"
],
"service": [{
"id":"did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#linked-domain",
"type": "LinkedDomains",
"serviceEndpoint": [
"https://foo.example.com"
]
}]
},
"signInputs": [
{
"verificationMethodId": "did:cheqd:testnet:b0ca0b75-ca6a-4674-a261-45f6dd0c9c77#key1",
"privKey": "wNXCJ9Ny0uzCYhnTE3gfQuwgQM4QZCw08+j01QDfoGxMMI9u9GIv/90eH3E3KjHjlSi9hKRQy94PvKVAH1+Rhw=="
}
]
}
Send the updated DIDDoc to the ledger. This must be signed with the correct identity keys:
cheqd-noded tx cheqd update-did <Payload_in_JSON> \
--from <cosmos_account> --node <url> --chain-id <chain> --fees <fee>
Payload_in_JSON
- previously compiled JSON.--from
: Cosmos account key which will pay fees for the transaction to be written to ledger.--node
: IP address or URL of node to send request to--chain-id
: E.g.,cheqd-testnet-6
--fees
: Set to 25000000000ncheq, which is the fixed fee for updating a DID
Note that 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.
cheqd-noded tx cheqd update-did "payload.json" \
--from my_account --node http://rpc.cheqd.network:443 --chain-id cheqd-testnet-6 --fees 25000000000ncheq