Set up your ACA-Py agent to start using cheqd.
Before you begin, ensure you have a DID registrar and resolver running.
For testnet, you can use the Universal Registrar (with cheqd DID registrar driver) and a resolver.
For mainnet, you must run your own cheqd DID registrar driver with the correct mnemonic configuration. Details are provided below.
To enable DID registration on Cheqd, you must deploy the Cheqd DID Registrar driver as a dedicated service. The fastest way to run the Cheqd Registrar driver is using the published docker image, for other options or to build your own container, check the .
Add the following under services section of your docker-compose file.
Set the environment variables.
Run the driver.
The Cheqd Registrar must be run as driver-did-cheqd because the Universal Registrar is configured with that name by default.
The Universal Registrar allows dynamic DID registration for multiple DID methods, including Cheqd. Setting it up ensures seamless DID creation without manual configurations for different DID methods. The fastest way to run the Universal Registrar is using the published docker container, for other options check the .
Add the following under services section of your docker-compose file.
Start the Universal Registrar Service.
Confirm that the Cheqd Driver properties are correct and matches your settings.
To run your own DID Resolver, the following settings must be added to your docker-compose file
Add the following under services section of your docker-compose file.
Run the resolver.
Cheqd ACA-Py Plugin supports configuring the Universal Registrar and DID Resolver URLs via a plugin-config.yml file. These settings define how the agent interacts with the Cheqd network for DID operations.
plugin-config.yml:Update the URLs if you have your hosted versions or using the Universal Resolver.
The Cheqd plugin only works with the askar-anoncreds wallet type. Askar-anoncreds is the preferred wallet due to its support for AnonCreds and enhanced security features.
When starting ACA-Py, ensure that the wallet-type is set to askar. Example:
Using PostgreSQL as a wallet storage backend is recommended for scalability and data persistence.
Install PostgreSQL and create a database for ACA-Py.
Configure ACA-Py to use PostgreSQL, add the following to ./configs/settings.yml:
Start ACA-Py with PostgreSQL-backed wallet storage.
Example Dockerfile:
Build the ACA-Py Agent docker image with the plugin.
Deploy the agent. Sample docker-compose is below.
Where all the plugin settings are populated in ./configs/settings.yml , a sample file is .
Now that your ACA-Py agent is successfully set up to work with cheqd, try following our tutorials for creating a new DID or issuing Verifiable Credentials.
Run the Agent.
docker-compose up -ddriver-did-cheqd:
image: ghcr.io/cheqd/did-registrar:production-latest
platform: linux/amd64
ports:
- "9089:3000"
restart: on-failure
environment:
- FEE_PAYER_TESTNET_MNEMONIC=${FEE_PAYER_TESTNET_MNEMONIC}
- FEE_PAYER_MAINNET_MNEMONIC=${FEE_PAYER_MAINNET_MNEMONIC}export FEE_PAYER_TESTNET_MNEMONIC="your testnet mnemonic phrase ..."
export FEE_PAYER_MAINNET_MNEMONIC="your mainnet mnemonic phrase ..."docker-compose up -ddid_registrar:
image: universalregistrar/uni-registrar-web:latest
platform: linux/amd64
ports:
- "9080:9080"
depends_on:
- driver-did-cheqddocker-compose up -dcurl -X GET http://localhost:9080/1.0/propertiesdid_resolver:
image: ghcr.io/cheqd/did-resolver:latest
platform: linux/amd64
ports:
- target: 8080
published: 8080
mode: host
restart: on-failure
environment:
MAINNET_ENDPOINT: "grpc.cheqd.net:443,true,5s"
TESTNET_ENDPOINT: "grpc.cheqd.network:443,true,5s"
LOG_LEVEL: "warn"
RESOLVER_LISTENER: "0.0.0.0:8080"docker-compose up -dresolver_url: "http://localhost:8080/1.0/identifiers/"
registrar_url: "http://localhost:9080/1.0/"aca-py start --wallet-type askar-anoncreds --wallet-storage-type postgres_storagewallet-name: issuer
wallet-key: somesecret
wallet-storage-type: postgres_storage
wallet-storage-creds: '{"account":"postgres","password":"postgres","admin_account":"postgres","admin_password":"postgres"}'
wallet-storage-config: '{"url":"localhost:5432","max_connections":5}'aca-py start --arg-file ./configs/settings.ymlFROM ghcr.io/openwallet-foundation/acapy:py3.12-1.1.0
USER root
# install plugins as binaries
RUN pip install git+https://github.com/openwallet-foundation/acapy-plugins@main#subdirectory=cheqd
USER $user
COPY ./configs configs
ENTRYPOINT ["aca-py"]docker build -t issuer-agent .issuer:
image: issuer-agent:latest
ports:
- "3001:3001"
- "3002:3002"
command: >
start --arg-file ./configs/settings.yml
healthcheck:
test: curl -s -o /dev/null -w '%{http_code}' "http://localhost:3001/status/live" | grep "200" > /dev/null
start_period: 30s
interval: 7s
timeout: 5s
retries: 5
depends_on:
- did_registrar
- did_resolver